1、基于单片机温度控制系统设计1.设计规定规定设计一种温度测量系统,在超过限制值时候能进行声光报警。详细设计规定如下:数码管或液晶显示屏显示室内当前温度;在不超过最高温度状况下,可以通过按键设立想要温度并显示;设有四个按键,分别是设立键、加1键、减1键和启动/复位键;DS18B20温度采集;超过设立值5时发出超限报警,采用声光报警,上限报警用红灯批示,下限报警用黄灯批示,正惯用绿灯批示。2.方案论证依照设计规定,本次设计是基于单片机课程设计,由于实现功能比较简朴,咱们学习中接触到51系列单片机完全可以实现上述功能,因而可以选用AT89C51单片机。温度采集直接可以用设计规定中所规定DS18B20。
2、报警和批示模块中,可以选用3种不同颜色LED灯作为批示灯,报警鸣笛采用蜂鸣器。显示模块有两种方案可供选取。方案一:使用LED数码管显示采集温度和设定温度;方案二:使用LCD液晶显示屏来显示采集温度和设定温度。LED数码管构造简朴,使用以便,但在使用时,若用动态显示则需要不断更改位选和段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态显示则又需要更多硬件支持。LCD显示屏可辨认性较好,背光亮度可调,并且比LED数码管显示更多字符,但是编程规定比LED数码管要高。综合考虑之后,我选用了LCD显示屏作为温度显示屏件,由于显示字符多,在进行上下限警戒值设定期同样可以采集并显示当前温度,可以直
3、观看到实际温度与警戒温度对比。LCD显示模块可以选用RT1602C。3.硬件设计依照设计规定,硬件系统重要包括6个某些,即单片机时钟电路、复位电路、键盘接口模块、温度采集模块、LCD显示模块、报警与批示模块。其互相联系如下图1所示:单片机时钟电路复位电路键盘接口模块温度采集模块单 片 机LCD显示模块报警与批示模块图1 硬件电路设计框图3.1单片机时钟电路图2 单片机内部时钟方式电路形成单片机时钟信号方式有内部时钟方式和外部时钟方式。本次设计采用内部时钟方式,如图2所示。单片机内部有一种用于构成振荡器高增益反相放大器,引脚XTAL1和XTAL2分别为此放大器输入端和输出端,其频率范畴为1.21
4、2MHz,经由片外晶体振荡器或陶瓷振荡器与两个匹配电容一起形成了一种自激振荡电路,为单片机提供时钟源。3.2复位电路图3 单片机按键复位电路复位是单片机初始化操作,其作用是使CPU和系统中其她部件都处在一种拟定初始状态,并从这个状态开始工作,以防止电源系统不稳定导致CPU工作不正常。在系统中,有时会浮现工作不正常状况,为了从异常状态中恢复,同步也为了系统调试以便,需要设计一种复位电路。单片机复位电路有上电复位和按键复位两种形式,由于本次设计规定需要有启动/复位键,因而本次设计采用按键复位,如图3。复位电路重要完毕系统上电复位和系统在运营时顾客按键复位功能。3.3键盘接口模块图4 键盘接口模块本
5、次设计需要按键有4个,除去一种复位按键外,尚有3个功能按键,因而选取独立式键盘。如图4,将键盘直接与单片机P1口P1.0、P1.1、P1.2相连。3个键设计思路如下:当按下S1键时,系统进入上下限警戒值调节状态;当第一次按下S1键时,进行上限警戒值设定,当第二次按下S1键时,进行下限警戒值设定,当第三次按下S1键时,回到正常工作状态。在警戒值调节状态下,按下S2键,上下限警戒值加1,按下S3键,上下限警戒值减1,正常工作状态下,按下S2和S3键无作用。3.4温度采集模块本次设计中温度传感器使用是DALLAS公司单总线数字温度传感器DS18B20,这是一种惯用温度传感器,具备体积小、硬件开销低、
6、抗干扰能力强、精度高特点。DS18B20采用独特一线接口,具备只需要一条口线通信多点能力,简化了分布式温度传感应用,无需外部元件。可用数据总线供电,电压范畴为3.0 V至5.5V,测量温度范畴为-55至+125 ,在-10至+85范畴内精度为0.5。温度传感器可编程辨别率为912位,温度转换为12位数字格式最大值为750毫秒,顾客可定义非易失性温度报警设立,应用范畴涉及恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统。由于DS18B20是一条口线通信,因此中央微解决器与DS18B20只有一种一条口线连接。由于每一种DS18B20包括一种独特序号,各种DS18B20可以同步存在于一条总线
7、,这使得温度传感器放置在许多不同地方。它用途诸多,涉及空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。图5 DS18B20封装及引脚DS18B20核心功能是它直接读数字温度传感器。温度传感器精度为顾客可编程9、10、11或12位,分别以0.5,0.25,0.125和0.0625增量递增。在上电状态下默认精度为12位。DS18B20启动后保持低功耗等待状态;当需要执行温度测量和AD转换时,总线控制器必要发出44h命令。在那之后,产生温度数据以两个字节形式被存储到高速暂存器温度寄存器中,DS18B20继续保持等待状态。当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起
8、“读时序”,DS18B20正在温度转换中返回0,转换结束返回1。如果DS18B20由寄生电源供电,除非在进入温度转换时总线被一种强上拉拉高,否则将不会由返回值。在硬件上,DS18B20与单片机连接有两种办法:一种是VDD接外部电源,GND接地,DQ与单片机I/O口相连;另一种是用寄生电源供电,此时,VDD、GND接地,DQ接单片机I/O口。无论是接外部电源还是用内部寄生电源,I/O口线要接5k左右上拉电阻。本次设计中,采用外部电源方式,其连接方式如图6所示。单总线DQ端接单片机P1.7口,DQ端接一种4.7k上拉电阻,这样单总线DQ在闲置状态时为高电平。 图6 DS18B20外部电源连接方式3
9、.5 LCD显示模块在本次设计中,使用RT1602C字符型液晶显示模块(LCM)来设计当前温度和上下限警戒值显示电路。RT1602C字符型液晶显示模块是16字2行采用57点阵图形来显示字符液晶显示屏,采用原则16脚接口,其引脚定义如图7所示。引脚号引脚名说 明引脚号引脚名说 明1GND/Vss电源地7D08位双向数据线2Vdd+5V电源8D13VL液晶显示偏压信号9D24RS数据/命令控制,H/L10D35R/W读/写控制,H/L11D46E使能端12D515BLA背光源正极13D616BLK背光源负极14D7图7 RT1602C引脚定义RT1602C内部构造可以分为3个某些:LCD控制器、L
10、CD驱动器、LCD显示屏,其中LCD控制器采用是HD44780。RT1602C与单片机连线如图8所示。图8 RT1602C与单片机连线LCM数据总线与单片机P0口通过一种上拉电阻排相连,LCM三条控制线RS、RW、EN分别与单片机I/O口P2.0、P2.1、P2.2相连,第1、2引脚分别与地、电源相连,第3引脚使用一种10k可调电阻对显示屏明亮进行调节。3.6报警与批示模块图9 报警与批示模块在本次设计中,采用LED发光二极管作为系统批示灯,采用蜂鸣器作为报警鸣笛。当温度高于上限警戒值时,点亮红色发光二极管,蜂鸣器发出响声;当温度低于下限警戒值时,点亮黄色发光二极管,蜂鸣器发出响声;温度在正常
11、范畴内时,点亮黄色发光二极管。整个报警与批示电路如图9所示,其中绿、红、黄色批示灯分别接单片机P2.0、P2.1、P2.2口,电平拉低时点亮LED,蜂鸣器电路接单片机P2.7口,电平拉高时蜂鸣器响。至此便完毕了整个硬件电路设计工作,整个系统原理图见附录二,系统I/O分派表如下:I/O口功能阐明I/O口功能阐明P0.0P0.7LCM数据口P2.1LCM读/写控制P1.0P1.3键盘输入P2.2LCM使能P1.7DS18B20温度采集P2.4P2.6LED信号输出P2.0LCM数据/命令控制P2.7报警信号输出4.软件设计单片机应用系统设计中,软件设计占有重要位置。在本次设计中,依照功能规定,可以
12、把系统程序划分为5个模块,即主程序模块、显示模块、温度测量模块、键盘扫描模块、其他子程序模块,如图10所示。主程序模块显 示 模 块温 度 测 量 模 块键 盘 扫 描 模 块其 它 子 程 序图10 软件设计框图4.1主程序设计开始初始化温度传感器初始化单片机初始化显示模块键盘扫描读取温度显示字形转换显示主程序内容涉及单片机初始化、有关部件初始化和某些其他子程序调用等。主程序清单如下,程序流程图如图11所示。/*主程序*/void main(void)P1=0xff; /初始化P1口以便读入P2|=0x70;P2&=0x7f;Temp_set1=90; /上限报警温度初值90Temp_set
13、2=10; /下限报警温度初值10Delay(500); /延时500ms启动init_LCD(); /LCD初始化init_18B20(); /DS18B20初始化Display_str(0,0,str2); /开机界面Display_str(0,1,str2); /开机界面图11 主程序流程图Delay();Display_str(0,0,str0);Display_str(0,1,str1);while(1)Key_scan(); /扫描键盘Read_temp(); /读取温度Change();Display(); /显示Alarm(); /批示灯与报警程序Delay(1000);4.2
14、显示模块显示程序重要完毕功能是模式、上下限警戒值和测量温度值显示,模块中包括LCD初始化、显示单个字符子函数、显示一种字符串子函数。程序流程图如图12所示,LCD初始化程序如下,其他子函数程序详见附录一。开始写显示命令定位显示位置写显示字符结束显示/*LCD初始化*/void init_LCD(void)P0=0;Delay(15);LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,0);图12 显示程序流程图Delay(5);LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,1); /8位数据传送,2行显示,
15、5*7字形LCD_Command(0x08,1); /关闭显示LCD_Command(0x01,1); /清屏LCD_Command(0x06,1); /显示光标右移设立LCD_Command(0x0c,1); /显示屏打开,光标不显示不闪烁4.3温度测量模块 温度测量程序重要功能是读出数字温度传感器温度值。要对的地读出温度值必要严格遵守单总线器件命令序列,否则单总线器件不会响应主机。单总线器件命令序列如图13所示。温度测量模块程序流程图如图14所示,DS18B20初始化程序如下,其他子程序详见附录一。/*DS18B20初始化*/void init_18B20(void)uchar x=0;Y
16、N开始读DS18B20序列号初始化DS18B20DS18B20存在?温度转换发跳过ROM指令读取温度返回DQ=1; /DQ复位Delay_us(4); /延时DQ=0; /将DQ拉低Delay_us(250);/精准延时不不大于480usDQ=1; /拉高总线Delay_us(40);x=DQ;开始发ROM指令初始化发功能指令结束Delay_us(20);图14 温度测量程序流程图图13 单总线命令序列4.4键盘扫描模块本次设计中使用了4个按键,除了1个复位键尚有3个功能键,详细功能前面已简介。键盘扫描程序如下,其他子程序详见附录一,有关流程图如图15所示。/*键盘扫描*/void Key_s
17、can(void)uchar temp;P1=0xff;if(P1!=0xff)延时去抖动开始初始化DS18B20有键按下?读取键值Y执行键功能程序返回有键按下?NNYDelay(20); /延时消抖if(P1!=0xff) temp=P1; switch(temp) case 0xfe:Key_set();break;/P1.0按下,功能选取 case 0xfd:Key_inc();break;/P1.1按下,数字加一 case 0xfb:Key_dec();break; /P1.2按下,数字减一 default:break; 图15 键盘扫描程序流程图4.5其他子程序程序中使用其他子程序,
18、涉及延时子程序、显示字符转换子程序等,详细详见附录一。5.仿真分析在本次设计中,使用了Proteus仿真软件进行了功能测试,详细仿真环节及分析如下。(1)按照原理图,从Proteus元件库中找出相应元件,搭建硬件仿真电路,将程序烧写到单片机中,仿真图见附录三。(2)点击运营按钮开始仿真,初始上下限值为90和10,当前温度为25,当前模式为N正常工作,绿灯亮,蜂鸣器不响,如图16。图16 正常模式下仿真图(3)按下S1键,进入上限警戒值设立模式H,此时按S2、S3键可以进行上限值设定,同步温度正常显示,设立上限值80,如图17。图17 上限值设定仿真图(4)再次按下S1键,进入下限警戒值设立模式
19、L,此时按S2、S3键可以进行下限值设定,同步温度正常显示,设立下限值20,如图18。图18 下限值设定仿真图(5)再次按下S1键,返回正常模式N,调节DS18B20温度,测量温度随之变化,减少温度,超过下限值5如下时,黄灯亮,蜂鸣器报警,如图19。图19 下限报警仿真图图20 上限报警仿真图(6)升高温度,超过上限值5以上时,黄灯亮,蜂鸣器报警,如图20。(7)按下S4键,单片机复位。在本次仿真中,可以看出,本次设计硬件电路和软件程序均能成功仿真出来,设计规定各种功能均已达到。6.总结本次课程设计为期一周,到此已所有结束。回忆一周中设计过程,我深深感觉收获良多。由于从前只是在理论上学习了单片
20、机以及各种其他知识,虽然是实验也只是按照实验指引书进行操作,并没有实际独立设计一种系统,因而在刚开始接触本次课程设计时,有一点无从下手感觉。日后通过查阅有关资料,徐徐开始理解课程设计普通过程,开始明白某些元器件有关作用与编程实现办法,并在此期间通过不断进一步学习和锻炼,开始徐徐能纯熟运用和纯熟编程起来。通过本次计算机控制技术课程设计,我更深层次把理论知识和实际设计结合在一起,锻炼了我综合运用所学专业基本知识和解决实际工程问题能力。同步也提高了我查阅文献资料、设计手册、设计规范以及电脑制图等其她知识能力水平。对各种系统合用条件,各种设备选用原则,各种管道安装方式,我都是随着设计不断进一步而逐渐熟
21、悉并学会应用。并且,通过对整体掌控,对局部取舍,对细节斟酌解决,以及绘图技巧都使我在设计领域能力得到了锻炼,得到了较丰富经验。最后,通过这次课程设计,我也深刻地结识到,只有将课本与详细实践相结合,才会有真正收获,才干巩固自己所学,结识到自己局限性,同步咱们也要有一种积极学习态度,时代在进步咱们也要跟着时代迈进,要不断学习,不断创新,用自己知识与行动来证明自己价值。本次课程设计以单片机为核心,简介了用DS18B20温度传感器进行温度采集,并将其传播给AT89C51单片机进行解决再送到LCD显示屏显示。在此期间可以通过按键进行上下限警戒值设立,通过LED和蜂鸣器进行批示和报警。本文是采用模块化方式
22、进行论述,对各模块设计进行了比较详细地阐述,并着重分析硬件搭建过程和系统软件设计过程,使用单片机C语言进行程序没计。本次设计基于DS18B20温度测量系统是一种分布式温度测量系统,它可以远程对温度实现测量和监控,广泛应用于电力工业、煤矿、森林、火灾、高层建筑等场合。本设计应用性比较强,可以应用在仓库温度、大棚温度、机房温度、水池等监控。固然,本次设计还存在某些局限性,例如在本次设计中,由于时间较短,警戒值只是在199之间,没有可以扩展到负温度和100以上;在本次设计中只是用了4个独立按键,实现简朴上下限警戒值设定,操作较麻烦,如果可以设计出多按键矩阵式键盘,则可以对温度进行很以便设定。此外如果
23、把本设计方案扩展为多点温度控制,加上上位机,则可以实现远程温度监控系统,将具备更大应用价值。7.参照文献1 潘新民,王燕芳. 微型计算机控制技术 M. 北京:电子工业出版社,2 王迎旭. 单片机原理与应用 M. 北京:机械工业出版社,3 康华光. 电子技术基本 M. 北京:高等教诲出版社,4 周正华,唐宁 RT1602C与FPGA接口技术 J. 中华人民共和国科技信息,(10)5 廖琪梅,韩彬等. 基于DS18B20温度测量仪 J. 国外电子元器件,(2)附录一:程序清单#include#include#include#define uchar unsigned char#define uin
24、t unsigned int#define BUSY 0x80void Delay(uint);void init_LCD(void);void LCD_Command(uchar,uchar);void LCD_Data(uchar);void ReadyLCD(void);void Display_char(uchar,uchar,uchar);void Display_str(uchar,uchar,uchar code *Data);void Change(void);void Display(void);void init_18B20(void);uchar Read_18B20(v
25、oid);void Write_18B20(uchar);void Read_temp(void);void Delay_us(uchar i);void Key_scan(void);void Key_set(void);void Key_inc(void);void Key_dec(void);void Alarm(void);sbit LCD_RS=P20;sbit LCD_RW=P21;sbit LCD_EN=P22;sbit DQ=P17;sbit Normal=P24;sbit Alarm_H=P25;sbit Alarm_L=P26;sbit Alarm_BEEP=P27;uch
26、ar Set_flag=0;uchar Temp_mea,Temp_set1,Temp_set2;uchar Temp_high_1,Temp_high_2;uchar Temp_low_1,Temp_low_2;uchar Temp_true_1,Temp_true_2;extern uchar code str0=High: C Low: C;extern uchar code str1=Mode: Deg: C;extern uchar code str2= Hellow!! ;extern uchar code str3=;extern uchar code mode=NHL;/*主程
27、序*/void main(void)P1=0xff;P2|=0x70;P2&=0x7f;Temp_set1=90; /上限报警温度初值90Temp_set2=10; /下限报警温度初值10Delay(500); /延时500ms启动init_LCD(); /LCD初始化init_18B20(); /DS18B20初始化Display_str(0,0,str2); /开机界面Display_str(0,1,str2); /开机界面Delay();Display_str(0,0,str0);Display_str(0,1,str1);while(1)Key_scan(); /扫描键盘Read_te
28、mp(); /读取温度Change();Display(); /显示Alarm(); /批示灯与报警程序Delay(1000);/*延时kms*/void Delay(uint k)uint i,j;for(i=0;ik;i+)for(j=0;j60;j+);/*显示模块*/*LCD初始化*/void init_LCD(void)P0=0;Delay(15);LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,1); /8位数据传送,2行显
29、示,5*7字形LCD_Command(0x08,1); /关闭显示LCD_Command(0x01,1); /清屏LCD_Command(0x06,1); /显示光标右移设立LCD_Command(0x0c,1); /显示屏打开,光标不显示不闪烁/*写指令数据到LCD*/void LCD_Command(uchar LC,uchar BC)if(BC) ReadyLCD();P0=LC;LCD_RS=0; /选中指令寄存器LCD_RW=0; /写模式LCD_EN=1;_nop_();_nop_();_nop_();LCD_EN=0;/*写显示数据到LCD*/void LCD_Data(ucha
30、r LD)ReadyLCD();P0=LD;LCD_RS=1; /选中数据寄存器LCD_RW=0; /写模式LCD_EN=1;_nop_();_nop_();_nop_();LCD_EN=0;/*检测LCD忙状态*/void ReadyLCD(void)P0=0xff;LCD_EN=1;LCD_RS=0;LCD_RW=1;_nop_();while(P0&BUSY)LCD_EN=0;_nop_(); _nop_();LCD_EN=1;_nop_(); _nop_(); LCD_EN=0;/*显示一种字符*/void Display_char(uchar X,uchar Y,uchar Data
31、)Y&=0x01;X&=0x0f;if(Y) X|=0x40;X|=0x80;LCD_Command(X,0);LCD_Data(Data);/*显示一串字符*/void Display_str(uchar X,uchar Y,uchar code *Data)uchar List=0;Y&=0x01;X&=0x0f;while(X0;i-)DQ=0;_nop_();dat=1;DQ=1;Delay_us(1);if(DQ) dat|=0x80;Delay_us(10);return(dat);/*向DS18B20写入一种字节数据*/void Write_18B20(uchar dat)uch
32、ar i=0;for(i=8;i0;i-)DQ=0;_nop_();DQ=dat&0x01;Delay_us(10);DQ=1;dat=1;Delay_us(10);/*从DS18B20读取温度*/void Read_temp(void)uchar a=0;uchar b=0;uchar t=0;init_18B20();Write_18B20(0xcc);Write_18B20(0x44);init_18B20();Write_18B20(0xcc);Write_18B20(0xbe);a=Read_18B20();b=Read_18B20();t=b;t=3) /Set_flag=1,设定
33、上限值Set_flag=0; /Set_flag=2,设定下限值/*按键加一子程序*/void Key_inc(void)switch(Set_flag)case 1:Temp_set1+; if(Temp_set1=99) Temp_set1=99;break;case 2:Temp_set2+; if(Temp_set2=Temp_set1) Temp_set2=Temp_set1;break;default:break;/*按键减一子程序*/void Key_dec(void)/Delay(150);switch(Set_flag)case 1:Temp_set1-; if(Temp_set1=Temp_set2) Temp_set1=Temp_set2;break;case 2:Temp_set2-; if(Temp_set2High)Normal=1;Alarm_H=0;Alarm_L=1;Alarm_BEEP=1; else if(Temp_meaLow)Normal=1;Alarm_H=1;Alarm_L=0;Alarm_BEEP=1;elseNormal=0;Alarm_H=1;Alarm_L=1;Alarm_BEEP=0; 附录二:硬件设计原理图附录三:程序仿真图