智能水杯软件设计docxWord下载.docx

上传人:b****8 文档编号:22091345 上传时间:2023-02-02 格式:DOCX 页数:45 大小:25.22KB
下载 相关 举报
智能水杯软件设计docxWord下载.docx_第1页
第1页 / 共45页
智能水杯软件设计docxWord下载.docx_第2页
第2页 / 共45页
智能水杯软件设计docxWord下载.docx_第3页
第3页 / 共45页
智能水杯软件设计docxWord下载.docx_第4页
第4页 / 共45页
智能水杯软件设计docxWord下载.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

智能水杯软件设计docxWord下载.docx

《智能水杯软件设计docxWord下载.docx》由会员分享,可在线阅读,更多相关《智能水杯软件设计docxWord下载.docx(45页珍藏版)》请在冰豆网上搜索。

智能水杯软件设计docxWord下载.docx

16

5.

定时模块程序设计..................................................................................................................

18

5.1

定时器设置

...........................................................................................................................

19

5.2

定时器中断子程序.............................................................................................................

20

6.

中断模块程序设计....................................................................................................................

22

6.1外部中断设置.......................................................................................................................22

.

6.2键盘扫描中断子程序23

7.整体编程的实现25

8.设计过程中的问题及解决方案25

9.收获与感悟26

1.前言

随着社会进步与经济发展,人们对生活质量的要求越来越高,每天的饮水量

是衡量健康的重要指标。

但有多少人因为忙碌的工作而全天忘记喝水?

当你感到

口渴想要喝水的时候,体内的失水已经达到2%,口渴本身其实是体内已经严重

缺水的表现,这是造成“亚健康”状态的致命习惯之一。

同时,越不注意喝水,

喝水的欲望就会越低,人就会变得越来越缺水。

研究表明,通常情况下,正常人

每次喝水应控制在300ml,间隔时间为30到60分钟。

本课程设计就此设计出一款智能水杯,用来智能显示水温和提醒喝水,既方

便了生活,又保持了健康。

本报告针对智能水杯的软件系统进行阐述,软件编程

在keil上操作。

2.总体设计框架

2.1实现的功能

定时开启按键

设置

外部中断

定时器中断

蜂鸣器提醒

STC89C51

温度读入

温度提示灯

控制器

DS18B20

LCD温度显示

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

图1硬件结构简图

(1)水温检测

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

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

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

(3)智能提醒

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

(4)定时时间设置

使用外部中断0扩展电路,用三个按键触发中断,完成对应定时开启和定时

时间加减的功能。

2.2总体程序流程图

总体程序流程图分为主程序和中断程序两部分,其中中断程序分为外部中断

程序和定时器中断程序。

流程图如下图所示。

开始

初始化

DS18B20检测水温

LCD1602显示水温

N

水温>

40℃?

Y

高温提示灯红灯亮

水温<

20℃?

低温提示灯蓝灯亮

外部0中断?

执行按键扫描程序

按键1按下?

定时时间增加,LCD显示

按键2按下?

适宜水温黄灯亮

结束

图2主程序流程图

按键3按下?

Y

定时时间减少,LCD显示

TR0=0?

关闭计时器

开启计时器,LCD

显示定时器符号

图3外部按键中断流程图

定时器中断?

中断计数加1

定时时间到达?

一分钟时间到达?

蜂鸣器提醒,计数清零

LCD显示定时时间减1

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

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

3.1DS18B20简介

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

(1)采用单总线的接口方式,与微处理器连接时,仅需要一条口线即可实

现微处理器与DS18B20的双向通讯。

单总线具有经济性好,抗干扰能力强,适

合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网

络,为测量系统的构建引入全新概念。

(2)测量温度范围宽,测量精度高DS18B20的测量范围为-55℃~+

125℃;

在-10~+85°

C范围内,精度为±

0.5°

C。

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

点测温。

(5)供电方式灵活DS18B20可以通过内部寄生电路从数据线上获取电源。

因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统

结构更趋简单,可靠性更高。

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

3.2DS18B20的初始化

主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电

平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线

上有器件已做出应答。

若无低电平出现一直都是高电平说明总线上无器件应答。

作为从

图5DS18B20初始化时序图

器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的

低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低

60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。

若没有检测到

就一直在检测等待。

初始化时序图如图5所示。

/****************************************************************

*函数名:

Ds18b20Init

*函数功能:

初始化

*输入:

*输出:

初始化成功返回1,失败返回0

****************************************************************/

unsignedcharDs18b20Init()

{

unsignedinti;

Desport=0;

//将总线拉低480us~960us

i=70;

while(i--);

//延时642us

Dsport=1;

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

后将总线拉低

i=0;

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

i++;

if(i>

50000)//等待>

50MS

return0;

//初始化失败

}

return1;

//初始化成功

3.3DS18B20写周期

写周期最少为60微秒,最长不超过120微秒。

写周期一开始做为主机先把

总线拉低1微秒表示写周期开始。

随后若主机想写0,则将总线置为低电平,若

主机想写1,则将总线置为高电平,持续时间最少60微秒直至写周期结束,然

后释放总线为高电平至少1微秒给总线恢复。

而DS18B20则在检测到总线被

拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为

高电平则为1,若采样期内总线为低电平则为0。

写周期时序图如图6所示。

图6DS18B20写周期时序图

Ds18b20WriteByte

*函数功能:

向18B20写入一个字节

*输入:

com

voidDs18b20WriteByte(unsignedchardat)

unsignedinti,j;

for(j=0;

j<

8;

j++)

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

Desport=dat&

0x01;

//然后写入一个数据,从最低位开始

i=6;

//延时68us,持续时间最少60us

Desport=1;

//然后释放总线,至少1us给总线恢复时间才能接

着写入第二个数值

dat>

>

=1;

3.4DS18B20读周期

读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让

DS18B20把数据传输到单总线上。

作为从机DS18B20在检测到总线被拉

低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期

结束。

若要送出1则释放总线为高电平。

主机在一开始拉低总线1微秒后释放总

线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进

行采样检测,采样期内总线为低电平则确认为0。

采样期内总线为高电平则确认

为1。

完成一个读时序过程至少需要60微秒才能完成。

其读周期的时序图如图

7所示。

图7DS18B20读周期时序图

/*******************************************************************

Ds18b20ReadByte

读取一个字节

unsignedcharDs18b20ReadByte()

unsignedcharbyte,bi;

for(j=8;

j>

0;

j--)

Dsport=0;

//先将总线拉低1us

//然后释放总线

//延时6us等待数据稳定

bi=Dsport;

//读取数据,从最低位开始读取

byte=(byte>

1)|(bi<

<

7);

/*将byte左移一位,然后与上右移7位

后的bi,注意移动之后移掉那位补0。

*/

i=4;

//读取完之后等待48us再接着读取下一个数

returnbyte;

3.5温度读取程序

简单的读取温度值的步骤如下:

跳过ROM操作---发送温度转换命令---跳过ROM操作---发送读取温度命

令---读取温度值

(1)温度转换指令:

/************************************************************

Ds18b20ChangTemp

让18b20开始转换温度

************************************************************/

voidDs18b20ChangTemp()

Ds18b20Init();

Delay1ms

(1);

Ds18b20WriteByte(0xcc);

//跳过ROM操作命令

Ds18b20WriteByte(0x44);

//温度转换命令

Delay1ms(100);

(2)温度读取指令

Ds18b20ReadTempCom

发送读取温度命令

voidDs18b20ReadTempCom()

Ds18b20WriteByte(0xbe);

//发送读取温度命令

(3)读取温度:

/**********************************************************************

***

Ds18b20ReadTemp

读取温度

***********************************************************************

**/

intDs18b20ReadTemp()

unsignedinttemp=0;

unsignedchartmh,tml;

Ds18b20ChangTemp();

//先写入转换命令

Ds18b20ReadTempCom();

//然后等待转换完后发送读取温度命令

tml=Ds18b20ReadByte();

//读取温度值共16位,先读低字节

tmh=Ds18b20ReadByte();

//再读高字节

temp=tmh;

temp<

=8;

temp|=tml;

returntemp;

4.显示模块程序设计

表1LCD1602指令表

指令码

功能

D=1

开显示;

D=0

关显示

00001DCB

C=1

显示光标;

C=0

不显示光标

B=1

光标闪烁;

B=0

光标不显示

000001NS

N=1

当读或写一个字符后地址指针加一,且光

标加一

N=0

当读或写一个字符后地址指针减一,且光

标减一

S=1

当写一个字符时,整屏显示左移(

N=1)

或右移(N=0),以得到光标不移动而屏幕移动的效

S=0

当写一个字符,整屏显示不移动

01H

显示清屏:

所有显示清零

80H+地址码(0-27H,

设置数据地址

40H-67H

LcdInit()

初始化LCD屏

voidLcdInit()//LCD初始化子程序

LcdWriteCom(0x38);

//设置显示模式

LcdWriteCom(0x0c);

//开显示不显示光标,光标不闪烁

LcdWriteCom(0x06);

//写一个指针加1

LcdWriteCom(0x01);

//清屏

LcdWriteCom(0x80);

//设置数据指针起点

4.2LCD1602写周期

时序图如图8所示,RS=0为写命令,RS=1为写数据。

在写周期,R/W=0,

E为写数据或命令使能输入。

图8LCD1602写时序图

(1)写命令:

LcdWriteCom

向LCD写入一个字节的命令

voidLcdWriteCom(unsignedcharcom)//写入命令

RS=0;

RW=0;

GPIO_LCD=com;

Delay1ms(10);

E=1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1