客户订制5KW的小炒灶方案,客户要求数码管显示档位就行。这几天闲着没事就画蛇添足做了个动感的显示板。很漂亮,现在还是在源代码的调试和编译中。下面是我写的源代码保证正确。
先对于看图党先看看我原来上班的公司他们的元件手册吧,显示效果不错。如果
我们企业要生产的话可以去掉海尔标志换成我们自己的商标。或者电话。
硬件设计过程:
//-------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
//---------------------5KW-8KW商用电磁炉.东北电取暖设备通用显示板可以定时设定温度-----------------------------------
//---------------------张工 15615356586 版权所有仅供学习如有转载必须写明本版权信息!!!----------------------------
//------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------2013年5月11于烟台玺萌橘子洲---------------
//------------------------------------------------------------------------------------------------------------------
#include
#define uchar unsigned char
#define uint unsigned int
#define AD_SPEED 0x60; //0110,0000 1 1 90 个时钟周期转换一次
typedef unsigned char INT8U;
typedef unsigned int INT16U;
INT16U ADC_result; //这个我从MAIN函数复制过来的。
//---------------------------------------------------------------------
INT8U get_AD_result(INT8U channel);
void delay(INT8U delay_time); //延时函数
float cikong,ad5; //定义两个个flost变量,分别磁控开关AD值AD4 和散热片传感器的AD值AD3。
//--------------------------------------------------------------------
/*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,}; //定义数码管编码
//**************************************************引脚定义******************************************************
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;
//**************************************************** 各种延时子函数*******************************************************
void yanshi(uint xms)//延时多久需要计算。
{
uint x;
for(x=xms;x>0;x--);
}
//******************************************************************************************************************
//**************************************************************
void delay_10us(uint t) //延时10微秒的指令。核对过时间很准确
{
uint j;
for(;t>0;t--)
for(j=6;j>0;j--);
}
//************************************************************************************************************************
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void delay_1ms(uint z) //延时一毫秒的指令。核对过时间很准确
{
uint x,y;
for(x=z;x>0;x--)
for(y=995;y>0;y--);
}
//************************************************************************************************************************
//--------------------------------------左上角循环指示灯亮--------------------------------------------------
void xunhuan(uint on)
{
if(on>=1)
{
}
}
void disp(uchar dispnum) //数码管显示
{
uchar shi,ge;
shi=dispnum/10;
ge=dispnum%10;
shiwujiao=1;//关闭个位锁存
shiliujiao=0;//开始送入十位的显示锁存数据。
P0=table[shi];//送入10位的显示数据
delay_1ms(1); //增加亮度下
shiliujiao=1; //关闭十位的锁存不再允许十位好用。
P0=0x00; //清零保证不干扰其它显示
shiwujiao=0; //打开各位的显示锁存允许各位送入数据
P0=table[ge];//送个各位显示数据。
delay_1ms(1);
shiwujiao=1;//关闭个位锁存信息。
P0=0x00; //清零保证不干扰其它显示
}
void guoled() //锅具图标
{
shijiao=1;shijiao=0;//打开锅的显示锁存。
P1=0X04;//送入锅具的显示数据
delay_1ms(1);//等待下保证亮度
shijiao=1;//关闭锅的显示锁存
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void taiyang() //太阳图标
{
shijiao=1;shijiao=0;//打开太阳的显示锁存。
P1=0X40;//送入太阳的显示数据
delay_1ms(1);//等待下保证亮度
shijiao=1;//关闭太阳的显示锁存
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void dianresi() //电热丝图标
{
shiyijiao=1;shiyijiao=0;//打开电热丝的显示锁存。
P1=0X40;//送入电热丝的显示数据
delay_1ms(1);//等待下保证亮度
shiyijiao=1;//关闭电热丝的显示锁存
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void sheshidu() //摄氏度图标
{
shisijiao=1;shisijiao=0;//打开摄氏度的显示锁存。
P0=0X20;//送入摄氏度的显示数据
delay_1ms(1);//等待下保证亮度
shisijiao=1;//关闭摄氏度的显示锁存
P0=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void xuehua()//雪花图标
{
shijiao=1;shijiao=0;//打开雪花的显示锁存。
P1=0X02;//送入雪花的显示数据
delay_1ms(2);//等待下保证亮度
shijiao=1;//关闭雪花的显示锁存
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void baowen()//保温图标 锅冒热气的
{
shijiao=1;shijiao=0;//打开保温的显示锁存。
P1=0X08;//送入保温的显示数据
delay_10us(200);//等待下保证亮度
shijiao=1;//关闭保温的显示锁存
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
//08方向右04 方向下 01方向上 02方向左边 10风扇中间点 20摄氏度 40 百分比 80信号的第三段
void fengshan ()//风扇转动图标
{
shisijiao=1;shisijiao=0;//打开风扇点的显示锁存。
P0=0X10;//送入风扇点的显示数据
delay_10us(1);//等待下保证亮度
shisijiao=1;//关闭风扇点的显示锁存
P0=0x00; //清掉显示的数据防止干扰其它显示段码。
//--------------------------------------------------------------------------
//--10 空气2
if(fenga>=1)
{
shijiao=0;//打开风扇叶子A2的显示锁存。
P1=0X20;//送入风扇叶子的显示数据
delay_10us(10);//等待下保证亮度
shijiao=1;//关闭风扇叶子A2的显示锁存
fenga--;
if(fenga==0)
{
fengb=500; //设定风扇叶B的开启参数
}
}
if(fengb>=1)
{
shiyijiao=0;//打开风扇叶子A2的显示锁存。
P1=0X20;//送入风扇叶子的显示数据
delay_10us(10);//等待下保证亮度
shiyijiao=1;//关闭风扇叶子A2的显示锁存
fengb--;
if(fengb==0)
{
fengc=500; //设定风扇叶C的开启参数
}
}
if(fengc>=1)
{
shierjiao=0;//打开风扇叶子A2的显示锁存。
P1=0X20;//送入风扇叶子的显示数据
delay_10us(10);//等待下保证亮度
shierjiao=1;//关闭风扇叶子A2的显示锁存
fengc--;
if(fengc==0)
{
fenga=500; //设定风扇叶C的开启参数
}
}
P0=0x00; //清掉显示的数据防止干扰其它显示段码。
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void kaiguan(uchar kk)
{
if(kk==1)
{
jiujiao=1;
jiujiao=0;//开打开关标志的锁存
P0=0x08;
delay_10us(8);
jiujiao=1;//关闭开关标志的锁存
P0=0x00; //清显示
}
if(kk==0)
{
jiujiao=1;
jiujiao=0;//开打开关标志的锁存
P0=0x40;
delay_10us(20);
jiujiao=1;//关闭开关标志的锁存
P0=0x00; //清显示
}
}
void dingshi_led() //定时的标志
{
jiujiao=1;jiujiao=0;//打开定时的显示锁存。
P0=0X80;//送入定时的显示数据
delay_10us(2);//等待下保证亮度
jiujiao=1;//关闭摄氏度的显示锁存
P0=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void shangbiao() //商标的标志
{
shierjiao=1;shierjiao=0;//打开商标的显示锁存。
P1=0X04;//送入商标的显示数据
delay_10us(30);//等待下保证亮度
shierjiao=1;//关闭商标的显示锁存
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
void lvye()//绿色叶子
{
shierjiao=1;shierjiao=0;//打开商标的显示锁存。
P1=0X04;//送入商标的显示数据
delay_10us(30);//等待下保证亮度
shierjiao=1;//关闭商标的显示锁存
P1=0x00; //清掉显示的数据防止干扰其它显示段码。
}
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();
}
}