基于51单片机的电热水器控制系统的设计_毕业设计论文 下载本文

开始 1602初始化 写数据 图5.4 LCD1602显示流程

具体程序如下:

#define port P0

#define uchar unsigned char #define uint unsigned int

sbit rs=P2^7; //将P2.0设置为数据选择口 sbit rw= sbit en=

void writedata(uchar i) //写指令 { }

void writecom(uchar i) //写数据 {

P2^6; //将P2.6设置为读写选择口 P2^5; //将P2.5设置为使能信号口

rs=1; //选择指令寄存器 rw=0; //写 en=1; //允许读写 delayus(100); port=i;

en=0; //禁止读写

rs=0; rw=0; en=1;

}

delayus(100); port=i; en=0;

void chushishizhong() //初始时钟 { }

void writestr(uchar ha,uchar li,uchar *s) //对LCD的行与列的初始地址进行定

义,写数据

{ }

while(*s) { }

writedata(*s); s++;

if(ha==0)

writecom(li+0x80); else writecom(li+0xc0);

writecom(0x38); //设置8位格式,2行,5x7 writecom(0x08); //清屏幕

writecom(0x06); //设定输入方式,增量不移位 writecom(0x0c); //整体显示,关光标,不闪烁

5.5键址返回程序

键盘扫描程序的功能是逐个扫描各个功能键和“+”“—”键是否被按下,若按下某个按键,则返回相应的键址。

其按键扫描程序如下:

sbit k1=P3^3; //定义每个按键的数据口 P3.3为S1按键 sbit k2=P3^4; //P3.4对应S2按键 sbit k3=P3^5; //P3.5对应S3按键 sbit k4=P3^6; //P3.6对应S4按键

sbit k5=P3^7; //P3.7对应S5按键

unsigned char keyscan() //定义键址返回程序 {

if(k1==0) //当按键1按下 {

delayms(10); //消抖 延时 if(k1==0)

{

while(k1==0);

return 1; //返回键址1 }

} {

delayms(10); if(k2==0)

{

while(k2==0);

return 2; //返回键址2 }

else if(k2==0) //当按键2按下

} {

delayms(10); if(k3==0)

{

while(k3==0);

return 3; //返回键址3 }

else if(k3==0) //当按键3按下

} {

delayms(10);

else if(k4==0) //当按键4按下

}

if(k4==0)

{

while(k4==0);

return 4; //返回键址4 }

} {

delayms(10); if(k5==0)

{

while(k5==0);

return 5; //返回键址5 }

else if(k5==0) //当按键5按下

} else

return 0; //若没有按键按下则返回0

5.6测试及性能分析

实际硬件测试图如下:

1)接通电源,系统正常显示时钟,如图5.5所示

图5.5 实时时钟显示

2)按下按键2,,光标闪烁,进入时钟校准模式,如图5.6所示

图5.6 时钟校准

3)按下按键3,系统显示当前温度,按下按键5,按键6调节烧水温度,当水箱内温度低于目标温度时,LED灯亮,表示继电器断开,加热电路工作。,如图5.7所示。