电子万年历设计与调试设计说明书内容摘要:

{ lcd_(0x38)。 //模式设置 lcd_(0x0c)。 //显示设置 lcd_(0x01)。 //清屏 lcd_(0x06)。 //输入模式 } /*******液晶显示控制函数 ******/ void disp_lcd() { uchar i。 lcd_(0x80)。 //第一行地址 for(i=0。 i16。 i++) lcd_dat(lcd1[i])。 lcd_(0xc0)。 //第二行地址 14 for(i=0。 i16。 i++) lcd_dat(lcd2[i])。 } 温度控制模块 温度控制模块包括 DS18B20 初始化函数、写字节函数、读字节函 数、温度控制函数 4 个部分。 ( 1)初始化函数 DS18B20 初始化时序图如图 38 所示,流程图如图 39 所示。 图 38 开 始总 线 拉 高总 线 拉 低延 时 7 0 0 u s总 线 拉 高延 时 3 5 u s读 取 状 态延 时 1 7 5 u s总 线 拉 高延 时 2 1 0 u s返 回 图 39 初始化流程图 15 ( 2)写字节函数 DS18B20 写字节函数时序图如图 310 所示,流程图如图 311 所示。 图 310 写字节时序图 开 始初 始 化总 线 拉 低延 时 1 4 u s写 入 1 位 数 据延 时 4 9 u s总 线 拉 高8 位 完 成。 结 束NY 图 311 写字节流程图 16 ( 2)读字节函数 DS18B20 读字节函数时序图如图 312 所示,流程图如图 313 所示。 图 312 写数据时序图 开 始初 始 化总 线 拉 低延 时 1 4 u s读 取 1 位 数 据延 时 4 9 u s总 线 拉 高8 位 完 成。 结 束NY 图 313 写数据流程图 17 ( 4)温度控制函数 温度控制函数流程图如图 314 所示。 开 始D S 1 8 B 2 0 初 始 化启 动 温 度 转 换D S 1 8 B 2 0 初 始 化读 取 温 度数 据 转 换送 液 晶 显 示返 回 图 313 写数据流程图 温度控制程序头文件如下: ifndef _DS18B20_H_ define _DS18B20_H_ void temperate()。 endif 温度控 制程序清单如下: /******头文件及宏定义 ******/ include define uchar unsigned char /******变量声明及定义 *******/ uchar t,value[]={0x00,0x00}。 bit s。 sbit DQ=P1^7。 extern uchar lcd2[]。 /******延时控制函数 *****/ void del(uchar t) //7us { uchar i。 for(i=t。 i0。 i)。 } /****18B20 初始化控制函数 ***/ uchar init_18b20() { uchar status。 DQ=1。 DQ=0。 del(100)。 //700us DQ=1。 del(5)。 //35us status=DQ。 del(25)。 //175us DQ=1。 del(30)。 //210us 18 return status。 } /******读 18B20 控制函数 *****/ uchar rd_18b20() { uchar i,dat=0。 for(i=0。 i8。 i++) { DQ=1。 DQ=0。 dat=1。 DQ=1。 if(DQ==1) dat|=0x80。 del(5)。 //35us DQ=1。 } return dat。 } /******写 18B20 控制函数 *****/ void wr_18b20(uchar dat) { uchar i。 DQ=1。 for(i=0。 i8。 i++) { DQ=0。 del(1)。 //7us DQ=datamp。 0x01。 del(5)。 //35us DQ=1。 dat=1。 } } /********温度控制函数 *******/ void temperate() { init_18b20()。 wr_18b20(0xcc)。 wr_18b20(0x44)。 init_18b20()。 wr_18b20(0xcc)。 wr_18b20(0xbe)。 value[0]=rd_18b20()。 value[1]=rd_18b20()。 if((value[1]amp。 0xf8)==0xf8) { s=1。 value[0]=~value[0]+1。 if(value[0]==0x00) value[1]=~value[1]+1。 else value[1]=~value[1]。 } else s=0。 t=(value[0]4)|(value[1]4)。 if(s==1) 19 lcd2[13]=39。 39。 else lcd2[13]=t/100+39。 039。 lcd2[14]=t%100/10+39。 039。 lcd2[15]=t%10+39。 039。 } 时间控制模块 时间控制模块包括读字节函数、写字节函数、读数据函数、写数据函数和初始化函数 5 部分组成。 ( 1)读字节函数 读字节操作时序图如图 314 所示,读字节函数流程图如图 315 所示: 图 314 读字节操作时序图 20 图 315 读字节 函数流程 图 ( 2)写字节函数 写字节操作时序图如图 316 所示,读字节函数流程图如图 317 所示: 图 316 写 字节操作时序图 ( 3) 读数据函数 读数据函数流程图如图 318 所示: ( 4) 写数据函数 写数据函数流程图如图 319 所示: 开始 结束 初始化 写入 1 位数据 CLK=1,CLK=0 数据移位 8 位数据完成 N Y 21 开 始初 始 化读 数 据C L K = 1, C L K = 0写 地 址结 束返 回 数 据 开 始初 始 化写 数 据C L K = 1, C L K = 0写 地 址结 束 开 始允 许 数 据 读 写禁 止 读 写 数 据写 时 间 信 息结 束 图 17。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。