ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:213.50KB ,
资源ID:2968442      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2968442.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简易数字温度计设计.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

简易数字温度计设计.docx

1、简易数字温度计设计摘要:本系统利用单片机AT89C52采用程序设计方法来测试温度,还可以通过两个按键设置温度报警上限,当测试温度超过设定的温度上限时,蜂鸣器器就会报警且绿灯关闭,红灯点亮;当温度低于上限时蜂鸣器关闭且红灯关闭,绿灯点亮。并通过液晶屏1602显示其测试温度以及设置的上限温度。 关键词:STC89C52、LCD1602、DS18B20简易数字温度计设计系统设计1.1设计任务设计一数字温度测量系统,能自动实现实际温度的测量与显示。1.2设计要求1.2.1基本功能(1)测温范围-30+120。(2)测量误差在0.5之内。(3)能正常显示测量的温度。1.2.2扩展功能(1)增加温控功能,

2、并可修改设置温控的上下限。(2)增加温控报警功能。2系统方案论证 本系统主要由主控模块、显示模块、按键模块、蜂鸣器模块、LED模块、传感器模块组成,下面分别论证这几个模块的选择。2.1主控模块的论证与选择 方案一:AT89C52单片机是一种高性能8位单片微型计算机。内核本身具有丰富的指令集,足够实现本次作品的全部基本功能和部分拓展功能,相比Atmega16我们对AT89C52更为熟悉,且芯片价格较低,性价比高。 方案二:采用ATmega16芯片作为主控芯片。由于对芯片的不熟悉,导致如果想要实现温度计全部基本功能和部分拓展功能,较为困难。综上所述,选择方案一。2.2显示模块的论证与选择 方案一:

3、采用LCD1602显示。LCD1602相对便宜,虽然其本身不能显示中文,但是温度计只需显示数字和一些英文,符合这次设计要求。 方案二:采用LCD12864显示。LCD12864屏幕显示细腻直观,且可以显示中文,但是相对昂贵。 综上所述,选择方案一。2.3按键模块的论证与选择 方案一:采用4X4矩阵按键。尽管按键一目了然,但连线复杂,扫描过程烦琐,会耗费大量的系统资源。 方案二:独立按键,我们只使用了两个按键来调节上限,大大节省了系统硬件资源,便于系统扩展。 综上所述,选择方案二。3系统理论分析与计算3.1 DS18B20的理论分析与计算DS18B20 通过编程,可以实现最高 12 位的温度存储

4、值,在寄存器中,以补码的格式存储,如图1所示。图1 DS18B20 温度数据格式寄存器一共 2 个字节,LSB 是低字节,MSB 是高字节,其中 MSb 是字节的高位,LSb 是字节的低位。大家可以看出来,二进制数字,每一位代表的温度的含义,都表示出来了。其中 S表示的是符号位,低 11 位都是 2 的幂,用来表示最终的温度。DS18B20 的温度测量范围是从-55 度到+125 度,而温度数据的表现形式,有正负温度,寄存器中每个数字如同卡尺的刻度一样分布,如图 2所示。图2 DS18B20 温度值二进制数字最低位变化 1,代表温度变化 0.0625 度的映射关系。当 0 度的时候,那就是0x

5、0000,当温度 125 度的时候,对应十六进制是 0x07D0,当温度是零下 55 度的时候,对应的数字是 0xFC90。反过来说,当数字是 0x0001 的时候,那温度就是 0.0625 度了。 4电路与程序设计4.1电路的设计4.1.1系统总体框图系统总体框图如图3所示图3 系统总体框图4.1.2控制按键&LED电路 按下S1能增加温度报警上限,按下S2能减少温度报警上限。测试温度低于上限时,绿灯LED1亮。当温度超过设定的上限时,红灯LED2亮。图4 控制按键&LED4.1.3蜂鸣器电路 当测试温度超过设定温度时,蜂鸣器开启;当测试温度低于设定温度时,蜂鸣器关闭。蜂鸣器电流相对较大,因

6、此需要用三极管驱动,并且加了一个 1K欧的电阻作为限流电阻。此外还加了一个 D1二极管,这个二极管叫做续流二极管。图5 蜂鸣器电路4.1.4显示电路显示电路使用LCD1602,第一行显示”Temperature”第二行显示测试温度和温度上限,两者中间显示一个”或”。RP1为上拉排阻。图6 显示电路4.1.5传感器电路图7 传感器电路4.1.6总体电路图8 整体电路4.1.7电源 使用5V直流电源。4.2程序的设计4.2.1程序功能描述(1)能够测试-30+120的温度。(2)按下S1能增加温度报警上限,按下S2能减少温度报警上限。(3)测试温度低于上限时,绿灯亮,蜂鸣器关闭。当温度超过设定的上

7、限时,红灯亮且蜂鸣器响起。4.2.2程序流程图图9 程序流程图5测试方案与测试数据5.1测试方案5.1.1软件仿真测试用Proteus 7.5软件画出电路图,模拟硬件对程序进行调试。5.1.2硬件软件联调将编写的单片机C语言程序下载到实际硬件中,进行硬件软件联调。5.2 测试条件与仪器测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。测试仪器:数字示波器,数字万用表。5.3 测试结果系统上电运行后,LCD能正常显示测试温度且绿灯点亮,测试温度每秒更新。按下S1能使报警温度上限 +1,按下S2能使报警温度上限-1。当测试温度超过上限温度时,绿灯关闭

8、,红灯点亮且蜂鸣器开启;当测试温度低于上限温度时,红灯关闭,绿灯点亮且蜂鸣器关闭。6 总结本系统以单片机STC89C52芯片为核心部件,利用LCD1602、独立按键、蜂鸣器、DS18B20并配合C语言算法实现了简易数字温度计设计,完成此次设计题目中的全部基本功能和部分拓展功能。在系统设计过程中,力求硬件线路简单,充分发挥软件编程方便灵活的特点,来满足系统设计要求。在本次设计的过程中,遇到了许多突发事件和困难,设计制作曾一度止步不前,但通过仔细分析和调整后解决了一个又一个的问题。在整个过程中我们深刻的体会到团队精神的重要性,并提高了自己解决问题的能力。附录 主要源程序main程序:#includ

9、e sbit KEY1 = P10; / 上调报警温度sbit KEY2 = P11; / 下调报警温度sbit LED1 = P12; / 正常时绿灯亮sbit LED2 = P13; / 报警时红灯亮sbit BUZZ = P16;bit enBuzz = 0; /蜂鸣器使能标志bit flag1s = 0; /1s定时标志unsigned int warnT = 30; /报警温度值unsigned char T0RH = 0; /T0重载值的高字节unsigned char T0RL = 0; /T0重载值的低字节void ConfigTimer0(unsigned int ms);

10、unsigned char IntToString(unsigned char *str, int dat);extern bit Start18B20();extern bit Get18B20Temp(int *temp);extern void InitLcd1602();extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);extern void LcdWriteCmd(unsigned char cmd);void main() bit res; bit backup = 1; int

11、 temp; /读取到的当前温度值 int intT, decT; /温度值的整数和小数部分 unsigned char len,len1; unsigned char str12,str112; EA = 1; /开总中断 P1 = 0XF3; ConfigTimer0(1); /T0定时1ms Start18B20(); /启动DS18B20 InitLcd1602(); /初始化液晶 while (1) if (flag1s) /每秒更新一次温度 flag1s = 0; res = Get18B20Temp(&temp); /读取当前温度 if (res) /读取成功时,刷新当前温度显示

12、 intT = temp 4; /分离出温度值整数部分 decT = temp & 0xF; /分离出温度值小数部分 len = IntToString(str, intT); /整数部分转换为字符串 len1 = IntToString(str1, warnT); /报警温度转换为字符串 strlen+ = .; /添加小数点 decT = (decT*10) / 16; /二进制的小数部分转换为1/位十进制位 strlen+ = decT + 0; /十进制小数位再转换为/ASCII字符 strlen+ = 0xdf; /添加字符串“” strlen+ = C; strlen+ = ; s

13、trlen = 0; /添加字符串结束符 str1len1+ = 0xdf; /添加字符串“” str1len1+ = C; str1len1 = 0; /添加字符串结束符 if (intT warnT) /超过报警温度时执行报警 enBuzz = 0; /关闭蜂鸣器 LcdWriteCmd(0x01); /清屏 LcdShowStr(2, 0, Temperature); /显示第一行 LcdShowStr(2, 1, str); /显示实时温度 LcdShowStr(9, 1, ); LcdShowStr(12, 1, str1); /显示报警温度 else /读取失败时,提示错误信息 LcdShowStr(4, 1, error!); Start18B20(); /重新启动下一次转换 /* 按键动作函数 */void KeyAction () if (KEY1 = 0) KEY1 = 1; warnT+; else if (KEY2 = 0) KEY2 = 1; warnT-; /*

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

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