1、基于单片机的电子秤设计泰 山 学 院本科毕业论文基于STC89C52单片机的家用红外遥控系统所 在 学 院信息科学技术学院专 业 名 称自动化申请学士学位所属学科工 学完 成 日 期2013年5月1日摘 要摘 要随着科技的发展,特别是微电子技术的发展,单片机的应用已经深入到生活的各个领域。本文以STCC89C52为控制芯片,DS1302为时钟芯片,DS18B20为温度传感器,HS0038红外一体接收头作为红外接收器,以此接收并处理遥控器按键信号并用来矫正时钟时间。同时,本设计还加入了定时和设定温度上下限的功能,当达到预设时间时执行开关灯命令,当温度低于温度下限或高于温度上限时执行开空调命令,开
2、关器件为两个大功率电磁继电器。本设计中所有外设数据显示于LCD12864液晶,形成一个良好的用户界面。硬件电路图和PCB用Protel99SE绘制,软件开发环境为KeilV3,设计实物为万用板焊接电路,经调试各项功能均已正常实现。关键词:红外遥控,单片机,DS1302,DS18B20,LCD12864IAbstractABSTRACTWith the development of science and technology, especially the development of microelectronics technology, SCM applications have bee
3、n deeply into all areas of life. Taking STCC89C52 as control chip, for DS1302 clock chip, DS18B20 as temperature collector, HS0038 infrared receiving head as integrated infrared receiver, signal receiving and processing the remote control buttons, in order to correct the clock time. At the same time
4、, the project also joined the function of timing, and setting temperature of upper and lower, executive orders open to turn off the lights when preset time is reached, when the temperature lower than the temperature is lower or higher than the temperature limit command execution open air conditionin
5、g, for electromagnetic relay switch device. The whole project all the data shown in LCD12864 LCD, forming a good user interface. Made in Protel99SE, the hardware circuit diagram and PCB software development environment for KeilV3, project physical for universal plate welding circuit, through debuggi
6、ng functions are normal.Key words:infrared remote control, microcontroller, DS1302, DS18B20, LCD12864II目 录目 录1 绪 论11.1 家用电器的发展及智能家电的前景11.2 电子技术的发展对智能家电的推动11.3 家用红外遥控系统设计思路22 硬件设计22.1 STC89C52单片机介绍22.2 DS18B20温度传感器介绍52.3 DS1302时钟芯片介绍82.4 HS0038红外一体接收器介绍102.5 LCD12864液晶介绍112.6 其他硬件电路133 软件开发平台及软件153.1
7、 开发环境介绍及程序总体结构153.2 DS18B20温度程序模块153.3 DS1302时间程序模块173.4 LCD12864液晶驱动程序203.5 HS0038红外解码程序模块213.6 定时定温功能的程序实现244 系统调试及设计总结244.1 系统调试244.2 总结26参考文献27致 谢28附 录29III泰山学院本科毕业论文(设计)1 绪 论1.1 家用电器的发展及智能家电的前景电器在国民日常生活和国防领域中占有举足轻重的位置,有着不可或缺的作用,其中,家用电器与人们的生活的关系最为密切。家用电器问世已有百年历史,美国人爱迪生发明了白炽灯,从此开创了家庭用电时代。19世纪末电磁波
8、被证实存在,奠定了电子学诞生的基础。之后,二极电子管和三级电子管的发明使人们开始了真正的电子应用。50年代电子工业迅速发展,晶体管尤其是集成电路的发明,使人们进入微电子时代同时家用电器的应用也提高到新的水平。随着科技的发展家用电器也越来越智能化,家用电器的发展趋势主要有高性能高可靠性,电路集成化功能多样化,随着现代电子技术的发展家用电器与多学科交叉融合向着网络化与智能化发展。总体看来现代家用电器具有更强大的功能,而实现强大功能的保障是具有良好的微处理器,一个智能家电可以实现多个传统家电的功能。多功能是智能家电主要特点,同时,通信功能也是智能家电的发展方向。另外,新型家用电器在环保,审美以及安全
9、性上也对人们提出了新要求。1.2 电子技术的发展对智能家电的推动20世纪以来,电子技术发展迅速,特别是近几年来,现代电子产品以及各种消费电子产品已经渗透到了生活各方面,电子技术的发展有力的推动了科技进步并且提高了人们的生活水平。以单片机为核心的多功能系统正在飞快的改变着人们的生活,特别是一些家用智能产品,不但方便了人们的生活,更加丰富了人们的生活方式。以本文中的家用红外遥控系统为例,该设计除了具有一般的日历功能外,还增加了温度检测功能,但其能成为“智能”之处并不在于此,而是他可以通过遥控按键设定时间值和温度值,程序会按照这些数值自动的控制继电器,从而达到了定时开关灯,定温开关空调的目的。在享受
10、越来越智能化的电子产品的时候,我们还要再次感谢电子技术的发展,集成化的功能模块已使编程和硬件设计变得非常方便。以温度采集模块为例,经典的温度采集系统由温度敏感器件采集到模拟量、经过A/D转换和单片机电路组成。由于温度传感器输出模拟量那么信号需要经过A/D转换,转换为数字量后才能与单片机等数字接口进行通信,从而使电路变得比较复杂,提高了成本。而DS18B20集成了模数转换功能,通过封装只留出一个数据接口,这样就可以直接输出数字量,从而与单片机连接变得非常简单,提高了灵活度,降低了成本增加了应用价值。另外HS0038红外一体接受头,更是能把红外信号直接转变为电压信号,省去了大量的外围电路,方便了程
11、序编写。1.3 家用红外遥控系统设计思路本设计主要应用于家庭,操作方便功能丰富,能很好的为人们的生活提供方便。家用红外遥控系统要实现的功能主要有,显示时间值,显示温度值,定时开关功能,设定温度上下限功能,另外,由于采用红外遥控器作为按键,还应具有红外接收功能。根据以上功能要求,来选择所需要的硬件,本设计中所用到的硬件主要有STC89C52单片,DS1302时间芯片,DS18B20温度传感器,HS0038红外接收器,LCD液晶屏,继电器。在软件设计上,各个模块单独编程,这样能够方便调试发现错误,也方便今后程序移植和升级。2 硬件设计2.1 STC89C52单片机介绍2.1.1 STC89C52引
12、脚简介STC89C52管脚及实物图如图2-1,图2-2所示。电源引脚(2根)GND(20脚):接地线;VCC(40脚):接5V电源外接晶振引脚(2根)XTAL0(18脚):振荡电路的输入端;XTAL1(19脚):振荡电路的输出端控制引脚(4根)ALE/PROG(30脚):地址锁存允许信号;EA/VPP(31脚):片内外程序存储器选择,低电平读取外部存储器指令,高电平读片内程序指令;RST/VPP(9脚):复位引脚2个机器周期以上的高电平单片机复位;PSEN(29脚):外部存储器读选通信号。图2-1 STC89C52管脚图图2-2 STC89C52实物图I/O口(32根)该单片机有4组(P0、P
13、1、P2、P3)I/O口,每组8位,共32根引脚。P0口(39脚32脚)是一个具有8位漏极开路的双向I/O口。当做输出口使用时,每组能驱动8路TTL电平。P1口(1脚8脚)是一个8 位双向I/O 口且具有上拉电阻。可以用来驱动TLL逻辑电平。P2口(21脚28脚)是一个8 位双向I/O 口且具有内部上拉电阻,P2 口可以用来驱动 TTL 逻辑电平。P3口(10脚17脚)是8位准双向I/O口,同时P3口具有复用功能,P3.0 串行输入(RXD)、P3.1 串行输出(TXD) 、P3.2 外部中断0(INT0)、P3.3 外中断1(INT1)、P3.4 定时/计数器0、P3.5 定时/计数器1、P
14、3.6 外部数据存储器写选通、P3.7 外部数据存储器读选通。2.1.2 STC89C52RC主要功能特点STC89C52是宏晶科技生产的一种高性价比低功耗的8位单片机,片内集成8KFlash程序存储器,STC89C52使用经典的MCS-51内核,程序上完全兼容。但该单片机还是做了不少改进,缩短了指令执行周期,增加了定时器2,增加了看门狗功能。在单芯片上,8位的CPU配合8K的程序存储器,使得STC89C52能满足基本的控制需要而不需要再外扩存储器。 以下是STC89C52的基本特点:(1) 相对于一个机器周期占12个时钟周期的8051增加6时钟/机器周期功能。(2) 工作电压宽度在5.5V
15、- 3.4V。(3) 工作频率0 40 MHz最高可达到48MHz。(4) 片内集成8K字节的程序存储器和512B的RAM。(5) 通用I/O口(32个),复位后P1P4是准双向口并带有弱上拉电阻,P0口是开漏输出,作为地址线使用时不用接上拉电阻而作为普通I/O口使用时必须使用上拉电阻。(6) 具有3个16位定时器/计数器,定时器0可以拆分成两个8位使用。(7) 具有四个外部中断,可以设置成下降沿或低电平模式触发,掉电模式下外部中断的低电平模式可以唤醒系统。(8) 具有一个通用同步串口,如有需要可以通过普通I/O口模拟串口进行扩展。(9) 正常工作温度范围0 - 75,封装为PLCC-44和P
16、DIP-40两种,本设计为PDIP-40封装。 2.2 DS18B20温度传感器介绍2.2.1 DS18B20引脚及特点DS18B20的引脚及封装如图2-3所示。 图2-3 DS18B20引脚及封装DS18B20的引脚:1.DQ 输入/输出端口;2. GND 为电源地;3. VDD +5V(寄生电源模式下该位接地即可)DS18B20 的主要特性有一下方面,DS18B20适应的温电压范围为3.05.5v,可以直接与3v或5v单片机相连,如果使用寄生电源模式两个电源引脚可以直接接地,DS18B20与单片机连接只需要一根数据线,通过一定的时序操作可以实现读和写的双向通信,另外DS18B20还有一大特
17、色,一条数据线可以连接多个传感器 ,在不增加I/O口的情况下实现多点测温的需求,DS18B20 设计精巧实用方便,整个功能电路集成在只有三个引脚的芯片内,形如三极管 ,其温度测量范围55125,温度测量分辨率为 912 位出厂设置为12位精度,这样在默认设置下只要把测得并转化后的温度值乘以0.0625即可得实际温度值。DS18B20与单片机的连接有两种方法,外部电源供电和寄生电源供电方式,在实际使用时只需要在数据线上接上4.7k的上拉电阻即可。本设计采用外部电源供电方式如图2-4所示。图2-4 DS18B20外部供电电路图2.2.2 DS18B20内部结构及寄存器介绍DS18B20的内部结构如
18、图2-5所示。图2-5 DS18B20内部结构图DS18B20的四大数据组成部分:光刻 ROM 中的 64 位序列号,用于实现一根总线上挂接多个 DS18B20 的目的。温度灵敏原件,用于接收最初的温度模拟量,即电阻随温度变化。非易失性温度报警触发器(EEPROM)TH和TL。可通过软件写入用户报警上下限值。配置寄存器,通过R0,R1位设置,温度分辨率,出厂时R0=1,R1=1(即12位分辨率)具体设置方法如图2-6所示。图2-6 分辨率设置寄存器下面是对DS18B20高速暂存存储器介绍:高速RAM由9个字节组成如表2-1所示。表2-1 DS18B20存储器映像温度低位温度高位THTL配置位保
19、留保留保留CRC校验温度转换命令(44H)发出后在最长750ms的时间内,二进制温度值被存放于温度高位和温度低位(即高速RAM的第0和1字节)。这时单片机按照低位在前,高位在后的方式读取两字节数据,就可以通过一定的转换规则得到十进制温度。在转换时应注意,当S=0(正温度)时,根据分辨率位数直接转换为十进制;当S=1(负温度)时,应先将补码取反加一,再进行十进制转换。数据格式如图2-7所示。图2-7 温度值格式图DS18B20与单片机的通信遵循着一定的时序,其时序如图2-8所示。图2-8 DS1302时序图由图可知,使用DS18B20时首先对其复位,复位信号至少为480us的低电平,若DS18B
20、20接收到复位信号则会在1560us内发出一个回复脉冲,脉冲时间为60240us,此时控制器数据线应是高电平以便对其接收,至此,通信协议已经基本达成,接下来开始数据通信。2.3 DS1302时钟芯片介绍2.3.1 DS1302引脚及内部寄存器简介DS1302是美国达拉斯公司推出的一款功耗低功能全的实时时钟芯片,RTC寄存器可提供年、月、日、时、分、秒、及周的时间值,另有31字节静态RAM,采用串行三线接口与单片机进行通信,突发方式下,可以一次性传送多个字节的数据或时钟信号。工作电压宽度2.55V ,用来保持片内数据时功率控制在1毫瓦内。具有备用电源引脚,也可以通过寄存器设置备用电源充电方式。D
21、S1302的引脚如图2-9所示。图2-9 DS1302引脚图其中X1、X2外接32.768KHz晶振;GND接地;CE为信号使能端,数据传输时必须保持高电平,I/O 为数据输入/输出引脚;SCLK为串行时钟,Vcc1,Vcc2为电源供电管脚。DS1302关于时间和日期的寄存器如图2-10所示,共有12个,编程时注意读和写的地址有所不同。图2-10 DS1302RTC寄存器DS1302控制字,如表2-2所示。表2-2 DS1302控制字1RAMA4A3A2A1A0RD/WR控制字最高字节应该为1,为0时不能向芯片写入数据,控制字从低位开始输出,第6位为0表示读取时钟数据,为1表示读RAM数据,A
22、4A0为操作地址。在下一个时钟上升沿,写入数据,而在指令后的下一个时钟下降沿,读出数据。2.3.2 DS1302读写时序DS1302读写时序如图2-11所示。CE高电平开启数据传送功能,数据传输时,数据在时钟上升沿输入,时钟下降沿输出。图2-11 DS1302读写时序2.4 HS0038红外一体接收器介绍2.4.1 HS0038特点介绍红外通信有红外发射装置和接收装置组成,本设计的红外发射装置为载波38KHz的普通红外遥控器。HS0038能够接受红外信号,并能对信号放大,检波,整形输出单片机可以识别的TTL电平。单片机经过一定的算法把接收到的数据进行解码。便可以得到遥控器键值。应当注意HS00
23、38输出的数据正好和发射端的电平反向。2.4.2 HS0038电路及应用HS0038引脚及封装如图2-12所示。图2-12 HS0038实物图从左到右,引脚依次是:I/O数据端口、GND接地、VCC接+5V电源。HS0038在单片机系统中常用的电路如图2-13所示。图2-13 HS0038应用电路图2.5 LCD12864液晶介绍2.5.1 LCD12864性能概述及引脚功能 本设计采用带汉字字库的液晶模块,内置8192个汉字128个字符还具有64*256的GDRAM可以用来绘制图形。液晶正常工作的电压宽度为3.35V,显示分辨率为12864。应用中可以通过写入命令字来实现多种功能,如:开关光
24、标,反白显示,屏幕移位,睡眠等。该液晶20个引脚与单片机的连接如图2-14所示。LCD12864具有20个引脚其功能如表2-3所示。图2-14 LCD12864与单片机连接图由于本设计采用8位并行数据传输方式,故其第15引脚PSB直接接高电平即可。此时,RS引脚为指令/数据选择引脚。另外,18脚和19脚为背光灯,可以根据需要接上可调电阻来实现对背光亮度的调节。表2-3 LCD12864引脚功能图2.5.2 LCD12864读写时序及用户指令集对LCD12864液晶的操作不外乎通过单片机不断进行读写,单片机写数据到液晶模块的时序图如图2-15所示。图2-15 单片机写数据到液晶模块单片机读取液晶
25、模块数据的时序图如图2-16所示。图2-16单片机读取液晶模块数据由图3-14可知写数据或命令的操作大致如下,RS为高时写数据,RS为低时写指令;RW引脚为低电平进行写操作;E引脚设置为高允许数据传送,接着便把所传数据放于数据引脚,E引脚再次拉低便完成了写操作。LCD12864有两种指令集,基本指令集(RE=0)和扩充指令集(RE=1),写指令时RS=0,RW=0。通过正确的时序写指令可以设置LCD12864的很多功能,如写入0x01指令即可清屏并把DDRAM地址计数器调整为“00H”,再如写入指令“0xc”即可打开显示关闭游标。2.6 其他硬件电路2.6.1 STC89C52RC最小系统的设
26、计本设计的单片机最小系统主要包括,STC89C52单片机,12M外接晶振,上电复位电路三个部分。最小系统晶振电路如图2-17所示。图2-17 晶振电路晶振两个引脚分别接于单片机的XTAL0和XTAL1引脚,电容值的选择范围为530PF,电容对晶振频率具有微调作用。最小系统复位电路如图2-18所示。图2-18 上电复位电路单片机复位电路的设计必须能满足上电震荡稳定后,保持至少两个周期的高电平。本最小系统采用10uf的电容,经验证完全满足要求。由于本电路上电即可以使单片机复位,又具有电源开关,故省去了按键复位开关。另外,由于本设计采用单片机内部存储器存储程序,故单片机的第31引脚(EA)接高电平,
27、用来访问片内程序。2.6.2 系统电源电路的设计 由于所选用单片机为5V单片机,为得到较稳定的5V电压,本设计采用了L7805cv三端集成稳压管。输出电压4.75-5.25V,最大输入电压35v,压差3-5v时工作在理想状态。输出电流可达1.5A(需做好散热),同时L7805cv内部含有限流保护电路和过热保护电路,防止负载过大温度过高烧坏器件。本设计中L7805cv的应用电路如图2-19所示。图2-19 L7805cv稳压电路图3 软件开发平台及软件3.1 开发环境介绍及程序总体结构3.1.1 开发环境介绍本设计采用KEIL C51集成开发环境,它具良好用户的界面,使用极为方便。支持汇编语言,
28、C语言及其混合编程,能够兼容绝大多数51系列单片机的程序设计和仿真。在本设计中,所有的程序采用C语言编写,最后把调试通过的程序编译成二进制文件并通过串口下载到目标板。3.1.2 程序总体结构由于整个系统涉及到的外设模块较多,故采用了多文件模块化编程,这样大大提高了程序的可读性,也为以后可能遇到的程序移植和升级提供了方便。整个设计的程序结构如图3-1所示。图3-1 程序结构图其中,main.c是设计主函数包含了各种外设的初始化及其功能函数的调用,DS18B20.c、IR.c、DS1302.c、LCD12864.c分别为温度传感器、红外接收器、时钟芯片和液晶的驱动程序,SET.c是用来定时、定温的
29、功能模块。3.2 DS18B20温度程序模块3.2.1 DS18B20操作流程使用DS18B20时首先应遵循图2-8所示的时序图,然后按照流程进行具体操作。DS18B20操作流程如图3-2所示。初始化复位、发跳过ROM命令发温度转换命令、等待发读取温度命令复位、发跳过ROM命令调用显示函数存储并转化数据图3-2 DS18B20操作流程3.2.2 DS18B20重点代码及其分析DS18B20程序的核心部分是利用单片机读取芯片内部的温度值,其读函数如下,/*从DS1820中读出数据*/uchar DS1820_RData()uchar i,j,Tmep;for(i=8;i0;i-)Tmep=1;D
30、S1820_bit=0; /低电平,产生读信号for(j=2;j0;j-); /延时4usDS1820_bit=1; /释放总线,准备读数据for(j=4;j0;j-); /延时if(DS1820_bit=1)Tmep|=0x80;for(j=30;j0;j-); /延时DS1820_bit=1; /拉高数据线,准备读下一位return(Tmep); /返回数据通过上面的读函数,温度值被保存到Tmep变量内,接下来便可以按照一定的规则对Tmep的值进行转化,最后显示在液晶屏上。另外,应当注意在每次获取温度值时都要对DS18B20进行复位操作。3.3 DS1302时间程序模块3.3.1 DS13
31、02总体操作及基本读写功能函数本设计中DS1302操作主要包括读取内部时间值和修改时间值两部分,DS1302模块总体操作如图3-3所示。 图3-3 DS1302操作总流程DS1302读写操作流程如图3-4所示。开始结束设置CE为高上升沿,按位传输地址读取或写入相应地址的数据设 置C E 为 低图3-4 DS1302读写操作流程在对DS1302操作时,只要调用Write1302_Cmd_Dat(),和Read1302()就可以实现其与单片机之间的数据交流。下面是读写函数的实现。/*/向DS1302写地址和数据, Addr地址,Dat数据*/void Write1302_Cmd_Dat(unsig
32、ned char Addr, unsigned char Dat)DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302_WriteByte(Addr); / 地址,命令 DS1302_WriteByte(Dat); / 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0; /*/读取DS1302某地址的数据,*/ uchar Read1302(unsigned char Addr)uchar Dat;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302_WriteByte
33、(Addr|0x01); / 以写数据时的地址为参考,读时应加1Dat = DS1302_ReadByte(); / 读取数据到变量DatDS1302_CLK = 1;DS1302_RST = 0;return(Dat);3.3.2 读取时间数据并转化成字符串由于时间数据包含年、月、日、时、分、秒、周,为了方便可以定义一个时间类型结构体,把转换前后的数据都作为这个结构体的成员。typedef struct unsigned char Week;unsigned char Second;unsigned char Hour;unsigned char Minute;unsigned char H
34、our;unsigned char Month;unsigned char Day;unsigned char Year;unsigned char Str_Time9;unsigned char Str_Year5;unsigned char Str_Month3;unsigned char Str_Day3;struct_TIM;然后,通过Read1302()函数读取各个地址处的时间数据分别保存于Second、Minute等变量中并转换成十进制,如读取并转换秒值可以用以下两个语句:temp = Read1302(0x80);/低四位是秒的个位,高三位是秒的十位(原来是BCD码)Time-S
35、econd = (temp &0x70)4)*10 + (temp &0x0F);接着就可以把数值转换成字符串了,仍以秒值为例转换语句如下:Time-Str_Time0 = Time-Second/10 + 0;/十位Time-Str_Time1 = Time-Second%10 + 0;/个位至此,所得数据便可以方便的显示在液晶屏上了。3.4 LCD12864液晶驱动程序3.4.1 LCD12864初始化LCD12864初始化流程如图3-5所示。图3-5 12864液晶初始化LCD12864液晶屏使用前先要进行初始化,已设定不同的功能和模式,本设计中液晶初始化为基本指令集,开显示关闭游标,光
36、标从左向右加1移动,初始化通过Init_12864()函数完成。3.4.2 写数据到LCD12864功能函数LCD12864的功能函数主要是显示从其他模块采集到的并转化后的数据,这里主要提供了两种显示函数,writestring()和writedat()两个函数,writestring()用来显示从一个地址开始的字符串,writedat()函数用来在某个地址显示一个字符。下面是相应的实现代码。/从地址addr_12864开始,写字符串到LCD void writestring(uchar addr_12864 ,uchar * str)uchar i = 0;Write12864_Cmd_Da
37、t(addr_12864,0);while(stri != 0)Write12864_Cmd_Dat(stri+,1); /在地址addr,写一个字符到LCDvoid writedat(uchar addr ,uchar dat)Write12864_Cmd_Dat(addr,0);Write12864_Cmd_Dat(dat,1);3.5 HS0038红外解码程序模块3.5.1 红外遥控器编码介绍在进行红外解码之前首先要对本设计采用的红外遥控器编码方式进行简要介绍。遥控器发送一组完整数据(如图3-6所示),首先是9ms 高电平和4.5ms低电平组成的前导码,紧接着是8位地址码及其反码,最后便
38、是8位操作码及其反码。具体的编码方式为脉宽调制的串行码,用0.56ms的高电平和0.56ms的低电平表示二进制0,以0.56ms的高电平和1.68ms的低电平表示二进制1,编码形式如图3-7所示。 图3-6遥控器发送一组完整数据图3-7遥控器编码的0和13.5.2 红外解码程序流程及重要代码分析本设计中红外遥控器作为控制单片机运行的按键,为了更好的实现按键功能红外接收端接在了单片机的外部中断0引脚,另外遥控器编码采用脉宽调制方式,为了更精确的记录脉宽时间需要启用定时器功能,所以程序开始要进行中断和定时器的初始化。为了保证精度,定时器初始化为工作方式2即8位自动重装模式。中断触发方式采用下降沿触
39、发,中断程序只需要记录两个中断之间时间值并保存,然后对相应脉冲的时间值与标准的脉冲时间进行比较,这样得出了是0还是1。由于中断函数尽量要短,进行解码的工作尽量不要在中断函数中进行。下面是中断函数。/*晶振12M,一个机械周期为12/12000000为1微秒,则每一次中断256*0.001ms=0.256ms*/void timer0() interrupt 1 timer+; /*startflag初始值位0,第一次进入中断标记为1,同时时间清零,如果经判断有引导码出现,就开始记录了。*/void int0() interrupt 0if(startflag)if( timer45) /9+4
40、.5ms 的引导码 13.5/0.256=52 取低于52的数即可ir_num=0;ir_time_datair_num=timer;timer=0;irnum+;if(ir_num=33) Ir_num=0;Ir_end=1; /一组接收完成elsestartflag=1; /第一次进来时被标记为1,timer清0timer=0;另外,根据通过实际应用发现,外部光源特别是太阳光对红外通信干扰较大,为了避免光源干扰可能带来的麻烦,这里采用了软件解决的方式。按键按下后把得到的数据分别与操作码和操作反码比较,每次比较通过后要立即清零。下面是一段示例代码:if(ircode2=0x09) ircod
41、e2=0x00;if (ircode3=0xf6) ircode3=0x00;具体功能代码这样就保证了即使干扰数据能进入第一层,但进不了第二层,由于进入第一层后数据被清除,下一次连第一层也进不去了,从而避免了由于干扰出现随机数对系统功能的影响。3.6 定时定温功能的程序实现本系统具有随时设定时间值和温度值的功能,要达到这样的目的需要满足这样几个条件,第一、能进入设置模式,第二、能通过按键选择要修改的项并能对其数值增大和减小,第三、能顺利返回。该流程可以通过图3-8表示。返回修改项切换增减修改设置模式图3-8 时间温度设置流程以上工作完成后,设置功能已经能够实现,只需要在主函数中调用Compar
42、e_temp_time()函数就可以通过比较设定值与实际值,来执行继电器开关灯和开关空调动作了。4 系统调试及设计总结4.1 系统调试4.1.1 最小系统调试本设计的电路图由Protel99SE绘制,各功能模块的实际电路由万用板人工焊接。最小系统的正常运行是整个系统得以正常运行的前提。焊接完成最小系统后,首先用软件平台编写一个能使P2.0口一秒间隔高低电平变化的C程序,然后把编译生成的二进制文件通过串口下载到单片机。这时再在P2.0引脚连接发光二极管,上电复位后,发现二级管能够一秒间隔出现亮灭循环。通过以上实验能够证明单片机最小系统已经正常运行,下面就可以焊接其他功能模块了。4.1.2 其他各
43、模块调试过程由于本设计的所有数据都以可见方式显示在液晶上,所以在焊接其他模块前需要使液晶屏能够正常显示。焊接好液晶模块后,通过上面的方式下载程序使液晶显示出几个汉字和字符,液晶调试通过。接着焊接温度传感器和时钟芯片,并通过各自的程序在液晶上显示出数据。红外模块的调试是通过遥控继电器开关来完成的,焊接好红外和继电器模块后,通过编程使遥控器某按键每次键按下时P2.0电平高低翻转,把继电器连接在P2.0引脚,上电复位后按下遥控器,继电器发出啪啪的响声,调试通过。在实际调试时钟模块时,时间数据经常发生抖动和随机跳变,但在下一次刷新时又变正常,这说明时钟芯片与单片机的通信是正常的。经过多次对电路的检查怀
44、疑是由于DS1302的I/O口驱动能力不足造成的,而且在焊接的电路中从DS1302到单片机之间的连线又很长,于是在DS1302的I/O口和VCC之间加了一个10K的上拉电阻,问题得到圆满解决。 由此得出了一个结论DS1302的驱动能力很是有限的在和单片机的通信中,要考虑到加上拉电阻的可能。各个模块调试通过后就可以把各模块程序加以组合,实现整体功能了,由于采用了多文件编程要注意声明全局变量。图5-1即为调试用电路实物及显示效果,各项功能均已正常。图4-1实物电路及显示效果4.2 总结综合上面的介绍,本设计的硬件共有,电源模块,最小系统,红外模块,温度模块,时钟模块,液晶模块和继电器模块组成。软件部分共有,main.c(主函数模块文件),DS18B20.c(温度模块文件),DS130