智能水杯软件设计

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

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

1、目 录1.前言32.总体设计框架32.1实现的功能32.2总体程序流程图43.水温采集模块程序设计53.1 DS18B20简介53.2 DS18B20的初始化63.3 DS18B20写周期73.4 DS18B20读周期83.5 温度读取程序94.显示模块程序设计114.1 LCD1602初始化114.2 LCD1602写周期125. 定时模块程序设计135.1定时器设置145.2 定时器中断子程序156.中断模块程序设计166.1外部中断设置166.2键盘扫描中断子程序167.整体编程的实现178.设计过程中的问题及解决方案189.收获与感悟191.前言随着社会进步与经济发展,人们对生活质量的

2、要求越来越高,每天的饮水量是衡量健康的重要指标。但有多少人因为忙碌的工作而全天忘记喝水?当你感到口渴想要喝水的时候,体内的失水已经达到2%,口渴本身其实是体内已经严重缺水的表现,这是造成“亚健康”状态的致命习惯之一。同时,越不注意喝水,喝水的欲望就会越低,人就会变得越来越缺水。研究表明,通常情况下,正常人每次喝水应控制在300ml,间隔时间为30到60分钟。本课程设计就此设计出一款智能水杯,用来智能显示水温和提醒喝水,既方便了生活,又保持了健康。本报告针对智能水杯的软件系统进行阐述,软件编程在keil上操作。2.总体设计框架2.1实现的功能STC89C51控制器LCD温度显示温度读入温度提示灯

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

4、温提示灯红灯亮适宜水温黄灯亮低温提示灯蓝灯亮YN水温50000)/等待50MSreturn 0;/初始化失败return 1;/初始化成功3.3 DS18B20写周期写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则将总线置为低电平,若主机想写1,则将总线置为高电平,持续时间最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给总线恢复 。而DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。写周期时序图如图6所示。图6 DS

5、18B20写周期时序图/* 函数名 : Ds18b20WriteByte* 函数功能 : 向18B20写入一个字节* 输入 : com* 输出 : 无*/void Ds18b20WriteByte(unsigned char dat)unsigned int i,j;for(j=0;j=1;3.4 DS18B20读周期读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。作为从机DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,

6、然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程至少需要60微秒才能完成。其读周期的时序图如图7所示。图7 DS18B20读周期时序图/* 函数名 : Ds18b20ReadByte* 函数功能 : 读取一个字节* 输入 : com* 输出 : 无*/unsigned char Ds18b20ReadByte()unsigned char byte,bi;unsigned int i,j;for(j=8;j0;j-)Dsport=0;/先将总线拉低1usi+;Dsport=1;/然后

7、释放总线i+;i+;/延时6us等待数据稳定bi=Dsport; /读取数据,从最低位开始读取byte=(byte1)|(bi7); /*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/ i=4;/读取完之后等待48us再接着读取下一个数while(i-);return byte;3.5 温度读取程序简单的读取温度值的步骤如下:跳过ROM操作-发送温度转换命令-跳过ROM操作-发送读取温度命令-读取温度值(1)温度转换指令:/* 函数名 : Ds18b20ChangTemp* 函数功能 : 让18b20开始转换温度* 输入 : com* 输出 : 无*/void Ds18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/跳过ROM操作命令 Ds18b20WriteByte(0x44); /温度转换命令Delay1ms(100);(2)温度读取指令/* 函数名 : Ds18b20ReadTempCom* 函数功能 : 发送读取温度命令* 输入 : com* 输出 : 无*/v

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

最新文档


当前位置:首页 > 建筑/环境 > 设计及方案

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