ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:472.25KB ,
资源ID:28148353      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28148353.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(推荐基于单片机的空调温度控制器设计精品.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

推荐基于单片机的空调温度控制器设计精品.docx

1、推荐基于单片机的空调温度控制器设计 精品接口技术课程设计报告 基于单片机的空调温度控制器设计 摘 要设计了基于AT89C52的高精度家用空调温度控制系统,系统硬件主要由电源电路、温度采集电路(DS18B20)、键盘、显示电路、输出控制电路及其他辅助电路组成;软件采用8051C语言编程;该系统可以完成温度的显示、温度的设定、空调的控制等多项功能。关键词:单片机;DS18B20;温度检测;显示1 设计目的及要求1.1 设计目的和意义21世纪的人们生活质量不断提高,同时也对高科技电子产业提出了更高的要求,为了使人们生活更人性化、智能化。我设计了这一基于单片机的空调温度控制系统,人们只有生活在一定的温

2、度环境内才能长期感觉舒服,才能保证不中暑不受冻,所以对室内温度要求要高。对于不同地区空调要求不同,有的需要升温,有的需要降温。一般都要维持在2126C。目前,虽然我国大量生产空调制冷产品,但由于我国人口众多,需求量过盛,在我国的北方地区,还有好多家庭还没有安装有效地室内温控系统。温度不能很好的控制在一定的范围内,夏天室内温度过高,冬天温度过低,这些均对人们正常生活带来不利的影响,温度、湿度均达不到人们的要求。以前温度控制主要利用机械通风设备进行室内、外空气的交换来达到降低室内温度,实现室内温度适宜人们生活。以前通风设备的开启和关停,均是由人手动控制的,即由人们定时查看室内外的温度、湿度情况,按

3、要求开关通风设备,这样人们的劳动强度大,可靠性差,而且消耗人们体力,劳累成本过高。为此,需要有一种符合机械温控要求的低成本的控制器,在温差和湿度超过用户设定值范围时,启动制冷通风设备,否则自动关闭制冷通风设备。鉴于目前大多数制冷设备现在状况,我设计了一款基于MCS51单片机的空调温度控制系统。1.2 设计任务与要求系统要求利用单片机设计一空调温度控制器,能够实时检测并显示室温,能够利用键盘设定温度,并且和室温进行比较,当室温低于设定温度时,系统能够驱动加热系统工作,当室温高于设定温度时,系统能够驱动制冷系统工作,当两者温度相等时,不做动作。2 硬件电路设计2.1 总体方案设计空调温度控制系统,

4、主要要完成对温度的采集、显示以及设定等工作,从而实现对空调的控制。传统采用铂电阻充当测温器件的方案,虽然其中段测量线性度好,精度较高,但是测量电路的设计难度高 ,且测量电路系统庞大,难于调试 ,而且成本相对较高。鉴于上述原因,本系统采用DS18B20充当测温器件。外部温度信号经 DS18B20将输入的模拟信号转换成8位的数字信号, 通过并 口传送到单片机系统( AT89C52) 。单片机系统将接收的数字信号译码处理,通过LCD1602将温度显示出来,同时单片机系统还将完成键盘扫描 、按键温度设定、超温报警等程序的处理 ,将处理的温度信号与系统设定温度值比较,形成可以控制空调制冷、制热与停止工作

5、三种工作状态,从而实现空调的智能化。另外,键盘输入方面,采用了软件来修正误操作输入 ,即输入的温度范围必须在系统硬件所确定的范围内,直接降低由于误操作带来的风险,提高了系统的可靠性 ,体现了人性化的系统设计原则。系统的整体框图如图1所示:图1 系统整体框图2.2 功能模块电路设计2.2.1 单片机的选型由于本系统只需要单片机完成矩阵键盘检测以及处理DS18B20送来的温度数据并送LCD1602进行显示对于I/O资源以及处理速度无特殊要求,故选择ATMEL公司生产的AT89C52单片机,AT89C52增加了在线调试功能,即程序可以通过JTAG接口下载,调试和固化,因而该芯片的开发不再需要昂贵的硬

6、件仿真器,可实现实时仿真,所有的资源都可以为用户所使用,可以在线编程或在系统编程,更进一步地说,在线编程或在系统编程是开发的系统具有了通过网络进行升级、维护的潜在功能。AT89C52的性能及特点1:与MCS-51系列单片机兼容。片内有8K可在线重复编程的快速内 存可擦写存储器(Flash Memory)。存储器可循环写入/擦写10000次以上。存储器数据保存时间为10年以上。宽工作电压范围:Vcc可为2.7V-6.5V。全静态工作:可从0Hz-24MHz。程序存储器具有三级加密保护。256字节的内部RAM。32条可编程I/O口线。三个16位定时器/计数器。中断结构具有5级(6级)中断源和两个优

7、下级。可编程全双工串行通讯。空闲维持低功耗和掉电状态保护存储数据。 AT89C52引脚图如图2所示。图2 AT89C52引脚图VCC: +5V电源输入GND:接地P0口是一个双向8位三态I/O口,每个口可独立控制。使用时需外接上拉电阻。P1口是一个准双向8位I/O口,它的功能是单一的,只能用作数据的输入或者输出。P2口是一个准双向8位I/O口,输出时,从P2.x端口可输出CPU写到锁存器上的信号。当该接口用做数据输入接口是,应先向该位写1,然后,读该位即可读入输入数据。P3口是具有第二功能的准双向8位I/O口。ALE/PROG:地址所存/编程信号线。当P0口工作在第二功能时从该端口可复用工作,

8、某时刻该端口可以送出地址信号A0A7,而另外的时刻该端口传送的是数据信号D0D7。利用ALE可以将地址信号A0A7锁存到地址锁存器。/VPP:该控制信号线也具有双重功能,是允许访问片外ROM/编程高电压引线。:程序存储器允许输出控制端,常用作片外ROM的读控制信号,低电平有效。RESET:复位引脚,当该端加上超过24个时钟周期的高电平时,可是8051复位。系统复位电路如图2.3所示。X1、X2:外接时钟引脚。X1为片内振荡电路的输入端,X2为片内振荡电路的输出端。2.2.2 振荡电路设计AT89C52内部有一个用于构成片内振荡器的高增益反相放大器, 振荡器产生的信号送到CPU, 作为CPU的时

9、钟信号,驱动CPU产生执行指令功能的机器周期。引脚XTAL1和XTAL2是此放大器的输人端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器, 振荡电路的连接如图所示图8所示,外接石英晶体或陶瓷谐振器以及电容C1和C2构成并联谐振电路, 接在放大器的反馈回路中。对外接电容C1和C2的值虽然没有严格的要求, 但电容的大小多少会影响振荡器频率的高低、振荡器的稳定性、起振圈内部振荡的接法的快速性和温度稳定性。外接石英晶体时, C1和C2一般取(40pF-10pF),外接的是石英晶体, 所以,C1、C2选择标称值30pF。系统振荡电路如图3所示。图3 振荡电路2.2.

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

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

12、方式,它与微处理器连接时仅需一条口线即可实现微处理器与DS18B20的双向通信。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。在使用中不需要任何外接元件,全部传感元件及转换电路集成在形如一只三极管的集成电路里。测温范围-55+125,在-10+85时精度为0.5。可编程分辨率为912位,对应的可分辨温度分别为0.5,0.25,0.125和0.0625,可实现高精度测温。在9位分辨率时,最多在93.75ms内把温度转换为数字;12位分辨率时,最多在750ms内把温度值转换为数字。测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,

13、具有极强的抗干扰纠错能力。负压特性。电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。系统温度测量电路如图6所示。图6 温度测量电路2.2.6 系统显示电路设计本系统采用LCD1602作为系统的显示器件,1602字符型液晶是一种专门用来显示字母、数字、符号等的点阵型液晶模块,能分两行显示,它有若干个或者等点阵字符位组成,每个点阵字符位都可以显示一个字符。1602型液晶接口信号如下:1脚VSS:电源地。2脚VDD:电源正极。3脚VO:液晶显示对比度调节端。4脚RS:数据/命令选择端(H/L)。5脚R/:读写选择端(H/L)。6脚E:使能信号。脚:数据口。15脚BL1:背光电源正极。16脚BL

14、2:背光电源负极。系统显示电路如图7所示。图7 系统显示电路2.2.7 输出控制电路设计系统要求在当前室温低于设定温度时,能够自动驱动加热系统工作 ;在当前室温高于设定温度时能够自动驱动制冷系统工作。本系统在复位后即置P26脚和P27脚为低电平,在当前室温低于设定温度时,通过置P27脚为高电平来驱动后级加热系统,本系统采用红色LED来代替加热系统;在当前室温高于设定温度时,通过置P26脚高电平来驱动后级制冷系统,本系统采用蓝色LED来代替制冷系统。输出控制电路如图8所示。图8 输出控制电路2.3 总电路设计系统总电路图如图9所示。图9 系统总电路图2.4 系统所用元器件本系统所用的元器件清单如

15、表1所示。 表1 系统所用元器件元器件名称数量点触式开关1630pF瓷片电容210uF电解电容1蓝色LED1红色RED15V电源插座1自锁开关1LCD160211/4W10K电阻310K可调电阻1AT89C521DS18B20112MHz晶振13 软件系统设计3.1 软件系统总体方案设计 系统软件由主程序模块、测温程序模块、键盘扫描程序模块以及液晶驱动程序模块组成。3.2 软件流程图设计系统软件流程图如图10所示。图10 系统软件流程图4 系统调试程序在Keil uVision4环境下编写,编译通过后生成.hex文件加载到Protuse下可正常运行。程序默认温度为21.0,Protuse下设定

16、DS18B20的温度也为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 本系统存在的问题及改进措施本系统所设计的空调温度控制器仅对温度部分实现了控制,但对于实际空调中的模式选择以及定时运行等工作过程还无法实现,希望在以后的学习研究

17、中能够解决这些问题。5.2 心得体会 本次课程设计从获得题目开始便着手准备,首先分析系统要求,在Protuse里完成硬件原理图的搭建,然后开始在Keil环境下着手编写各部分程序,调试相应的程序,在调试通过后再下载到Protuse里进行仿真,发现问题后再返回Keil下修改相应程序,直到最后仿真通过,最后在Altium Designer 6中画出电路原理图。在本次课程设计过程中得到了老师以及许多同学的帮助,感谢那些提供过帮助的老师和同学。参考文献1 郭文川主编. 单片机原理与接口技术. 北京:中国农业出版社,20XX.2 郭天祥主编. 51单片机C语言教程. 北京:电子工业出版社,20XX.附录1

18、:系统的源程序清单global.h:ifndef _global_H#define _global_H#include#define uchar unsigned char/宏定义#define uint unsigned int#define K_UP 0X20/定义键值#define K_DOWN 0X21#define K_CLEAR 0X24#define K_OK 0X25#define K_ONE 0X30#define K_FOUR 0X31#define K_SEVEN 0X32#define K_POINT 0X33#define K_TWO 0X34#define K_FI

19、VE 0X43#define K_EIGHT 0X36#define K_ZERO 0X37#define K_THREE 0X38#define K_SIX 0X40#define K_NINE 0X41#define K_SET 0X42extern float TEMP_NOW;extern float TEMP_SET;extern uint T_Count;extern uint S_Count;extern uint P_Count;extern uint N_Count;extern uint M_Count;extern uchar Current_Temp_Display_B

20、uffer;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;/输出信号#endifmain.c:#include#includeglobal.h#includekey.h#include18B20.h#includeLCD.h/全局变量/float TEMP_NOW=0.0;float TEMP

21、_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 parison();/定时/void timer0_init(void) TMOD = 0x00 ; /设置定时器0的工作方式 TH0 = (8192-5000)/32;/单片机晶振为12MHz,机器周期为1us,t=5m

22、s, /N=5000/1=5000 TL0 = (8192-5000)%32; IE = 0x82; TR0=1; void timer0() interrupt 1 TH0 = (8192-5000)/32; TL0 = (8192-5000)%32; if(+T_Count = 100) /100为0.5s TR0=0; Read_Temperature(); Display_Temperature() ; T_Count=0; if(+P_Count = 6) N_Count=1; TR0=1; /主程序/void main() init_lcd(); Init_DS18B20(); t

23、imer0_init(); while(1) Print(); set_num(); parison(); void parison() if(N_Count&M_Count) if(TEMP_NOWTEMP_SET) cold=1; warm=0; if(TEMP_NOW=TEMP_SET) cold=0; warm=0; 18B20.h:#ifndef _18B20_H#define _18B20_H#includeglobal.hextern uchar Init_DS18B20(); extern void Read_Temperature();extern void Display_

24、Temperature();#endif18B20.c:#includeglobal.h#include intrins.h#define delayNOP() _nop_();_nop_();_nop_();_nop_();uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar 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=0x00,0x00;uchar Display_Digi

25、t=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(n);uchar Init_DS18B20() uchar status; DQ = 1; Delay_INI(8); DQ = 0; Delay_INI(90); DQ = 1; Delay_INI(8); status=DQ; De

26、lay_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;void WriteOneByte(uchar dat) uchar i; for(i=0;i= 1; void Read_Temperature() if(Init_DS18B20()=1) DS18B20_IS_OK=0; else Wri

27、teOneByte(0xcc); WriteOneByte(0x44); Init_DS18B20(); WriteOneByte(0xcc); WriteOneByte(0xbe); Temp_Value0 = ReadOneByte(); Temp_Value1 = ReadOneByte(); DS18B20_IS_OK=1; void Display_Temperature() uchar t = 150, ng = 0; if(Temp_Value1&0xf8)=0xf8) Temp_Value1 = Temp_Value1; Temp_Value0 = Temp_Value0+1;

28、 if(Temp_Value0=0x00) Temp_Value1+; ng = 1; Display_Digit0 = df_TableTemp_Value0&0x0f; CurrentT = (Temp_Value0&0xf0)4) | (Temp_Value1&0x07)4); Display_Digit3 = CurrentT/100; Display_Digit2 = CurrentT%100/10; Display_Digit1 = CurrentT%10; Current_Temp_Display_Buffer11 = Display_Digit0 + 0; Current_Temp_Display_Buffer10 = .; Current_Temp_Display_Buf

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1