1 绪论
1.1课题背景及意义在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。温度对于工业如此重要,由此推进了温度传感器的发展。进入21世纪后,温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。
在工农业生产中,温度检测及其控制占有举足轻重的地位,随着现代信息技术的飞速发展和传统工业改造的逐步实现 ,能够独立工作的温度检测和显示系统已经应用于诸多领域。要达到较高的测量精度需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差等问题,使温度检测复杂化。模拟信号在长距离传输过程中,抗电磁干扰时令设计者伤脑筋的问题,对于多点温度检测的场合,各被检测点到监测装置之间引线距离往往不同,此外,各敏感元件参数的不一致,这些都是造成误差的原因,并且难以完全清除。
单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用的器件,尤其在日常生活中也发挥越来越大的作用。采用单片机对温度采集进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控数据的技术指标,从而能够大大提高产品的质量和数量。
由于科学技术的飞速发展,特别是微电子加工技术,计算机技术及信息处理技术的发展,人们对信息资源的需求日益增长,作为提供信息的传感技术及传感器愈来愈引起人们的重视,而综合各种技术的传感器技术也进入到一个飞速的发展阶段。要及时正确地获取各种信息,解决工程、生产及科研中遇到的各种具体的检查问题,就必须合理选择和善于应用各种传感器及传感技术。如最简单的温度的测量,有热电偶、光纤温度传感器等等。但是,热敏电阻是开发早、种类多、发展较成熟的敏感元器。热敏电阻由半导体陶瓷材料组成,利用的原理是温度引起电阻变化。热敏电阻器是敏感元件的一类,按照温度系数不同分为正温度系数热敏电阻器(PTC)和负温度系数热敏电阻器(NTC)。热敏电阻器的典型特点是对温度敏感,不同的温度下表现出不同的电阻值。正温度系数热敏电阻器(PTC)在温度越高时电阻值越大,负温度系数热敏电阻器(NTC)在温度越高时电阻值越低,它们同属于半导体器件。随着半导体技术的不断发展,热敏电阻作为一种新型感温元件应用越来越广泛。他具有体积小、灵敏度高、重量轻、热惯性小、寿命长以及价格便宜等优点,最重要的是作为温度传感器的热敏电阻的灵敏度非常高,这是其他测温传感器所不能比拟的。
1.2国内外研究现状近百年来,温度传感器的发展大概经历了以下三个阶段:传统的分立式温度传感器(含敏感元件)、模拟集成温度传感器/控制器、智能温度传感器。目前,国际上新型温度传感器正从模拟式向数字式、由集成化向智能化、网络化的方向发展。智能温度传感器(亦称数字温度传感器)是在二十一世纪九十年代中期闯世的,它是微电子技术、计算机技术和自动测试技术的结晶。目前,国际上已开发出多种智能温度传感器系列产品。智能温度传感器内部都包含温度传感器、A/D转换器、信号处理器、存储器和接口电路。有的产品还带多路选择器、中央处理器、随机存储器和只读存储器。智能温度传感器的特点是输出温度数据及相关的温度控制量,适配各种微控制器。并且它是在硬件的基础上通过软件来实现测试功能的,其智能化程度也取决于软件的开发水平。进入二十一世纪后智能温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发基于传感器硬件和计算机平台、并通过软件开发而成的,利用软件可完成传感器的标定及校准,以实现最佳性能指标的虚拟传感器和包含数字传感器、网络接口和处理单元的网络传感器、研制单片测温系统等高科技的方向发展。
1.3 课题研究的内容及意义在人类的生活环境中,温度扮演着极其重要的角色。温度是工业生产中常见的工艺参数之一,任何物理变化和化学反应过程都与温度密切相关,因此温度控制是生产自动化的重要任务。对于不同生产情况和工艺要求下的温度控制,所采用的加热方式,燃料,控制方案也有所不同。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。
单片微型计算机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。本文主要介绍单片机在温度控制中的应用。
在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用MCS-51单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。
随着社会的进步和工业技术的发展,人们越来越重视温度对产品的影响, 许多产品对温度范围要求严格,目前市场上普遍存在的问题有温度信息传递不及时、精度不够的缺点,不利于工业控制者根据温度变化及时做出决定。在这样的形式下,开发一种实时性高、精度高的温度采集系统就很有必要。
2 总体方案设计
2.1方案设计
2.1.1温度传感器的选择测量温度的关键是温度传感器,因此需要灵敏度高、测温范围宽、稳定性好,同时还要考虑成本和实际情况。
方案一:
DS18B20数字式温度传感器,使用集成芯片,采用单总线技术,其能够有效的减小外界的干扰,提高测量的精度,同时,它可以直接将被测温度转化成串行数字信号供微机处理,接口简单,使数据传输和处理简单化。部分功能电路的集成,使总体硬件设计更简洁,能有效地降低成本,搭建电路和焊接电路时更快,调试也更方便简单化,但是这个温度传感器适用于精密温度测量系统中。
方案二:
热敏电阻的主要特点是:①灵敏度较高,其电阻温度系数要比金属大10~100倍以上,能检测出10-6℃的温度变化;②工作温度范围宽,常温器件适用于-55℃~315℃,高温器件适用温度高于315℃(目前最高可达到2000℃),低温器件适用于-273℃~55℃;③体积小,能够测量其他温度计无法测量的空隙、腔体及生物体内血管的温度;④使用方便,电阻值可在0.1~100kΩ间任意选择;⑤易加工成复杂的形状,可大批量生产;⑥稳定性好、过载能力强.
方案三:
热电偶传感器的灵敏度,线性和温度范围是和所用的金属有关。多年来,已经有几种热电偶成为标准,在美国,NIST公布了八种热电偶,让字母代码来识别的毫伏~温度表。其中五种J、K、T、G和N是由碱金属合金制成,有不同的温度范围和用途,灵敏度一般是每摄氏度几十毫伏,其中三种R、S和B是用的金属白金制成的,但是这种热电偶价格昂贵,最常用于高温工作,不适合常温的测量,而且灵敏度很低。
对比之后,根据实际的应用需求,本设计采用方案二热敏电阻传感器。
2.1.2 调理模块方案一:
如图2-1所示是由集成运算放大器和铂热电阻构成的自动温度补偿电路。该电路可分为阻抗变换和温度补偿两级,阻抗变换器A1是一个电压跟随器,它的作用是把来自传感器送来的与温度成比例变化的,温度补偿器A2是一个同相电压放大器,电路元件可根据同相电压放大器基本原则进行选取,这一级的作用是将阻抗变换级送来的电压信号进行放大,同时吸取来自铂热Rt送来的与温度成比例变化的电阻信号,这个电阻信号去改变放大器的灵敏度,使放大器的输入电压V0与温度无关。但是此电路比较复杂,元器件较多,可能导致精度不够。
图2-1为自动温度补偿电路
方案二:
温度补偿还可以采用简单的查表法从电压值中查出相应的温度值。预先将一系列温度与电压对应值存贮到STC89C52微控制器程序存储器中的一个表内,当给定任意一个在测量范围中的电压值时,即可通过查表得出所对应的温度值。
本设计所采用的NTC热敏电阻所对应温度补偿表如表2-1;
所以本设计的温度补偿选用方案二,将再软件中体现。
2.1.3 温度核心模块方案一:
S08AW60拥有62KB片上在线可编程FLASH存储器和2KB片上RAM,具有模块保护与安全选项功能,支持2.7~5.5V电源。片内总线时钟最高可达20MHz,可选择宽范围的时钟频率。其内部集成了高性能模/数转换器(ADC)和串行通信模块,具有很宽的工作温度范围(-40℃~+125℃),可适应各类恶劣环境。该芯片还可以通过BDM在计算机与微控制器进行在线编程及后台调试,避免频繁的插拔单片机,编译软件调试功能强大。
方案二:
STC89C52是一种低功耗、高性能8位微控制器,具有8K系统可编程FLASH存储器和256字节ROM,可实现0Hz~33Hz的全静态操作,支持4.0V~5.5V电源。使用Atmel公司高密度非易失性存储器技术制造,与MCS-51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其内部没有A/D转换模块,需要外部扩展模数转换芯片。
对比之后,根据实际的应用需求,本设计选用方案二STC89C52,因为具有ISP功能,可直接通过串口下载用户程序,方便调试程序,内部8 KB的FLASH E2PROM使用户编制的程序及需要显示的字母、数字、汉字和图形都可以存储在里面,免去了扩展外部存储器的麻烦,因此以STC89C52单片机为核心的控制系统电路更简单,十分适用于液晶显示,在智能仪器、仪表和低功耗电子产品中被广泛选用。
2.1.4 显示模块方案一:
LED数码管显示器可分为两种显示方式:静态显示和动态显示。
LED数码管静态显示,多片七段译码器驱动显示,这不仅增加了成本,还需要占用单片机多个I/O口,也给电路的焊接带来一定的困难,因此不选用这种方案作为显示模块,所以排除此方案。
方案二:
LED数码管显示器动态显示方式下,将所有位的段选线并联在起,由位选线控制哪位接收字段码。采用动态扫描显示,也就是在显示过中,轮流向各位送出字形码和相应的字位选择,同一时刻只有一位显示,其他各位熄灭。但是此显示方案稳定性较差,并且还需要焊接外围电路,所以不采用此方案。
方案三:
LCD液晶显示,由单片机驱动.它主要用来显示大量数据、文字、图形,能够显示的位数多,显示得清晰多样、美观,同时液晶显示器的编写程序简单,价格便宜,故采用此种方案。
LCD类型繁多,价格不等。根据本设计需要显示的信息量小的特点,选用价格便宜的LCD1602液晶屏。其特点如下:
液晶显示屏是以16列×2行=32个5×10或5×7点阵块组成的显示字符群,每个点阵为一个字符,字符间距和行距都为一个点的宽度;具有字符发生器ROM,可以显示192种字符;具有64字节的自定义字符RAM,可自定义8个5×7或4个5×10点阵字符;具有80字节的RAM;结构紧凑、轻巧、装配容易;单+5V电源供电,低功耗,长寿命,高可靠性。
2.2 系统简介温度采集系统的硬件部分是由温度采集模块、MCU控制器模块、温度显示模块组成。具体框图如图2-1所示:
图2-1 系统硬件框图
热敏电阻的阻值会随着温度的变化而改变,这种变化不是线性的,但是每一种热敏电阻传感器都有一个阻值和温度对应的表格,可以通过查表得到温度值,当然也可以通过非线性公式计算出温度值。具体工作原理: 单片机通过AD芯片对电阻两端的电压进行采样,电阻变化时其两端的电压会变化,这种变化是线性的,单片机可以通过计算得到电阻值,然后通过查表得到温度值,再通过计算得到显示温度值。 原理图中的电源部分也可以直接换成3节1.5V电池,这样更简单一点。
3 硬件电路设计
3.1温度采集模块电路设计该模块是根据热敏电阻阻值随温度变化而变化的特性,利用串联分压的特点,将热敏电阻所分的电压送到ADC0832的模拟量输入端。具体电路原理如图3-2所示:
图3-1温度采集模块电路原理图
该电路中RT1为热敏电阻,其电压传输到ADC0832的模拟量输入端,即CH0,芯片的2脚。
3.2 A/D转换模块电路设计本设计采用的AD转换芯片是ADC0832:该芯片为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。本课题AD芯片的CS端与P1.0口连接;CLK端与P1.1口连接;D0与D1并联并与P1.2口相连。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能:当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
3.3 MCU控制器模块电路设计STC89C52的最小系统电路设计如图3-2所示
VCC是STC89C52的电源引脚,GND为STC89C52的接地引脚,工作电压范围是4.0V~5.5V,在该电路中提供的是5V电压。利用芯片内部振荡电路,在XTAL1和XTAL2的引脚上外接定时元件,内部振荡器便能产生自激振荡,用示波器便可以观察到XATL2输出的正弦波,定时元件可以采用石英晶体和电容组成的并联振荡电路,晶体可以在1.2~12MHz之间选择,电容可以在20~60pF之间选择,通常选为30pF左右,电容C8~C9的大小对振荡频率有微小影响,可起频率微调作用。在芯片的9脚,即RST/Vpd接按键及电阻构成复位信号。
图3-2STC89C52最小系统电路设计
该电路为STC89C52控制器电路,其中,P0.5、P0.6、P0.7口分别与LCD1602的RS、R/W、E引脚连接;P2.0~P2.7口与LCD1602的DB0~DB7引脚连接;P1.2是模拟量输入端,用于输入热敏电阻传感器的电压。
3.3.1 核心部件的介绍STC89C52是整个课题的核心部件,P0口是开漏双向可以写为1使其状态为悬浮用作高阻输入。P0口也可以在外部程序存储器时作地址的低字节,在访问外部数据存储器时作数据总线,此时通过内部强上拉输出1。在本课题中P0口外接10K排阻使输出为1来接LCD1602的RS、RW、E端。P1口可作为准双向I/O接口使用。对于MCS—52子系列单片机,P1.0和P1.1还有第2功能:P1.0口用作定时器/计数器2的计数脉冲输入端T2;P1.1用作定时器/计数器2的外部控制端T2EX。对于EPROM编程和进行程序校验时,P1口接收输入的低8位地址。在本课题中P1.2来接收AD转换模块送过来的数字量;P1.0与AD芯片的复位端相连;P1.1与AD芯片的CLK端相连。P2口2口是带内部上拉的双向I/O,口向P2口写入1时,P2口被内部上拉为高电平,可用作输入口当作为输入脚时,被外部拉低的P2口会因为内部上拉而输出电流(见DC电气特性)。在访问外部程序存储器和外部数据时分别作为地址高位字节和16位地址(MOVX @DPTR),此时通过内部强上拉传送1。当使用8位寻址方式(MOV@Ri)访问外部数据存储器时,P2口发送P2特殊功能寄存器的内容。本课题的P2口作为输出口使用,把信号输送给LCD1602。P3口是带内部上拉的双向I/O口,向P3口写入1时,P3口被内部上拉为高电平,可用作输入口,当作为输入脚时,被外部拉低的P3口会因为内部上拉而输出电流(见DC电气特性)。它为双功能口,可以作为一般的准双向I/O接口,也可以将每1位用于第2功能,而且P3口的每一条引脚均可独立定义为第1功能的输入输出或第2功能。本课题没有用到P3口。
综上所述,STC89C52系列单片机纳为以下两点:
1) 单片机功能多,引脚数少,因而许多引脚具有第2功能;
2) 单片机对外呈3总线形式,由P0、P2口组成16位地址总线;由P0口分时复用作为数据总线。
3.3.2复位电路的设计STC89C52的复位方式可以是图3-4的上电复位,也可以是图3-5的手动复位。此外,RESET/V还是一复用脚,V掉电期间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
图3-3上电复位 图3-4手动复位
1.上电复位:上电自动复位电路是一种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。上电自动复位是通过外部复位电路的电容充电来实现的。只要VCC的上升时间不超过1ms,就可以实现自动上电复位。
2.手动复位:开关复位,只要按下开关按钮,倒相器即输出高电平,复位有效。手动复位和快捷,方便,所以此次设计采用手动复位方式。
3.4 显示模块电路设计该模块是利用LCD1602(液晶显示):LCD1602的显示容量很大,为16×2个字符;1602LCD芯片的工作电压为4.5-5.5V,芯片工作电流在5V工作电压的情况下芯片工作电流为2毫安,模块的最佳工作电压为5V,显示字符的尺寸为2.95×4.35(W×H)mm。
1602LCD的第1脚VSS为地电源;第2脚接5V正电源;第3脚VL为液晶显示器对比调整端,接正电源时对比度弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用是可以通过一个10K的电位器调整对比度;第4脚为RS寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器;第5脚为R/W读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据;第6脚为使能端,当使能端由高电平跳变为低电平时,液晶模块执行命令;第7~14脚的D0~D7为8位双向数据线;第15脚为背光源正极;第16脚为背光源负极。以上是整个1602LCD的功能介绍。
显示的清晰度是关键,其Vee引脚作用是对比调整,原理是该引脚输入电压不同,调整度不同,所以采用电位器分压作为它的电压输入。Vss及K引脚分别是电源地、LCD背光电源负极,直接接地。Vcc及A引脚分别是电源、LCD背光电源正极,采用+5V电源供电。其电路原理图如图3-5所示:
图3-5显示模块电路原理图
该电路中,LCD1602的RS、R/W、E引脚分别与STC89C52中的P0.5、P0.6、P0.7口连接;DB0~DB7引脚分别与STC89C52的P2.0~P2.7口连接。
4 软件程序设计
4.1系统整体软件设计的环境Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
2006年1月30日ARM推出全新的针对各种嵌入式处理器的软件开发工具,集成Keil μVision3的RealView MDK开发环境。RealView MDK开发工具Keil μVision3源自Keil公司。RealView MDK集成了业内领先的技术,包括Keil μVision3集成开发环境与RealView编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。
4.2软件设计流程图软件系统初始化时把温度数据做成表格存储到ROM中,通过AD对热敏电阻两端的进行测量,然后通过运算将电压值对应于电阻值,通过查表把电阻值对应于温度值,再通过运算把温度数据送到LCD显示,其中程序初始化主要是对AD和LCD进行初始化。它的框图如图4-1:
图4-1软件总体流程图
4.2.1 A/D转换模块原理及程序传感器获得的信号由于是模拟信号,而CPU处理的是数字信号,故要经过模数转换,本设计采用芯片ADC0832实现的AD转换。
图4-2 ADC0832的工作时序图
由以上时序图可知单片机对ADC0832的控制,所以进行以下编程。
C语言编写的STC89C52微控制器中A/D转换模块的节选程序代码如下:
uint ADC0832(uchar channel)
{
uchar i;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}
for(i=0;i<8;i++)
{
ndat>>=1;
if(ADDO==1)
ndat|=0x80;
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
}
ADCS=1;//拉低CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态
if(dat==ndat)
{
return(ndat);
}
else
{
return(0x00);
}
4.2.2热敏电阻阻值和温度的非线性对性模块原理及程序热敏电阻的阻值温度特性曲线是一条指数曲线,非线性度较大,因此在使用时要进行线性化处理。可采用简单的查表法从电压值中查出相应的温度值。预先将一系列温度与电压对应值存贮到STC89C52微控制器程序存储器中的一个表内,当给定任意一个电压值时,即可通过查表得出所对应进行补偿过的温度值。
C语言编写的获得温度值的节选程序代码如下:
先对LCD1602进行程序初始化:LCD1602的RS脚置“1”,其意义为:选择数据寄存器;LCD1602的RW脚置“1”,其意义为:进行读操作;
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P0^5;
sbit rw=P0^6;
sbit e= P0^7;
对ADC0832进行初始化:
sbit ADCS=P1^0;
sbit ADCLK=P1^1;
sbit ADDI=P1^2;
sbit ADDO=P1^2;
显示屏显示的选择项:
uchar code tab3[]="Low-temperature ";
uchar code tab4[]="Over-temperature";
uchar code tab5[]=" Error ";
uchar code tab6[]=" Temp:";
uchar code tab7[]=" Normal ";
uchar code tab1[]="0123456789";
把温度数据存储到ROM中,温度范围为79℃~-20℃:
uchar code tab2[]=
{79,78,77,76,75,74,73,72, //温度补偿表
71,70,69,68,67,67,66,65,
64,63,63,62,61,60,60,59,
58,58,57,56,56,55,54,54,
53,53,52,52,51,50,50,49,
49,48,48,47,47,46,46,45,
45,44,44,43,43,43,42,42,
41,41,40,40,39,39,39,38,
38,37,37,36,36,36,35,35,
34,34,34,33,33,33,32,32,
31,31,31,30,30,30,29,29,
28,28,28,27,27,27,26,26,
26,26,25,25,24,24,23,23,
23,22,22,22,21,21,21,20,
20,20,19,19,19,18,18,18,
17,17,17,16,16,16,15,15,
15,14,14,13,13,13,12,12,
12,11,11,11,10,10,10,9,
9,9,8,8,7,7,7,6,
6,6,5,5,4,4,4,3,
3,3,2,2,1,1,1,0,
0,1,1,2,2,2,3,3,
4,4,5,5,6,6,7,7,
8,8,9,9,10,10,11,11,
12,12,13,14,15,15,16,17,
17,18,19,19,20};
uint ad,ad1;
延时50us的程序:
void delay_50us(uint t)
{
uchar j,z;
for(z=t;z>0;z--)
for(j=19;j>0;j--);
}
延时1ms的程序:
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
写指令程序:
void write_com(uchar com1)
{
e=0;
rs=0;
rw=0;
P2=com1;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
写数据程序:
void write_data(uchar dat1)
{
e=0;
rs=1;
rw=0;
P2=dat1;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
4.2.3温度显示模块程序LCD1602采用+5V电压驱动,其数据接口和读写控制引脚与STC89C52单片机的I/O口直接相连。ADC0832将采集到的模拟电压值经过A/D转换后送给单片机,单片机查表得到温度值,通过I/O口传输给LCD1602显示。
C语言编写的温度值显示的节选程序代码如下:
void disp()
{
ad1=ad-29;
write_com(0x80);
if(ad<29)
{
uchar i;
for(i=0;i<16;i++)
{
write_data(tab4);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_data(tab5);
}
}
else if(ad>233)
{
uchar i;
for(i=0;i<16;i++)
{
write_data(tab3);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_data(tab5);
}
}
else if(ad>=29&&ad<=233)
{
uchar i;
for(i=0;i<16;i++)
{
write_data(tab7);
}
write_com(0x80+0x40);
for(i=0;i<7;i++)
write_data(tab6);
if(ad>197)
{
write_data('-');
write_data(tab1[(tab2[ad1])/10]);
write_data(tab1[(tab2[ad1])%10]);
}
else
{
write_data(' ');
write_data(tab1[tab2[ad1]/10]);
write_data(tab1[tab2[ad1]%10]);
}
write_data(0xdf); //显示温度符号
write_data('C');
}
}
5 系统仿真Proteus是一款功能非常强大的集仿真、原理图设计及PCB设计于一体的软件。该软件非常实用,不需要有硬件电路即可通过仿真单片机的编程。打开软件,选择P进行元器件的摆放。在这里可以通过元器件的名字进行检索。电容电阻等元器件只需要其相应的英文缩写即可。89C52是本次要使用的微控制器单元,在检索行输入89C52,可以看到元件库里出现了我们需要的芯片。选中后就可将其拖入工程界面,可以自己选择合适的位置。依次将原理图中的元件器拖入合适的位置,然后将各个元器件链接起来构成回路。
在桌面右键点击新建一个名为tt的文件夹,打开Keil uVision3软件,点击工程>新建uVision工程选中桌面的tt文件夹,把工程的名字命为test,点击保存选择要用的51单片机型号,本次设计用的是STC89C52,这里选择Atmel的AT89C52,点击确定,点击否,点击新建文件,再点击保存,将文件命名为main.c(如果用的是汇编语言,则命为main.asm)点击保存,点击新建文件,右键点击源代码组1>添加文件到组“源代码组1”,点击main.c,点击Add,点击Close,双击源代码组1,可以看到main.c已被添加进工程。将本次热敏电阻温度检测电路的程序输入工程中,点击编译指令,检查程序中的错误并调试,再次点击编译,待程序中没有错误时,点击工程中options for target命令,选择输出一栏,勾选产生HEX文件,点击确定。再次点击编译,报告输出“创建HEX文件”。最后将tt文件夹下的HEX文件烧入到单片机中。最后在Proteus中进行系统仿真,观察到LCD液晶显示屏上可以显示当前的温度值,改变热敏电阻的阻值,温度随之变化。如图5-1所示。
图5-1 系统仿真图
6 设计心得本次设计具备一定难度,在这次毕业设计中,我学到了很多知识,也使我的能力得到了提升。
首先,硬件方面。选择硬件,要比较同类产品的稳定性、功耗、体积、价格等,另外还要符合设计的全部要求。在显示方案上,我考虑的时间相对长了一点。利用数码管显示,程序复杂,但是,自己编程比较熟悉,价格便宜。利用LCD1602显示,程序简单,但是以前自己从未使用过。经过比较,我选择LCD1602,这样可以学到新知识,提高自己的知识水平。在硬件电路的设计方面,用Altium Designer Summer绘制电路图时要标明元件的大小,有些封装元件要标明名称和封装。
其次,软件方面。程序的模块化有利于提高编程的效率,也提高了程序的易读性。在本次课程设计中,我主要分两个方面进行编程。一个方面,我在了解了A/D转换模块和各个接口的作用后,首先对其编程。另一个方面,我认真分析了LCD液晶显示屏和数码管显示原理区别。然后对显示模块进行编程,最后经过多次调试,LCD1602终于能正常显示。
总而言之,在韩老师的带领和指导下,我顺利的完成了课程设计,完成了老师交给的任务。
附 录 一系统整体原理图
PCB版图
完整的Word格式文档51黑下载地址:
http://www.51hei.com/bbs/dpj-113223-1.html