1、基于单片机温度控制系统设计汉字摘要伴随微机测量和控制技术快速发展和广泛应用,以单片机为关键温度采集和控制系统研发和应用在很大程度上提升了生产生活中对温度控制水平。本设计叙述了一个以STC89C52单片机为主控制单元,以DS18B20为温度传感器温度控制系统。该控制系统能够实时存放相关温度数据并统计目前时间。系统设计了相关硬件电路和相关应用程序。硬件电路关键包含STC89C52单片机最小系统,测温电路、实时时钟电路、LCD液晶显示电路和通讯模块电路等。系统程序关键包含主程序,读出温度子程序,计算温度子程序、按键处理程序、LCD显示程序和数据存放程序等。关键词 STC89C52单片机;DS18B2
2、0;显示电路Based on single chip microcomputer temperature control system designAbstractAlong with the computer measurement and control technology of the rapid development and wide application, based on singlechip temperature gathering and control system development and application greatly improve the pro
3、duction of temperature in life level of control. This design STC89C52 describes a kind of mainly by MCU control unit, for temperature sensor DS18B20 temperature control system. The control system can real-time storage temperature data and record related to the current time. System design related har
4、dware circuit and related applications. STC89C52 microcontroller hardware circuit include temperature detection circuit smallest system, and real-time clock circuit, LCD display circuit, communication module circuit, etc. System programming mainly include main program, read temperature subroutine, t
5、he calculation of temperature subroutines, key processing procedures, LCD display procedures and data storage procedures, etc. Keywords STC89C52 microcontroller;DS18B20;display circuit目 录一、引言4(一)课题研究背景4(二)课题研究目标和意义5二、硬件电路设计5(一)系统设计框架5(二)单片机最小系统电路6(三)单片机选型61.STC89C52单片机介绍62.STC89C52单片机时序73.STC89C52单片
6、机引脚介绍7(四)温度传感器电路9(五)系统电源电路设计10(六)LCD显示电路11(七)串口通讯电路12(八)按键接口电路13(九)DS1302时钟电路13(十)存放器接口电路13三、系统软件设计14(一)计算温度子程序15(二)按键处理子程序15(三)计算温度子程序16(四)显示数据刷新子程序17四、结束语18参考文件19致谢20附件1:系统原理图21附件2:系统相关程序22一、DS18B20底层驱动程序22二、DS1302时钟底层驱动程序27三、数据存放底层驱动程序33一、引言(一)课题研究背景工业控制是计算机一个关键应用领域,计算机控制系统正是为了适应这一领域需要而发展起来一门专业技术
7、,它关键研究怎样将计算机技术、经过信息技术和自动控制理论应用于工业生产过程,并设计出所需要计算机控制系统。伴随微机测量和控制技术快速发展和广泛应用,以单片机为关键温度采集和控制系统研发和应用在很大程度上提升了生产生活中对温度控制水平。本设计就是基于单片机STC89C52温度控制系统设计,经过此次课程实践,我们愈加明确了单片机广泛用途和使用方法,和其工作原理。(二)课题研究目标和意义伴随社会发展,温度测量及控制变得越来越关键。本文采取单片机STC89C52设计了温度实时测量及控制系统。单片机STC89C52 能够依据温度传感器DS18B20 所采集温度在液晶屏上实时显示,经过控制从而把温度控制在
8、设定范围之内。全部温度数据均经过液晶显示器LCD显示出来。系统能够依据时钟存放相关数据。经过该课程学习使我们对计算机控制系统有一个全方面了解、掌握常规控制算法使用方法、掌握简单微型计算机应用系统软硬设计方法,深入锻炼同学们在微型计算机应用方面实际工作能力。二、硬件电路设计(一)系统设计框架本课题设计是一个以STC89C52单片机为主控制单元,以DS18B20为温度传感器温度控制系统。该控制系统能够实时存放相关温度数据并统计目前时间。其关键包含:电源模块、温度采集模块、按键处理模块、实时时钟模块、数据存放模块、LCD显示模块、通讯模块和单片机最小系统。图1 系统设计框架(二)单片机最小系统电路在
9、课题设计温度控制系统设计中,控制关键是STC89C52单片机,该单片机为51系列增强型8位单片机,它有32个I/O口,片内含4K FLASH工艺程序存放器,便于用电方法瞬间擦除和改写,而且价格廉价,其外部晶振为12MHz,一个指令周期为1S。使用该单片机完全能够完成设计任务,其最小系统关键包含:复位电路、震荡电路和存放器选择模式(EA脚高低电平选择),电路以下图2所表示:图2 单片机最小系统(三)单片机选型本课题设计温度控制系统主控制芯片选型为STC89C52单片机,其特点以下:1.STC89C52单片机介绍现在,51系列单片机在工业检测领域中得到了广泛应用,所以我们能够在很多单片机应用领域中
10、,配接多种类型语音接口,组成含有合成语音输出能力综合应用系统,以增强人机对话功效。STC89C52单片机是深圳宏晶科技生产一个单片机,在一小块芯片上集成了一个微型计算机各个组成部分。每一个单片机包含:一个8位微型处理器CPU;一个512K片内数据存放器RAM;4K片内程序存放器;四个8位并行I/O接口P0-P3,每个接口既能够输入,也能够输出;两个定时器/记数器;五个中止源中止控制系统;一个全双工UART串行I/O口;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高许可振荡频率是12MHZ。以上各个部分经过内部总线相连接。2.STC89C52单片机时序 STC89C52单片机一个执
11、器周期由6个状态(s1s6)组成,每个状态又连续2个震荡周期,分为P1和P2两个节拍。这么,一个机器周期由12个振荡周期组成。若采取12MHz晶体振荡器,则每个机器周期为1us,每个状态周期为16us;在一数情况下,算术和逻辑操作发生在N期间,而内部寄存器到寄存器传输发生在P2期间。对于单周期指令,当指令操作码读人指令寄存器时,使从S1P2开始实施指令。假如是双字节指令,则在同一机器周期s4读人第二字节。若为单字节指令,则在51期间仍进行读,但所读入字节操作码被忽略,且程序计数据也不加1。在加结束时完成指令操作。多数STC89C52指令周期为12个机器周期,只有乘法和除法指令需要两个以上机器周
12、期指令,它们需4个机器周期。 对于双字节单机器指令,通常是在一个机器周期内从程序存放器中读人两个字节,但Movx指令例外,Movx指令是访问外部数据存放器单字节双机器周期指令,在实施Movx指令期间,外部数据存放器被访问且被选通时跳过两次取指操作。3.STC89C52单片机引脚介绍STC89C52单片机40个引脚中有2个专用于主电源引脚,2个外接晶振引脚,4个控制或和其它电源复用引脚,和32条输入输出I/O引脚。下面按引脚功效分为4个部分叙述个引脚功效。(1)电源引脚Vcc和VssVcc(40脚):接+5V电源正端;Vss(20脚):接+5V电源正端。(2)外接晶振引脚XTAL1和XTAL2X
13、TAL1(19脚):接外部石英晶体一端。在单片机内部,它是一个反相放大器输入端,这个放大器组成采取外部时钟时,对于HMOS单片机,该引脚接地;对于CHOMS单片机,该引脚作为外部振荡信号输入端。XTAL2(18脚):接外部晶体另一端。在单片机内部,接至片内振荡器反相放大器输出端。当采取外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号输入端。对于CHMOS芯片,该引脚悬空不接。(3)控制信号或和其它电源复用引脚 控制信号或和其它电源复用引脚有RST/VPD、ALE/P、PSEN和EA/VPP等4种形式。(A)RST/VPD(9脚):RST即为RESET,VPD为备用电源,所以该引脚为单片机
14、上电复位或掉电保护端。当单片机振荡器工作时,该引脚上出现连续两个机器周期高电平,就可实现复位操作,使单片机复位到初始状态。当VCC发生故障,降低到低电平要求值或掉电时,该引脚可接上备用电源VPD(+5V)为内部RAM供电,以确保RAM中数据不丢失。(B)ALE/ P (30脚):当访问外部存放器时,ALE(许可地址锁存信号)以每机器周期两次信号输出,用于锁存出现在P0口低(C)PSEN(29脚):片外程序存放器读选通输出端,低电平有效。当从外部程序存放器读取指令或常数期间,每个机器周期PESN两次有效,以经过数据总线口读回指令或常数。当访问外部数据存放器期间,PESN信号将不出现。(D)EA/
15、Vpp(31脚):EA为访问外部程序储器控制信号,低电平有效。当EA端保持高电平时,单片机访问片内程序存放器4KB(MS52子系列为8KB)。若超出该范围时,自动转去实施外部程序存放器程序。当EA端保持低电平时,不管片内有没有程序存放器,均只访问外部程序存放器。对于片内含有EPROM单片机,在EPROM编程期间,该引脚用于接21V编程电源Vpp。 (4)输入/输出(I/O)引脚P0口、P1口、P2口及P3口(A).P0口(39脚22脚):P0.0P0.7统称为P0口。当不接外部存放器和不扩展I/O接口时,它可作为准双向8位输入/输出接口。当接有外部程序存放器或扩展I/O口时,P0口为地址/数据
16、分时复用口。它分时提供8位双向数据总线。对于片内含有EPROM单片机,当EPROM编程时,从P0口输入指令字节,而当检验程序时,则输出指令字节。(B).P1口(1脚8脚):P1.0P1.7统称为P1口,可作为准双向I/O接口使用。对于MCS52子系列单片机,P1.0和P1.1还有第2功效:P1.0口用作定时器/计数器2计数脉冲输入端T2;P1.1用作定时器/计数器2外部控制端T2EX。对于EPROM编程和进行程序校验时,P0口接收输入低8位地址。(C).P2口(21脚28脚):P2.0P2.7统称为P2口,通常可作为准双向I/O接口。当接有外部程序存放器或扩展I/O接口且寻址范围超出256个字
17、节时,P2口用于高8位地址总线送出高8位地址。对于EPROM编程和进行程序校验时,P2口接收输入8位地址。(D).P3口(10脚17脚):P3.0P3.7统称为P3口。它为双功效口,能够作为通常准双向I/O接口,也能够将每1位用于第2功效,而且P3口每一条引脚均可独立定义为第1功效输入输出或第2功效。P3口第2功效见下表 表1 单片机P3.0管脚含义引脚第2功效P3.0RXD(串行口输入端0)P3.1TXD(串行口输出端)P3.2INT0(部中止0请求输入端,低电平有效)P3.3INT1(中止1请求输入端,低电平有效)P3.4T0(时器/计数器0计数脉冲端)P3.5T1(时器/计数器1数脉冲端
18、)P3.6WR(部数据存放器写选通信号输出端,低电平有效)P3.7RD(部数据存放器读选通信号输出端,低电平有效)总而言之,MCS51系列单片机引脚作用可归纳为以下两点:1).单片机功效多,引脚数少,所以很多引脚含有第2功效;2).单片机对外呈3总线形式,由P2、P0口组成16位地址总线;由P0口分时复用作为数据总线。(四)温度传感器电路采取一线制数字温度传感器DS18B20来作为本课题温度传感器。传感器输出信号进4.7K上拉电阻直接接到单片机P1.0引脚上。DS18B20温度传感器是美国达拉斯(DALLAS)半导体企业推出应用单总线技术数字温度传感器。该器件将半导体温敏器件、A/D转换器、存
19、放器等做在一个很小集成电路芯片上。本设计中温度传感器之所以选择单线数字器件DS18B20,是在经过多方面比较和考虑后决定,关键有以下几方面原因:(1)系统特征:测温范围为-55+125 ,测温精度为士0.5;温度转换精度912位可变,能够直接将温度转换值以16位二进制数码方法串行输出;12位精度转换最大时间为750ms;能够经过数据线供电,含有超低功耗工作方法。(2)系统成本:因为计算机技术和微电子技术发展,新型大规模集成电路功效越来越强大,体积越来越小,而价格也越来越低。一支DS18B20体积和一般三极管相差无几,价格只有十元人民币左右。(3)系统复杂度:因为DS18B20是单总线器件,微处
20、理器和其接口时仅需占用1个I/O端口且一条总线上能够挂接几十个DS18B20,测温时无需任何外部元件,所以,和模拟传感器相比,能够大大降低接线数量,降低系统复杂度,降低工程施工量。(4)系统调试和维护:因为引线降低,使得系统接口大为简化,给系统调试带来方便。同时因为DS18B20是全数字元器件,故障率很低,抗干扰性强,所以,降低了系统日常维护工作。DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ ,外供电源线VDD,共用地线GND。DS18B20有两种供电方法:一个为数据线供电方法,此时VDD接地,它是经过内部电容在空闲时从数据线获取能量,来完成温度转换,对应完成温度转换时间较
21、长。这种情况下,用单片机一个I/O口来完成对DS18B20总线上拉。另一个是外部供电方法(VDD接+5V),对应完成温度测量时间较短。在本设计中采取外部供电方法实现DS18B20传感器和单片机连接,其接口电路图4所表示。图4 温度传感器接口(五)系统电源电路设计本系统采取电源稳压芯片是LM2596,该开关电压调整器是降压型电源管理单片集成电路,能够输出3A驱动电流,输入电压是+5v,输入电压是+24v,同时含有很好线性和负载调整特征。该器件内部集成频率赔偿和固定频率发生器,开关频率为150KHz,和低频开关调整器相比较,能够使用更小规格滤波元件。 该器件还有其它部分特点:在特定输入电压和输出负
22、载条件下,输出电压误差能够确保在4%范围内,振荡频率误差在15%范围内;能够用仅80A待机电流,实现外部断电;含有自我保护电路(一个两级降频限流保护和一个在异常情况下断电过温完全保护电路)在该温度控制系统中,其电源电路设计以下图10所表示。图5 系统电源模块(六)LCD显示电路本课题设计温度控制系统是采取液晶屏128*64作为显示模块,其接口原理图以下图6所表示:图6 液晶显示接口电路(七)串口通讯电路本课题设计通讯采取是常见串口通讯,协议转换芯片是采取MAX232A,其接口原理图以下图7所表示:图6 串口通讯接口电路(八)按键接口电路本课题设计采取键盘模块,其接口原理图以下图8所表示:图8
23、键盘模块电路(九)DS1302时钟电路本课题设计时钟是采取时钟芯片DS1302,其接口原理图以下图9所表示:图9 时钟接口电路(十)存放器接口电路本课题设计存放器采取是AT24C256,其接口原理图以下图十所表示:图10 存放器电路三、系统软件设计系统软件关键是采取C语言,对单片机进行变成实现各项功效。主程序对模块进行初始化,以后调用读温度、处理温度、显示、键盘等模块。用是循环查询方法,来显示和控制温度,主程序关键功效是负责温度实时显示、读出并处理DS18B20测量目前温度值并负责调用各子程序,其程序步骤图10系统程序步骤图。开始初始化开启DB18B20读温度计算温度LCD显示图10系统程序步
24、骤图(一)计算温度子程序 读出温度子程序关键功效包含初始化,判定DS18B20是否存在,若存在则进行一系列读操,作若不存在则返回。其程序步骤图图11所表示。图11 读温度步骤图 (二)按键处理子程序 按键处理子程序关键是负责参数设置,主程序每循环一次全部要对按键进行扫描,判定是否有输入键按下则进行一系列按键输入操作。其程序步骤框图图12所表示。图12 温度转换步骤图(三)计算温度子程序计算温度子程序将RAM中读取值进行BCD码转换运算,并进行温度值正负判定,其程序步骤图图13所表示。 开始温度零下?温度值取补码置“”标志计算小数位温度BCD值计算整数位温度BCD值 结束置“+”标志NY图13
25、计算温度子程序(四)显示数据刷新子程序显示数据刷新子程序关键是对显示缓冲器中显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序步骤图图14。温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY图14 数据刷新子程序四、结束语经过此次毕业论文课题设计,我们学会了怎样把所学书本知识应用于实践中去,并学会了怎样去思索整个控制系统软硬件设计。实践过程中我们碰到了部分困难,但在处理问题过程中,我们学会了团体合作精神和怎样发觉问题、分析问题,进而处理问题。此次课程设计不仅增强了我们学习专业课爱好,而且给了我们勇气和信心,更关键是它
26、为我们以后学习指明了方向。参考文件1 李广弟,朱月秀,王秀山.单片机基础北京航空航天大学出版社,(07).2 蔡美琴,张为民等.MCS-51系列单片机系统及其应用高等教育出版社,(06).3 张毅刚,等.MCS-51单片机应用设计M.哈尔滨工业大学出版社,1997.4 刘瑞星,胡健等.Protel DXP 实用教程机械工业出版社,(04).5 于海生. 计算机控制技术 机械工业出版社 (05).6 谭浩强. C程序设计 清华大学出版社.7 康华光. 电子技术基础 模拟部分 高等教育出版社 1998(08).8 余锡存. 单片机原理和接口技术 西安电子科技大学出版社,.致谢本论文是在我指导老师亲
27、密关心和悉心指导下完成。老师在课题开题期间和论文写作过程中给了我很多指导,导师总是以认真负责、一丝不苟工作态度阅读并修改文章中不足地方,她优良作风和严谨治学态度深深影响着我,至此,向恩师致以最真挚感谢和最高尚敬意!同时我要感谢我同学,尤其是我室友们,正是她们在这几年里陪我一起成长,一起学习,才让我有了今天成绩。她们在平时学习和生活中她们给了我无私关心和帮助,在此表示我最真挚谢意。附件1:系统原理图附件2:系统相关程序一、DS18B20底层驱动程序/延时 N ms/DS1820引脚定义sbit TMDAT =P10;void DS1820_DelayCount (unsigned char Co
28、un) data unsigned char Count; Count=Coun; while(Count0) Count-; Count=Coun; while(Count0) Count-;/复位DS18B20void DS1820_Reset(void) TMDAT=0; DS1820_DelayCount(412); TMDAT=1; DS1820_DelayCount(16); /等候DS18B20应答unsigned char DS1820_Answer(void)data unsigned int i;data unsigned char j; i=0xc000; while(T
29、MDAT) i-;if (i=0)return(aban_return); i=0xffff; j=3; while(TMDAT) i-;if (i=0) if(j=0) return(aban_return); else j-; i=0xffff; DS1820_DelayCount(16); return(done_return);/等候DS18B20应答/读取位bit DS1820_Readbit(void) data int i=0; bit dat; TMDAT=0;i+;i+;i+;i+; TMDAT=1;i+;i+;i+;i+;i+;i+;i+;i+; dat = TMDAT;/
30、 DS1820_DelayCount(8); DS1820_DelayCount(32); return dat;/读取字节unsigned char DS1820_Readbyte(void)data unsigned char i,j,dat=0; for(i=1;i=8;i+) j=DS1820_Readbit(); dat=(j1); return dat;/写一个字节void DS1820_Writebyte(unsigned char dat) data signed char i=0; data unsigned char j; bit testb; for(j=1;j1; if
31、(testb) TMDAT=0; i+;i+;i+;i+;i+;i+;i+;i+; TMDAT=1; /DS1820_DelayCount(8); DS1820_DelayCount(32); else TMDAT=0; /DS1820_DelayCount(8); DS1820_DelayCount(32); TMDAT=1; i+;i+;i+;i+;i+;i+;i+;i+; /读操作开始unsigned char DS1820_StartTem(void) EA=0; DS1820_Reset(); if(DS1820_Answer()=aban_return) EA=Ea; return
32、(aban_return); / DS1820_Delayms(1); DS1820_Delayms(4); DS1820_Writebyte(0xcc); / DS1820_Writebyte(0x55); / for(i=0;i8;i+) /DS1820_Writebyte(DS1820_tempi); DS1820_Writebyte(0x44); EA=Ea; return(done_return);/读全部传感器int DS1820_ReadTem(void)data unsigned char a,b;data int y3;data float y4;data unsigned
33、char i; EA=0; DS1820_Reset(); if(DS1820_Answer()=aban_return) EA=Ea; return(0xffff); DS1820_Delayms(4); DS1820_Writebyte(0xcc); /跳过匹配传感器 /DS1820_Writebyte(0x55); /匹配传感器 / for(i=0;i8;i+) /DS1820_Writebyte(run_inf.system_index.DS1820_tempi); DS1820_Writebyte(0xbe); /读取温度 for(i=0;i9;i+) run_inf.system_
34、index.DS1820_tempi=DS1820_Readbyte(); if(CRC(9)!=0) EA=1; return(0xffff); /计算CRC a = run_inf.system_index.DS1820_temp0; b = run_inf.system_index.DS1820_temp1; DS1820_Reset(); y3 = (b0; i-)rtc_io = temp_0; /*相当于汇编中 RRC */rtc_sc = 1;rtc_sc = 0;temp = temp 1; /功效: 从DS1302读取1Byte数据unsigned char uc_RTOut
35、putByte(void) unsigned char i;rtc_io=1;for(i=8; i0; i-) temp = temp 1; /*相当于汇编中 RRC */ temp_7 = rtc_io; rtc_sc = 1; rtc_sc = 0; return(temp); /功效: 往DS1302写入数据void write1302(unsigned char ucAddr,unsigned char ucDa) bit ea; ea=EA; EA=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_RTI
36、nputByte(ucAddr); /* 地址,命令 */v_RTInputByte(ucDa); /* 写1Byte数据*/rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);EA = ea; /功效: 读取DS1302某地址数据unsigned char read1302(unsigned char ucAddr)unsigned char ucDa; bit ea; ea=EA; EA=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_RTInputByte(ucAddr); /* 地址
37、,命令 */ucDa = uc_RTOutputByte(); /* 读1Byte数据 */rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);EA = ea;return(ucDa);/功效: 设置初始时间void Set1302(pTime_S time_temp) unsigned char i= 0x80; write1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/ write1302(i,time_temp-sec); i +=2; write1302(i,time_temp-min); i +=2; write1302(i,time_te
38、mp-hou); i +=2; write1302(i,time_temp-day); i +=2; write1302(i,time_temp-mon); i +=2; write1302(i,0x02); i +=2; write1302(i,time_temp-yea); i +=2; write1302(0x8e,0x80); /* 控制命令,WP=1,写保护*/功效: 读取DS1302目前时间void get1302(void) unsigned char i,time_bcd_temp6;unsigned char ucAddr = 0x81;for (i=0;i7;i+) tim
39、e_bcd_tempi = read1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */ ucAddr += 2; sec=time_bcd_temp0;min=time_bcd_temp1;hou=time_bcd_temp2;day=time_bcd_temp3;mon=time_bcd_temp4;yea=time_bcd_temp6; /连续6字节读出程序void ds1302_read(unsigned char *ptr,unsigned char addr) unsigned char i;addr=addr*2+0x0c1;for(i=0;i6;i+) *(ptr+i)=read1302(addr); addr+=2; /连续6字节写入程序void ds1302_write(unsigned char *ptr,unsigned char addr)unsigned char i;addr=addr*2+0x0c0;write1302(0x8e,0x00); /写保护置低(关闭)for(i=0;i6;i+) write1302(addr,*(ptr+i); addr+=2; write1302(0x8e,0x80); /写保护置高(打开) void Start1302(void) unsigned char temp; bit ea; ea