• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

开始以这里为家,写下我电磁加热方面工作日志。5KW小炒灶LED动感彩屏。有源代码

     客户订制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(); 
  }
  }

全部回复(13)
正序查看
倒序查看
2013-05-11 22:51

看到用延时,还有拼音就。。。。

 

0
回复
2013-05-11 23:02
@jakehusonic
看到用延时,还有拼音就。。。。 

是的。因为代码要卖的。这样方便客户修改。难道我还让客户查单词啊?道理不就一样么。客户打个电话我不方便上网的话也可以告诉他改第几行。

延时是必须的。没有几个人不用延时吧?只是延时形式不同罢了。 感谢回帖哈。

0
回复
my.mai
LV.9
4
2013-05-11 23:52
@wangchongpapa001
是的。因为代码要卖的。这样方便客户修改。难道我还让客户查单词啊?道理不就一样么。客户打个电话我不方便上网的话也可以告诉他改第几行。延时是必须的。没有几个人不用延时吧?只是延时形式不同罢了。感谢回帖哈。
虽然我不懂程序,但是还是支持一下。
0
回复
2013-05-12 00:57
@my.mai
虽然我不懂程序,但是还是支持一下。
感谢麦工哈。嘿嘿这么晚也不休息啊
0
回复
2013-05-12 10:55

谢谢分享

0
回复
王秋冬
LV.5
7
2013-05-12 13:56
@ljw20060802
谢谢分享
留个记号,下次光临。
0
回复
2013-05-12 23:38

 

写完了下面的是完整的。生成HEX文件就可以烧录到芯片里面用了、

 

//-------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
//---------------------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脚
sbit sda=P3^2; // 数据
sbit scl=P3^3; // 时钟
sbit lock=P3^4;// 锁
uint fenga=100,fengb=0,fengc=0,kongqi1=100,kongqi2=0,kongqi3=0,kongqi4=0,shui1=100,shui2=0,shui3=0,shui4=0,shui5=0,tt,pl;
uchar aa=0,bb=0,cc=0,dd=0,ee=0,ff=0,sudu=750,kg=0,hh=0,ll=0,rr=0,qq=0,jj=0,yy=0,dispnum,fs=0;
uint yyjiange,RXone,RXSDA,qinglingYES;
//**************************************************** 各种延时子函数*******************************************************
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 disp()  //数码管显示
   {
     uchar shi,ge;
  shi=dispnum/10;
  ge=dispnum%10;
  shiwujiao=1;//关闭个位锁存
  shiliujiao=0;//开始送入十位的显示锁存数据。
  P0=table[shi];//送入10位的显示数据
  delay_10us(20); //增加亮度下
  shiliujiao=1;   //关闭十位的锁存不再允许十位好用。
  P0=0x00;    //清零保证不干扰其它显示
  shiwujiao=0;    //打开各位的显示锁存允许各位送入数据
  P0=table[ge];//送个各位显示数据。
  delay_10us(20);
  shiwujiao=1;//关闭个位锁存信息。
  P0=0x00;    //清零保证不干扰其它显示
   }
void guoled()  //锅具图标
   {
    if(aa>=1)
 {
     shijiao=1;shijiao=0;//打开锅的显示锁存。
  P1=0X04;//送入锅具的显示数据
  delay_10us(30);//等待下保证亮度
  shijiao=1;//关闭锅的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   }
void taiyang() //太阳图标 
   {
    if(bb>=1)
 {
     shijiao=1;shijiao=0;//打开太阳的显示锁存。
  P1=0X40;//送入太阳的显示数据
  delay_10us(10);//等待下保证亮度
  shijiao=1;//关闭太阳的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   }

void dianresi()  //电热丝图标
   {
    if(cc>=1)
 {
     shiyijiao=1;shiyijiao=0;//打开电热丝的显示锁存。
  P1=0X40;//送入电热丝的显示数据
  delay_10us(8);//等待下保证亮度
  shiyijiao=1;//关闭电热丝的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   }

void sheshidu() //摄氏度图标  
   {
    if(dd>=1)
 {
     shisijiao=1;shisijiao=0;//打开摄氏度的显示锁存。
  P0=0X20;//送入摄氏度的显示数据
  delay_10us(10);//等待下保证亮度
  shisijiao=1;//关闭摄氏度的显示锁存
  P0=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   }

void xuehua()//雪花图标 
   {
    if(ee>=1)
 {
     shijiao=1;shijiao=0;//打开雪花的显示锁存。
  P1=0X02;//送入雪花的显示数据
  delay_10us(40);//等待下保证亮度
  shijiao=1;//关闭雪花的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   }

void baowen()//保温图标 锅冒热气的 
   {
    if(ff>=1)
 {
    shijiao=1;shijiao=0;//打开保温的显示锁存。
 P1=0X08;//送入保温的显示数据
 delay_10us(20);//等待下保证亮度
 shijiao=1;//关闭保温的显示锁存
 P1=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   } 
  //08方向右04 方向下  01方向上 02方向左边  10风扇中间点  20摄氏度 40 百分比 80信号的第三段
void fengshan ()//风扇转动图标 
   {
    if(fs>=1)
    {
     shisijiao=1;shisijiao=0;//打开风扇点的显示锁存。
  P0=0X10;//送入风扇点的显示数据
  delay_10us(1);//等待下保证亮度
  shisijiao=1;//关闭风扇点的显示锁存
  P0=0x00; //清掉显示的数据防止干扰其它显示段码。
 //--------------------------------------------------------------------------
 if(kongqi1>=1)
   {
     shiyijiao=0;//打开空气1的显示锁存。
  P1=0X02;//送入空气1的显示数据
  delay_10us(10);//等待下保证亮度
     shiyijiao=1;//关闭空气1的显示锁存
  kongqi1--;
  if(kongqi1==0)
      {
  kongqi2=sudu;  //设定空气2的开启参数
      }
  P1=0x00;//清数据防止干扰   
   }
 if(kongqi2>=1)
   {
     shiyijiao=0;//打开空气2的显示锁存。
  P1=0X04;//送入空气2的显示数据
  delay_10us(10);//等待下保证亮度
     shiyijiao=1;//关闭空气2的显示锁存
  kongqi2--;
  if(kongqi2==0)
      {
  kongqi3=sudu;  //设定空气3的开启参数
      }
  P1=0x00;//清数据防止干扰   
   }
 if(kongqi3>=1)
   {
     shijiao=0;//打开空气3的显示锁存。
  P1=0X10;//送入空气3的显示数据
  delay_10us(10);//等待下保证亮度
     shijiao=1;//关闭空气3的显示锁存
  kongqi3--;
  if(kongqi3==0)
      {
  kongqi4=sudu;  //设定空气4的开启参数
      }
  P1=0x00;//清数据防止干扰   
   }
 if(kongqi4>=1)
   {
     shiyijiao=0;//打开空气3的显示锁存。
  shierjiao=0;//
  P1=0X80;//送入空气3的显示数据
  delay_10us(10);//等待下保证亮度
     shiyijiao=1;//关闭空气3的显示锁存
  shierjiao=1;
  kongqi4--;
  if(kongqi4==0)
      {
  kongqi1=sudu;  //设定空气4的开启参数
      }
  P1=0x00;//清数据防止干扰   
   }
 //--10 空气2
    if(fenga>=1)
  { 
     shijiao=0;//打开风扇叶子A2的显示锁存。
  P1=0X20;//送入风扇叶子的显示数据
  delay_10us(10);//等待下保证亮度
     shijiao=1;//关闭风扇叶子A2的显示锁存
  fenga--;
  if(fenga==0)
      {
  fengb=sudu;  //设定风扇叶B的开启参数
      }
  }
  if(fengb>=1)
  {
     shiyijiao=0;//打开风扇叶子A2的显示锁存。
  P1=0X20;//送入风扇叶子的显示数据
  delay_10us(10);//等待下保证亮度
     shiyijiao=1;//关闭风扇叶子A2的显示锁存
  fengb--;
  if(fengb==0)
     {
  fengc=sudu;  //设定风扇叶C的开启参数     
     }
  }
  if(fengc>=1)
  {
     shierjiao=0;//打开风扇叶子A2的显示锁存。
  P1=0X20;//送入风扇叶子的显示数据 
  delay_10us(10);//等待下保证亮度
     shierjiao=1;//关闭风扇叶子A2的显示锁存
  fengc--;
  if(fengc==0)
     {
  fenga=sudu;  //设定风扇叶C的开启参数     
     }
  }
 P0=0x00; //清掉显示的数据防止干扰其它显示段码。
 P1=0x00; //清掉显示的数据防止干扰其它显示段码。
 } 
}

void kaiguan() 
   {
     if(kg==1)
   {
       jiujiao=1;
       jiujiao=0;//开打开关标志的锁存
       P0=0x08;
    delay_10us(9);
    jiujiao=1;//关闭开关标志的锁存
    P0=0x00;  //清显示
   }
     if(kg==0)
   {
       jiujiao=1;
       jiujiao=0;//开打开关标志的锁存
       P0=0x40;
    delay_10us(9);
    jiujiao=1;//关闭开关标志的锁存
    P0=0x00;  //清显示
   }
   }

void dingshi_led() //定时的标志 
   {
    if(hh>=1)
 {
    jiujiao=1;jiujiao=0;//打开定时的显示锁存。
 P0=0X80;//送入定时的显示数据
 delay_10us(2);//等待下保证亮度
 jiujiao=1;//关闭摄氏度的显示锁存
 P0=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   }


void shangbiao()   //商标的标志  
   {
        if(ll>=1)
  {
     shierjiao=1;shierjiao=0;//打开商标的显示锁存。
  P1=0X04;//送入商标的显示数据
  delay_10us(30);//等待下保证亮度
  shierjiao=1;//关闭商标的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
  }
   }
 
void lvye()//绿色叶子  
   {
    if(rr>=1)
 {
     shierjiao=1;shierjiao=0;//打开叶子的显示锁存。
  P1=0X01;//送入叶子的显示数据
  delay_10us(30);//等待下保证亮度
  shierjiao=1;//关闭叶子的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
 }
   }
 
void shuilengLED()//循环水
   {
   if(qq>=1)
   {
    if(shui1>=1)
    {
     shijiao=0;//打开循环水的显示锁存。
  P1=0X01;//送入循环水的显示数据
  delay_10us(30);//等待下保证亮度
  shijiao=1;//关闭循环水的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
  shui1--;
  if(shui1==0)
     {
       shui2=100;//送入水2灭的时间
     }
     }
    if(shui2>=1)
    {
  shui2--;
  if(shui2==0)
     {
       shui3=100;//送入水3亮的时间
     }
    }
    if(shui3>=1)
    {
     shijiao=0;//打开循环水的显示锁存。
  P1=0X01;//送入循环水的显示数据
  delay_10us(30);//等待下保证亮度
  shijiao=1;//关闭循环水的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
  shui3--;
  if(shui3==0)
     {
       shui4=100;//送入水4灭的时间
     }
    }
    if(shui4>=1)
    {
  shui4--;
  if(shui4==0)
     {
       shui5=1500;//送入水5亮的时间
     }
    }
    if(shui5>=1)
    {
     shijiao=0;//打开循环水的显示锁存。
  P1=0X01;//送入循环水的显示数据
  delay_10us(30);//等待下保证亮度
  shijiao=1;//关闭循环水的显示锁存
  P1=0x00; //清掉显示的数据防止干扰其它显示段码。
  shui5--;
  if(shui5==0)
     {
       shui1=200;//送入水4灭的时间
     }
    }
  }
   }

void huoliLED() 
   {

    if(jj>=1)
 {
    shiliujiao=0;//打开火力的显示锁存。
 P0=0X80;//送入火力的显示数据
 delay_10us(1);//等待下保证亮度
 shiliujiao=1;//关闭火力的显示锁存
  if(jj>=2)
  {
      shiwujiao=0;//打开火力的显示锁存。
   P1=0X80;//送入火力的显示数据
   delay_10us(1);//等待下保证亮度
   shiwujiao=1;//关闭火力的显示锁存
   P1=0x00; //清掉显示的数据防止干扰其它显示段码。
   if(jj>=3)
   {
       shisijiao=0;//打开火力的显示锁存。
    P1=0X80;//送入火力的显示数据
    delay_10us(1);//等待下保证亮度
    shisijiao=1;//关闭火力的显示锁存
    P1=0x00; //清掉显示的数据防止干扰其它显示段码。
    if(jj>=4)
    {
       shisanjiao=1;shisanjiao=0;//打开叶子的显示锁存。
    P1=0X80;//送入叶子的显示数据
    delay_10us(1);//等待下保证亮度
    shisanjiao=1;//关闭叶子的显示锁存
    P1=0x00; //清掉显示的数据防止干扰其它显示段码。
    }
   }
  }
  }
   }

void LEDdisp() //最终显示的子函数包含了报警信息和档位信息 
 {
   switch(yy)
      {
     case 0://关闭整个屏幕
  P1=0X00;P0=0X00;//把两个数据总线全部给拉低
  break;
     case 1://档位1
  dispnum=1;//送显示数据
  break;
     case 2://档位2
  dispnum=2;//送显示数据
  break;
     case 3://档位3
  dispnum=3;//送显示数据
  break;
     case 4://档位4
  dispnum=4;//送显示数据
  break;
     case 5://档位5
  dispnum=5;//送显示数据
  break;
     case 6://档位零
  dispnum=0;//送显示数据
  break;
     case 7://打开循环水 水泵标志屏幕的左上角那个
  qq=1;
  break;
     case 8://关闭循环水 水泵标志
  qq=0;
  break;
     case 9://打开风冷 风扇标志 数码管下方的风扇标志
  fs=1;
  break;
     case 10://关闭 风冷 风扇的标志
  fs=0;
  break;
     case 11://打开 锅具的标志 位于红太阳左边的那个有水滴标志
  aa=1;
  break;
     case 12://关闭 锅具的标志
  aa=0;
  break;
     case 13://打开绿叶 炒菜标志
  rr=1;
  break;
     case 14://关闭绿叶 炒菜标志
  rr=0;
  break;
     case 15://定时图标打开
  hh=1;
  break;    
     case 16://定时图标关闭
  hh=0;
  break;
     case 17://摄氏度标志打开
  dd=1;
  break;
     case 18://摄氏度标志关闭
  dd=0;
  break;
     case 19://水量标志1打开  需要清2 3 4段的显示
  jj=1;
  break;
     case 20://水量标志2打开
  jj=2;
  break;
     case 21://水量标志3打开
  jj=3;
  break;
     case 22://水量标志4打开
  jj=4;
  break;
     case 23://水量标志关闭
  jj=0;
  break;
     case 24://电热丝标志打开
  cc=1;
  break;
     case 25://电热丝标志关闭
  cc=0;
  break;
     case 26://雪花标志开
  ee=1;
  break;
     case 27://雪花标志关
  ee=0;
  break;
     case 28://保温标志开
  ff=1;
  break;
     case 29://保温标志关
  ff=0;
  break;
     case 30://左下角开关标志
  kg=1;
  break;
     case 31://左下角开关标志
  kg=0;
  break;
   }

 }
 //**************************************************外部中断*****************************
void exint0()interrupt 0
{   
 
         yy++;
  
  
}
//---------------------------------------------------------------------------------------------
void RX()
  {
    if(scl==0) //时钟线拉低告诉MCU要接收信号了
     {
    if(qinglingYES==1)//检测是不是允许清零
       {
      yy=0;  //把YY清零
      qinglingYES=0;//不在允许清零
    }
    if(sda==0) //如果数据线被拉低了那么就加一次数据
        {
       if(RXone>=1)//允许接收一次
       {
            yy++;//接收的数据加
      RXone=0;//防止再次接收
       }
     }
    if(sda==1)
       {
       if(RXone==0)//检测是不是已经打开了防止再次接收的参数
       {
         RXone=1;//允许再次接收
       }
    }
  }
 if(scl==1)
     {
   qinglingYES=1;
         LEDdisp();
      disp();
   guoled();
   taiyang();
   dianresi();
   sheshidu();
   sheshidu();
   xuehua();
   baowen();

   fengshan();
   kaiguan();
   dingshi_led();
   shangbiao();
   lvye();
  shuilengLED();
  huoliLED();
  yyjiange++;
  }
  }
//---------------------------------------------------------------------------------------------
void main()
  {

  P1M0=0Xff;
  P1M1=0X00;
 
  P0M0=0Xff;
  P0M1=0X00;
 
  P2M0=0Xff;
  P2M1=0X00;
  
  P2=0xff;
   while(1)
     {
         RX();//开始接收数据
  }
  }

0
回复
lj53
LV.5
9
2013-05-13 08:06
@wangchongpapa001
 写完了下面的是完整的。生成HEX文件就可以烧录到芯片里面用了、 //-------------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------------------//---------------------5KW-8KW商用电磁炉.东北电取暖设备通用显示板可以定时设定温度-----------------------------------//---------------------张工15615356586版权所有仅供学习如有转载必须写明本版权信息!!!----------------------------//------------------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------2013年5月11于烟台玺萌橘子洲---------------//------------------------------------------------------------------------------------------------------------------#include#defineucharunsignedchar#defineuintunsignedint#defineAD_SPEED0x60;//0110,0000  1     1    90个时钟周期转换一次typedefunsignedcharINT8U;typedefunsignedint INT16U;INT16UADC_result;         //这个我从MAIN函数复制过来的。//---------------------------------------------------------------------INT8Uget_AD_result(INT8Uchannel);voiddelay(INT8Udelay_time);      //延时函数floatcikong,ad5; //定义两个个flost变量,分别磁控开关AD值AD4 和散热片传感器的AD值AD3。 //--------------------------------------------------------------------                   /*0,  1,  2, 3,   4,  5,  6, 7,  8,  9,   A,  b,*/ucharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,};//定义数码管编码//**************************************************引脚定义******************************************************sbitshierjiao=P2^0;    //12脚sbitshiyijiao=P2^1;    //11脚sbitshijiao=P2^2;    //10脚sbitjiujiao=P2^3;    //9脚sbitshisanjiao=P2^4;    //13脚sbitshisijiao=P2^5;    //14脚       sbitshiwujiao=P2^6;      //15脚sbitshiliujiao=P2^7;       //16脚sbitsda=P3^2;//数据sbitscl=P3^3;//时钟sbitlock=P3^4;//锁uintfenga=100,fengb=0,fengc=0,kongqi1=100,kongqi2=0,kongqi3=0,kongqi4=0,shui1=100,shui2=0,shui3=0,shui4=0,shui5=0,tt,pl;ucharaa=0,bb=0,cc=0,dd=0,ee=0,ff=0,sudu=750,kg=0,hh=0,ll=0,rr=0,qq=0,jj=0,yy=0,dispnum,fs=0;uintyyjiange,RXone,RXSDA,qinglingYES;//****************************************************各种延时子函数*******************************************************voidyanshi(uintxms)//延时多久需要计算。 {  uintx;   for(x=xms;x>0;x--); }//******************************************************************************************************************//**************************************************************voiddelay_10us(uintt) //延时10微秒的指令。核对过时间很准确{uintj;for(;t>0;t--)for(j=6;j>0;j--);}//************************************************************************************************************************//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@voiddelay_1ms(uintz)  //延时一毫秒的指令。核对过时间很准确{   uintx,y;   for(x=z;x>0;x--)   for(y=995;y>0;y--);}//************************************************************************************************************************voiddisp() //数码管显示  {    ucharshi,ge; shi=dispnum/10; ge=dispnum%10; shiwujiao=1;//关闭个位锁存 shiliujiao=0;//开始送入十位的显示锁存数据。 P0=table[shi];//送入10位的显示数据 delay_10us(20);//增加亮度下 shiliujiao=1;  //关闭十位的锁存不再允许十位好用。 P0=0x00;   //清零保证不干扰其它显示 shiwujiao=0;   //打开各位的显示锁存允许各位送入数据 P0=table[ge];//送个各位显示数据。 delay_10us(20); shiwujiao=1;//关闭个位锁存信息。 P0=0x00;   //清零保证不干扰其它显示  }voidguoled() //锅具图标  {   if(aa>=1) {    shijiao=1;shijiao=0;//打开锅的显示锁存。  P1=0X04;//送入锅具的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭锅的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidtaiyang()//太阳图标   {   if(bb>=1) {    shijiao=1;shijiao=0;//打开太阳的显示锁存。  P1=0X40;//送入太阳的显示数据  delay_10us(10);//等待下保证亮度  shijiao=1;//关闭太阳的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voiddianresi() //电热丝图标  {   if(cc>=1) {    shiyijiao=1;shiyijiao=0;//打开电热丝的显示锁存。  P1=0X40;//送入电热丝的显示数据  delay_10us(8);//等待下保证亮度  shiyijiao=1;//关闭电热丝的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidsheshidu()//摄氏度图标    {   if(dd>=1) {    shisijiao=1;shisijiao=0;//打开摄氏度的显示锁存。  P0=0X20;//送入摄氏度的显示数据  delay_10us(10);//等待下保证亮度  shisijiao=1;//关闭摄氏度的显示锁存  P0=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidxuehua()//雪花图标   {   if(ee>=1) {    shijiao=1;shijiao=0;//打开雪花的显示锁存。  P1=0X02;//送入雪花的显示数据  delay_10us(40);//等待下保证亮度  shijiao=1;//关闭雪花的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidbaowen()//保温图标锅冒热气的   {   if(ff>=1) {   shijiao=1;shijiao=0;//打开保温的显示锁存。 P1=0X08;//送入保温的显示数据 delay_10us(20);//等待下保证亮度 shijiao=1;//关闭保温的显示锁存 P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }  //08方向右04方向下 01方向上 02方向左边 10风扇中间点 20摄氏度 40百分比80信号的第三段voidfengshan()//风扇转动图标   {   if(fs>=1)   {    shisijiao=1;shisijiao=0;//打开风扇点的显示锁存。  P0=0X10;//送入风扇点的显示数据  delay_10us(1);//等待下保证亮度  shisijiao=1;//关闭风扇点的显示锁存  P0=0x00;//清掉显示的数据防止干扰其它显示段码。 //-------------------------------------------------------------------------- if(kongqi1>=1)  {    shiyijiao=0;//打开空气1的显示锁存。  P1=0X02;//送入空气1的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭空气1的显示锁存  kongqi1--;  if(kongqi1==0)     {  kongqi2=sudu; //设定空气2的开启参数     }  P1=0x00;//清数据防止干扰     } if(kongqi2>=1)  {    shiyijiao=0;//打开空气2的显示锁存。  P1=0X04;//送入空气2的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭空气2的显示锁存  kongqi2--;  if(kongqi2==0)     {  kongqi3=sudu; //设定空气3的开启参数     }  P1=0x00;//清数据防止干扰     } if(kongqi3>=1)  {    shijiao=0;//打开空气3的显示锁存。  P1=0X10;//送入空气3的显示数据  delay_10us(10);//等待下保证亮度    shijiao=1;//关闭空气3的显示锁存  kongqi3--;  if(kongqi3==0)     {  kongqi4=sudu; //设定空气4的开启参数     }  P1=0x00;//清数据防止干扰     } if(kongqi4>=1)  {    shiyijiao=0;//打开空气3的显示锁存。  shierjiao=0;//  P1=0X80;//送入空气3的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭空气3的显示锁存  shierjiao=1;  kongqi4--;  if(kongqi4==0)     {  kongqi1=sudu; //设定空气4的开启参数     }  P1=0x00;//清数据防止干扰     } //--10空气2   if(fenga>=1) {     shijiao=0;//打开风扇叶子A2的显示锁存。  P1=0X20;//送入风扇叶子的显示数据  delay_10us(10);//等待下保证亮度    shijiao=1;//关闭风扇叶子A2的显示锁存  fenga--;  if(fenga==0)     {  fengb=sudu; //设定风扇叶B的开启参数     } } if(fengb>=1) {    shiyijiao=0;//打开风扇叶子A2的显示锁存。  P1=0X20;//送入风扇叶子的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭风扇叶子A2的显示锁存  fengb--;  if(fengb==0)    {  fengc=sudu; //设定风扇叶C的开启参数         } } if(fengc>=1) {    shierjiao=0;//打开风扇叶子A2的显示锁存。  P1=0X20;//送入风扇叶子的显示数据   delay_10us(10);//等待下保证亮度    shierjiao=1;//关闭风扇叶子A2的显示锁存  fengc--;  if(fengc==0)    {  fenga=sudu; //设定风扇叶C的开启参数         } } P0=0x00;//清掉显示的数据防止干扰其它显示段码。 P1=0x00;//清掉显示的数据防止干扰其它显示段码。 } }voidkaiguan()   {    if(kg==1)  {      jiujiao=1;      jiujiao=0;//开打开关标志的锁存      P0=0x08;   delay_10us(9);   jiujiao=1;//关闭开关标志的锁存   P0=0x00; //清显示  }    if(kg==0)  {      jiujiao=1;      jiujiao=0;//开打开关标志的锁存      P0=0x40;   delay_10us(9);   jiujiao=1;//关闭开关标志的锁存   P0=0x00; //清显示  }  }voiddingshi_led() //定时的标志   {   if(hh>=1) {   jiujiao=1;jiujiao=0;//打开定时的显示锁存。 P0=0X80;//送入定时的显示数据 delay_10us(2);//等待下保证亮度 jiujiao=1;//关闭摄氏度的显示锁存 P0=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidshangbiao()  //商标的标志    {       if(ll>=1)  {    shierjiao=1;shierjiao=0;//打开商标的显示锁存。  P1=0X04;//送入商标的显示数据  delay_10us(30);//等待下保证亮度  shierjiao=1;//关闭商标的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  }  } voidlvye()//绿色叶子    {   if(rr>=1) {    shierjiao=1;shierjiao=0;//打开叶子的显示锁存。  P1=0X01;//送入叶子的显示数据  delay_10us(30);//等待下保证亮度  shierjiao=1;//关闭叶子的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  } voidshuilengLED()//循环水  {  if(qq>=1)  {   if(shui1>=1)   {    shijiao=0;//打开循环水的显示锁存。  P1=0X01;//送入循环水的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭循环水的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  shui1--;  if(shui1==0)    {      shui2=100;//送入水2灭的时间    }    }   if(shui2>=1)   {  shui2--;  if(shui2==0)    {      shui3=100;//送入水3亮的时间    }   }   if(shui3>=1)   {    shijiao=0;//打开循环水的显示锁存。  P1=0X01;//送入循环水的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭循环水的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  shui3--;  if(shui3==0)    {      shui4=100;//送入水4灭的时间    }   }   if(shui4>=1)   {  shui4--;  if(shui4==0)    {      shui5=1500;//送入水5亮的时间    }   }   if(shui5>=1)   {    shijiao=0;//打开循环水的显示锁存。  P1=0X01;//送入循环水的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭循环水的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  shui5--;  if(shui5==0)    {      shui1=200;//送入水4灭的时间    }   } }  }voidhuoliLED()   {   if(jj>=1) {   shiliujiao=0;//打开火力的显示锁存。 P0=0X80;//送入火力的显示数据 delay_10us(1);//等待下保证亮度 shiliujiao=1;//关闭火力的显示锁存  if(jj>=2)  {     shiwujiao=0;//打开火力的显示锁存。   P1=0X80;//送入火力的显示数据   delay_10us(1);//等待下保证亮度   shiwujiao=1;//关闭火力的显示锁存   P1=0x00;//清掉显示的数据防止干扰其它显示段码。   if(jj>=3)   {      shisijiao=0;//打开火力的显示锁存。    P1=0X80;//送入火力的显示数据    delay_10us(1);//等待下保证亮度    shisijiao=1;//关闭火力的显示锁存    P1=0x00;//清掉显示的数据防止干扰其它显示段码。    if(jj>=4)    {      shisanjiao=1;shisanjiao=0;//打开叶子的显示锁存。    P1=0X80;//送入叶子的显示数据    delay_10us(1);//等待下保证亮度    shisanjiao=1;//关闭叶子的显示锁存    P1=0x00;//清掉显示的数据防止干扰其它显示段码。    }   }  } }  }voidLEDdisp()//最终显示的子函数包含了报警信息和档位信息  {  switch(yy)     {    case0://关闭整个屏幕  P1=0X00;P0=0X00;//把两个数据总线全部给拉低  break;    case1://档位1  dispnum=1;//送显示数据  break;    case2://档位2  dispnum=2;//送显示数据  break;    case3://档位3  dispnum=3;//送显示数据  break;    case4://档位4  dispnum=4;//送显示数据  break;    case5://档位5  dispnum=5;//送显示数据  break;    case6://档位零  dispnum=0;//送显示数据  break;    case7://打开循环水水泵标志屏幕的左上角那个  qq=1;  break;    case8://关闭循环水水泵标志  qq=0;  break;    case9://打开风冷风扇标志数码管下方的风扇标志  fs=1;  break;    case10://关闭风冷风扇的标志  fs=0;  break;    case11://打开锅具的标志位于红太阳左边的那个有水滴标志  aa=1;  break;    case12://关闭锅具的标志  aa=0;  break;    case13://打开绿叶炒菜标志  rr=1;  break;    case14://关闭绿叶炒菜标志  rr=0;  break;    case15://定时图标打开  hh=1;  break;        case16://定时图标关闭  hh=0;  break;    case17://摄氏度标志打开  dd=1;  break;    case18://摄氏度标志关闭  dd=0;  break;    case19://水量标志1打开 需要清234段的显示  jj=1;  break;    case20://水量标志2打开  jj=2;  break;    case21://水量标志3打开  jj=3;  break;    case22://水量标志4打开  jj=4;  break;    case23://水量标志关闭  jj=0;  break;    case24://电热丝标志打开  cc=1;  break;    case25://电热丝标志关闭  cc=0;  break;    case26://雪花标志开  ee=1;  break;    case27://雪花标志关  ee=0;  break;    case28://保温标志开  ff=1;  break;    case29://保温标志关  ff=0;  break;    case30://左下角开关标志  kg=1;  break;    case31://左下角开关标志  kg=0;  break;  } } //**************************************************外部中断*****************************voidexint0()interrupt0{           yy++;    }//---------------------------------------------------------------------------------------------voidRX() {   if(scl==0)//时钟线拉低告诉MCU要接收信号了    {   if(qinglingYES==1)//检测是不是允许清零      {     yy=0; //把YY清零     qinglingYES=0;//不在允许清零   }   if(sda==0)//如果数据线被拉低了那么就加一次数据       {      if(RXone>=1)//允许接收一次      {           yy++;//接收的数据加     RXone=0;//防止再次接收      }    }   if(sda==1)      {      if(RXone==0)//检测是不是已经打开了防止再次接收的参数      {        RXone=1;//允许再次接收      }   }  } if(scl==1)    {  qinglingYES=1;        LEDdisp();     disp();  guoled();  taiyang();  dianresi();  sheshidu();  sheshidu();  xuehua();  baowen();  fengshan();  kaiguan();  dingshi_led();  shangbiao();  lvye();  shuilengLED();  huoliLED();  yyjiange++;  } }//---------------------------------------------------------------------------------------------voidmain() { P1M0=0Xff; P1M1=0X00;  P0M0=0Xff; P0M1=0X00;  P2M0=0Xff; P2M1=0X00;   P2=0xff;  while(1)    {        RX();//开始接收数据 } }
来顶一顶...我也不懂程序
0
回复
firefox886
LV.9
10
2013-05-13 09:29
@wangchongpapa001
是的。因为代码要卖的。这样方便客户修改。难道我还让客户查单词啊?道理不就一样么。客户打个电话我不方便上网的话也可以告诉他改第几行。延时是必须的。没有几个人不用延时吧?只是延时形式不同罢了。感谢回帖哈。
延时是要用的,但是一般工程上不会你这么搞,用定时器延时啊!
0
回复
2013-05-18 14:38
@wangchongpapa001
 写完了下面的是完整的。生成HEX文件就可以烧录到芯片里面用了、 //-------------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------------------//---------------------5KW-8KW商用电磁炉.东北电取暖设备通用显示板可以定时设定温度-----------------------------------//---------------------张工15615356586版权所有仅供学习如有转载必须写明本版权信息!!!----------------------------//------------------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------2013年5月11于烟台玺萌橘子洲---------------//------------------------------------------------------------------------------------------------------------------#include#defineucharunsignedchar#defineuintunsignedint#defineAD_SPEED0x60;//0110,0000  1     1    90个时钟周期转换一次typedefunsignedcharINT8U;typedefunsignedint INT16U;INT16UADC_result;         //这个我从MAIN函数复制过来的。//---------------------------------------------------------------------INT8Uget_AD_result(INT8Uchannel);voiddelay(INT8Udelay_time);      //延时函数floatcikong,ad5; //定义两个个flost变量,分别磁控开关AD值AD4 和散热片传感器的AD值AD3。 //--------------------------------------------------------------------                   /*0,  1,  2, 3,   4,  5,  6, 7,  8,  9,   A,  b,*/ucharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,};//定义数码管编码//**************************************************引脚定义******************************************************sbitshierjiao=P2^0;    //12脚sbitshiyijiao=P2^1;    //11脚sbitshijiao=P2^2;    //10脚sbitjiujiao=P2^3;    //9脚sbitshisanjiao=P2^4;    //13脚sbitshisijiao=P2^5;    //14脚       sbitshiwujiao=P2^6;      //15脚sbitshiliujiao=P2^7;       //16脚sbitsda=P3^2;//数据sbitscl=P3^3;//时钟sbitlock=P3^4;//锁uintfenga=100,fengb=0,fengc=0,kongqi1=100,kongqi2=0,kongqi3=0,kongqi4=0,shui1=100,shui2=0,shui3=0,shui4=0,shui5=0,tt,pl;ucharaa=0,bb=0,cc=0,dd=0,ee=0,ff=0,sudu=750,kg=0,hh=0,ll=0,rr=0,qq=0,jj=0,yy=0,dispnum,fs=0;uintyyjiange,RXone,RXSDA,qinglingYES;//****************************************************各种延时子函数*******************************************************voidyanshi(uintxms)//延时多久需要计算。 {  uintx;   for(x=xms;x>0;x--); }//******************************************************************************************************************//**************************************************************voiddelay_10us(uintt) //延时10微秒的指令。核对过时间很准确{uintj;for(;t>0;t--)for(j=6;j>0;j--);}//************************************************************************************************************************//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@voiddelay_1ms(uintz)  //延时一毫秒的指令。核对过时间很准确{   uintx,y;   for(x=z;x>0;x--)   for(y=995;y>0;y--);}//************************************************************************************************************************voiddisp() //数码管显示  {    ucharshi,ge; shi=dispnum/10; ge=dispnum%10; shiwujiao=1;//关闭个位锁存 shiliujiao=0;//开始送入十位的显示锁存数据。 P0=table[shi];//送入10位的显示数据 delay_10us(20);//增加亮度下 shiliujiao=1;  //关闭十位的锁存不再允许十位好用。 P0=0x00;   //清零保证不干扰其它显示 shiwujiao=0;   //打开各位的显示锁存允许各位送入数据 P0=table[ge];//送个各位显示数据。 delay_10us(20); shiwujiao=1;//关闭个位锁存信息。 P0=0x00;   //清零保证不干扰其它显示  }voidguoled() //锅具图标  {   if(aa>=1) {    shijiao=1;shijiao=0;//打开锅的显示锁存。  P1=0X04;//送入锅具的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭锅的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidtaiyang()//太阳图标   {   if(bb>=1) {    shijiao=1;shijiao=0;//打开太阳的显示锁存。  P1=0X40;//送入太阳的显示数据  delay_10us(10);//等待下保证亮度  shijiao=1;//关闭太阳的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voiddianresi() //电热丝图标  {   if(cc>=1) {    shiyijiao=1;shiyijiao=0;//打开电热丝的显示锁存。  P1=0X40;//送入电热丝的显示数据  delay_10us(8);//等待下保证亮度  shiyijiao=1;//关闭电热丝的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidsheshidu()//摄氏度图标    {   if(dd>=1) {    shisijiao=1;shisijiao=0;//打开摄氏度的显示锁存。  P0=0X20;//送入摄氏度的显示数据  delay_10us(10);//等待下保证亮度  shisijiao=1;//关闭摄氏度的显示锁存  P0=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidxuehua()//雪花图标   {   if(ee>=1) {    shijiao=1;shijiao=0;//打开雪花的显示锁存。  P1=0X02;//送入雪花的显示数据  delay_10us(40);//等待下保证亮度  shijiao=1;//关闭雪花的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidbaowen()//保温图标锅冒热气的   {   if(ff>=1) {   shijiao=1;shijiao=0;//打开保温的显示锁存。 P1=0X08;//送入保温的显示数据 delay_10us(20);//等待下保证亮度 shijiao=1;//关闭保温的显示锁存 P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }  //08方向右04方向下 01方向上 02方向左边 10风扇中间点 20摄氏度 40百分比80信号的第三段voidfengshan()//风扇转动图标   {   if(fs>=1)   {    shisijiao=1;shisijiao=0;//打开风扇点的显示锁存。  P0=0X10;//送入风扇点的显示数据  delay_10us(1);//等待下保证亮度  shisijiao=1;//关闭风扇点的显示锁存  P0=0x00;//清掉显示的数据防止干扰其它显示段码。 //-------------------------------------------------------------------------- if(kongqi1>=1)  {    shiyijiao=0;//打开空气1的显示锁存。  P1=0X02;//送入空气1的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭空气1的显示锁存  kongqi1--;  if(kongqi1==0)     {  kongqi2=sudu; //设定空气2的开启参数     }  P1=0x00;//清数据防止干扰     } if(kongqi2>=1)  {    shiyijiao=0;//打开空气2的显示锁存。  P1=0X04;//送入空气2的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭空气2的显示锁存  kongqi2--;  if(kongqi2==0)     {  kongqi3=sudu; //设定空气3的开启参数     }  P1=0x00;//清数据防止干扰     } if(kongqi3>=1)  {    shijiao=0;//打开空气3的显示锁存。  P1=0X10;//送入空气3的显示数据  delay_10us(10);//等待下保证亮度    shijiao=1;//关闭空气3的显示锁存  kongqi3--;  if(kongqi3==0)     {  kongqi4=sudu; //设定空气4的开启参数     }  P1=0x00;//清数据防止干扰     } if(kongqi4>=1)  {    shiyijiao=0;//打开空气3的显示锁存。  shierjiao=0;//  P1=0X80;//送入空气3的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭空气3的显示锁存  shierjiao=1;  kongqi4--;  if(kongqi4==0)     {  kongqi1=sudu; //设定空气4的开启参数     }  P1=0x00;//清数据防止干扰     } //--10空气2   if(fenga>=1) {     shijiao=0;//打开风扇叶子A2的显示锁存。  P1=0X20;//送入风扇叶子的显示数据  delay_10us(10);//等待下保证亮度    shijiao=1;//关闭风扇叶子A2的显示锁存  fenga--;  if(fenga==0)     {  fengb=sudu; //设定风扇叶B的开启参数     } } if(fengb>=1) {    shiyijiao=0;//打开风扇叶子A2的显示锁存。  P1=0X20;//送入风扇叶子的显示数据  delay_10us(10);//等待下保证亮度    shiyijiao=1;//关闭风扇叶子A2的显示锁存  fengb--;  if(fengb==0)    {  fengc=sudu; //设定风扇叶C的开启参数         } } if(fengc>=1) {    shierjiao=0;//打开风扇叶子A2的显示锁存。  P1=0X20;//送入风扇叶子的显示数据   delay_10us(10);//等待下保证亮度    shierjiao=1;//关闭风扇叶子A2的显示锁存  fengc--;  if(fengc==0)    {  fenga=sudu; //设定风扇叶C的开启参数         } } P0=0x00;//清掉显示的数据防止干扰其它显示段码。 P1=0x00;//清掉显示的数据防止干扰其它显示段码。 } }voidkaiguan()   {    if(kg==1)  {      jiujiao=1;      jiujiao=0;//开打开关标志的锁存      P0=0x08;   delay_10us(9);   jiujiao=1;//关闭开关标志的锁存   P0=0x00; //清显示  }    if(kg==0)  {      jiujiao=1;      jiujiao=0;//开打开关标志的锁存      P0=0x40;   delay_10us(9);   jiujiao=1;//关闭开关标志的锁存   P0=0x00; //清显示  }  }voiddingshi_led() //定时的标志   {   if(hh>=1) {   jiujiao=1;jiujiao=0;//打开定时的显示锁存。 P0=0X80;//送入定时的显示数据 delay_10us(2);//等待下保证亮度 jiujiao=1;//关闭摄氏度的显示锁存 P0=0x00;//清掉显示的数据防止干扰其它显示段码。 }  }voidshangbiao()  //商标的标志    {       if(ll>=1)  {    shierjiao=1;shierjiao=0;//打开商标的显示锁存。  P1=0X04;//送入商标的显示数据  delay_10us(30);//等待下保证亮度  shierjiao=1;//关闭商标的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  }  } voidlvye()//绿色叶子    {   if(rr>=1) {    shierjiao=1;shierjiao=0;//打开叶子的显示锁存。  P1=0X01;//送入叶子的显示数据  delay_10us(30);//等待下保证亮度  shierjiao=1;//关闭叶子的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。 }  } voidshuilengLED()//循环水  {  if(qq>=1)  {   if(shui1>=1)   {    shijiao=0;//打开循环水的显示锁存。  P1=0X01;//送入循环水的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭循环水的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  shui1--;  if(shui1==0)    {      shui2=100;//送入水2灭的时间    }    }   if(shui2>=1)   {  shui2--;  if(shui2==0)    {      shui3=100;//送入水3亮的时间    }   }   if(shui3>=1)   {    shijiao=0;//打开循环水的显示锁存。  P1=0X01;//送入循环水的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭循环水的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  shui3--;  if(shui3==0)    {      shui4=100;//送入水4灭的时间    }   }   if(shui4>=1)   {  shui4--;  if(shui4==0)    {      shui5=1500;//送入水5亮的时间    }   }   if(shui5>=1)   {    shijiao=0;//打开循环水的显示锁存。  P1=0X01;//送入循环水的显示数据  delay_10us(30);//等待下保证亮度  shijiao=1;//关闭循环水的显示锁存  P1=0x00;//清掉显示的数据防止干扰其它显示段码。  shui5--;  if(shui5==0)    {      shui1=200;//送入水4灭的时间    }   } }  }voidhuoliLED()   {   if(jj>=1) {   shiliujiao=0;//打开火力的显示锁存。 P0=0X80;//送入火力的显示数据 delay_10us(1);//等待下保证亮度 shiliujiao=1;//关闭火力的显示锁存  if(jj>=2)  {     shiwujiao=0;//打开火力的显示锁存。   P1=0X80;//送入火力的显示数据   delay_10us(1);//等待下保证亮度   shiwujiao=1;//关闭火力的显示锁存   P1=0x00;//清掉显示的数据防止干扰其它显示段码。   if(jj>=3)   {      shisijiao=0;//打开火力的显示锁存。    P1=0X80;//送入火力的显示数据    delay_10us(1);//等待下保证亮度    shisijiao=1;//关闭火力的显示锁存    P1=0x00;//清掉显示的数据防止干扰其它显示段码。    if(jj>=4)    {      shisanjiao=1;shisanjiao=0;//打开叶子的显示锁存。    P1=0X80;//送入叶子的显示数据    delay_10us(1);//等待下保证亮度    shisanjiao=1;//关闭叶子的显示锁存    P1=0x00;//清掉显示的数据防止干扰其它显示段码。    }   }  } }  }voidLEDdisp()//最终显示的子函数包含了报警信息和档位信息  {  switch(yy)     {    case0://关闭整个屏幕  P1=0X00;P0=0X00;//把两个数据总线全部给拉低  break;    case1://档位1  dispnum=1;//送显示数据  break;    case2://档位2  dispnum=2;//送显示数据  break;    case3://档位3  dispnum=3;//送显示数据  break;    case4://档位4  dispnum=4;//送显示数据  break;    case5://档位5  dispnum=5;//送显示数据  break;    case6://档位零  dispnum=0;//送显示数据  break;    case7://打开循环水水泵标志屏幕的左上角那个  qq=1;  break;    case8://关闭循环水水泵标志  qq=0;  break;    case9://打开风冷风扇标志数码管下方的风扇标志  fs=1;  break;    case10://关闭风冷风扇的标志  fs=0;  break;    case11://打开锅具的标志位于红太阳左边的那个有水滴标志  aa=1;  break;    case12://关闭锅具的标志  aa=0;  break;    case13://打开绿叶炒菜标志  rr=1;  break;    case14://关闭绿叶炒菜标志  rr=0;  break;    case15://定时图标打开  hh=1;  break;        case16://定时图标关闭  hh=0;  break;    case17://摄氏度标志打开  dd=1;  break;    case18://摄氏度标志关闭  dd=0;  break;    case19://水量标志1打开 需要清234段的显示  jj=1;  break;    case20://水量标志2打开  jj=2;  break;    case21://水量标志3打开  jj=3;  break;    case22://水量标志4打开  jj=4;  break;    case23://水量标志关闭  jj=0;  break;    case24://电热丝标志打开  cc=1;  break;    case25://电热丝标志关闭  cc=0;  break;    case26://雪花标志开  ee=1;  break;    case27://雪花标志关  ee=0;  break;    case28://保温标志开  ff=1;  break;    case29://保温标志关  ff=0;  break;    case30://左下角开关标志  kg=1;  break;    case31://左下角开关标志  kg=0;  break;  } } //**************************************************外部中断*****************************voidexint0()interrupt0{           yy++;    }//---------------------------------------------------------------------------------------------voidRX() {   if(scl==0)//时钟线拉低告诉MCU要接收信号了    {   if(qinglingYES==1)//检测是不是允许清零      {     yy=0; //把YY清零     qinglingYES=0;//不在允许清零   }   if(sda==0)//如果数据线被拉低了那么就加一次数据       {      if(RXone>=1)//允许接收一次      {           yy++;//接收的数据加     RXone=0;//防止再次接收      }    }   if(sda==1)      {      if(RXone==0)//检测是不是已经打开了防止再次接收的参数      {        RXone=1;//允许再次接收      }   }  } if(scl==1)    {  qinglingYES=1;        LEDdisp();     disp();  guoled();  taiyang();  dianresi();  sheshidu();  sheshidu();  xuehua();  baowen();  fengshan();  kaiguan();  dingshi_led();  shangbiao();  lvye();  shuilengLED();  huoliLED();  yyjiange++;  } }//---------------------------------------------------------------------------------------------voidmain() { P1M0=0Xff; P1M1=0X00;  P0M0=0Xff; P0M1=0X00;  P2M0=0Xff; P2M1=0X00;   P2=0xff;  while(1)    {        RX();//开始接收数据 } }
做完了效果图如下。有视频。这里能上传视频么? 
0
回复
2013-05-18 16:08
@wangchongpapa001
做完了效果图如下。有视频。这里能上传视频么?[图片] 
0
回复
三月天_
LV.4
13
2013-05-20 14:08
@wangchongpapa001
效果视频连接http://v.youku.com/v_show/id_XNTU4NTkxNzQw.html
这位兄弟有大爱呀。。。。
0
回复
zhouboak
LV.8
14
2013-06-04 19:34
@三月天_
这位兄弟有大爱呀。。。。

路过

0
回复