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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于51单片机的温度检测系统.docx

1、基于51单片机的温度检测系统单片机C语言课题设计报告设计题目:温度检测指导老师: 设 计 人: 学 号: 班 级: 设计时间: 摘要本课题以51单片机为核心实现智能化温度测量。利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,利用单总线和单片机交换数据,最终单片机将信号转换成LCD可以识别的信息显示输出。基于STC90C516RD+的单片机的智能温度检测系统,设计采用18B20温度传感器,其分辨率可编程设计。本课题设计应用于温度变化缓慢的空间,综合考虑,以降低灵敏度来提高显示精度。设计使用12位分辨率,因其最高4位代表温度极性,故实际使用为11位半,而温度测量范围为

2、-55+125,则其分辨力为0.0625。设计使用LCD1602显示器,可显示16*2个英文字符,显示器显示实时温度和过温警告信息,传感器异常信息设。计使用蜂鸣器做警报发生器,当温度超过设定值时播放卡农,当传感器异常时播放嘟嘟音。 一、设计功能由单片机、温度传感器以及液晶显示器等构成高精度温度监测系统。温度显示精确到小数点后四位。按键设定过温值,过温在液晶屏提示并响铃卡农一次,直到温度正常。设计传感器状态检测函数,传感器工作不正常在液晶屏警告提示,响警告铃,直到故障排除。proteus做系统硬件电路设计并仿真。二、系统设计 三、器件选择3.1温度信号采集模块传统的温度检测大多以热敏电阻为传感器

3、,采用热敏电阻,可满足 40度 至 90测量范围,但热敏电阻可靠性差,测量温度准确率低,对于1的信号是不适用的,还得经过专门的接口电路转换成数字信号才能由微处理器进行处理。目前常用的微机与外设之间进行的数据通信的串行总线主要有总线, SPI 总线等。其中总线以同步串行 2 线方式进行通信(一条时钟线,一条数据线)。SPI 总线则以同步串行 3 线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。这些总线至少需要两条或两条以上的信号线。而单总线( 1-wire bus ),采用单根信号线,既可传输数据,而且数据传输是双向的, CPU 只需一根端口线就能与诸多单总线器件通信,占用微处理器

4、的端口较少,可节省大量的引线和逻辑电路。单总线具有广阔的应用前景,是值得关注的一个发展领域。单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。主机或从机通过一个漏极开路或三态端口连接到数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个约为 4.7K 的上拉电阻,这样,当总线闲置时其状态为高电平。3.1.1 DS18B20 数字式温度传感器DS18B20 数字式温度传感器使用集成芯片,采用单总线技术,其能够有效的减小外界的干扰,提高测量的精度,同时,它可以直接将被测温度转化成串行数字信号供微机处理,接口简单,使数据传输和处理简单化。部分功能电路

5、的集成,使总体硬件设计更简洁,能有效地降低成本,搭建电路和焊接电路时更快,调试也更方便简单化,大大缩短了开发的周期 。3.1.2 DS18B20特性采用单总线的接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。(1) 适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电。(2) 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(3)

6、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。(4) DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内。(5) 温范围55+125。(6) 可编程 的分辨率为912位,对应的分辨力分别为0.5、0.25、0.125和0.0625,可实现高精度测温。(7) 在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。(8) 测量结果直接输出数字温度信号,以 1-wire bus 串行传送给CPU,可选择同时传送CRC校验码,具有极强的抗干扰纠错

7、能力。(9) 负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。3.1.3 DS18B20结构DS18B20的内部结构3.1.4 DS18B20测温原理DS18B20测温原理框图图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入.计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累

8、加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。3.1.5 DS18B20的读写功能 DS18B20温度值格式表这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FE6FH,-55的数字输出为

9、FC90H 。DS18B20温度数据表DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器 TH、TL和结构寄存器。TMR1R011111配置寄存器结构低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms温度分辨

10、率设置表寄存器内容字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8DS18B20暂存寄存器分布根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后 释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。指

11、令约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合 ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。温度变换44H启动DS1820进行温度转换,12位转

12、换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3 、4字节的内容复制到EEPROM中。重调 EEPROM0B8H将EEPROM中内容恢复到RAM中的第3 、4字节。读供电方式0B4H读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。ROM指令表3.2 液晶显示器1602LCD 显示容量:162个字符,芯片工作电压:4.55.5V,工作电流:2

13、.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.954.35(WH)mm。3.2.1引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如图编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极3.2.2 1602LCD的指令说明及时序序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回00000000

14、1*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块内部的控制器共有11条控制指令,如图3.2.3 1602LCD的一般初始化过程 延时15mS 写指令38H(不检测忙信号) 延时5mS 写指令38H(不检测忙信号) 延时5mS 写指令38H(不检测忙信号) 以后

15、每次写指令、读/写数据操作均需要检测忙信号 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏 写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置四、软件设计4.1 1602LCD程序设计流程图4.2 DS18B20程序设计流程图 4.3 主程序设计流程图五、设计总结在这课题设计中我学到了很多东西,获益匪浅。本次课题以51单片机为核心实现了智能化温度测量,过温警告,传感器异常警报功能。利用温度传感器获取被控对象指标,通过温度传感器将需要测量的温度信号转化为数字电信号,通过单总线与MCU进行传输,再经单片机转换成显示器可以识别的信息,最后显示输出。在一开始,我

16、制订了合理的规划,绘制了与课题相关的硬件原理图,分析了单片机的各I/O端口。然后进行程序设计的分析,设计绘制流程图,并按照流程图,进行程序段的编写。接下来把所有的程序段组合在一起综合分析,最后烧录到单片机上进行硬件调试。 在这整个过程当中,我遇到了重重困难。(1)高位为零时消隐;(2)18B20上电温度误判;(3)LCD显示闪烁;(4)18B20修复温度误判;(5)LCD查表写坐标混合显示。通过一次次的反复分析和调试,查阅互联网资料最终成功解决。这其中的苦泪和欢笑只有自己知道。 通过程序的编写我收获了很多,并总结到大多数故障问题源于程序里括号及分号的错误。通过这次课题设计,我深深意识到学习单片

17、机不是只要学好怎样写程序就够了,还要对硬件有所了解,要把软件与硬件相结合才,期间还要经过多次的失败,需要相当的耐心和细致的思考来排除一切困难,一步一步地解决问题。 在此,我要特别施芸老师给提供给我这次自我锻炼,自我提升的机会。我定会把这次课题设计积累的经验落实到以后的学习中去。 姓名:钟乾鹏 学号:201112020247 班级:2011级通信技术1班六、参考文献【1】 马忠梅等编著.单片机的C语言应用程序设计(第4版).北京M:北京航天航空大学出版社,2007【2】 樊明龙等编著.单片机原理与应用.北京M:北化学工业出版社,2005【3】周志德. 单片机原理级应用. 北京M:高等教育出版社,

18、2001鸣谢七、硬件原理图及仿真7.1系统硬件原理图7.2开机滚动显示界面7.3临界温度设置界面7.4传感器异常警告界面八、程序清单#include #include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P37 ; /定义DS18B20端口DQ sbit K5=P23;sbit K6=P22;sbit K7=P21;bit presence ; /初始化标志位sbit lcdrs = P26 ; /加按键 sbit lcdrw = P25 ; /减按键sbit lcden = P27 ;

19、/确定uint T,Temp; /T包含两个单元,用来存储16位温度信息uchar code cdis1 = WELCOM TO USE! ;/正常测温显示界面uchar code cdis2 = TEMP: . C ;uchar code cdis3 = DS18B20 ERR0R ;uchar code cdis4 = PLEASE CHECK ;uchar code cdis5 = Zhong Qian Peng ; /开始滚动界面uchar code cdis6 = Communication 1 ;uchar code cdis7 = !Warning! ; /过温语句uchar c

20、ode cdis8 = -OVER TEMP- ;uchar code cdis9 = Please set temp! ; /设定温度uchar code cdis10 = Max Temp C ;/可设两位uchar bai,shi,ge,xiaoshu1,xiaoshu2,xiaoshu3,xiaoshu4,fuhao,th_temp,tl_temp;char set=30;/set存有设定的温度,设初值为30#define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ;/* * 两个延时函数 * */void Delay(unsi

21、gned int num) while( -num ) ;/void delay1(int ms) unsigned char y ; while(ms-) for(y = 0 ; y250 ; y+) _nop_() ; _nop_() ; _nop_() ; _nop_() ; void warning() /蜂鸣器发声 speaker=1;delay1(1);speaker=0;delay1(1); /* * 检查LCD忙状态 * * lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 * */ bit lcd_busy() bit result ; lcdr

22、s = 0 ; lcdrw = 1 ; lcden = 1 ; delayNOP() ; result = (bit)(P0&0x80) ; lcden = 0 ; return(result) ; /* * 写指令数据到LCD * * RS=L,RW=L,E=高脉冲,D0-D7=指令码。 * */void lcd_wcmd(uchar cmd) while(lcd_busy() ; lcdrs = 0 ; lcdrw = 0 ; lcden = 0 ; _nop_() ; _nop_() ; P0 = cmd ; delayNOP() ; lcden = 1 ; delayNOP() ; l

23、cden = 0 ; /* * 闪动子程序,闪动1次 * */ void flash() delay1(600); /控制停留时间 lcd_wcmd(0x08); /关闭显示 delay1(200); /延时 lcd_wcmd(0x0c); /开显示 delay1(200); /* * 写显示数据到LCD * * RS=H,RW=L,E=高脉冲,D0-D7=数据。 * */void lcd_wdat(uchar dat) while(lcd_busy() ; lcdrs = 1 ; lcdrw = 0 ; lcden = 0 ; P0 = dat ; delayNOP() ; lcden =

24、1 ; delayNOP() ; lcden = 0 ; /*/* LCD初始化设定 */*/void lcd_init() delay1(15) ; lcd_wcmd(0x01) ; /清除LCD的显示内容 lcd_wcmd(0x38) ; /16*2显示,5*7点阵,8位数据 delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x0c) ; /显示开,关光标 delay1(5) ; lcd_wcmd(0x06) ; /移动光标 delay1(5) ; lcd_wcmd(0x01) ;

25、 /清除LCD的显示内容 delay1(5) ;/* * 设定显示位置 * */void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80) ; /数据指针=80+地址变量/* * 初始化ds1820 */*/Init_DS18B20() DQ = 1 ; /DQ复位 Delay(8) ; /稍做延时 DQ = 0 ; /单片机将DQ拉低 Delay(90) ; /精确延时 大于 480us DQ = 1 ; /拉高总线 Delay(8) ; presence = DQ ; /如果=0则初始化成功 =1则初始化失败 Delay(100) ; DQ = 1 ; return(presence) ; /返回信号,0=presence,1= no presence/*/* 向DS18B20读和写一个字节 */*

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2