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

第五章系统软件设计

根据系统所需要实现的功能,软件设计主要分为如下的几个模块:主程序、温度读取模块设计、实时时钟模块设计、LCD显示模块设计、键盘扫描程序以及按键消抖程序。

本系统的工作流程是:系统上电后,对电路板上的各部分初始化;然后按下按键2,对时间进行设定;按下按键3之后,对烧水温度进行设定;按下按键4后,对烧水时间进行设定,当温度超过设定的温度之后,蜂鸣器工作,系统停止工作;在系统受到较强干扰时,按下按键1可以对单片机进行复位。

5.1主程序模块

主程序主要完成的是对个全局变量进行定义,对时钟与时间的初始化,调用子函数功能。

具体流程图如图5.1所示。 主程序清单如下: void main() {

//writetime(); kaishi:

writecom(0x01); //清零

bit bz=0;

float ttt; char we[6]; unsigned int i; int te; delayms(1); chushishizhong();

//初始时钟

chushishijian(); //初始时间

while(1) {

readtime(); //读取时间

t[0]=shijian[4]/10+0x30; //时间数据处理 t[1]=shijian[4]+0x30; t[3]=shijian[5]/10+0x30;

}

t[4]=shijian[5]+0x30; t[6]=shijian[6]/10+0x30; t[7]=shijian[6]+0x30; tt[2]=shijian[1]/10+0x30; tt[3]=shijian[1]+0x30; tt[5]=shijian[2]/10+0x30; tt[6]=shijian[2]+0x30; tt[8]=shijian[3]/10+0x30; tt[9]=shijian[3]+0x30; writestr(0,0,tt); writestr(1,0,t); writestr(1,10,\

//显示时间 处理

writestr(0,10,\

aj=keyscan(); //检测按键 调用对应的子程序

5.2 DS18B20测温模块

此模块主要任务是对DS18B20进行初始化,然后再进行读字节、写字节的工作,最后将读得的16进制温度传送到处理器内进行处理。

DS18B20测温流程图如图5.2所示

具体程序如下:

sbit wen=P1^0; //数据口选择

bit chushi18b20() //初始化DS18B20的读数 { bit dat; }

uchar readds() //读8位数据

开始 初始化DS18B20 读DS18B20测得的温度 图5.2 DS18B20测温流程图

wen=1; //先将数据线置高电平 delayus(1); //调用延时 wen=0; //数据线置低电平 delayus(200); //调用延时 delayus(200);

wen=1; //数据线置高电平 delayus(30); //延时等待 dat=wen; //CPU读温度 delayus(50); //调用延时 return dat; //读返回值

{ }

void writeds(uchar dat) //数据写入 { }

unsigned int duwendu() //读温度 {

uchar a;

unsigned int q,w; //分别定义温度的高八位,低八位与总温度 uchar i;

for(i=0;i<8;i++) //循环8次移位 { }

delayus(10); //写时序持续60us

wen=0;

wen= dat & 0x01; //从字节的最低位开始传输 delayus(30); wen=1;

dat >>=1; //数据右移一位 delayus(30); //调用延时 }

return dat; //得到8位数据 uchar dat;

for(i=0;i<8;i++) //循环8次移位 { wen=0;

dat >>=1; //数据右移移位 if(wen)

dat| =0x80; //最高位置1 else

dat &=0x7f; //最高位置0 wen=1; uchar i;