客戶訂制5KW的小炒灶方案,客戶要求數(shù)碼管顯示檔位就行。這幾天閑著沒事就畫蛇添足做了個(gè)動(dòng)感的顯示板。很漂亮,現(xiàn)在還是在源代碼的調(diào)試和編譯中。下面是我寫的源代碼保證正確。
先對(duì)于看圖黨先看看我原來上班的公司他們的元件手冊(cè)吧,顯示效果不錯(cuò)。如果
我們企業(yè)要生產(chǎn)的話可以去掉海爾標(biāo)志換成我們自己的商標(biāo)?;蛘唠娫?。
硬件設(shè)計(jì)過程:
//-------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
//---------------------5KW-8KW商用電磁爐.東北電取暖設(shè)備通用顯示板可以定時(shí)設(shè)定溫度-----------------------------------
//---------------------張工 15615356586 版權(quán)所有僅供學(xué)習(xí)如有轉(zhuǎn)載必須寫明本版權(quán)信息?。。?---------------------------
//------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------2013年5月11于煙臺(tái)璽萌橘子洲---------------
//------------------------------------------------------------------------------------------------------------------
#include
#define uchar unsigned char
#define uint unsigned int
#define AD_SPEED 0x60; //0110,0000 1 1 90 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
typedef unsigned char INT8U;
typedef unsigned int INT16U;
INT16U ADC_result; //這個(gè)我從MAIN函數(shù)復(fù)制過來的。
//---------------------------------------------------------------------
INT8U get_AD_result(INT8U channel);
void delay(INT8U delay_time); //延時(shí)函數(shù)
float cikong,ad5; //定義兩個(gè)個(gè)flost變量,分別磁控開關(guān)AD值A(chǔ)D4 和散熱片傳感器的AD值A(chǔ)D3。
//--------------------------------------------------------------------
/*0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b,*/
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,}; //定義數(shù)碼管編碼
//**************************************************引腳定義******************************************************
sbit shierjiao=P2^0; //12腳
sbit shiyijiao=P2^1; //11腳
sbit shijiao=P2^2; //10腳
sbit jiujiao=P2^3; //9腳
sbit shisanjiao=P2^4; //13腳
sbit shisijiao=P2^5; //14腳
sbit shiwujiao=P2^6; //15腳
sbit shiliujiao=P2^7; //16腳
uint fenga=500,fengb=0,fengc=0;
//**************************************************** 各種延時(shí)子函數(shù)*******************************************************
void yanshi(uint xms)//延時(shí)多久需要計(jì)算。
{
uint x;
for(x=xms;x>0;x--);
}
//******************************************************************************************************************
//**************************************************************
void delay_10us(uint t) //延時(shí)10微秒的指令。核對(duì)過時(shí)間很準(zhǔn)確
{
uint j;
for(;t>0;t--)
for(j=6;j>0;j--);
}
//************************************************************************************************************************
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void delay_1ms(uint z) //延時(shí)一毫秒的指令。核對(duì)過時(shí)間很準(zhǔn)確
{
uint x,y;
for(x=z;x>0;x--)
for(y=995;y>0;y--);
}
//************************************************************************************************************************
//--------------------------------------左上角循環(huán)指示燈亮--------------------------------------------------
void xunhuan(uint on)
{
if(on>=1)
{
}
}
void disp(uchar dispnum) //數(shù)碼管顯示
{
uchar shi,ge;
shi=dispnum/10;
ge=dispnum%10;
shiwujiao=1;//關(guān)閉個(gè)位鎖存
shiliujiao=0;//開始送入十位的顯示鎖存數(shù)據(jù)。
P0=table[shi];//送入10位的顯示數(shù)據(jù)
delay_1ms(1); //增加亮度下
shiliujiao=1; //關(guān)閉十位的鎖存不再允許十位好用。
P0=0x00; //清零保證不干擾其它顯示
shiwujiao=0; //打開各位的顯示鎖存允許各位送入數(shù)據(jù)
P0=table[ge];//送個(gè)各位顯示數(shù)據(jù)。
delay_1ms(1);
shiwujiao=1;//關(guān)閉個(gè)位鎖存信息。
P0=0x00; //清零保證不干擾其它顯示
}
void guoled() //鍋具圖標(biāo)
{
shijiao=1;shijiao=0;//打開鍋的顯示鎖存。
P1=0X04;//送入鍋具的顯示數(shù)據(jù)
delay_1ms(1);//等待下保證亮度
shijiao=1;//關(guān)閉鍋的顯示鎖存
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void taiyang() //太陽圖標(biāo)
{
shijiao=1;shijiao=0;//打開太陽的顯示鎖存。
P1=0X40;//送入太陽的顯示數(shù)據(jù)
delay_1ms(1);//等待下保證亮度
shijiao=1;//關(guān)閉太陽的顯示鎖存
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void dianresi() //電熱絲圖標(biāo)
{
shiyijiao=1;shiyijiao=0;//打開電熱絲的顯示鎖存。
P1=0X40;//送入電熱絲的顯示數(shù)據(jù)
delay_1ms(1);//等待下保證亮度
shiyijiao=1;//關(guān)閉電熱絲的顯示鎖存
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void sheshidu() //攝氏度圖標(biāo)
{
shisijiao=1;shisijiao=0;//打開攝氏度的顯示鎖存。
P0=0X20;//送入攝氏度的顯示數(shù)據(jù)
delay_1ms(1);//等待下保證亮度
shisijiao=1;//關(guān)閉攝氏度的顯示鎖存
P0=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void xuehua()//雪花圖標(biāo)
{
shijiao=1;shijiao=0;//打開雪花的顯示鎖存。
P1=0X02;//送入雪花的顯示數(shù)據(jù)
delay_1ms(2);//等待下保證亮度
shijiao=1;//關(guān)閉雪花的顯示鎖存
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void baowen()//保溫圖標(biāo) 鍋冒熱氣的
{
shijiao=1;shijiao=0;//打開保溫的顯示鎖存。
P1=0X08;//送入保溫的顯示數(shù)據(jù)
delay_10us(200);//等待下保證亮度
shijiao=1;//關(guān)閉保溫的顯示鎖存
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
//08方向右04 方向下 01方向上 02方向左邊 10風(fēng)扇中間點(diǎn) 20攝氏度 40 百分比 80信號(hào)的第三段
void fengshan ()//風(fēng)扇轉(zhuǎn)動(dòng)圖標(biāo)
{
shisijiao=1;shisijiao=0;//打開風(fēng)扇點(diǎn)的顯示鎖存。
P0=0X10;//送入風(fēng)扇點(diǎn)的顯示數(shù)據(jù)
delay_10us(1);//等待下保證亮度
shisijiao=1;//關(guān)閉風(fēng)扇點(diǎn)的顯示鎖存
P0=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
//--------------------------------------------------------------------------
//--10 空氣2
if(fenga>=1)
{
shijiao=0;//打開風(fēng)扇葉子A2的顯示鎖存。
P1=0X20;//送入風(fēng)扇葉子的顯示數(shù)據(jù)
delay_10us(10);//等待下保證亮度
shijiao=1;//關(guān)閉風(fēng)扇葉子A2的顯示鎖存
fenga--;
if(fenga==0)
{
fengb=500; //設(shè)定風(fēng)扇葉B的開啟參數(shù)
}
}
if(fengb>=1)
{
shiyijiao=0;//打開風(fēng)扇葉子A2的顯示鎖存。
P1=0X20;//送入風(fēng)扇葉子的顯示數(shù)據(jù)
delay_10us(10);//等待下保證亮度
shiyijiao=1;//關(guān)閉風(fēng)扇葉子A2的顯示鎖存
fengb--;
if(fengb==0)
{
fengc=500; //設(shè)定風(fēng)扇葉C的開啟參數(shù)
}
}
if(fengc>=1)
{
shierjiao=0;//打開風(fēng)扇葉子A2的顯示鎖存。
P1=0X20;//送入風(fēng)扇葉子的顯示數(shù)據(jù)
delay_10us(10);//等待下保證亮度
shierjiao=1;//關(guān)閉風(fēng)扇葉子A2的顯示鎖存
fengc--;
if(fengc==0)
{
fenga=500; //設(shè)定風(fēng)扇葉C的開啟參數(shù)
}
}
P0=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void kaiguan(uchar kk)
{
if(kk==1)
{
jiujiao=1;
jiujiao=0;//開打開關(guān)標(biāo)志的鎖存
P0=0x08;
delay_10us(8);
jiujiao=1;//關(guān)閉開關(guān)標(biāo)志的鎖存
P0=0x00; //清顯示
}
if(kk==0)
{
jiujiao=1;
jiujiao=0;//開打開關(guān)標(biāo)志的鎖存
P0=0x40;
delay_10us(20);
jiujiao=1;//關(guān)閉開關(guān)標(biāo)志的鎖存
P0=0x00; //清顯示
}
}
void dingshi_led() //定時(shí)的標(biāo)志
{
jiujiao=1;jiujiao=0;//打開定時(shí)的顯示鎖存。
P0=0X80;//送入定時(shí)的顯示數(shù)據(jù)
delay_10us(2);//等待下保證亮度
jiujiao=1;//關(guān)閉攝氏度的顯示鎖存
P0=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void shangbiao() //商標(biāo)的標(biāo)志
{
shierjiao=1;shierjiao=0;//打開商標(biāo)的顯示鎖存。
P1=0X04;//送入商標(biāo)的顯示數(shù)據(jù)
delay_10us(30);//等待下保證亮度
shierjiao=1;//關(guān)閉商標(biāo)的顯示鎖存
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void lvye()//綠色葉子
{
shierjiao=1;shierjiao=0;//打開商標(biāo)的顯示鎖存。
P1=0X04;//送入商標(biāo)的顯示數(shù)據(jù)
delay_10us(30);//等待下保證亮度
shierjiao=1;//關(guān)閉商標(biāo)的顯示鎖存
P1=0x00; //清掉顯示的數(shù)據(jù)防止干擾其它顯示段碼。
}
void main()
{
P1M0=0Xff;
P1M1=0X00;
P0M0=0Xff;
P0M1=0X00;
P2M0=0Xff;
P2M1=0X00;
P2=0xff;
while(1)
{
/* disp(27);
guoled();
taiyang();
dianresi();
sheshidu();
sheshidu();
xuehua();
baowen();
*/
fengshan();
kaiguan(0);
dingshi_led();
shangbiao();
}
}