第五章系统软件设计
根据系统所需要实现的功能,软件设计主要分为如下的几个模块:主程序、温度读取模块设计、实时时钟模块设计、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;