资源预览内容
第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
第9页 / 共34页
第10页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
目录1.前言22. 总体设计框架22.1实现的功能22.2总体程序流程图33. 水温采集模块程序设计53.1 DS18B20 简介 53.2 DS18B20的初始化63.3 DS18B20 写周期 83.4 DS18B20 读周期 103.5 温度读取程序124. 显示模块程序设计154.1 LCD1602 初始化 154.2 LCD1602 写周期 165. 定时模块程序设计195. 1定时器设置205.2 定时器中断子程序2 16. 中断模块程序设计236. 1外部中断设置236.2 键盘扫描中断子程序247. 整体编程的实现 268. 设计过程中的问题及解决方案 269. 收获与感悟 271. 前言随着社会进步与经济发展,人们对生活质量的要求越来越高,每 天的饮水量是衡量健康的重要指标。但有多少人因为忙碌的工作而全 天忘记喝水?当你感到口渴想要喝水的时候,体内的失水已经达到 2%,口渴本身其实是体内已经严重缺水的表现,这是造成 “亚健 康”状态的致命习惯之一。同时,越不注意喝水,喝水的欲望就会越 低,人就会变得越来越缺水。研究表明,通常情况下,正常人每次喝 水应控制在300ml,间隔时间为30到60分钟。本课程设计就此设计出一款智能水杯,用来智能显示水温和提醒 喝水,既方便了生活,又保持了健康。本报告针对智能水杯的软件系 统进行阐述,软件编程在keil上操作。2. 总体设计框架2.1 实现的功能图 1 硬件结构简图(1)水温检测使用DS18B20温度传感器,完成水温的时时检测功能。(2)水温及定时时间显示使用 LCD1602 液晶显示屏,完成水温及定时时间的显示功能。(3)智能提醒 使用定时器0,开启定时器中断,蜂鸣器提醒。(4)定时时间设置 使用外部中断0扩展电路,用三个按键触发中断,完成对应定时开启和定时时间加减的功能。2.2 总体程序流程图总体程序流程图分为主程序和中断程序两部分,其中中断程序分 为外部中断程序和定时器中断程序。流程图如下图所示。图 2 主程序流程图图 3 外部按键中断流程图图4 定时器中断程序设计流程图3. 水温采集模块程序设计3.1DS18B20 简介DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的 优点:(1)采用单总线的接口方式,与微处理器连接时,仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性 好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优 点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概 念。(2)测量温度范围宽,测量精度高DS18B20的测量范围为-55 C + 125 C;在-10+ 85C 范围内,精度为 土 0.5C。(4)持多点组网功能多个DS18B20可以并联在惟一的单线上,实现多点测温。(5) 供电方式灵活DS18B20可以通过内部寄生电路从数据线上 获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外 部电源,从而使系统结构更趋简单,可靠性更高。(6) 测量参数可配置DS18B20的测量分辨率可通过程序设定 912位。3.2 DS18B20的初始化主机首先发出一个480960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。作为从图5 DS18B20初始化时序图器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待1560微秒后将总线电平拉低6 0 - 2 40微秒做出响应存在脉冲,告诉主机本 器件已做好准备。若没有检测到就一直在检测等待。初始化时序图如 图5所示。/*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L*/*!* *X* *X* *!*!* *!*!* *!*!* *!* /unsigned char Ds18b20Init()unsigned int i;Desport=0;/将总线拉低 480us960usi=70;while(i-);/延时 642usDsport=l;/然后拉高总线,若DS18B20做出反应会将在15us60us后将总线拉低i=0;while(Desport) /等待 DS18B20 拉低总线i+;if(i50000)/等待50MSreturn 0;/初始化失败return 1;/初始化成功3. 3DS18B20 写周期写周期最少为60微秒,最长不超过120微秒。写周期一开始做 为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则 将总线置为低电平,若主机想写1,则将总线置为高电平,持续时间 最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给 总线恢复。而DS18B20则在检测到总线被拉底后等待15微秒然后从 15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。写周期时序图如图6所示。图6 DS18B20写周期时序图/*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L*/*!* *X* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!* *!*!*!* *!*!* *!*!* *!*!* *!* /void Ds18b20WriteByte(unsigned char dat)unsigned int i,j;for(j=0;j=l;3. 4DS18B20 读周期读周期是从主机把单总线拉低 1 微秒之后就得释放单总线为高 电平,以让DS18B20把数据传输到单总线上。作为从机DS18B20在检测到总 线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低 电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒 后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒 时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。 采样期内总线为高电平则确认为1。完成一个读时序过程至少需要60 微秒才能完成。其读周期的时序图如图 7 所示。图7 DS18B20读周期时序图/ vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* vt* *1*/*T* T*T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T* *T*7* *T* T*T* *T* *T* *T*!* *!* *!* *!* *!* *!* *!* *!* *X* 函数名: Dsl8b20ReadByte* 函数功能 :读取一个字节* 输入: com* 输出 : 无*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L*!*!* *!*!* *!*!* *!*!* *!* / /unsigned char Ds18b20ReadByte()unsigned char byte,bi;unsigned int i,j;for(j=8;j0;j-)Dsport二0;/先将总线拉低lusi+;Dspo
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号