}
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所示。