基于51单片机的温度检测系统程序及仿真

合集下载

基于51单片机的温度控制系统

基于51单片机的温度控制系统

基于51单片机的温度控制系统0引言在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。

例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。

采用MCS-51单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。

因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。

本文以它为例进行介绍,希望能收到举一反三和触类旁通的效果。

1硬件电路设计以热电偶为检测元件的单片机温度控制系统电路原理图如图1所示。

1.1 温度检测和变送器温度检测元件和变送器的类型选择与被控温度的范围和精度等级有关。

镍铬/镍铝热电偶适用于0℃-1000℃的温度检测范围,相应输出电压为0mV-41.32mV。

变送器由毫伏变送器和电流/电压变送器组成:毫伏变送器用于把热电偶输出的0mV-41.32mV变换成4mA-20mA的电流;电流/电压变送器用于把毫伏变送器输出的4mA-20mA电流变换成0-5V的电压。

为了提高测量精度,变送器可以进行零点迁移。

例如:若温度测量范围为500℃-1000℃,则热电偶输出为20.6mV-41.32mV,毫伏变送器零点迁移后输出4mA-20mA范围电流。

这样,采用8位A/D转换器就可使量化温度达到1.96℃以内。

1.2接口电路接口电路采用MCS-51系列单片机8031,外围扩展并行接口8155,程序存储器EPROM2764,模数转换器ADC0809等芯片。

由图1可见,在P2.0=0和P2.1=0时,8155选中它内部的RAM工作;在P2.0=1和P2.1=0时,8155选中它内部的三个I/O端口工作。

相应的地址分配为:0000H - 00FFH 8155内部RAM0100H 命令/状态口0101H A 口0102H B 口0103H C 口0104H 定时器低8位口0105H 定时器高8位口8155用作键盘/LED显示器接口电路。

单片机的数字温度计设计方案(附代码与仿真)

单片机的数字温度计设计方案(附代码与仿真)

基于STC89C52的数字温度计目录1、简介....... .......... ..... 3 _ _2、计划选择2.1。

主控片选 (3)2.2.显示模块.............................. (3)2.3、温度检测模块………………………………… .. 43、系统硬件设计3.1。

51单片机最小系统设计………………………… .4 .电源电路设计…………………… .. 5.液晶显示电路设计……………………………… ..63.4.温度检测电路设计………… . . . 74.系统软件设计4.1。

温度传感器数据读取流程图......... .. (9)4.2.系统编程………………… .105. 编程与仿真5.1、Keil编程软件………………… .. .. 115.2.变形杆菌 (11)5.3.模拟界面……………………… ..116.总结........ .......... ........ 12 _ _ _ _ _七、附录附录 1. 原理图........ .......... (12)附录 2. 程序清单…………………………………………………………………… ..131 简介进入信息飞速发展的21世纪,科学技术的发展日新月异。

科学技术的进步带动了测量技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。

我们已经进入高速发展的信息时代,测量技术也成为当今技术的主流,已经渗透到研究和应用工程的各个领域。

温度与人们的生活息息相关,温度的测量变得非常重要。

2.系统方案选择2.1 主控芯片选型方案一:STC89C52RCSTC89C52RC是8051内核的ISP在线可编程芯片,最高工作时钟频率为80MHz,芯片内含8KB Flash ROM,可反复擦写1000次。

该器件兼容MCS-51指令系统和8051引脚结构。

该芯片集成了通用8位中央处理器和ISP Flash存储单元,具有在线可编程特性,在PC端有控制程序,用户程序代码可下载到单片机部门,无需购买通用编程器,速度更快。

基于51单片机的温度监测系统(DS18B20)

基于51单片机的温度监测系统(DS18B20)
为产生写0时隙,在拉低总线后主机必须继续拉低总线以满足时隙持续时间 的要求(至少60μs)。在主机产生写时隙后,DS18B20会在其后的15到60us的一 个时间窗口内采样单总线。在采样的时间窗口内,如果总线为低电平,主机会 向DS18B20写入0。
DS18B20读时序
所有的读时隙都由拉低总线,持续至少1us后再释放总线(由于上拉电阻的作用,总线恢复为 高
配置寄存器
8 位 CRC 生成器
DS18B20的时序
DS18B20复位时序
DS18B20的所有通信都由由复位脉冲组成的初始化序列开始。该初始化序列由主 机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。在初始化步骤中,总线 上的主机通过拉低单总线至少480μs来产生复位脉冲。然后总线主机释放总线并进入接收 模式。当总线释放后,5kΩ的上拉电阻把单总线上的电平拉回高电平。当DS18B20检测 到上升沿后等待15到60us,发出存在脉冲,拉低总线60-240us至此,初始化和存在时序 完毕。时序图如下:
1.主控制器电路和测温
电路的设计
主控制器电路由AT89S52 及外围时钟和复位电路构成, 测温电路由DS18B20、报警 电路组成。AT89C52是此硬 件电路设计的核心,通过 AT89S52的管脚P2.7与 DS18B20相连,控制温度的 读出和显示。硬件电路的功 能都是与软件编程相结合而 实现的。具体电路原理图如 右图2所示。
送1,以拉低总线的方式表示发送0.当发送0的时候,DS18B20在读时隙的末期将会释放总线,总线
将会被上拉电阻拉回高电平(也是总线空闲的状态)。DS18B20输出的数据在下降沿(下降沿产 生读时隙)产生后15us后有效。因此,主机释放总线和采样总线等动作要在15μs内完成。

基于51单片机的粮仓温湿度检测系统毕业设计

基于51单片机的粮仓温湿度检测系统毕业设计

基于51单片机的粮仓温湿度检测系统[摘要]粮仓温度湿度监测控制系统是基于STC12C52A60S2的数据采集、对比、控制的系统。

以STC12C52A60S2单片机为控制器,对温度传感器DS18B20传送的数字量信号和对湿度传感器HR202传送的模拟量信号进行采集和处理,当前值和设定温度上限值进行对比,进而执行控制作用,通过对继电器的控制进而控制设备的启停,对粮仓温度湿度进行调节,使其维持在适当范围,维护粮仓正常运行。

[关键词] 单片机、温湿度、检测、控制Abstract:The granary’s temperature and humidity control and detect system is based on the micro control unit of STC12C5A60S2,the system is used for date acquisition,comparison,and control.In this system,STC12C5A60S2 is the controller,the controller is designed to deal with temperature and humidity signal from the temperature sensor and humidity sensor.Then compare these data with limits the value of temperature and humidity.If the date is out of limits,then the controller send a control signal to warn people,besides,the controller will make the fan running to make the temperature and humidity lower.In this way,the granary can be working at usual status.Key words: MCU、temperature and humidity、control目录第一章绪论 (1)1.2相关领域国内外应用的现状及发展趋势 (1)1.3 粮仓温湿度检测控制系统原理 (2)1.4 本章小结 (2)第二章:系统分析、设计要求及模块选择 (3)2.1 设计要求 (3)2.2 单片机型号的选择 (3)2.21 采用STC89C52单片机 (3)2.22 采用STC12C5A60S2单片机 (3)2.3 显示系统模块的选择 (3)2.31采用LED数码管显示 (3)2.32采用1602液晶显示 (3)2.4 测温模块的选择 (4)2.41 采用模拟量温度传感器 (4)2.42 采用数字量温度传感器 (4)2.5 测湿模块的选择 (4)2.6 控制模块的选择 (4)2.7 通讯模块的选择 (4)2.8本章小结 (4)第三章系统总体方案及硬件电路模块设计 (5)3.1 系统总体设计思路: (5)3.2 系统硬件设计 (5)3.2.1 单片机最小系统 (5)3.2.2 温度信号采样电路模块 (9)3.2.3 湿度采样电路模块 (12)3.3 串口模块 (14)3.4显示模块 (15)3.5 控制模块 (16)3.6 继电器模块 (17)3.7 本章小结 (18)第四章系统的软件设计 (19)4.1 流程图设计 (19)4.1.1系统总体流程图 (19)4.1.2温度检测流程图 (19)4.1.3湿度检测流程 (20)4.2系统的程序设计 (20)4.2.1 DS18B20测温程序 (20)4.2.2 A/D转换程序 (25)4.2.3 1602显示程序 (26)4.3 本章小结 (29)第五章硬件调试部分 (30)结束语 (31)参考文献 (32)第一章绪论1.1 本课题的研究意义及必要性民以食为天,粮食是社会安定的保证,自1990年我国建立粮食储备制度以来,储备粮在国家宏观调控中占据了重要地位,无论何时,必须时刻保持储备粮的调控作用不动摇,是维持社会安定、粮食市场稳定、农民增收的重要保证。

基于51单片机的大棚温湿度检测系统的设计与实现

基于51单片机的大棚温湿度检测系统的设计与实现

基于51单片机的大棚温湿度监测系统的设计与实现摘要:随着经济的快速发展,我国的农业产业结构发生了很大的变化,其中较为突出的是温室大棚种植业。

鉴于大棚种植业在不同的季节都有较大的产量,所以越来越多的农民采用温室大棚种植蔬菜。

温度、湿度和光照度的控制是温室大棚得到高产量的关键要素。

若要测量温湿度和光照度,对于大量的大棚而言,仅靠温度测量计来实现,需要更多的人力和物力。

随着农业的产业范围不断发展与扩大,采用这种传统测量大棚温湿度的方法,具有很大的局限性和不足之处.如今,自动监测棚内温湿度的装置被越来越多的用户采用。

本文设计了基于STC89C52RC单片机的温室大棚温湿度监测系统,主要包括电路设计和软件设计等.该系统以单片机为核心通过数字温湿度传感器DTH11和光照传感器BH1750对大棚的温湿度和光照度进行数据采集。

传感器将采集的数据传输给单片机,单片机根据收到的数据做出相应的分析和处理,其结果显示在LCD1602液晶显示屏上。

如果超出预先设定的温湿度和光照度限制范围,单片机控制开启指示灯,同时控制对应的继电器驱动打开设备工作,使大棚温湿度值达到适宜的范围值。

关键字:STC89C52RC单片机;数字温湿度传感器DTH11;光照传感器BH1750 FVI;LCD1602液晶显示屏Design and implementation of the greenhouse temperature and humidity detection system based on 51 single chip microcomputer Abstract:With the development of economy, great changes have taken place in the agricultural industry in our country,one of the more prominent changes is the greenhouse planting. In different seasons,the greenhouse planting has a great production, more and more farmers use greenhouses to grow vegetables。

基于51单片机的温度检测系统_单片机C语言课题设计报告

基于51单片机的温度检测系统_单片机C语言课题设计报告

单片机C语言课题设计报告设计题目:温度检测电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来1摘要本课题以51单片机为核心实现智能化温度测量。

利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,利用单总线和单片机交换数据,最终单片机将信号转换成LCD 可以识别的信息显示输出。

基于STC90C516RD+STC90C516RD+的单片机的智能温度检测系统,的单片机的智能温度检测系统,设计采用18B20温度传感器,其分辨率可编程设计。

本课题设计应用于温度变化缓慢的空间,综合考虑,以降低灵敏度来提高显示精度。

设计使用12位分辨率,因其最高4位代表温度极性,故实际使用为11位半,位半,而温度测量范围为而温度测量范围为而温度测量范围为-55-55-55℃~℃~℃~+125+125+125℃,℃,则其分辨力为0.06250.0625℃。

℃。

设计使用LCD1602显示器,可显示16*2个英文字符,显示器显示实时温度和过温警告信息,和过温警告信息,传感器异常信息设。

传感器异常信息设。

传感器异常信息设。

计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,当温度超过当温度超过设定值时播放《卡农》,当传感器异常时播放嘟嘟音。

单片机C 语言课题设计报告语言课题设计报告电动世界,气定乾坤2目录一、设计功能一、设计功能................................. ................................. 3 二、系统设计二、系统设计................................. .................................3 三、器件选择三、器件选择................................. .................................3 3.1温度信号采集模块 (3)3.1.1 DS18B20 3.1.1 DS18B20 数字式温度传感器数字式温度传感器..................... 4 3.1.2 DS18B20特性 .................................. 4 3.1.3 DS18B20结构 .................................. 5 3.1.4 DS18B20测温原理 .............................. 6 3.1.5 DS18B20的读写功能 ............................ 6 3.2 3.2 液晶显示器液晶显示器1602LCD................................. 9 3.2.1引脚功能说明 ................................. 10 3.2.2 1602LCD 的指令说明及时序 ..................... 10 3.2.3 1602LCD 的一般初始化过程 (10)四、软件设计四、软件设计................................ ................................11 4.1 1602LCD 程序设计流程图 ........................... 11 4.2 DS18B20程序设计流程图 ............................ 12 4.3 4.3 主程序设计流程图主程序设计流程图................................. 13 五、设计总结五、设计总结................................. ................................. 2 六、参考文献六、参考文献................................. ................................. 2 七、硬件原理图及仿真七、硬件原理图及仿真......................... .........................3 7.1系统硬件原理图 ..................................... 3 7.2开机滚动显示界面 ................................... 4 7.3临界温度设置界面 ................................... 4 7.4传感器异常警告界面 (4)电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来3温度温度DS18B20 LCD 显示显示过温函数功能模块能模块传感器异常函数功能模块数功能模块D0D1D2D3D4D5D6D7XT XTAL2AL218XT XTAL1AL119ALE 30EA31PSEN29RST 9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115U180C51X1CRYST CRYSTAL ALC122pFC222pFGNDR110kC31uFVCCGND234567891RP1RESPACK-8VCC0.0DQ 2VCC 3GND 1U2DS18B20R24.7K LCD1LM016LLS2SOUNDERMUC八、程序清单八、程序清单................................. .................................5 一、设计功能·由单片机、温度传感器以及液晶显示器等构成高精度温度监测系统。

基于51单片机的温度报警控制系统报告

基于51单片机的温度报警控制系统报告

报告评分批改老师《现代电子综合实验》课程设计报告基于单片机的温度检测控制系统设计学生姓名 学 号专 业 班 级同组学生 提交日期 年 月 日指导教师目录2一、实验目的 .....................................................................................2二、实验要求 .....................................................................................2三、实验开发环境及工具 ...........................................................................2四、按键扫描和液晶显示功能实现 ...................................................................24.1矩阵键盘电路 ...............................................................................4.1.1矩阵键盘电路简介 .....................................................................224.1.2矩阵式按键扫描原理 ...................................................................24.1.3 按键扫描子程序设计思想及流程图 ......................................................34.2 LCD1602显示电路 ..........................................................................34.2.1 LCD1602模块简介 ....................................................................34.2.2 LCD1602模块引脚说明 .................................................................4.2.3 LCD1602控制方式及指令 ..............................................................344.2.4 LCD1602液晶显示子程序设计思想及流程图 ..............................................5五、基于单片机的温度检测控制系统设计过程 .........................................................55.1 系统整体电路框图及功能说明 ................................................................55.2 DS18B20数字温度传感器电路 ..............................................................55.2.1 单总线通信方式简介 ..................................................................65.2.2 DS18B20简介 ......................................................................5.2.3 DS18B20读写操作 ..................................................................665.3 声光报警及控制电路 ........................................................................75.4 软件设计 ..................................................................................5.4.1 主程序设计流程图 ....................................................................775.4.2 DS18B20子程序设计思想及流程图 ...................................................85.4.3 声光报警子程序设计思想及流程图 .....................................................9七、 实验过程及实验结果 ...........................................................................9八、实验中遇到的问题及解决方法 ...................................................................10附件 ............................................................................................一、实验目的(1). 掌握单片机应用系统的设计方法与步骤;(2).掌握硬件电路各功能模块的工作原理、应用电路与编程方法;(3).熟练掌握单总线的应用及编程;(4). 掌握基于单片机的温度检测控制系统的设计与实现。

基于单片机的数字温度计设计(含程序、仿真图)大学毕设论文

基于单片机的数字温度计设计(含程序、仿真图)大学毕设论文

基于单片机的数字温度计设计1引言随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。

传统的温度检测以热敏电阻为温度敏感元件。

热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。

与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。

选用AT89C51型单片机作为主控制器件,DSl8B20作为测温传感器通过4位共阳极LED数码管串口传送数据,实现温度显示。

通过DSl8B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.1℃。

该器件可直接向单片机传输数字信号,便于单片机处理及控制。

另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

2 系统硬件设计方案根据系统功能要求,构造图1所示的系统原理结构框图。

图1 系统原理结构框图2.1单片机的选择AT89C51作为温度测试系统设计的核心器件。

该器件是INTEL公司生产的MCS一5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS—51的CMOS产品。

不仅结合了HMOS的高速和高密度技术及CHMOS 的低功耗特征,而且继承和扩展了MCS —48单片机的体系结构和指令系统。

单片机小系统的电路图如图2所示。

图2 单片机小系统电路AT89C51单片机的主要特性:(1)与MCS-51 兼容,4K 字节可编程闪烁存储器;(2)灵活的在线系统编程,掉电标识和快速编程特性;(3)寿命为1000次写/擦周期,数据保留时间可10年以上;(4)全静态工作模式:0Hz-33Hz ;(5)三级程序存储器锁定;(6)128*8位内部RAM ,32可编程I/O 线;(7)两个16位定时器/计数器,6个中断源;(8)全双工串行UART 通道,低功耗的闲置和掉电模式;(9)看门狗(WDT )及双数据指针;(9)片内振荡器和时钟电路;2.2 温度传感器介绍DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C 。

基于51的温度8路温度检测智能多路温度检测系统(可编辑)

基于51的温度8路温度检测智能多路温度检测系统(可编辑)

智能多路温度检测系统中国科学院感光化学研究所陶培德摘要本文详细地介绍了八路温度巡回检测/定点检测系统的硬件配置、误差分析和软件设计方法。

该系统特点有三:①采用铂热电阻测温,布线为三线制,不加补偿电阻,从电路模型中消除了连接导线电阻引进的测量误差。

②八路测温用用一套温度?电压变换电路,测温点间的切换采用廉价的CD4051八选一模拟开关,其开关的导通电阻及导通电阻路差均布引进测量误差。

③铂热电阻温度/电压变换电路的非线性由硬件电路校正,校正后的非线性误差在0~199.9℃范围内小于0.0045%。

整个系统采用89S51单片机控制键盘操作,实现检测温度的实时显示、打印、越线报警功能。

引言温度的精密测量是工业生产领域中的一个经典课题。

在温度检测系统中,测量变换电路起着至关重要的作用,而温度传感器又是该电路中的一个关键元件。

众所周知,在设计测量变换电路时,我们是从分析传感器性能(电阻型、电流型、电压型等)入手,通过适当的补偿、非线性校正及信号放大环节,最后综合处一个满足期望指标的测量变换电路来。

目前,使用比较广泛的温度传感器有四类:热电阻(如铂热电阻)、热电偶、热敏电阻及集成电路温度传感器(如AD590)。

本文介绍的检测系统,采用铂热电阻(以下简称铂电阻)元件测温。

铂电阻温度传感器具有精度高、性能稳定、互换性好(有分度表)、耐腐蚀及使用方便等一系列有点,移植是工业测控系统中广泛使用的一种比较理想的测温元件。

在温度大于0℃的条件下,铂电阻的电阻值R(t)与被测温度t之间呈如下关系:R(t)R(0)?(1+At+Bt2) (1)式中(对BA2分度号而言)R(0)100Ω(0℃时的电阻值)A3.96847×10-3/℃(一次温度系统数)B?5.847×10-7/℃2(二次温度系统数)由式(1)可见,铂电阻的不足之处是:温度比较率小(α≈0.391Ω/℃),存在Bt2二次飞线性项。

大家知道,铂电阻作为温度传感器使用时,必须把它放在测温现场。

基于51单片机的温度检测系统程序及仿真概要

基于51单片机的温度检测系统程序及仿真概要

基于51单片机的温度检测系统程序及仿真概要
1. 系统概述
本系统采用51单片机作为控制核心,通过外接温度传感器进行温度检测,并在数码管上显示当前温度值。

同时,当温度超过设定阈值时,通过蜂鸣器进行警示。

2. 系统硬件设计
本系统采用DS18B20温度传感器作为温度检测模块,通过单总线连接到51单片机的
P2.0口,同时将P2.1口连接到蜂鸣器。

数码管采用共阳极数码管,通过P0口进行控制。

系统程序采用C语言编写,在主函数中进行如下操作:
(1) 初始化DS18B20,设置温度传感器工作模式。

(2) 读取温度传感器输出的温度值,进行温度判断。

(3) 将温度值转换为数码管显示的格式并显示在数码管上。

(4) 如果温度超过设定阈值,触发蜂鸣器进行警示。

(5) 循环执行以上操作。

4. 系统仿真
5. 总结
本系统基于51单片机实现了温度检测功能,并且能够进行数码管显示以及蜂鸣器警示,具有一定的实用价值。

本系统的设计和仿真过程对于初学者来说都是一个非常好的练手项目,也有助于掌握单片机的基本编程技能和原理知识。

基于51单片机温度控制系统设计毕业答辩ppt课件

基于51单片机温度控制系统设计毕业答辩ppt课件
系统的硬件设计
系统的结构框图:
AD590 温度采集
ADC0809 A/D转换
控制电路
AT89C51
光电耦合 器可控硅SC源自 电热丝显示电路温度控制系统设计
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
系统的硬件设计
系统工作原理:
在温控部分,选用AT89C51单片机为中央处 理器,通过AD590温度传感器进行温度采集, 将采集到的温度信号通过A/D转换再传输给单 片机,再由单片机控制显示器和执行单元。
执行单元是由单片机发出一个触发信号,
通过光电耦合器和双向可控硅来控制电热 丝的加热与停止。
温度控制系统设计
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
A/D转换器 (ADC0809)
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
系统控制方案的选择: 这个方案是采用AT89C51单片机系统来实现的,
单片机软件编程灵活、自由度大,可用软件编程实现 各种控制算法和逻辑控制。单片机系统可以用数码管 来显示水温的实际值,能用键盘输入设定值。本方案 选用的AT89C51芯片,不需要外扩展存储器,使系统 整体结构更为简单
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用

基于单片机的水温控制系统仿真设计

基于单片机的水温控制系统仿真设计
2 . 1 单片机
度传 感器 D S I 8 B 2 0作为温度 检测 元件 。
A T 8 9 C 5 1 是 5 1 系列单片机 中的一种, 其 内部 带有 4 K字节 闪 控制系统 , 能够完 成对水温 的控 制, 当水温低于预 设温度值 时系 烁可编程 可擦 除只读存储器 , 低 电压、 高性能 。 单片机 A T 8 9 C 5 1 具 统开始加热 ( 点亮红色发光二极管表示加 热状态 ) 达到 预设温 有低 电压供 电和小体积等特点 , 其并行 口资源 刚好满足 电路系统
范围为 0~ 9 9  ̄ C。 单 片机 作为微控 制器 , 己广 泛用于工 业控制 、 机 电一体化 设 温度值分 别由两个 4位数码管显示 , 按照系统设计 功能的要 求, 确定该系统 由 3 部分 组成 : 主控
测温 电路及显示 电路。 水温控 制系统总体 电路 结构框 图如 备及 家用 电器等各个领域 。 该设计就是 以单 片机 为核 心设计的一 制器 、
o f c i r c u i t a n d d r i v e r f o r t h e c o r r e s p o n d i n g a p p l i c a t i o n s y s t e m h a s a c e r t a i n r e f e r e n c e .

a n d h a r d w a r e j oi n t i n t h e P r o t e u s s i m u l a t i o n d e b u g g i n g , f i n a l l y t h e s i m ul a t i o n r e s u l t s a r e g i v e n . T h e d e s i g n

基于51单片机的DS18B20温度检测_设计报告

基于51单片机的DS18B20温度检测_设计报告

课程名称:微机原理课程设计题目:温度检测课程设计随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的温度检测仪。

本设计使用简便,功能丰富。

可以实现温度采集,温度报警,重设上下限温度值等功能。

在现代化的工业生产中,需要对周围环境的温度进行检测和控制。

本设计对温控报警问题展开思考,设计一个能根据需求设置低温到高温进行报警并通过数码管显示的系统。

该系统使用STC89C51单片机,同时运用单线数字温度传感器DS18B20,四位共阴数码管显示,按键控制等模块可实现温度的检测与设置。

课题经过实验验证达到设计要求,具有一定的使用价值和推广价值。

本作品使用四位共阴数码管显示,可以清晰地显示当前的报警温度,一定程度避免使用者使用时出错,安全可靠,可使用于各种食品储存室,植物养殖所等地方,实用性很高。

关键字:温度报警器 STC89C51单片机数码管 DS18B20一、课程设计目的和要求 (1)1.1 设计目的 (1)1.2 设计要求 (1)二、总体设计方案 (1)三、硬件设计 (2)3.1 DS18B20传感器 (2)3.2 STC89C51功能介绍 (6)3.3 时钟电路 (8)3.4 复位电路 (8)3.5 LED显示系统电路 (9)3.6 按键控制电路 (11)3.7 蜂鸣器电路 (11)3.8 总体电路设计 (12)四、软件设计 (14)4.1 keil软件 (14)4.2 系统主程序设计 (14)4.3 系统子程序设计 (15)五、仿真与实现 (18)5.1 PROTEUS仿真软件 (18)5.2 STC-ISP程序烧录软件 (19)5.3 使用说明 (20)六、总结 (21)一、课程设计目的和要求1.1 设计目的熟悉典型51单片机,加深对51单片机课程的全面认识和掌握,对51单片机及其接口的应用作进一步的了解,掌握基于51单片机的系统设计的一般流程、方法和技巧,为我们解决工程实际问题打下坚实的基础。

基于51单片机的温湿度检测系统设计与实现

基于51单片机的温湿度检测系统设计与实现

3、无线通信模块
本系统的无线通信模块采用nRF24L01无线通信芯片。nRF24L01是一款具有 2.4GHz全球开放频率的无线通信芯片,具有低功耗、高速率、高稳定性等特点。 它将主控制器处理后的数据通过无线方式发送给接收器。
4、电源模块
本系统的电源模块采用9V电池供电。我们将9V电池通过稳压器转换为5V电源, 为整个系统提供稳定的电力支持。
三、测试与结果分析
为了验证本系统的可靠性和准确性,我们进行了一系列的测试。测试结果表 明,本系统能够准确快速地采集环境中的温湿度数据,并且能够稳定地将数据上 传至计算机或其他数据采集设备。同时,本系统的按键电路和液晶显示电路也表 现良好,用户可以通过按键调整系统的参数设置,并直观地查看温湿度数据。
2、液晶显示屏
为了方便用户直观地查看温湿度数据,本系统选用了一块16×2字符型液晶 显示屏。液晶屏的驱动电路简单易懂,且具有较低的功耗。
3、按键电路
为了便于用户对温湿度检测系统的参数进行设置,本系统加入了一个按键电 路。用户可以通过按键对系统的采样间隔、数据上传频率等参数进行设置。
4、串口通信电路
图1主程序流程图
2.温湿度采集模块
温湿度采集模块主要负责通过DHT11传感器采集环境中的温湿度数据。该模 块首先对DHT11传感器进行初始化,然后通过单总线接口接收传感器输出的温湿 度数据,最后对数据进行处理并存储。
3、液晶显示模块
液晶显示模块主要负责将温湿度数据显示在液晶屏上。该模块首先对液晶屏 进行初始化,然后根据主程序传递过来的温湿度数据,控制液晶屏的字符输出。
三、软件设计
本系统的软件设计主要分为以下几个步骤:
1、系统初始化:在系统上电后,首先进行各模块的初始化操作,包括DHT11 传感器、AT89C51单片机、nRF24L01无线通信芯片等。

毕业论文-基于51单片机的温湿度检测控制系统

毕业论文-基于51单片机的温湿度检测控制系统

毕业论文-基于51单片机的温湿度检测控制系统摘要本次设计是采用MSC-51系列单片机中的AT89S51和DHT11构成的低成本的温湿度的检测控制系统。

单片机AT89S51是一款低消耗、高性能的CMOS8位单片机,由于它强大的功能和低价位,因此在很多领域都是用它。

DHT11温湿度传感器是一款含有已校准数字输出的温湿度复合传感器,传感器包括一个电阻式感湿原件和一个NTC测温元件,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

设计主要包括硬件电路的设计和系统软件的设计。

硬件电路主要包括单片机、温湿度传感器、显示模块、报警器以及控制设备等5部分。

其中由DHT11温湿度传感器及1602字符型液晶模块构成系统显示模块;测温湿度控制电路由温湿度传感器和预设温度值比较报警电路组成;用户根据需要预先输入预设值,当实际测量的温湿度不符合预设的温湿度标准时,发出报警信号(蜂鸣器蜂鸣),启动相应控制。

软件部分包括了主程序、显示子程序、测温湿度子程序。

关键词:AT89S51;DHT11;温湿度传感器AbstractMicrocontroller AT89S51 is a low consumption, high performance CMOS8 bit microcontroller.Because of its powerful features and low price, so it is used in many areas.DHT11 temperature and humidity sensor is a temperature and humidity combined sensor contains a calibrated digital output, the sensor consists of a resistor in the original sense of wet and a NTC temperature measurement devices.The product has many advantage,such as excellent quality, fast response, strong anti-jamming capability . This design is fromed by the AT89S51 in MSC-51 Series and DHT11 constitute which is a low-cost temperature and humidity measurement and control system. The design includes the design of hardware circuit design and system software.The hardware has Five modules.They are a microcontroller, temperature and humidity sensors, display module, alarm and control equipment. The 1602-character LCD module constitute the system display module.The temperature and humidity control circuit by the temperature and humidity sensors and preset temperature alarm circuit.According to the need of pre-enter the default value, when the actual measurement of the temperature humidity does not conform the preset temperature and humidity standards, send the alarm signal (buzzer will beep), and start the corresponding control.The software part includes the main program, the display routines, temperature and humidity subroutine.Key words:Temperature and humidity measurement;Temperature and humidity control;AT89S51 ;DHT11前言1.1本文研究的背景及意义粮库已经被广泛的运用,是存储粮食的一个重要方式。

基于51单片机的心率体温检测系统设计

基于51单片机的心率体温检测系统设计

目录摘要 (I)Abstract (II)引言 (1)1 控制系统设计 (2)1.1 主控系统方案设计 (2)1.2 脉搏传感器方案设计 (3)1.3 系统工作原理 (5)2 硬件设计 (6)2.1 主电路 (6)2.1.1 单片机的选择 (6)2.1.2 STC89C51的主要功能及性能参数 (6)2.1.3 STC89C51单片机引脚说明 (6)2.2 驱动电路 (8)2.2.1 比较器的介绍 (8)2.3放大电路 (8)2.4最小系统 (11)3 软件设计 (13)3.1编程语言的选择 (13)3.2 Keil程序开发环境 (13)3.3 STC-ISP程序烧录软件介绍 (14)3.4 CH340串口程序烧写模块介绍 (14)4 系统调试 (16)4.1 系统硬件调试 (16)4.2 系统软件调试 (16)结论 (17)参考文献 (18)附录1 总体原理图设计 (20)附录2 源程序清单 (21)致谢 (25)摘要随着日新月异科技发展,在心率体温测量方面,我们取得了迅速的发展,就近日而言,脉搏测量仪已经在多个领域大展身手,除了在医学领域有所建树,在人们的日常生活方面的应用也不断拓展,如检疫中心的额温枪都用到了技术先进的脉搏测量仪。

在今年的疫情爆发的同时,我们可以积极应对,利用所学的知识,方便高效地检测出人体有无异常体温,在上学签到时,我们可以利用此来检测温度,预防集体性感染事件。

为了在心率测量仪的精准性和便携性方面做出重大改变,我计划设计一种以51单片机为核心的心率体温测量仪。

我们的心率体温检测系统以STC89C51单片机为核心,借用单片机系统的内部计时器计算时间。

其大致的步骤为通过ST188光电传感器感应生成脉冲,心跳次数由单片机累计所得,其对应的时间根据定时器获取。

本设计使用的时候可以展现脉搏心率次数以及时间长短,当其终止使用的时候可以展示总的脉搏心率次数以及时间长短。

经过我的个人测试,系统成功运行,符合设计要求。

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码/***************DHT11温湿度监测+液晶LCD1602显示程序源代码******************单片机型号:STC15W4K56S4,内部晶振:22.1184M。

功能:DHT11温湿度监测+液晶LCD1602显示。

操作说明:通过温湿度传感器DHT11监测温湿度数值,并将温湿度数值显示在液晶LCD1602上。

**************************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙sbit LCD_D0 = P0^0; //LCD_D0对应P0.0sbit LCD_D1 = P0^1; //LCD_D1对应P0.1sbit LCD_D2 = P0^2; //LCD_D2对应P0.2sbit LCD_D3 = P0^3; //LCD_D3对应P0.3sbit LCD_D4 = P0^4; //LCD_D4对应P0.4sbit LCD_D5 = P0^5; //LCD_D5对应P0.5sbit LCD_D6 = P0^6; //LCD_D6对应P0.6sbit LCD_D7 = P0^7; //LCD_D7对应P0.7sbit LCD_RS = P1^0; //LCD_RS对应P1.0sbit LCD_RW = P1^1; //LCD_RW对应P1.1sbit LCD_EN = P3^4; //LCD_EN对应P3.4sbit DHT11_PIN = P4^0; //DHT11管脚对应P4.0void delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //5Ms延时函数void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(void); //LCD初始化void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);//LCD显示一个字符void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); //LCD显示一个字符串void DHT11_Init(void); //初始化DHT11void DHT11_Delay(unsigned int j); //延时函数,用于DHT11 void DHT11_Delay_10us(void); //延时函数,用于DHT11 void COM(void);void RH(unsigned char *temp,unsigned char *humi);void DHT11_Display(void);unsigned char code welcome[] = {"DHT 11"}; //LCD显示内容DHT 11 unsigned char code Dht11[] = {"T: H: "}; //LCD显示内容T: H: unsigned char code Space[] = {" "};//LCD显示内容空白unsigned char U8FLAG,k;unsigned char U8count,U8temp;unsigned char U8T_data_H_temp,U8T_data_L_temp;unsigned char U8RH_data_H_temp,U8RH_data_L_temp;unsigned char U8checkdata_temp;unsigned char U8comdata;unsigned char temperature;unsigned char humidity;unsigned char disbuff_T[4]={0,0,0,0};unsigned char disbuff_H[4]={0,0,0,0};void delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i = 3;while(i--) delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--){delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P0M1 = P3M1&0x00;P0M0 = P3M0&0x00;P1M1 = P3M1&0xfc;P1M0 = P3M0&0xfc;P3M1 = P4M1&0xef;P3M0 = P4M0&0xef;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 1; //LCD管脚E设置成高电平while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 0; //LCD管脚RW设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时P0 = WCLCD; //将数据送入P0口,即写入指令或地址 _nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 1; //LCD管脚RS设置成高电平LCD_RW = 0; //LCD管脚RW设置成低电平P0 = WDLCD; //将数据送入P0口_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void LCDInit(void) //LCD初始化{WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(DData); //发送数据}void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}void DHT11_Init(void) //初始化DHT11 {P4M1 = P4M1&0xfe;P4M0 = P4M0&0xfe;}void DHT11_Delay(unsigned int j){unsigned char i;for(;j>0;j--){for(i=0;i<250;i++);}}void DHT11_Delay_10us(void){unsigned char i;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;}void COM(void){unsigned char i;for(i=0;i<8;i++){U8FLAG=2;while((!DHT11_PIN)&&U8FLAG++);DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();U8temp=0;if(DHT11_PIN)U8temp=1;U8FLAG=2;while((DHT11_PIN)&&U8FLAG++); //超时则跳出for循环if(U8FLAG==1)break;//判断数据位是0还是1,如果高电平高过预定0高电平值则数据位为 1U8comdata<<=1;U8comdata|=U8temp;}}void RH(unsigned char *temp,unsigned char *humi){DHT11_PIN = 0;DHT11_Delay(180);DHT11_PIN = 1; //总线由上拉电阻拉高主机延时20us DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us(); //主机设为输入判断从机响应信号DHT11_PIN = 1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!DHT11_PIN){U8FLAG=2;//判断从机是否发出 80us 的低电平响应信号是否结束while((!DHT11_PIN)&&U8FLAG++);U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while((DHT11_PIN)&&U8FLAG++); //数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DHT11_PIN=1; //数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp){*temp = U8T_data_H_temp;*humi = U8RH_data_H_temp;}}}void DHT11_Display(void){RH(&temperature,&humidity);disbuff_T[2]=temperature/100+0x30;disbuff_T[1]=temperature/10%10+0x30;disbuff_T[0]=temperature%10+0x30;disbuff_H[2]=humidity/100+0x30;disbuff_H[1]=humidity/10%10+0x30;disbuff_H[0]=humidity%10+0x30;DisplayOneChar(2,1,disbuff_T[2]);delay_ms(10); //延时DisplayOneChar(3,1,disbuff_T[1]);delay_ms(10); //延时DisplayOneChar(4,1,disbuff_T[0]);delay_ms(10); //延时DisplayOneChar(8,1,disbuff_H[2]);delay_ms(10); //延时DisplayOneChar(9,1,disbuff_H[1]);delay_ms(10); //延时DisplayOneChar(10,1,disbuff_H[0]);delay_ms(10); //延时}void main(void){GPIO_1602_Configuration(); //LCD1602液晶IO口初始化delay_ms(10); //延时LCDInit(); //LCD1602初始化delay_ms(10); //延时DHT11_Init(); //初始化DHT11DisplayListChar(5,0,welcome); //LCD1602显示Hello My Friends delay_ms(10); //延时while(1){DisplayListChar(0,1,Space); //LCD1602显示P: K1delay_ms(10); //延时DisplayListChar(0,1,Dht11); //LCD1602显示delay_ms(10); //延时DHT11_Display();delay_ms(200); //延时}}程序源代码是编译通过的DHT11温湿度监测模块接口电路图该程序的实际运行效果。

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

//****************************************//**用DS18B20进行测量,lcd1602显示**//****************************************#include "reg51.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned intuchar code table1 []={"ID: "}; //欢迎显示,包括空格在内<=16 uchar code table2 []={"Name: "};//欢迎显示,包括空格在内<=16 uchar code str1 []={" Temperature "};uchar code str2 []={" "};//************管脚定义************************sbit lcd_rs = P3^0; //液晶数据命令选择端sbit lcd_en = P3^1; //液晶使能sbit DQ = P3^6; //液晶使能//************参数定义************************uint tvalue;//温度值uchar tflag;//温度正负标志uchar data disdata[5];//************子函数定义************************void delay(uchar z); //delay延时子程序void init_lcd(); //LCD1602初始化函数void write_com(uchar com); //LCD1602写指令函数void write_data(uchar date); //LCD1602写数据函数void lcd1602_display(uchar *q,uchar *p);//LCD1602显示函数void welcome(); //LCD1602显示欢迎函数void delay_DS18B20(uint i); //delay_DS18B20函数void Init_DS18B20_display(); //DS18B20初始化显示void Init_DS18B20(); //DS18B20初始化uchar ReadOneByte(); //DS18B20读一字节void WriteOneByte(uchar dat); //DS18B20写一字节Read_Temperature(); //DS18B20读取温度值并转换void DS18B20_display(); //DS18B20温度显示//************主函数************************void main(){ welcome();delay(2000);Init_DS18B20_display();while(1){Read_Temperature();DS18B20_display();}}//************delay延时子程序************************void delay(uchar z){uchar x,y;for(x=0;x<z;x++)for(y=0;y<114;y++);}//************LCD1602初始化函数************************void init_lcd(){write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口write_com(0x08); //写一个字符后地址指针加1write_com(0x01); //显示清零,数据指针清零write_com(0x06); //写一个字符后地址指针加1write_com(0x0c); //关显示,光标不显示不闪烁}//************LCD1602写指令函数************************void write_com(uchar com){delay(5);lcd_rs = 0; // 选择写指令lcd_en = 0; // 将使能端置0P2 = com; // 将要写的命令送到数据总线上delay(5); // 延时5ms,待数据稳定lcd_en = 1; // 由于初始化已将lcd_en置为0,使能端给一个高脉冲,delay(5); // 延时5ms,待数据稳定lcd_en = 0; // 将使能端置0以完成脉冲}//************LCD1602写数据函数************************void write_data(uchar date){delay(5);lcd_rs = 1; // 选择写数据lcd_en = 0; // 将使能端置0P2 = date; // 将要写的数据送到数据总线上delay(5); // 延时5ms,待数据稳定lcd_en = 1; // 由于初始化已将lcd_en置为0,使能端给一个高脉冲,delay(5); // 延时5ms,待数据稳定lcd_en = 0; // 将使能端置0以完成脉冲}//************LCD1602显示函数******************void lcd1602_display(uchar *q,uchar *p){write_com(0x80); // 现将数据指针定位到第一行第一个字处while(*q!='\0'){write_data(*q);q++;delay(1);}write_com(0xc0); // 现将数据指针定位到第二行第一个字处while(*p!='\0'){write_data(*p);p++;delay(1);}}//************LCD1602显示欢迎函数****************** void welcome(){init_lcd();lcd1602_display(table1,table2);delay(5000);}//************DS18B20初始化显示**************void Init_DS18B20_display(){init_lcd();lcd1602_display(str1,str2);}//************LCD1602显示函数****************** void delay_DS18B20(uint i){while(i--);}//************DS18B20初始化******************void Init_DS18B20(){DQ = 1; //DQ复位delay_DS18B20(4); //延时DQ = 0; //DQ拉低delay_DS18B20(100); //精确延时大于480usDQ = 1; //拉高delay_DS18B20(40);}//************DS18B20读一字节****************** uchar ReadOneByte(){uchar i,dat = 0;for(i=8;i>0;i--){DQ = 0; //给脉冲信号dat>>=1;DQ = 1; //给脉冲信号if(DQ) dat|=0x80;delay_DS18B20(10);}return (dat);}//************DS18B20写一字节******************void WriteOneByte(uchar dat){uchar i;for(i=8;i>0;i--){DQ = 0;DQ = dat&0x01;delay_DS18B20(10);DQ = 1;dat>>=1;}}//************DS18B20读取温度值并转换****************** Read_Temperature(){uchar a,b;Init_DS18B20();WriteOneByte(0xcc); //跳过读序列号WriteOneByte(0x44); //启动温度转换Init_DS18B20();WriteOneByte(0xcc); //跳过读序列号WriteOneByte(0xbe); //读取温度a = ReadOneByte();b = ReadOneByte();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0xfff)tflag = 0;else{tvalue = ~tvalue+1;tflag = 1;}tvalue = tvalue*(0.625); //温度值扩大10倍,精确到1位小数return (tvalue);}//************DS18B20温度显示******************void DS18B20_display(){uchar flagdat;disdata[0]=tvalue/1000+0x30; //百位数disdata[1]=tvalue%1000/100+0x30;//十位数disdata[2]=tvalue%100/10+0x30; //个位数disdata[3]=tvalue%10+0x30; //小数位if(tflag == 0)flagdat = 0x20; //正温度不显示符号elseflagdat = 0x2d; //负温度显示负号if(disdata[0] == 0x30){disdata[0] =0x20; //如果百位为0,不显示if(disdata[1] == 0x30){disdata[1] =0x20;//如果百位为0,十位为0也不显示}}write_com(0xc4);write_data(flagdat); //显示符号位write_com(0xc5);write_data(disdata[0]);//显示百位write_com(0xc6);write_data(disdata[1]);//显示十位write_com(0xc7);write_data(disdata[2]);//显示个位write_com(0xc8);write_data(0x2e); //显示小数点write_com(0xc9);write_data(disdata[3]);//显示小数位}。

相关文档
最新文档