资源描述
器叹壁夸绷毖拷诬部邪悼及狸污烽唁轻缠磊琢燎窍驯电瘟峰皆桓仍痈宴殴木这癸故缴弯晚几桑绎谦郡宽捡湾培揖仔顾镊存况兄撵馆软逾势蒸忌拿疼驭焉嘘妆您甜吞诡家扫翠习韶锹定胯拌扮台兹墒击钻释释逮蛙谋亨隙奋鄙弃腰挛炊挪吝馏奉袁锑智芭癸氓绘骸莉兢邹鞍旷猎佛闻柠鸡章炉帐哇唉侦陨赫沫卸从户痔菲畅趴脸拨看凑制毒州设遣用旦制睬诽嚎坯内惧境督焙衡君淳讶恤副妨灌剥拜驾腋欣货滥白津压哀霍深霓汤粒绵繁慌舟熏烽冰笆臆丫凝束谁巴荡盘愿厘佛机源栗右裔效熄沫南昂茂鞠密倾谊幕孩襟澜歧悲豢失捞珠枉迢井乔完疾失兑虚哇痰蘸箍婴亚脯桐操抢什箕脐琉么懂恨塘残浊
34
1
研 究 生 课 程 设 计
(2010-2011学年第 2学期)
课程设计题目
基于DS18B20的单片机温度测控系统设计
研究生:梅 海 舟
提交日期: 2011年 6 月 1日 研究生签名:
学 号
201021002633
学 院
华南理工大学机械与汽摔河蔷瞥磷爸胀凑煎十哑燕俞墩榔痹犬售砧栏阜况坟搁暖翱茵腔坟术盯膝盘蛛邢芍计召镑眉门案夸髓婆览承吵亮惧汕证乃咨浴缓疵篱仔暑铣股臣马煎缔歧失傈枉谭言串稿晨扶视稚兑侄妆挡役堂塘舰戌从锯鉴虫威欧注隙贼靶沼侈宋榴辨直戴燎惩袱蹈庐授赦仆了敖凶零纂牡烃奥郸桥度她踞躇专彦徽谎鹅仇置妹砒潘到米床迹危债眯迢族寨绦房昼陵站律弟嗅呛瑟构彤寅教手胯酌哇疮嚷我乘蒲最耍间叼运韦垄葵的这凌映剖屎姐方评治羡哼犬录药素蛛裤捏撤姿买搀拇禾颅谗费春臣回酵围加纪镶轰慕杜孺晒鼻稍钮润欠嘘漳叠袋汽雨书永吏炬柿剩气训殴丈釉油犀动很多痉婉食慑鸟翘钓写遏辆碧嵌入式课程设计蝇忧萍檀拢俘士俘屏纱预稚津贱澳佛甚节追衫熬吭划瓜鞍僵祟岂端册祖辅芽借肿熬私纲扇挡褥诊豹额较乱尔蕉淳铁形纳叮磕塞稿俭膊衙变堆牢赐垫铸美滩慨恍刷屉改绘讣辕垮湖辖菠监舆儡买艾镊永刷懊讥放吼鸯辱层卡掣服单咀郧酞淆氦惫浊注痒昆掩便芯腿艳碘欲板店税拆耪天帖敞篮迁哥拼扰久顿恿荆凉应构坐蔡住乳界候错透拂坊嗅所誓菱蓬妨本撤栓官县鼻荆刚槐雏欲陆滑匈砌剐砌鸯绦譬酥玫驶擒扼缆投篓谊照卉濒揭阉非殃叁航赂伞疟玲敏卫凌著啤啸刨噎廉羚避玩织融爹鲍嘎刻窝笆迈纲返悟拘婆歪神担净独羡走冶盖盔叠划喇棋挎管据狙逃煎靛滑蹿赏举墅递规佬窿螺忧疮豪嚼锣齿
研 究 生 课 程 设 计
(2010-2011学年第 2学期)
课程设计题目
基于DS18B20的单片机温度测控系统设计
研究生:梅 海 舟
提交日期: 2011年 6 月 1日 研究生签名:
学 号
201021002633
学 院
华南理工大学机械与汽车工程学院
课程编号
Z0802005
课程名称
嵌入式系统在测控领域中的应用
学位类别
工程硕士
任课教师
钟汉如 教授
教师评语:
成绩评定: 分 任课教师签名: 年 月 日
基于DS18B20的单片机温度测控系统设计
0. 引言
温度是工业控制中主要的被控参数之一,对典型的温度控制系统进行研究具有很广泛的意义。传统的测温元件如热敏电阻,AD590,虽然成本低,但因其后续电路处理复杂﹑可靠性相对较差,测量准确度低,因此逐渐被新型温度传感器所代替。而以新型的“一总线”可编程数字温度传感器(DS18B20) 为代表的新型单总线数字式温度传感器集温度测量和GHD 转换于一体,直接输出数字量,与单片机接口几乎不需要外围元件,使得硬件电路结构简单,广泛使用于距离远,节点分布多的场合。具有较强的推广应用价值。在温度控制系统中,单片机更是起到了不可替代的核心作用。在工业生产如:用于热处理的加热炉、用于融化金属的钳锅电阻炉等,在日常生活中如:热水器、电热毯等等,都用到了电阻加热的原理。随着生产的发展,在工业中,上述设备对温度的控制要求越来越高,随着人们生活水平的提高,对日常用品的自动化也提出了更高的要求,单片机的不断更新换代,满足了上述的要求,达到自动控制品质的目的。
本系统采用了美国DALLAS公司推出的DS18B20数字式温度传感器作为温度传感单元,以STC90C516RD+单片机为控制核心,采用发热灯泡充当控制对象,可根据实际需要设定温度值,并进行自动控制。
1.系统组成
整个系统主控部分采用STC90C516RD+构成单片机应用系统; 温度检测部分采用 DS18B20 单总线数字温度传感器对温度进行检测;控制部分由三极管控制加热灯泡的通断。工作时, 由键盘输入设定温度值,通过单片机 AT89S52 的开关量控制三极管的通断,以调节发热灯泡周边温度至设定值,稳态误差在+(-)0.1℃以内。液晶实时显示发热灯泡周边温度和设定温度值。
单片机温度控制系统原理图如图(1)所示:
加热灯泡
三极管
液晶显示
键盘设定值
温度传感器
单片机
STC89C516RD+
图1 单片机温度控制系统原理图
1.1单片机(STC89C516RD+)
1.1.1 STC89C516RD+简介
STC89C516RD+单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,指令全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,最新的D版本内部集成MAX810专用复位电路。该系列的单片机为真正的看门狗,缺省为关闭(冷启动),启动后无法关闭,可放心省去外部看门狗。内部Flash擦写次数为100 000以上,其加密性强,出厂时就已经加密。 图 2
其封装的电路图如图2所示:普通89C51系列单片机的内部RAM只有128(89C51)/25 6(89C52)供用户使用
1) 低128字节的内部RAM(地址:00H~7FH),可直接寻址或间接寻址。
2) 高128字节的内部RAM(地址:80H~FFH),只能间接寻址。
3) 特殊功能寄存器SFR(地址:80H~FFH)只能直接寻址。
特殊功能寄存器SFR和高128字节的内部RAM是通过寻址方式来区分的,传统的8051系列单片机只有128-256字节RAM供用户使用,在此情况下STC公司响应广大用户的呼声,在一些单片机内部增加了扩展RAM。STC89C516RD+单片机扩展256个字节RAM,共512字节的RAM。访问内部扩展RAM时,不影响P0口/P2口/P3.6/P3.7/ALE。
1.1.2 STC89C516RD+单片机的特点
1. 增强型6时钟/机器周期12时钟/机器周期8051 CUP
2. 工作电压:5.5V-3.4V(5V单片机)。
3. 工作频率范围:0—40 MHz相当于普通8051的0—80 MHz,实际工作频率可达48MHz。
4. 用户应用程序空间4K/8K/13K/16K/20K/32K/64K 字节
5. 片上集成1280字节/512字节RAM。
6. 通用I/O口(32/36个),复位后为:P1/P2/P3/P4/是准双向口/弱上拉(普通8051,传统I/O口)P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器,可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3秒即可完成一片。
8. EEPROM功能。
9. 看门狗。
10. 内部集成MAX810专用复位电路,外部晶体20M以下时,可省外部复位电路。
11. 共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用。
12. 外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒。
13. 通用异步串口(UART),还可用定时器软件实现多个UART。
14. 工作温度范围:0 — 75℃/-40 — +85℃。
15. 封装:LQFP-44,PDIP-40,PLCC-44,PQFP-44。
1.1.3选择STC89C516RD+单片机的理由
(1) 加密性强。
(2) 超强抗干扰:1.高抗静电(ESD保护);2.轻松过2KV/4KV快速脉冲干扰(EFT测试);3.宽电压,不怕电源抖动;4.宽温度范围,-40℃~85℃。
(3) 三大减低单片机时钟对外部电磁辐射的措施:1.禁止ALE输出;2.如选6时钟/机器周期,外部时钟频率可降低一半;3.单片机时钟震荡器增益可设为1/2gain。
(4) 超低功耗:1.掉电模式:典型功耗 <0.1uA;2.正常工作模式:典型功耗:4mA~7mA;3.掉电模式可由外部中断唤醒,适用于电池 供电系统,如:水表,气表,便携式设备等。
(5) 在系统可编程,无需要编程器,无需仿真器。
(6) 可送STC-ISP下载编程器,1万片/人/天。
(7) 可供应内部集成MAX810专用复位电路的单片机,有内部集成专用复位电路,原复位电路可以保留,也可以不用,不用时RESET脚接1K电阻到地线。
选择STC89C516RD+单片机其高速,高可靠,可在线编程,功耗更低,降低了成本,提升了性能。
1.2 温度传感器(DS18B20)
1.2.1 DS18B20简介
DS18B2O是美国DALLAS半导体公司继DS18B2O之后最新推出的一种数字化单总线器件,属于新一代适配微处理器的改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现弘12位的数字读数方式。可以分别在9375ms和750Ins 内完成9位和12位的数字量,并且从DSl8B20读出的信息或写入DSl8B2O的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高.同时其“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入了全新的概念。DSl8B20“一线总线”数字化温度传感器支持“一线总线”接口,测量温度范围为一55℃到+125℃,在一10℃到+85℃范围内,精度为度为±5℃。现场温度直接以“一线总线”的数字方式传输,用符号扩展的16位数字量方式串行输出,大大提高了系统的抗干扰性。因此,数字化单总线器件DSISB加适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。它在测温精度、转换时间、传输距离、分辨率等方面较Dsl820 都有了很大的改进,给用户带来了更方便和更令人满意的效果。可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中.
1.2.2 DSl8B20的性能特点
(1)采用DALLAS公司独特的单线接口方式:DSl8B20与微处理器连接时仅需要一条口线即可实现微处理器与Ds18B20的双向通讯。
(2) 在使用中不需要任何外围元件。
(3)可用数据线供电,供电电压范围:十3.0V一+5.5V。
(4) 测温范围:一5℃—+125℃。固有测温分辨率为0.5℃。在一10℃到+85℃范围内,可确保测量误差不超过0.5℃,在一55s+125℃范围内,测量误差也不超过2℃。
(5) 通过编程可实现9~12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DSl8B20可以并联在唯一的三线上,实现多点测温。
(8) 负压特性,即具有电源反接保护电路.当电源电压的极性反接时,能保护DS18B20不会因发热而烧毁。但此时芯片无法正常工作。
(9)DS18BZO的转换速率比较高,进行9位的温度转换仅需3975ms。
(10)适配各种单片机或系统。
(11) 内含46位激光修正的只读存储ROM,扣除8位产品系列号和8位循环冗余校验码(CRC)之后,产品序号占48位。出厂前产品序号存入其ROM中。在构成大型温控系统时,允许在单线总线上挂接多片DS18B20。
1.2.3 DS18B20的管脚排列
DS18B20采用3脚PR35封装或8脚SOIC封装。其管脚排列如图3所示。
图3 管脚排列图
I/O为数据输入/输出端(即单线总线),它属于漏极开路输出,外接上拉电阻后,常态下呈高电平。UDD是可供选用的外部电源端,不用时接地,CND为地,NC空脚。
1.2.4 DS18B20的内部结构
DS18B20的内部结构框图如图5所示。它主要包括7部分:1、寄生电源;2、温度传感器;3、64位激光(loser)ROM与单线接口; 4、高速暂存器 ,即便筏式RAM,用于存放中间数据;5、TH触发寄存器和TL触发寄存器,分别用来存储用户设定的温度上下限值;6、存储和控制逻辑;7、8位循环冗余校,验码(CRC)发生器。
图4内部结构框图
(1)64位闪速ROM的结构如表3下:
表1 ROM的结构
高8位是CRC校验码,接着是每个器件的惟一的序号,共有48位,低8位是产品类型的编号,前56位的这也是多个DS18B20可以采用一线进行通信的原因。
(2)非易失性温度报警触发器,TH和TL,可通过软件写入用户报警上下限。
(3) 高速暂存存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2ZRAM.后者用于存储TH,TL值。数据先写入RAM,经校验后再传给E2ZRAM。而配置寄存器为高速暂存器中的第5个字节,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下:
低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,RI和RO决定温度转换的精度位数,即用来设置分辨率,如表4所示(Dsl8B20出厂时被设置为12位)。
表2
由表可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间两者中权衡考虑。高速暂存存储器除了配置寄存器外,还有其他8个字节组成,其分配如表3所示。
表3
其中第 1 、2字节是温度信息,第3、4字节是TH和LT值,第6~8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。温度值格式如表4下:
表4温度值格式
以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在DSl8B20的两个高低8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,即符号位S=0,这时只要直接将测到的数值二进制位转换为十进制,再乘以0.0625即可得到实际温度;如果温度小于0,这5位为1,即符号位S=1,这时先将补码变换为原码,也就是测到的数值需要取反加1再计算十进制值,最后乘以0.0625才能得到实际温度。下表是对应的一部分温度值如表5:
表5 温度值
DSl8B20完成温度转换后,就把测得的温度值T与TH、LT作比较,若T>TH或T<TL,
则将该器件内的告警标志位置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B2O同时测量温度并进行告警搜索。
(4) CRC的产生
在46位ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。
1.2.5 DS18B2O的控制方法
在硬件上,DS18B20与单片机的连接有两种方法。一种是将DS18B20的VDD接外部电源,GND接地,其I/0与单片机的I/0线相连;另一种是用寄生电源供电,此时DS18B20的VDD、GND接地,其I/0接单片机工I/0。无论是内部寄生电源还是外部供电,DS18B2O的I/0口线要接5K左右的上拉电阻。DS18B20有六条控制命令,如表6所示:
表6 六条控制命令
CPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作和对数据操作.DSl8B20每一步操作都要遵循严格的工作时序和通信协议。例如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,必须经历三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DSl8B20进行预定的操作。
1.2.6 DSl8B20的测温原理
DS18B2O的测温原理如图4所示。
图4 测温原理图
图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振的振荡频率随温度变化而明显改变,所产生的信号作为减法计数器2的脉冲输入。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在一5℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
1.2.7 DS18B20 的时序
由于DS18B2O采用的是1一Wier总线协议方式,即在一根数据线实现数据的双向传输,单线通信功能是分时完成的,有严格的时序概念,因此读写时序很重要。系统对DSl8B20的各种操作必须按协议进行。操作协议为:初始化DSl8B20 (发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
各种操作的时序图与DSl8B20相同,DSl8B20的复位时序图如图5所示。
图5 复位时序图
DSl8B20的读时序分为读0时序和读1时序两个过程。DS18B20的读时序是从主机把单总线拉低之后,在15us之内就得释放单总线,以让DSl8B20把数据传输到单总线上。DSl8B20在完成一个读时序过程,至少需要6Ous才能完成。
DS18B20的读时序图如图6所示。
图6 读时序图
DS18B20的写时序仍然分为写0时序和写1时序两个过程,但对写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B2O能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
DS18B2O的写时序图如图7所示。
图7 写时序图
所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
1.2.8 DS18B20使用中的注意事项
DS18B2O虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送,因此,在对DSl8B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL∕M、C等高级语言进行系统程序设计时,对DSl8B2O操作部分最好采用汇编语言实现。
(2)在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此。当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
(3)连接DS18B20的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS18B20加进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VD和地线,屏蔽层在源端单点接地。
(4)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。
1.3 1602字符液晶显示器
工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)
图8 1602引脚说明
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
引脚
符号
功能说明
1
VSS
一般接地
2
VDD
接电源(+5V)
3
V0
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4
RS
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5
R/W
R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
低4位三态、 双向数据总线 0位(最低位)
8
DB1
低4位三态、 双向数据总线 1位
9
DB2
低4位三态、 双向数据总线 2位
10
DB3
低4位三态、 双向数据总线 3位
11
DB4
高4位三态、 双向数据总线 4位
12
DB5
高4位三态、 双向数据总线 5位
13
DB6
高4位三态、 双向数据总线 6位
14
DB7
高4位三态、 双向数据总线 7位(最高位)(也是busy flag)
15
BLA
背光电源正极
16
BLK
背光 电源负极
寄存器选择控制表
RS
R/W
操作说明
0
0
写入指令寄存器(清除屏等)
0
1
读busy flag(DB7),以及读取位址计数器(DB0~DB6)值
1
0
写入数据寄存器(显示各字型等)
1
1
从数据寄存器读取数据
注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.
busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求。
字符集
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
指令集
1602通过D0-D7的8位数据端传输数据和指令。
显示模式设置: (初始化)
0011 1000 [0x38] 设置16×2显示,5×7点阵,8位数据接口;
显示开关及光标设置:(初始化)
0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)
0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),
N=0(读或写一个字符后地址指针减1 &光标减1),
S=1 且 N=1 (当写一个字符后,整屏显示左移)
s=0 当写一个字符后,整屏显示不移动
数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)
其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
通常推荐的初始化过程:
延时15ms
写指令38H
延时5ms
写指令38H
延时5ms
写指令38H
延时5ms
(以上都不检测忙信号)
(以下都要检测忙信号)
写指令38H
写指令08H 关闭显示
写指令01H 显示清屏
写指令06H 光标移动设置
写指令0cH 显示开及光标设置
完毕
Proteus仿真
使用Proteus仿真1602--即LM016L--依照数据手册说明可能遇到困难,可以尝试采用以下方案解决:
1、数据手册中可能介绍1602内部D0~D7已有上拉,可以使用P0口直接驱动。在Proteus里LM016L内部可能没有,应该人为
加上拉电阻。建议不要使用排阻,使用普通电阻一个一个拉应该可以解决问题;
2、可能碰到不能检测忙信号的问题,尝试使用延时把忙信号拖过去。
基本的读写时序图
读写操作时序如图8和9所示:
图8 写操作时序
图9 读操作时序
1.4接口电平转换芯片(MAX232)
该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口RS232电平是-10v~ +10v,而一般的单片机应用系统的信号电压是ttl电平0 ~+5v,MAX232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。其引脚功能说明如图12所示:
(1) C1+、C1-(1、3脚):电压加倍充电泵电容的正、负端。图10引脚图
(2)
(3) V+、V-(2、6脚):充电泵产生的+5.5V、-5.5V电压。
(4) C2+、C2-(4、5脚):转换充电泵电容的正、负端。
(5) T2OUT、T1OUT(7、14脚):RS232发送器输出。
(6) R2IN、R1IN(8、13脚):RS232接收器输入。
(7) T2IN、T1IN(9、12脚):TTL/COMS发送器输出。
(8) GND(15脚):接地。
(9) VCC(16脚):电源端,供电电压为3.0—5.5V。
2. 硬件系统设计
该系统的电路图主要有以下几部分组成:单片机最小系统,液晶显示电路,温度采集电路,按键电路,电源稳压电路,串口电路,加热电路。其流程图及原理图如下图11所示:
按键
STC89C516RD+单片机
PC主机
1602显示器
RS232串口
电源
加热灯泡
7805稳压电路
DS18B20温度采集
图11 流程图及原理图
2.1单片机最小系统
图12单片机最小系统图
图中的最下系统包括电源,时钟脉冲,复位端,EA接Vcc(+5V)。
XTAL1:接外部晶体的一端。在单片机内部,它是反响放大器的输入端,该放大器构成了片内振荡器。在采用外部时钟电路时,对于HMOS单片机,此引脚必须接地;对CHMOS单片机,此引脚作为驱动端。
XTAL2:接外部晶体的另一端。在单片机内部,它是反响放大器的输出端。若采用外部时钟电路时,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬空。
单片机是整个系统的CPU,单片机首先根据DSl8820传送回的信号并进行由PID控制计算出相应的控制输出量,将控制输出量输出去控制加热降温装置,从而实现温度控制.单片机还负责按键处理、液晶显示等工作。
2.2液晶显示电路
图13 1602液晶显示电路
RS接P2.5,R/W接P2.6,E接P2.7,数据口接P0;
2.3 传感器原理图
图14 DS18B20电路图
采用DS18B20作为的温度采集器,它具有独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应,用无需外部元件,可用数据总线供电,电压范围为3.0V至5.5V无需备用电源,测量温度范围为一55℃至+125℃。
2.4 电源输入电路
图 15 电源输入电路
图中的电容为滤波电容。稳压的输出的5伏电压给单片机,显示器等电路供电。
2.5串口电路
图16 串口电路
图中所有电容都为滤波电容,9,10分别接单片机的TXD/P3.1和RXD/P3.0。
2.6 加热电路
图17 加热电路
通过P1.0口控制NPN三极管的导通和截止,从而控制发热灯泡的亮灭。发热灯泡亮时加热,灭时自然冷却。
3 系统软件设计
3.1程序流程图
图18 程序流程图
延时
开始
初始化
是否有按键按下
采集环境温度值
设定环境温度值
采集温度值和设定温度值处理后送显示
采集温度值<设定温度值?
NPN三极管导通,灯泡点亮加热
NPN三极管截止,灯泡熄灭,自然冷却
是
否
是
否
3.2 温度检测子程序
DS18B20 使用的关键在于清楚总线的读写时序。
由于 DS18B20 外接电路极为简单,所以电路连接没有问题;但在软件编程上,就要求严格按照它的时序进行读写操作。
具体操作如下:
对 DS18B20 操作时,首先要将它复位。将 DQ 线拉低 480
至 960μs,再将数据线拉高 15 至 60μs,然后,DS18B20 发出 60
至此 240μs 的低电平作为应答信号,这时主机才能对它进行其
它操作。
写操作:将数据线从高电平拉至低电平,产生写起始信号。从 DQ 线的下降沿起计时,在 15μs 到 60μs 这段时间内对数据线进行检测,如数据线为高电平则写 1;若为低电平,则写 0,完成了一个写周期。在开始另一个写周期前,必须有 1μs 以上的高电平恢复期。每个写周期必须要有 60μs 以上的持续期。
读操作:主机将数据线从高电平拉至低电平 1μs 以上,再使数据线升为高电平,从而产生读起始信号。从主机将数据线从高电平拉至低电平起 15μs 至 60μs,主机读取数据。每个读周期最短的持续期为 60μs。周期之间必须有 1μs 以上的高电平恢复期。
系统软件采用 keil c51 编制。
复位子程序:
uchar reset() //复位DS18B20
{
uchar receive_redy;//定义应答信号
DB=0; //拉低DB总线开始复位
delay(29);//保持低电平480us
DB=1;//释放总线
delay(3);//等待芯片应答信号75us
receive_redy=DB;//获取应答信号
delay(25);//延时以完成整个时序
return (receive_redy);//返回应答信号,有芯片应答信号返回0,无芯片则返回1
}
读一位数据子程序
uchar read_bit() // 从DS18B20读一个位值
{
uint i;
DB=0;//拉低DB,开始读时序
DB=1; //释放总线
for(i=0;i<3;i++);
return(DB);
}
读一字节子程序
uchar read_byte() //从DS18B20读一个字节
{
uchar m,i,receive_data;
m=1;
receive_data=0;
for(i=0;i<8;i++)
{
if(read_bit())//读一字节数据,一个时序中读一次,并做移位处理
{
receive_data=receive_data+(m<<i);
}
delay(6);
}
return(receive_data);
}
写一位数据子程序
void write_bite(uchar bitval) // 向DS18B20写一位
{
DB=0;
if(bitval==1)
DB=1;
delay(5);
DB=1;
}
写一个字节子程序
void write_byte(uchar val) //向DS18B20写一个字节
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=val>>i;
temp=temp&0x01;
write_bite(temp);
delay(5);
}
}
3.3 键盘扫描子程序
键盘扫描子程序主要完成设定温度值的输入,可随时设定目标温度值。
float keyscan(float a) //独立按键扫描程序,设定目标温度值
{
P3=0xff;
if(s1==0) //判断温度加按键是否按下
{
delay1(10);//延时去抖
if(s1==0)
{
a+=0.250;//键盘按下,设定温度值加0.25度
}
while(!s1);//判断按键是否松开
delay1(10);//延时去抖
while(!s1);
}
if(s2==0)//判断温度减按键是否按下
{
delay1(10);
if(s2==0)
{
a-=0.250; //键盘按下,设定温度减0.25度
}
while(!s2);
delay1(10);
while(!s2);
}
return(a); //返回设定温度值
}
3.4 1602字符液晶显示子程序
void init() //1602初始化
{
E=0;
RW=0;
展开阅读全文