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

}

chushi18b20(); writeds(0xcc); //读低温 writeds(0x44); //读高温 delayms(15); chushi18b20();

writeds(0xcc); //忽略ROM指令 writeds(0xbe); //读暂存器指令 delayms(15);

a=readds(); //低八位数据 q=readds(); //高八位数据 q= q<< 8; w=q+a;

return w; //得到2进制的温度示值

5.3实时时钟模块

实时时钟模块完成时间的设定与时间的读取,包括年、月、日、时、分、秒。 具体流程图如图5.3所示

图5.3 DS1302显示流程图

开始 DS1302 初始化 读取DS1302时间 显示 时、分、秒

具体程序如下:

#define uchar unsigned char

sbit res= sbit clo=

#define miao 0x80//秒 #define fen 0x82//分 #define shi #define ri #define yue #define nian

uchar shijian[8]={20,12,1,1,0,0,0,0}; //表示初始时间 uchar shijian1[8];

void writeda(uchar add,uchar dat) {

clo=1; //有脉冲信号 delayus(1);

clo=0; //无脉冲信号 add >>=1; //数据右移 uchar i;

add =add & 0xfe; //地址清零 res=1; //复位信号 for(i=0;i<8;i++) //循环8次移位 {

if(add & 0x01) //若地址不为0

io=1; //传输数据 else io=0;

0x84//时 0x86//日 0x88//月 0x8c//年

P2^0; //数据命令口选择 P2^2; //脉冲信号口选择

sbit io=P2^1; //数据口选择

#define kongzhi 0x8e//光标

}

}

for(i=0;i<8;i++) //写数据 { }

res=0; //不进行复位操作

if(dat & 0x01) //有数据 io=1; else io=0; clo=1; delayus(1); clo=0; dat >>=1;

uchar readda(uchar add) //读数据 {

uchar dat; uchar i;

add |=0x01; //低位置1 res=1; for(i=0;i<8;i++) { 送0 }

for(i=0;i<8;i++) 八位循环位移 {

io=1; else io=0; clo=1; delayus(1); clo=0; add >>=1;

if(add & 0x01) /若低位为1,则将数据传送到处理器内,否则传

}

}

dat >>=1; if(io)

dat |=0x80; //高位置1 else dat &=0x7f; //高位置0 clo=1; delayus(1); clo=0;

res=0; return dat;

void writetime() //写时间 {

uchar i,te; for(i=0;i<8;i++) {

writeda(kongzhi,0x00); //kongzhi 关

writeda(kongzhi,0x80); //kongzhi开 }

void readtime() //读时间 writeda(miao,shijian1[6]); writeda(fen,shijian1[5]); writeda(shi,shijian1[4]); writeda(ri,shijian1[3]); writeda(yue,shijian1[2]); writeda(nian,shijian[1]); writeda(miao,0x80);

//miao 停

}

te=shijian[i]/10; //将时间转换为10进制 shijian1[i]=shijian[i]; shijian1[i]=te*16+shijian1[i];

{ }

void chushishijian() //初始时间 将秒位置0 { }

res=0; clo=0;

writeda(miao,0x00);

for(i=0;i<8;i++) //进制转换 { }

te=shijian1[i]/16; shijian[i]=shijian1[i]; shijian[i]=te*10+shijian[i]; uchar i,te;

shijian1[1]=readda(nian); shijian1[2]=readda(yue); shijian1[3]=readda(ri); shijian1[4]=readda(shi); shijian1[5]=readda(fen); shijian1[6]=readda(miao);

5.4 LCD显示模块

LCD显示模块主要实现各个数据的显示功能,包括时间的显示与温度以及提示字的显示。

显示模块的流程图如图5.4所示。