智能水杯软件设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1.前言 (1)

2.总体设计框架 (2)

2.1实现的功能 (2)

2.2总体程序流程图 (2)

3.水温采集模块程序设计 (4)

3.1 DS18B20简介 (4)

3.2 DS18B20的初始化 (5)

3.3 DS18B20写周期 (6)

3.4 DS18B20读周期 (7)

3.5 温度读取程序 (8)

4.显示模块程序设计 (9)

4.1 LCD1602初始化 (10)

4.2 LCD1602写周期 (10)

5. 定时模块程序设计 (12)

5.1定时器设置 (13)

5.2 定时器中断子程序 (13)

6.中断模块程序设计 (14)

6.1外部中断设置 (15)

6.2键盘扫描中断子程序 (15)

7.整体编程的实现 (16)

8.设计过程中的问题及解决方案 (17)

9.收获与感悟 (17)

1.前言

随着社会进步与经济发展,人们对生活质量的要求越来越高,每天的饮水量是衡量健康的重要指标。但有多少人因为忙碌的工作而全天忘记喝水?当你感到口渴想要喝水的时候,体内的失水已经达到2%,口渴本身其实是体内已经严重缺水的表现,这是造成“亚健康”状态的致命习惯之一。同时,越不注意喝水,喝水的欲望就会越低,人就会变得越来越缺水。研究表明,通常情况下,正常人每次喝水应控制在300ml,间隔时间为30到60分钟。

本课程设计就此设计出一款智能水杯,用来智能显示水温和提醒喝水,既方便了生活,又保持了健康。本报告针对智能水杯的软件系统进行阐述,软件编程在keil上操作。

2.总体设计框架

2.1实现的功能

硬件结构框架图如图1所示。

图1 硬件结构简图

(1)水温检测

使用DS18B20温度传感器,完成水温的时时检测功能。

(2)水温及定时时间显示

使用LCD1602液晶显示屏,完成水温及定时时间的显示功能。

(3)智能提醒

使用定时器0,开启定时器中断,蜂鸣器提醒。

(4)定时时间设置

使用外部中断0扩展电路,用三个按键触发中断,完成对应定时开启和定时时间加减的功能。

2.2总体程序流程图

总体程序流程图分为主程序和中断程序两部分,其中中断程序分为外部中断程序和定时器中断程序。流程图如下图所示。

图2 主程序流程图 图3 外部按键中断流程图

图4 定时器中断程序设计流程图

3.水温采集模块程序设计

3.1 DS18B20简介

DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点:

(1)采用单总线的接口方式,与微处理器连接时,仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。

(2)测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 ℃ ~+ 125 ℃ ;在 -10~+ 85°C 范围内,精度为± 0.5°C 。

(4)持多点组网功能多个DS18B20 可以并联在惟一的单线上,实现多点测温。

(5)供电方式灵活DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。

(6)测量参数可配置DS18B20 的测量分辨率可通过程序设定 9~12 位。

3.2 DS18B20的初始化

主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。作为从

图5 DS18B20初始化时序图

器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。初始化时序图如图5所示。

/**************************************************************** * 函数名 : Ds18b20Init

* 函数功能 : 初始化

* 输入 : 无

* 输出 : 初始化成功返回1,失败返回0

****************************************************************/ unsigned char Ds18b20Init()

{

unsigned int i;

Desport=0; //将总线拉低480us~960us

i=70;

while(i--);//延时642us

Dsport=1;//然后拉高总线,若DS18B20做出反应会将在15us~60us后将总线拉低

i=0;

while(Desport) //等待DS18B20拉低总线

{

i++;

if(i>50000)//等待>50MS

return 0;//初始化失败

}

return 1;//初始化成功

}

3.3 DS18B20写周期

写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则将总线置为低电平,若主机想写1,则将总线置为高电平,持续时间最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给总线恢复。而DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。写周期时序图如图6所示。

图6 DS18B20写周期时序图

/**************************************************************** * 函数名 : Ds18b20WriteByte

* 函数功能 : 向18B20写入一个字节

* 输入 : com

* 输出 : 无

****************************************************************/ void Ds18b20WriteByte(unsigned char dat)

{

unsigned int i,j;

for(j=0;j<8;j++)

{

Desport=0; //每写入一位数据之前先把总线拉低1us

i++;

Desport=dat&0x01; //然后写入一个数据,从最低位开始

相关文档
最新文档