基于单片机的空调温度控制器设计毕业设计.doc

上传人:土8路 文档编号:10533626 上传时间:2021-05-22 格式:DOC 页数:42 大小:593KB
返回 下载 相关 举报
基于单片机的空调温度控制器设计毕业设计.doc_第1页
第1页 / 共42页
基于单片机的空调温度控制器设计毕业设计.doc_第2页
第2页 / 共42页
基于单片机的空调温度控制器设计毕业设计.doc_第3页
第3页 / 共42页
基于单片机的空调温度控制器设计毕业设计.doc_第4页
第4页 / 共42页
基于单片机的空调温度控制器设计毕业设计.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《基于单片机的空调温度控制器设计毕业设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的空调温度控制器设计毕业设计.doc(42页珍藏版)》请在三一文库上搜索。

1、接口 技术课程设计报告 基于单片机的空调温度控制器设计基于单片机的空调温度控制器设计 摘 要 设计了基于 AT89C52 的高精度家用空调温度控制系统,系统硬件主要由电源电路、 温度采集电路(DS18B20) 、键盘、显示电路、输出控制电路及其他辅助电路组成;软 件采用 8051C 语言编程;该系统可以完成温度的显示、温度的设定、空调的控制等多 项功能。 关键词:单片机;DS18B20;温度检测;显示 目录目录 1 设计目的及要求.1 1.1 设计目的和意义.1 1.2 设计任务与要求.1 2 硬件电路设计.2 2.1 总体方案设计.2 2.2 功能模块电路设计.3 2.2.1 单片机的选型.

2、3 2.2.2 振荡电路设计.5 2.2.3 复位电路设计.5 2.2.4 键盘接口电路设计.6 2.2.5 温度测量电路设计.6 2.2.6 系统显示电路设计.7 2.2.7 输出控制电路设计.8 2.3 总电路设计.8 2.4 系统所用元器件.9 3 软件系统设计.10 3.1 软件系统总体方案设计.10 3.2 软件流程图设计.10 4 系统调试.12 5 总结.13 5.1 本系统存在的问题及改进措施 .13 参考文献.14 附录 1:系统的源程序清单.15 附录 2:系统的 PCB 图.39 1 设计目的及要求 1.1 设计目的和意义 21 世纪的人们生活质量不断提高,同时也对高科技

3、电子产业提出了更高的要求, 为了使人们生活更人性化、智能化。我设计了这一基于单片机的空调温度控制系统, 人们只有生活在一定的温度环境内才能长期感觉舒服,才能保证不中暑不受冻,所以 对室内温度要求要高。对于不同地区空调要求不同,有的需要升温,有的需要降温。 一般都要维持在 2126C。 目前,虽然我国大量生产空调制冷产品,但由于我国人口众多,需求量过盛,在 我国的北方地区,还有好多家庭还没有安装有效地室内温控系统。温度不能很好的控 制在一定的范围内,夏天室内温度过高,冬天温度过低,这些均对人们正常生活带来 不利的影响,温度、湿度均达不到人们的要求。以前温度控制主要利用机械通风设备 进行室内、外空

4、气的交换来达到降低室内温度,实现室内温度适宜人们生活。以前通 风设备的开启和关停,均是由人手动控制的,即由人们定时查看室内外的温度、湿度 情况,按要求开关通风设备,这样人们的劳动强度大,可靠性差,而且消耗人们体力, 劳累成本过高。为此,需要有一种符合机械温控要求的低成本的控制器,在温差和湿 度超过用户设定值范围时,启动制冷通风设备,否则自动关闭制冷通风设备。鉴于目 前大多数制冷设备现在状况,我设计了一款基于 MCS51 单片机的空调温度控制系统。 1.2 设计任务与要求 系统要求利用单片机设计一空调温度控制器,能够实时检测并显示室温,能够利 用键盘设定温度,并且和室温进行比较,当室温低于设定温

5、度时,系统能够驱动加热 系统工作,当室温高于设定温度时,系统能够驱动制冷系统工作,当两者温度相等时, 不做动作。 2 硬件电路设计 2.1 总体方案设计 空调温度控制系统,主要要完成对温度的采集、显示以及设定等工作,从而实现 对空调的控制。传统采用铂电阻充当测温器件的方案,虽然其中段测量线性度好,精 度较高,但是测量电路的设计难度高 ,且测量电路系统庞大,难于调试 ,而且成本 相对较高。鉴于上述原因,本系统采用 DS18B20 充当测温器件。外部温度信号经 DS18B20 将输入的模拟信号转换成 8 位的数字信号, 通过并 口传送到单片机系统( AT89C52) 。单片机系统将接收的数字信号译

6、码处理,通过 LCD1602 将温度显示出来, 同时单片机系统还将完成键盘扫描 、按键温度设定、超温报警等程序的处理 ,将处 理的温度信号与系统设定温度值比较,形成可以控制空调制冷、制热与停止工作三种 工作状态,从而实现空调的智能化。另外,键盘输入方面,采用了软件来修正误操作 输入 ,即输入的温度范围必须在系统硬件所确定的范围内,直接降低由于误操作带来 的风险,提高了系统的可靠性 ,体现了人性化的系统设计原则。 系统的整体框图如图 1 所示: 图图1 系统整体框图系统整体框图 2.2 功能模块电路设计 2.2.1 单片机的选型 由于本系统只需要单片机完成矩阵键盘检测以及处理 DS18B20 送

7、来的温度数据并 送 LCD1602 进行显示对于 I/O 资源以及处理速度无特殊要求,故选择 ATMEL 公司生 产的 AT89C52 单片机,AT89C52 增加了在线调试功能,即程序可以通过 JTAG 接口下 载,调试和固化,因而该芯片的开发不再需要昂贵的硬件仿真器,可实现实时仿真, 所有的资源都可以为用户所使用,可以在线编程或在系统编程,更进一步地说,在线 编程或在系统编程是开发的系统具有了通过网络进行升级、维护的潜在功能。 AT89C52 的性能及特点1: 与 MCS-51 系列单片机兼容。 片内有 8K 可在线重复编程的快速内 存可擦写存储器(Flash Memory) 。 存储器可

8、循环写入/擦写 10000 次以上。 存储器数据保存时间为 10 年以上。 宽工作电压范围:Vcc 可为 2.7V-6.5V。 全静态工作:可从 0Hz-24MHz。 程序存储器具有三级加密保护。 256 字节的内部 RAM。 32 条可编程 I/O 口线。 三个 16 位定时器/计数器。 中断结构具有 5 级(6 级)中断源和两个优下级。 可编程全双工串行通讯。 空闲维持低功耗和掉电状态保护存储数据。 AT89C52 引脚图如图 2 所示。 图图 2 AT89C52 引脚图引脚图 VCC: +5V 电源输入 GND:接地 P0 口是一个双向 8 位三态 I/O 口,每个口可独立控制。使用时需

9、外接上拉电阻。 P1 口是一个准双向 8 位 I/O 口,它的功能是单一的,只能用作数据的输入或者输 出。 P2 口是一个准双向 8 位 I/O 口,输出时,从 P2.x 端口可输出 CPU 写到锁存器上 的信号。当该接口用做数据输入接口是,应先向该位写 1,然后,读该位即可读入输入 数据。 P3 口是具有第二功能的准双向 8 位 I/O 口。 ALE/PROG:地址所存/编程信号线。当 P0 口工作在第二功能时从该端口可复用工 作,某时刻该端口可以送出地址信号 A0A7,而另外的时刻该端口传送的是数据信号 D0D7。利用 ALE 可以将地址信号 A0A7 锁存到地址锁存器。 /VPP:该控制

10、信号线也具有双重功能,是允许访问片外 ROM/编程高电压引线。EA :程序存储器允许输出控制端,常用作片外 ROM 的读控制信号,低电平有PSEN 效。 RESET:复位引脚,当该端加上超过 24 个时钟周期的高电平时,可是 8051 复位。 系统复位电路如图 2.3 所示。 X1、X2:外接时钟引脚。X1 为片内振荡电路的输入端,X2 为片内振荡电路的输 出端。 2.2.2 振荡电路设计 AT89C52 内部有一个用于构成片内振荡器的高增益反相放大器, 振荡器产生的信 号送到 CPU, 作为 CPU 的时钟信号,驱动 CPU 产生执行指令功能的机器周期。引脚 XTAL1 和 XTAL2 是此

11、放大器的输人端和输出端。这个放大器与作为反馈元件的片外 石英晶体或陶瓷谐振器一起可构成一个自激振荡器, 振荡电路的连接如图所示图 8 所示, 外接石英晶体或陶瓷谐振器以及电容 C1 和 C2 构成并联谐振电路, 接在放大器的反馈 回路中。对外接电容 C1 和 C2 的值虽然没有严格的要求, 但电容的大小多少会影响振 荡器频率的高低、振荡器的稳定性、起振圈内部振荡的接法的快速性和温度稳定性。 外接石英晶体时, C1 和 C2 一般取(40pF-10pF) ,外接的是石英晶体, 所以,C1、C2 选择标称值 30pF。 系统振荡电路如图 3 所示。 图图 3 振荡电路振荡电路 2.2.3 复位电路

12、设计 单片机复位是使 CPU 和系统中的其他功能部件都处在一个确定的初始状态, 并从 这个状态开始工作。无论是在单片机刚开始接上电源时, 还是断电后或者发生故障后都 要复位。89 系列单片机的复位信号是从 RST 引脚输人到芯片的施密特触发器中的。当 系统处于正常工作状态时, 且振荡器稳定后, 如果 RST 引脚有一个高电平并维持 2 个 机器周期(24 个振荡周期), 则 CPU 就可响应并且将系统复位。复位分为手动复位和 上电复位。本设计系统采用的是上电自动复位。 系统复位电路如图 4 所示。 图图 4 复位电路复位电路 2.2.4 键盘接口电路设计 独立键盘与单片机连接时,每个按键都需要

13、单片机的一个 I/O 口,若单片机系统 需要较多按键,如果用独立按键会占用过多的 I/O 口资源。单片机系统中 I/O 口资源往 往比较宝贵,当用到多个按键时,为了节省 I/O 口线,一般需使用矩阵键盘。本系统 共需使用 16 个按键,故选择的矩阵键盘。键盘接口电路如图 5 所示。44 图图 5 键盘接口电路键盘接口电路 2.2.5 温度测量电路设计 本系统的温度测量电路采用 DS18B20 来实现。DS18B20 是美国 DALLAS 半 导体公司推出的第一片采用“一线总线”接口的温度传感器,它具有微型化、低功耗、 高性能、抗干扰、能力强、易配微处理器等优点,可直接将温度转化成串行数字信 号

14、供处理器处理。 DS18B20 的性能及特点2: 适应电压范围宽,电压范围在,在寄生电源方式下可由数据线供电。V5 . 50 . 3 独特的单线接口方式,它与微处理器连接时仅需一条口线即可实现微处理器与 DS18B20 的双向通信。 支持多点组网功能,多个 DS18B20 可以并联在唯一的三线上,实现组网多点 测温。 在使用中不需要任何外接元件,全部传感元件及转换电路集成在形如一只三极 管的集成电路里。 测温范围-55+125,在-10+85时精度为0.5。 可编程分辨率为 912 位,对应的可分辨温度分别为 0.5,0.25,0.125 和 0.0625,可实现高精度测温。 在 9 位分辨率

15、时,最多在 93.75ms 内把温度转换为数字;12 位分辨率时,最多 在 750ms 内把温度值转换为数字。 测量结果直接输出数字温度信号,以“一线总线”串行传送给 CPU,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力。 负压特性。电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 系统温度测量电路如图 6 所示。 图图 6 温度测量电路温度测量电路 2.2.6 系统显示电路设计 本系统采用 LCD1602 作为系统的显示器件,1602 字符型液晶是一种专门用来显示 字母、数字、符号等的点阵型液晶模块,能分两行显示,它有若干个或者等75115 点阵字符位组成,每个点阵字符位都可以

16、显示一个字符。 1602 型液晶接口信号如下: 1 脚 VSS:电源地。 2 脚 VDD:电源正极。 3 脚 VO:液晶显示对比度调节端。 4 脚 RS:数据/命令选择端(H/L)。 5 脚 R/:读写选择端(H/L) 。W 6 脚 E:使能信号。 脚:数据口。147D7D0 15 脚 BL1:背光电源正极。 16 脚 BL2:背光电源负极。 系统显示电路如图 7 所示。 图图 7 系统显示电路系统显示电路 2.2.7 输出控制电路设计 系统要求在当前室温低于设定温度时,能够自动驱动加热系统工作 ;在当前室温 高于设定温度时能够自动驱动制冷系统工作。本系统在复位后即置 P26 脚和 P27 脚

17、 为低电平,在当前室温低于设定温度时,通过置 P27 脚为高电平来驱动后级加热系统, 本系统采用红色 LED 来代替加热系统;在当前室温高于设定温度时,通过置 P26 脚 高电平来驱动后级制冷系统,本系统采用蓝色 LED 来代替制冷系统。 输出控制电路如图 8 所示。 图图 8 输出控制电路输出控制电路 2.3 总电路设计 系统总电路图如图 9 所示。 图图 9 系统总电路图系统总电路图 2.4 系统所用元器件 本系统所用的元器件清单如表 1 所示。 表表 1 系统所用元器件系统所用元器件 元器件名称元器件名称数量数量 点触式开关16 30pF 瓷片电容2 10uF 电解电容1 蓝色 LED1

18、 红色 RED1 5V 电源插座1 自锁开关1 LCD16021 1/4W10K 电阻3 10K 可调电阻1 AT89C521 DS18B201 12MHz 晶振1 3 软件系统设计 3.1 软件系统总体方案设计 系统软件由主程序模块、测温程序模块、键盘扫描程序模块以及液晶驱动程序模 块组成。 3.2 软件流程图设计 系统软件流程图如图 10 所示。 图图 10 系统软件流程图系统软件流程图 4 系统调试系统调试 程序在 Keil uVision4 环境下编写,编译通过后生成.hex 文件加载到 Protuse 下可正 常运行。程序默认温度为 21.0,Protuse 下设定 DS18B20

19、的温度也为 21.0,故开始 运行时两路 LED 灯都不点亮。当利用键盘设定的温度高于 DS18B20 默认的 21.0时, 红色 LED 灯被点亮;当设定的温度低于 DS18B20 默认的 21.0时,蓝色 LED 灯被点 亮。 当设定的温度高于 DS18B20 默认的 21.0时,红色 LED 灯被点亮,如图 11 所示。 图图 11 红色红色 LED 灯点亮灯点亮 当设定的温度低于 DS18B20 默认的 21.0时,蓝色 LED 灯被点亮。如图 12 所示。 图图 12 蓝色蓝色 LED 灯点亮灯点亮 5 总结总结 5.1 本系统存在的问题及改进措施 本系统所设计的空调温度控制器仅对温

20、度部分实现了控制,但对于实际空调中的 模式选择以及定时运行等工作过程还无法实现,希望在以后的学习研究中能够解决这 些问题。 5.2 心得体会 本次课程设计从获得题目开始便着手准备,首先分析系统要求,在 Protuse 里完成 硬件原理图的搭建,然后开始在 Keil 环境下着手编写各部分程序,调试相应的程序, 在调试通过后再下载到 Protuse 里进行仿真,发现问题后再返回 Keil 下修改相应程序, 直到最后仿真通过,最后在 Altium Designer 6 中画出电路原理图。在本次课程设计过 程中得到了老师以及许多同学的帮助,感谢那些提供过帮助的老师和同学。 参考文献 1 郭文川主编.

21、单片机原理与接口技术. 北京:中国农业出版社,2007. 2 郭天祥主编. 51 单片机 C 语言教程. 北京:电子工业出版社,2009. 附录 1:系统的源程序清单 global.h: ifndef _global_H #define _global_H #include #define uchar unsigned char/宏定义 #define uint unsigned int #defineK_UP 0X20/定义键值 #defineK_DOWN 0X21 #defineK_CLEAR 0X24 #defineK_OK 0X25 #defineK_ONE 0X30 #defineK

22、_FOUR 0X31 #defineK_SEVEN 0X32 #defineK_POINT 0X33 #defineK_TWO 0X34 #defineK_FIVE 0X43 #defineK_EIGHT0X36 #defineK_ZERO0X37 #defineK_THREE0X38 #defineK_SIX 0X40 #defineK_NINE0X41 #defineK_SET 0X42 extern float TEMP_NOW; extern float TEMP_SET; extern uint T_Count; extern uint S_Count; extern uint P_

23、Count; extern uint N_Count; extern uint M_Count; extern uchar Current_Temp_Display_Buffer; extern uchar set_Temp_Display_Buffer; extern int sel; sbit lcden=P21;/液晶使能 sbit lcdrs=P20;/液晶数据/命令选择端 sbit DQ =P22;/DS18B20 数据端 sbit XX =P25;/读写选择端 sbit cold =P26;/输出信号 sbit warm =P27;/输出信号 #endif main.c: #inc

24、lude #includeglobal.h #includekey.h #include18B20.h #includeLCD.h /全局变量/ float TEMP_NOW=0.0; float TEMP_SET=21.0; uint T_Count=0; uint S_Count=0; uint P_Count=0; uint N_Count=0; uint M_Count=1; uchar Current_Temp_Display_Buffer= NOW:-23.5 ; uchar set_Temp_Display_Buffer= SET: 21.0 ; int sel=0; void

25、Comparison(); /定时/ void timer0_init(void) TMOD =0 x00 ; /设置定时器 0 的工作方式 TH0 = (8192-5000)/32;/单片机晶振为 12MHz,机器周期为 1us,t=5ms, /N=5000/1=5000 TL0 = (8192-5000)%32; IE =0 x82; TR0=1; void timer0() interrupt 1 TH0 = (8192-5000)/32; TL0 = (8192-5000)%32; if(+T_Count = 100) /100 为 0.5s TR0=0; Read_Temperatu

26、re(); Display_Temperature() ; T_Count=0; if(+P_Count = 6) N_Count=1; TR0=1; /主程序/ void main() init_lcd(); Init_DS18B20(); timer0_init(); while(1) Print(); set_num(); Comparison(); void Comparison() if(N_Count warm=0; if(TEMP_NOW=TEMP_SET) cold=0; warm=0; 18B20.h: #ifndef _18B20_H #define _18B20_H #i

27、ncludeglobal.h extern uchar Init_DS18B20(); extern void Read_Temperature(); extern void Display_Temperature(); #endif 18B20.c: #includeglobal.h #include intrins.h #define delayNOP() _nop_();_nop_();_nop_();_nop_(); uchar code Temperature_Char8 = 0 x0c,0 x12,0 x12,0 x0c,0 x00,0 x00,0 x00,0 x00; uchar

28、 code df_Table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9; uchar CurrentT = 0; uchar Temp_Value=0 x00,0 x00; uchar Display_Digit=0,0,0,0; bit DS18B20_IS_OK = 1; void Delay_INI(uint x) while(-x); void Delay(unsigned int n) do _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_(); n-; while

29、(n); uchar Init_DS18B20() uchar status; DQ = 1; Delay_INI(8); DQ = 0; Delay_INI(90); DQ = 1; Delay_INI(8); status=DQ; Delay_INI(100); DQ = 1; return status; uchar ReadOneByte() uchar i,dat=0; DQ = 1; _nop_(); for(i=0;i= 1; DQ = 1; _nop_(); _nop_(); if(DQ) dat |= 0X80; Delay(30); DQ = 1; return dat;

30、void WriteOneByte(uchar dat) uchar i; for(i=0;i= 1; void Read_Temperature() if(Init_DS18B20()=1) DS18B20_IS_OK=0; else WriteOneByte(0 xcc); WriteOneByte(0 x44); Init_DS18B20(); WriteOneByte(0 xcc); WriteOneByte(0 xbe); Temp_Value0 = ReadOneByte(); Temp_Value1 = ReadOneByte(); DS18B20_IS_OK=1; void D

31、isplay_Temperature() uchar t = 150, ng = 0; if(Temp_Value1 Temp_Value0 = Temp_Value0+1; if(Temp_Value0=0 x00) Temp_Value1+; ng = 1; Display_Digit0 = df_TableTemp_Value0 CurrentT = (Temp_Value0 Display_Digit3 = CurrentT/100; Display_Digit2 = CurrentT%100/10; Display_Digit1 = CurrentT%10; Current_Temp

32、_Display_Buffer11 = Display_Digit0 + 0; Current_Temp_Display_Buffer10 = .; Current_Temp_Display_Buffer9 = Display_Digit1 + 0; Current_Temp_Display_Buffer8 = Display_Digit2 + 0; Current_Temp_Display_Buffer7 = Display_Digit3 + 0; TEMP_NOW=Display_Digit2*10+Display_Digit1+Display_Digit0*0.1 ; if(Displa

33、y_Digit3 = 0) Current_Temp_Display_Buffer7 = ; if(Display_Digit2 = 0 if(ng) TEMP_NOW=-(Display_Digit2*10+Display_Digit1+Display_Digit0*0.1); if(Current_Temp_Display_Buffer8 = ) Current_Temp_Display_Buffer8 = -; else if(Current_Temp_Display_Buffer7 = ) Current_Temp_Display_Buffer7 = -; else Current_T

34、emp_Display_Buffer6 = -; KEY.h: #ifndef _KEY_H #define _KEY_H #include extern unsigned char Keys_Scan(); extern void set_num(); extern void set(); #endif KEY.c: #include #include #include #include18B20.h uchar code KeyCodeTable= 0 x11,0 x12,0 x14,0 x18,0 x21,0 x22,0 x24,0 x28,0 x41,0 x42,0 x44,0 x48

35、,0 x81,0 x82,0 x84,0 x88 ; void Delay_key() uchar i; for(i=0;i200;i+); uchar Keys_Scan() uchar sCode,kCode,k; P3 = 0 xf0; if(P3 if(P3 for(k=0;k47) else if(set_Temp_Display_Buffer8=48) set_Temp_Display_Buffer8=57; if(K_ONE = key) while(Keys_Scan() = K_ONE); set_Temp_Display_Buffer11=1; sel+; if(K_TWO

36、 = key) while(Keys_Scan() = K_TWO); set_Temp_Display_Buffer11=2; sel+; if(K_THREE = key) while(Keys_Scan() = K_THREE); set_Temp_Display_Buffer11=3; sel+; if(K_FOUR = key) while(Keys_Scan() = K_FOUR); set_Temp_Display_Buffer11=4; sel+; if(K_FIVE = key) while(Keys_Scan() = K_FIVE); set_Temp_Display_Bu

37、ffer11=5; sel+; if(K_SIX = key) while(Keys_Scan() = K_SIX); set_Temp_Display_Buffer11=6; sel+; if(K_SEVEN = key) while(Keys_Scan() = K_SEVEN); set_Temp_Display_Buffer11=7; sel+; if(K_EIGHT = key) while(Keys_Scan() = K_EIGHT); set_Temp_Display_Buffer11=8; sel+; if(K_NINE = key) while(Keys_Scan() = K_

38、NINE); set_Temp_Display_Buffer11=9; sel+; if(K_ZERO = key) while(Keys_Scan() = K_ZERO); set_Temp_Display_Buffer11=0; sel+; if(K_OK = key) while(Keys_Scan() = K_OK); TEMP_SET=(set_Temp_Display_Buffer8- 48)*10+(set_Temp_Display_Buffer9-48)+(set_Temp_Display_Buffer11-48)*0.1; sel=0; M_Count=1; if(sel=1

39、) key = Keys_Scan(); if(K_CLEAR = key) while(Keys_Scan() = K_CLEAR); set_Temp_Display_Buffer8 = ; set_Temp_Display_Buffer9 = ; set_Temp_Display_Buffer10= ; set_Temp_Display_Buffer11= ; M_Count=0; cold=0; warm=0; sel=0; if(K_ONE = key) while(Keys_Scan() = K_ONE); set_Temp_Display_Buffer10=set_Temp_Display_Buffe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1