您当前的位置:五五电子网电子知识单片机-工控设备51单片机51单片机快热式热水器程序 正文
51单片机快热式热水器程序

51单片机快热式热水器程序

点击数:7894 次   录入时间:03-04 11:56:25   整理:http://www.55dianzi.com   51单片机
/*--------------------------------------
快热式热水器程序
MCU AT89C51  XAL 12MHz
--------------------------------------*/
//#pragma  SRC
#include <reg51.h>
#include <intrins.h>
#include <math.h>
void delay(unsigned int);       //延时函数
void display(void);             //显示函数
unsigned char keysCAN(void);    //按键扫描处理函数
void heatCTRl(void);            //加热控制函数
void temptest(void);            //测温函数
sbit swkey=P1^0;                //开关键
sbit upkey=P1^1;                //加热档位“+”键
sbit downkey=P1^2;              //加热档位“-”键
sbit buzz=P1^05;                //蜂鸣器输出端
sbit triac=P1^6;                //可控硅触发信号输出端
sbit relay=P1^7;                //继电器控制信号输出端
sbit LED1=P2^5;                 //加热档位指示灯1
sbit led2=P2^6;                 //加热档位指示灯2
sbit led3=P2^7;                 //加热档位指示灯3
signed char data ctemp;         //当前测得水温寄存器
unsigned char data dispram[2]={0x10,0x10};  //显示区缓存
unsigned char data heatpower,px0count;      //加热档位寄存器、外中断0计数器
bit tempov,t0tst,testok;        //超温标志、测温开始标志、测温完成标志
/*----------------------------------------------
  主函数 void main(void)
  无参数,无返回值
  循环调用显示、键扫描、温度检测、加热控制函数
----------------------------------------------*/
void main(void)

unsigned char i,j;
ctemp=15;                       //初始化水温寄存器
heatpower=5;                    //初始化加热档位为5当
tempov=0;                       //清除超温标志
swkey=0;                        //默认开关键被按下,进入待机状态
TMOD=0x11;                      //设定T0和T1工作方式为16位定时器
TCON=0x05;                      //设置外中断0和1为下降沿触发
IP=0x01;                        //设置外中断0优先
IE=0x80;                        //打开总中断
while (1)
  {
  i=1;
  do{
    for (j=0;j<100;j++)         //循环100次约0.5s
      {
      if (keyscan()) i=6;       //如果有键按下,显示当前档位3s
      display();                //调用显示函数一次约4ms
      heatctrl();               //调用加热控制函数
      }//end for (b=0;b<100;b++)
    temptest();                 //每0.5s进行一次测温
    } while (--i);              //通过改变循环次数i的大小决定是否刷新显示
  j=abs(ctemp);                 //取温度绝对值
  dispram[1]=j%10;              //取个位数送显示
  j/=10;                        //取十位数
  dispram[0]=j?j:0x11;          //送显示(带灭零)
  }//end while (1)


/*--------------------------------------
  延时函数 void delay(unsigned int dt)
  参数:dt,无返回值
  延时时间=dt*500机器周期
--------------------------------------*/
void delay(unsigned int dt)
{
register unsigned char bt;      //定义寄存器变量
for (; dt; dt--)
  for (bt=250; --bt; );         //此句编译时以“DJNZ”实现,250*2=500机器周期
}

/*--------------------------------------
  显示函数 void display(void)
  无参数,无返回值
  两位共阳数码管扫描显示
--------------------------------------*/
void display(void)
{
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\
                            0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff};
unsigned char i,a;
a=0xfe;                         //位选赋初值
for (i=0; i<2; i++)             //循环扫描两位数码管
  {
  P2|=0x1f;                     //清除位选
  P0=table[dispram[i]];         //送显示段码
  P2&=a;                        //选通一位

[1] [2] [3] [4]  下一页


本文关键字:单片机  程序  热水器  51单片机单片机-工控设备 - 51单片机