智能水杯软件设计

上传人:人*** 文档编号:489200173 上传时间:2022-11-10 格式:DOC 页数:35 大小:798.50KB
返回 下载 相关 举报
智能水杯软件设计_第1页
第1页 / 共35页
智能水杯软件设计_第2页
第2页 / 共35页
智能水杯软件设计_第3页
第3页 / 共35页
智能水杯软件设计_第4页
第4页 / 共35页
智能水杯软件设计_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《智能水杯软件设计》由会员分享,可在线阅读,更多相关《智能水杯软件设计(35页珍藏版)》请在金锄头文库上搜索。

1、目录1.前言 22.总体设计框架 22.1 实现的功能 22.2 总体程序流程图 33.水温采集模块程序设计 53.1 DS18B20简介 53.2 DS18B20的初始化 63.3 DS18B20写周期 83.4 DS18B20读周期 93.5 温度读取程序 1.1.4. 显示模块程序设计 1.4.4.1 LCD1602 初始化 1.44.2 LCD1602 写周期 1.65. 定时模块程序设计 1.85.1 定时器设置 1.9.5.2 定时器中断子程序 2.06. 中断模块程序设计 2.2.6.1 外部中断设置 2.26.2键盘扫描中断子程序 237. 整体编程的实现258. 设计过程中的

2、问题及解决方案 259. 收获与感悟261. 刖言随着社会进步与经济发展,人们对生活质量的要求越来越高,每天的饮水量 是衡量健康的重要指标。但有多少人因为忙碌的工作而全天忘记喝水?当你感到 口渴想要喝水的时候,体内的失水已经达到 2%,口渴本身其实是体内已经严重 缺水的表现,这是造成 “亚健康”状态的致命习惯之一。同时,越不注意喝水, 喝水的欲望就会越低,人就会变得越来越缺水。研究表明,通常情况下,正常人 每次喝水应控制在300ml,间隔时间为30到60分钟。本课程设计就此设计出一款智能水杯, 用来智能显示水温和提醒喝水,既方 便了生活,又保持了健康。本报告针对智能水杯的软件系统进行阐述,软件

3、编程 在keil上操作。2. 总体设计框架2.1实现的功能硬件结构框架图如图1所示图1硬件结构简图(1 )水温检测使用DS18B20温度传感器,完成水温的时时检测功能。(2)水温及定时时间显示使用LCD1602液晶显示屏,完成水温及定时时间的显示功能。(3 )智能提醒使用定时器0,开启定时器中断,蜂鸣器提醒。(4) 定时时间设置使用外部中断0扩展电路,用三个按键触发中断,完成对应定时开启和定时 时间加减的功能。2.2总体程序流程图总体程序流程图分为主程序和中断程序两部分,其中中断程序分为外部中断 程序和定时器中断程序。流程图如下图所示图2主程序流程图图3外部按键中断流程图图4定时器中断程序设计

4、流程图3水温采集模块程序设计3.1 DS18B20 简介DS18B20单线数字温度传感器,即“一线器件”,其具有独特的优点:(1 )采用单总线的接口方式,与微处理器连接时,仅需要一条口线即可实 现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适 合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网 络,为测量系统的构建引入全新概念。(2)测量温度范围宽,测量精度高 DS18B20的测量范围为-55 C +125 C ; 在-10+ 85 C 范围内,精度为 土 0.5 C。(4)持多点组网功能 多个DS18B20可以并联在惟一的单线上,实现多 点测温*

5、(5) 供电方式灵活DS18B20可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。(6) 测量参数可配置DS18B20的测量分辨率可通过程序设定 912位。3.2 DS18B20 的初始化主机首先发出一个480 - 960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。作为从图5 DS18B20初始化时序图器件的DS18B20在一上电后就一直在检测总线上是否有 480 960微秒的

6、 低电平出现,如果有,在总线转为高电平后等待 15 60微秒后将总线电平拉低 60 240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。 初始化时序图如图5所示*函数名:Ds18b20I nit*函数功能:初始化*输入:无*输出:初始化成功返回1,失败返回0*unsigned char Ds18b20lnit()un sig ned int i;Desport=0;/将总线拉低480us960usi=70;while(i-);延时642usDsport=1;/然后拉高总线,若 DS18B20做出反应会将在15us60us后将总线拉低i=0;while(Despo

7、rt) / 等待 DS18B20 拉低总线 i+;if(i50000) 等待 50MSreturn 0;/初始化失败return 1;/初始化成功3.3 DS18B20 写周期写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把 总线拉低1微秒表示写周期开始。随后若主机想写 0,则将总线置为低电平,若 主机想写1,则将总线置为高电平,持续时间最少 60微秒直至写周期结束,然 后释放总线为高电平至少1微秒给总线恢复。而DS18B20则在检测到总线被 拉底后等待15微秒然后从15us到45us开始对总线米样,在米样期内总线为*函数名:Ds18b20WriteByte*函数功能:向1

8、8B20写入一个字节*输入:com输出:无void Ds18b20WriteByte(u nsig ned char dat)un sig ned int i,j;for(j=0;j=1;3.4 DS18B20 读周期读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。作为从机 DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进 行采样检测,采样期内总线为低电平则

9、确认为 0。采样期内总线为高电平则确认 为1。完成一个读时序过程至少需要 60微秒才能完成。其读周期的时序图如图*/函数名:Ds18b20ReadByte函数功能:读取一个字节输入:com输出:无*un sig ned char Ds18b20ReadByte()un sig ned char byte,bi;un sig ned int i,j;for(j=8;j0;j-)Dsport=0; 先将总线拉低1usi+;Dsport=1;/然后释放总线i+;i+;延时6us等待数据稳定bi=Dsport; /读取数据,从最低位开始读取byte=(byte1)|(bi7); /*将byte左移一位

10、,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/i=4;/读取完之后等待48us再接着读取下一个数while(i-);return byte;3.5温度读取程序简单的读取温度值的步骤如下:跳过ROM操作-发送温度转换命令-跳过ROM操作-发送读取温度命令-读取温度值(1 )温度转换指令:*函数名:Ds18b20Cha ngTemp*函数功能:让18b20开始转换温度*输入:com*输出:无*void Ds18b20Cha ngTemp()Ds18b20I ni t();Delay1ms(1);Ds18b20WriteByte(0xcc);/ 跳过 ROM 操作命令Ds18b20Wri

11、teByte(0x44); / 温度转换命令Delay1ms(100);(2)温度读取指令/*函数名:Ds18b20ReadTempCom*函数功能:发送读取温度命令*输入:com*输出:无*void Ds18b20ReadT empCom()Ds18b20I ni t();/跳过ROM操作命令/发送读取温度命令Delay1ms(1);Ds18b20WriteByte(0xcc);Ds18b20WriteByte(0xbe);*/(3)读取温度:/*函数名:Ds18b20ReadTemp*函数功能:读取温度*输入:com*输出:无*int Ds18b20ReadTemp()un sig ned int temp=0;un sig ned char tmh,tml;Ds18b20ChangTemp(); /先写入转换命令Ds18b20ReadTempCom(); 然后等待转换完后发送读取温度命令tml=Ds18b20ReadByte(); /tmh=Ds18b20ReadByte(); temp=tmh;temp=8;temp|=tml;return temp;读取温度值共16位,先读低字节/再读高字

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号