为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

智能家居系统

2017-09-16 49页 doc 284KB 53阅读

用户头像

is_624976

暂无简介

举报
智能家居系统智能家居系统 智能家居控制系统 摘 要 本设计以单片机ATMEL89S52作为各模块的控制中心,电路分为按键控制模块,红外遥控 模块,PC通信模块,光电传感温度传感红外传感模块,数码显示模块,时钟温度模块,报 警模块,其中按键模块采用3×3矩阵式,红外遥控模块由TC9012编码芯片对脉宽调制的串 行码进行编码,PC通信采用RS232串口通信协议,用光敏电阻实现对光电信号的转换,PIR 红外热释电传感器对人体释放的、特定波长的红外光进行红外传感,实时时钟芯片DS12887, 可实现年月日时分秒时间信息的显示,由DS18B2...
智能家居系统
智能家居系统 智能家居控制系统 摘 要 本设计以单片机ATMEL89S52作为各模块的控制中心,电路分为按键控制模块,红外遥控 模块,PC通信模块,光电传感温度传感红外传感模块,数码显示模块,时钟温度模块,报 警模块,其中按键模块采用3×3矩阵式,红外遥控模块由TC9012编码芯片对脉宽调制的串 行码进行编码,PC通信采用RS232串口通信协议,用光敏电阻实现对光电信号的转换,PIR 红外热释电传感器对人体释放的、特定波长的红外光进行红外传感,实时时钟芯片DS12887, 可实现年月日时分秒时间信息的显示,由DS18B20集成温度传感器对现场环境温度进行实时 检测,并在超出设定的温度界限时进行报警。 关键词:智能家居 红外遥控 传感器 Abstract In this design, the controller kernel of all the modules is based on MCU AT89S52.The circuit is composed of the following modules: key-press control module, infrared remote control module, PC communicate module, photoelectric sense organ, thermometric sense organ and infrared sensor module, numerical display module, clock and thermometry module, alarm module. Among this, key-press module make use of 3×3 matrix structure. Serial code of pulse’s width modulate is coded by the TC9012 coding chip in infrared remote control module. MCU communicate with PC module adopt RS232 serial port communication protocol. Photoelectricity conversion is realized by photosensitive resistance. PIR infrared sensor will sensitive to infrared ray of man releasing, special wavelength. Real time clock chip DS12887,can realize the display of year, month, day, hour, minute and second.DS18B20 intergrated thermometric sensor carry through the real time examined to environmental temperature. besides, it give an alarm when temperature is out of the range. Keywords: intellective house infrared telecontrol sensor 目录 1论证与选择?????????????????????????????????????2 1.1主控制器的选择与论证???????????????????????????????2 1.2按键控制的选择与论证???????????????????????????????2 2 1.3 显示器方案选择与论证??????????????????????????????? 1.4 显示电路方案选择与论证?????????????????????????????2 1.5 温度检测方案选择与论证?????????????????????????????3 1.6 时钟方案选择与论证?????????????????????????????????3 1.7 光电传感器方案选择与论证???????????????????????????3 2 单元硬件电路设计???????????????????????????????????3 2.1 单片机最小系统组成?????????????????????????????????3 2.2 矩阵按键控制模块???????????????????????????????????4 2.3 数码管显示模块?????????????????????????????????????4 2.4红外遥控系统模块???????????????????????????????????5 2.5 单片机与PC通信模块????????????????????????????????6 2.6 时钟模块???????????????????????????????????????????7 2.7 测温及温度传感器模块???????????????????????????????7 2.8热释电红外传感模块?????????????????????8 2.9 光电传感器?????????????????????????????????????????9 2.10单片机最小系统??????????????????????10 3 软件设计?????????????????????????????????????????????10 4 系统测试分析???????????????????????????????????????10 4.1 按键控制测试??????????????????????????????????????12 4.2 红外遥控测试??????????????????????????????????????14 4.3 单片机与PC通信测试???????????????????????????????16 4.4光电传感功能测试???????????????????????????????????17 4.5红外传感功能测试???????????????????????????????????17 4.6温度传感功能测试???????????????????????????????????17 4.7模拟串口数码管显示测试?????????????????????????????17 4.8 时钟温度功能测试???????????????????????????????????18 5结束语?????????????????????????????????????????????????????18 参考文献???????????????????????????????????????????????????????18 附录1主要元器件清单????????????????????????????????18 附录2系统完整程序?????????????????????????????????18 1 1方案论证与选择 1.1主控制器的选择与论证 方案一:采用CPLD作为主控制器, 由于CPLD具有强大的资源,使用方便灵活,易于进行功能扩展,特别是结合了EDA,可以达到很高的效率。此方案逻辑电路复杂,且灵活性不高,不利于各种功能的扩展。 方案二:基于AT89S52单片机来实现系统的控制, 控制外围电路进行时钟显示,温度测量,闹铃,红外遥控,热释电红外传感,光电传感,键盘控制和数码管显示,此系统控制灵活,能很好地满足本题的基本和扩展要求。 1.2按键控制的选择与论证 方案一: 矩阵式键盘,列线的一端通过上拉电阻接正5V电源,另一端接单片机的输入口线。各行线的一端接单片机的输出口线,另一端悬空。矩阵式键盘结构性好,使用于按键较多时的情况。矩阵式键盘结构如图1.2.1所示。 图1.2.1 矩阵式键盘结构 方案二:独立式键盘, 每个按键的电路是独立的,都有单独一根数据线输出键的通断状态。 单片机一条I / O口线对应一个按键。独立式键盘结构简单,易于编程,适用本实验按键较少的情况。独立式键盘结构如图1.2.2所示。 图1.2.2 独立式键盘结构 1.3 显示器方案选择 方案一:采用液晶显示,液晶显示具有功耗低,轻便防振,显示信息丰富的特点。但显示亮度及显示速度方面不及数码管。 方案二:采用数码管显示,数码管亮度高,体积小,重量轻,成本低,可完成本实验的数字显示要求。 1.4 显示电路方案选择 方案一:并口I/O显示,数码管的段控制信号通过锁存器连接到单片机的并联输出端口,数码管的位控制信号分别由各自的COM端与单片机的并联口相接。此类方法虽很常见,考虑到C51单片机的接口有限,故不采用。 2 方案二:模拟串口I/O显示,各位数码管通过电阻分别与8位串入并出移位寄存器74LS164连接,将74LS164的A、B端与模拟串口P2.7相接,74LS164的CLK与模拟串口P2.6相接。此方法只占用一对管脚,大大节省了有限的单片机I/O资源。 1.5 温度检测方案选择 方案一:采用热电偶或热敏电阻作为感温元件,但热电偶需冷却补偿,电路设计复杂,热敏电阻虽然精度较高,但需要标准稳定电阻匹配才能使用,而且重复性可靠性都比较差。 方案二:采用集成温度传感器DS18B20,该传感器测温系统简单,测温精度高,连接方便,占用口线少等优点,数据传输采用1-wire传输方式,大大提高了系统的抗干扰性。测量温度范围为-55?C~+125?C。且DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者可存放高温度和低温度触发器TH、TL和结构寄存器。更重要地是,应用DS18B20可方便地实现智能控制空调调节室温的变化范围。 1.6 时钟方案选择与论证 方案一:直接采用单片机实现时钟显示,利用单片机的定时器/计数器,中断进行时钟计时,此方案硬件简单但不利于实现其它功能的扩展。 方案二:采用内带128字节的RAM的时钟芯片DS12887,该芯片可以进行时分秒日月年的计数,可编程中断,还具有报警功能和掉电保护功能,并且可以方便地进行程序控制,这样占用较少的单片机资源,计时而很准确。 1.7 光电传感器方案选择与论证 方案一:采用反射式,透射式或聚焦式光电传感器,但反射式光电传感器因对不同物体表面反射能力不同灵敏度有所变化,透射式和聚焦式光电传感器对安装的位置要求较高。 方案二:以光敏电阻作为光敏器件,利用它在无光照射时,呈高阻状态;当有光照射时,其电阻值迅速减小的特性,通过电压比较器简单巧妙地实现光线强度变化前后控制输出电平的变化,非常适用于对家居内灯光亮度的监测。 2 单元硬件电路设计 2.1 单片机最小系统组成 单片机系统是整个硬件系统的核心,它既协调整机工作,又是数据处理器,是软硬件系统连接的桥梁。它主要包括: 按键控制模块,红外遥控模块,PC通信模块,光电传感温度传感红外传感模块,数码显示模块,时钟温度模块,报警模块。系统方框图如图2.1。 |按键输入 红外遥控 数码管显示 PC通信 AT89S52 光电传感 蜂鸣器报警 器器 红外传感 时钟温度 图2.1 系统结构方框图 3 2.2 矩阵键盘控制模块 采用3×3矩阵键盘,按键设置在行列的交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接,5V电源,无按键动作时,行线处于高电平;当有键按下时,行线电平状态将由与此行线相连的列线电平决定。列线电平为低时,则行线电平为低,反之亦然.六个发光二极管与单片机的P2口相连。用列扫描法对按键进行识别,如某一按键闭合,则使对应发光二极管的单片机管脚输出低电平,对应1,6号发光二极管被点亮。由此实现了按键控制发光二极管的亮灭。按键控制发光二极管电路图分别如图2.2.1图2.2.2所示。 图2.2.1 矩阵按键控制电路 图2.2.2控制发光二极管电路 2.3 数码管显示模块 以74LS164作为锁存驱动芯片,LED数码管作为显示器件,通过89S52构建显示模块。74LS164是8位串入并出移位寄存器。它的引脚A.B为串行输入端,QA-QH为串行输出端,CLK为串行时钟输入端,CLR为串行输出清零端。将前一个74LS164的QH端连接到下一个74LS164的QAQB端,再将第一个74LS164的QAQB并联接到单片机的模拟串口P2.7端,所有74LS164的CLK端连接到一起后与模拟串口P2.6相接,CLR并联接地。则送数据时,将串行口设置在工作方式0,只要把数据往SBUF里放,系统就自动将串行数据由模拟串口P2.7端送出,移位时钟由模拟串口P2.6送出,则前后数据就会依次从上一个锁存器传到下一个锁存器。74LS164的输出端QAQB-QH无内置的限流电阻,一般不能与LED数码管直接相连,需加外接300欧的限流电阻。具体电路如图2.3所示。 4 图2.3 数码管显示模块 2.4红外遥控系统模块 (1)红外遥控系统工作原理 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图2.4.1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图2.4.1 红外遥控系统方框图 采用T9012编码芯片的遥控器,遥控器发射的信号由一串0和1的二进制代码组成,T9012的0和1采用PWM方法编码,即脉冲宽度调制,以遥控输出波形为例,0码由0.56ms低电平和0.56ms高电平组合而成,脉冲宽度为1.12ms。1码由0.56ms低电平和1.69ms高电平组合而成,脉冲宽度为2.25ms。在编写解码程序时,通过判断脉冲宽度,即可得到0或1。当我们按下遥控器的按键时,遥控器将发出一串二进制代码,即一帧数据。它分为5部分,分别为引导码,地址码,地址码,数据码,数据反码。遥控器发射代码时,均是低位在前,高位在后。引导码高电平为4.5ms,低电平为4.5ms.当接收到此码时,表示一帧数据的开始。单片机可以准备接受下面的数据。地址码由8位二进制组成,共256种。地址码重发了一次,主要是加强遥控器的可靠性。如果两次地址码不相同,说明本帧数据有错,予以丢弃。数据码为8位,可编码256种状态,代表实际的按键。数据反码是数据码的各位求反,通过比较数据码与数据反码,可判断接受到的数据是否正确。如果它们不满足相反的关系,则本次遥控接受有误,数据应丢弃。 5 (2)红外遥控器接收电路 单片机遥控器接收电路采用一体化红外接收芯片SM0038,它将红外接受二极管,放大,解调,整形等电路集成在一起。只有3个引脚,将凸槽面向前,分别是电源地,,5V电源,信号输出。一体化接收芯片电路如图2.4.2所示。 红外接收头的信号输出接单片机的P1.7脚。当手指按下不同的遥控键时,一体化接受芯片把解码后的信号输入单片机,控制不同的LED发光二极管的亮与灭。 图2.4.2一体化红外接收电路 2.5 单片机与PC通信模块 (1)RS-232-C标准通信协议 RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0,20000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。 RS-232-C标准对两个方面作了规定,即信号电平标准和控制信号线的定义。RS-232,C是用正负电压来表示逻辑状态,RS-232-C将-5V,-15V规定为“1”, 5V, 15V规定为“0”。 电缆长度:在通信速率低于20kb/s时,RS-232C所直接连接的最大物理距离为15m(50英尺)。 EIA-RS-232C与TTL转换:EIA-RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件。 (2)MAX232芯片简介 MAX232 是 一 种 双 组 驱 动 器 / 接 收 器 , 片 内 含 有 一 个 电 容 性 电 压 发 生 器 以 便 在 单 5V 电 源 供 电 时 提 供 EIA/TIA-232-E电平。每个接收器将EIA/TIA-232-E电平输入转换为5V TTL/CMOS电平。这些接收器具有1.3V 的典型门限值及0.5V的典型迟滞 ,而且可以接收?30V的输入。 每个驱动器将TTL/CMOS输入电平转换 为 EIA/TIA-232-E电平。 主要特点 1、单5V电源工作 。 2、LinBiCMOSTM工艺技术。 3、两个驱动器及两个接收器。 4、?30V输入电平。 5、低电源电流:典型值是8mA 。 6、符合甚至优于ANSI标准 EIA/TIA-232-E及ITU推荐标准V.28。 7、ESD保护大于MIL-STD-883(方 法3015)标准的2000V。 (3)单片机与PC通信模块电路 本电路设计中应用MAX232芯片完成TTL到EIA双向电平的转换。与RS232相匹配的连接器采用DB-9。MAX232芯片的10脚,TTL电平的输入引脚,连接到单片机的TXD,TTL电平 6 的输出引脚。MAX232芯片的9脚,TTL电平的输出引脚,连接到单片机的RXD,TTL电平的输入引脚。MAX232的7脚,RS232电平的输出引脚,连接DB-9的第2脚,RS232电平的串口输入信号。MAX232的第8脚,RS232电平的输入引脚,连接到DB-9的第3脚,RS232电平的串口输出信号。DB-9的第5引脚接地。电路连接如图2.5所示。 图2.5 单片机与PC串口通信电路 2.6 时钟模块 MOT管脚接地或不接,选用INTEL总线时序,DS管脚在它有效时表示DS12887正在往总线输出数据,R/W为写信号线。系统上电时复位脚要保持低电平200ms以上时钟芯片才可以正常工作。当复位脚为低并且Vcc高于4.25V时,中断允许位及中断标志位清零,通常情况下把复位和电源连接。AD0-AD7为地址数据复用线。 DS12887内建128字节RAM,其中低十字节分别用于秒,秒闹,分,分闹,时,时闹,星期,日,月,年,接下来4字节分别为四个控制寄存器,以及114字节的通用RAM。 图2.6 DS12887电路 2.7 测温及温度传感器模块 由于采用单总线器件,单片机访问1-Wire器件必须严格遵循单总线命令序列, 主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求单片机将数据线下拉至少480us,然后释放总线,产生由低电平跳向高电平的上升沿,DS18B20检测到上升沿后等待15-60us ,而后发出60-240us的存在低脉冲,单片机受到此信号表示复位成功。所有的读,写时序至少需要60us,且每两个独立的时序之间至少需要1us的恢复时间。在写时序中,主机将在拉低总线15us之内释放总线,并向单总线器件写1;若主机拉低总线后能保持至少60us的低电平,则向单总线器件写0,单总线器件仅在主机读时序时才向主机传输数据。DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易 7 失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和配置寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是配置寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。如图2.7为DS18B20的外部电源供电方式。 图2.7 DS18B20外接电源电路 2.8 热释电红外传感模块 (1)被动式热释电红外探头的工作原理及特性 在自然界,任何高于绝对温度(- 273度)时物体都将产生红外光谱,不同温度的物体,其释放的红外能量的波长是不一样的,因此红外波长与温度的高低是相关的。 在被动红外探测器中关键性的元件,热释电红外传感器(PIR),它能将波长为8一12um之间的红外信号变化转变为电信号,并能对自然界中的白光信号具有抑制作用,因此在被动红外探测器的警戒区内,当无人体移动时,热释电红外感应器感应到的只是背景温度,当人体进人警戒区,通过菲涅尔透镜,热释电红外感应器感应到的是人体温度与背景温度的差异信号,因此,红外探测器的红外探测的基本概念就是感应移动物体与背景物体的温度的差异。 人体都有恒定的体温,一般在37度,所以会发出特定波长10微米左右的红外线,被动式红外探头就是靠探测人体发射的10微米左右的红外线而进行工作的。人体发射的10微米左右的红外线通过菲泥尔滤光片增强后聚集到红外感应源上。红外感应源通常采用热释电元件,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经检测处理后就能产生报警信号。 1)这种探头是以探测人体辐射为目标的。所以热释电元件对波长为10微米左右的红外辐射必须非常敏感。 2)为了仅仅对人体的红外辐射敏感,在它的辐射照面通常覆盖有特殊的菲泥尔滤光片,使环境的干扰受到明显的控制作用。 3)被动红外探头,其传感器包含两个互相串联或并联的热释电元。而且制成的两个电极化方向正好相反,环境背景辐射对两个热释元件几乎具有相同的作用,使其产生释电效应相互抵消,于是探测器无信号输出。 4)人一旦侵入探测区域内,人体红外辐射通过部分镜面聚焦,并被热释电元接收,但是两片热释电元接收到的热量不同,热释电也不同,不能抵消,经信号处理而报警。 。 被动式热释电红外探头的优缺点: 优点是本身不发任何类型的辐射,器件功耗很小,隐蔽性好。价格低廉。缺点是: 1容易受各种热源、光源干扰 2被动红外穿透力差,人体的红外辐射容易被遮挡,不易被探头接收。 3易受射频辐射的干扰。 4环境温度和人体温度接近时,探测和灵敏度明显下降,有时造成短时失灵。 (2)被动式热释电红外传感器电路 红外报警开关采用国内外最流行的,,,人体热释电传感器作信号探测器,灵敏度高,探测距离可达,,米以上,其俯视角可达,,?,水平视角可达,,,?。因它仅对人体释放的、特定波长的红外光最敏感,因而误动作极小。在本设计中,用PIR传感器和通用运放LM324的人体热释电红外报警开关。 当有人在其探测区域内以,(,,,,,的频率活动时,它就能感生出微弱的电信号,经,,,、,,,两级放大后,从,,,?脚输出,(,,,(,,的强信号。,16、,17、 8 ,31,,34及,,,组成双门限比较器,因,,,感生的信号电压可正可负,故,,,?脚输出的电压亦可正可负(对中心电压,,而言)。当其输出的电压达到,(,,以上时,通过,,施加于,,,?脚的电压高于?脚的电压(,(,,),使,,,?脚输出高电位;而当,,,?脚输出的电位低于,,时,则,,,?脚的电压将通过,,下降至,(,,以下,其?脚也输出高电位。平时无信号时,由于,,,?脚的电位(,(,,高于?脚(,(,,),故?脚无输出。当,,,接收到信号时,?脚就一定输出高电位。?脚输出的高电位经过74LS00与非门反向后,输出低电平,再通过P17脚与单片机相连。只要热释电传感器有检测信号输入,就会立即产生外部中断,单片机之后通过蜂鸣器来响应。具体电路设计如图2.8所示。 图2.8 红外热释电传感器 2.9 光电传感器 (1)光敏电阻简介 光敏电阻器通常由光敏层、玻璃基片(或树脂防潮膜)和电极等组成。光敏电阻器是利用半导体光电导效应制成的一种特殊电阻器,对光线十分敏感。它在无光照射时,呈高阻状态;当有光照射时,其电阻值迅速减小。光敏电阻器广泛应用于各种自动控制电路(如自动照明灯控制电路、自动报警电路等)、家用电器(如电视机中的亮度自动调节,照相机中的自动曝光控制等)及各种测量仪器中。 (2)光电传感器电路设计 LM324电压比较器分别对光线强度变化前后电压比较,实现高低电平的变化。如图2.9所示,当光线较弱时,3脚的电压为2.5V,光敏电阻的电阻值大于10K,因此2脚的电压小于2.5 V,此时LM324输出高电平。当外界光线变强时,3脚的电压仍为2.5V,由于光敏电阻的电阻值因外界光线增强小于10K, 因此2脚的电压大于2.5 V,此时电压比较器输出低电平,激励信号输入单片机,驱使蜂鸣器做出响应。 9 图2.9 光电传感器电路 2.10单片机最小系统 89S52是低功耗,高性能芯片。由运算器和控制器组成的微处理器,具有256个单元的片内RAM,4K的内部程序存储器,4*8条并行I/O口线,3个定时器/计数器,具有5个中断源,和一个全双工串行通道。其中XTAL1和XTAL2为外接晶体引线端,当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;RST为复位信号,当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。PSEN为外部程序存储器读选通信号,只有在读外部ROM时,PSEN为低电平实现对外部ROM单元的读操作。EA是访问程序存储器控制信号,当EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。ALE是地址锁存控制信号,在系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。 3 软件设计 图3.1和图3.2分别为按键控制图和温度显示及报警。 10 开始 键扫描 N 有无键按下 Y 延时去抖动 N 有无键按下 Y 逐列扫描 键码计算 按键释放 键1 键2 键4 键5 键6 键3 LED1亮 LED2亮 LED3亮 LED4亮 LED5亮 LED6亮 图3.1 按键控制流程图 11 测温开始 复位DS18B20 跳过ROM命令 发出温度转换命令 N 转换完毕, 复位DS18B20 Y Y 复位DS18B20 发报警搜索命令 跳过ROM匹配 N 有温度超限, Y 读取温度 鸣报警器 显示温度 图3.2 温度显示及报警流程图 4 系统测试分析 4.1 按键控制测试 在矩阵键盘上,当其中某一个按键被按下时,通过列扫描法检测到闭合 键,单片机控制则使对应的LED发光二极管立即被点亮。由此巧妙地实现了按键控制的功能。 按键控制子程序: #include #include #include sbit P1_0=P1^0; sbit P1_1=P1^1; 12 sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; main() {while(1) //按键检测并控制灯的亮灭 {P1_3=0; if(P1_0==0||IRCOM[5]==1||light==0) delay1(70); if(P1_0==0||IRCOM[5]==1||light==0) {IRCOM[5]=0; if(light==0) led1=1; else led1=~led1; } if(P1_1==0||IRCOM[5]==2||displaybuf[3]==2) delay1(70); if(P1_1==0||IRCOM[5]==2||displaybuf[3]==2) {IRCOM[5]=0; if(displaybuf[3]==2) led2=1; else led2=~led2; } if(P1_2==0||IRCOM[5]==3) delay1(70); if(P1_2==0||IRCOM[5]==3) {IRCOM[5]=0; led3=~led3; } delay1(70); P1_3=1; P1_4=0; if(P1_0==0||IRCOM[5]==4) delay1(70); if(P1_0==0||IRCOM[5]==4) {IRCOM[5]=0; led4=~led4; } if(P1_1==0||IRCOM[5]==5) delay1(70); if(P1_1==0||IRCOM[5]==5) {IRCOM[5]=0; led5=~led5; } if(P1_2==0||IRCOM[5]==6) delay1(70); if(P1_2==0||IRCOM[5]==6) {IRCOM[5]=0; led6=~led6; 13 } P1_4=1; if(led1==1) P2_5=0; else P2_5=1; if(led2==1) P2_4=0; else P2_4=1; if(led3==1) P2_3=0; else P2_3=1; if(led4==1) P2_2=0; else P2_2=1; if(led5==1) P2_1=0; else P2_1=1; if(led6==1) P2_0=0; else P2_0=1; } } 4.2 红外遥控测试 站在离一体化红外遥控接收系统三米左右距离,手握遥控键盘,当键盘 的2至7号中的任一键闭合时,一体化接收芯片SM0038对脉宽调制的串行码进行解码后送 入单片机,单片机使对应的1,6号发光二极管分别点亮。 红外遥控子程序: #include #include void IR_SHOW(); void delay(unsigned char x);//x*0.14MS void delay1(unsigned char ms); void beep(); sbit IRIN = P3^2; sbit BEEP = P3^7; sbit RELAY= P1^3; sbit GEWEI= P2^1; sbit SHIWEI= P2^0; unsigned char IRCOM[8]; unsigned char code table[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x30,0x25,0xa9,0x26,0xa1,0xb 1}; main() { IE = 0x81; //允许总中断中断,使能 INT0 外部中断 TCON = 0x01; //触发方式为脉冲负边沿触发 14 delay(1); IRIN=1; BEEP=1; RELAY=1; for(;;) { IR_SHOW(); } } //end main void IR_IN() interrupt 0 using 0 { unsigned char i,j,k,N=0; EA = 0; I1: for (i=0;i<4;i++) { if (IRIN==0) break; if (i==3) {EA =1;return;} } delay(20); if (IRIN==1) goto I1; //确认IR 信号出现 while (!IRIN) //等 IR 变为高电平 {delay(1);} for (j=0;j<4;j++) { for (k=0;k<8;k++) { while (IRIN) //等 IR 变为低电平 {delay(1);} while (!IRIN) //等 IR 变为高电平 {delay(1);} while (IRIN) //计算IR高电平时长 { delay(1); N++; if (N>=30) {EA=1;return;} } IRCOM[j]=IRCOM[j] >> 1; if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} N=0; }//end for k }//end for j if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;} IRCOM[5]=IRCOM[2] & 0x0F; IRCOM[6]=IRCOM[2] & 0xF0; IRCOM[6]=IRCOM[6] >> 4; beep(); EA = 1; } void IR_SHOW() { 15 P0 = table[IRCOM[5]]; GEWEI = 0; SHIWEI = 1; delay1(4); P0 = table[IRCOM[6]]; SHIWEI = 0; GEWEI = 1; delay1(4); } void beep() { unsigned char i; for (i=0;i<100;i++) { delay(5); BEEP=!BEEP; } BEEP=1; } void delay(unsigned char x)//x*0.14MS { unsigned char i; while(x--) { for (i = 0; i<13; i++) {} } } void delay1(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i<120; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } 4.3 单片机与PC通信测试 将DB-9接头与PC机的RS232串口相接后,把PC机上的串口调 试器软件上设置波特率为19200bps,在字符串输入框中分别输入1,6数字,点击发送后, 对应数字的1,6号发光二极管迅速发光。调试软件如下图4.3所示。 16 图4.3 串口调试软件 4.4光电传感功能测试 当外界光线由明变暗时,光敏电阻的电阻值随之发生变化,对应的电压比较器输出电平也会随之而变化。此时1号发光二极管发光,与此同时数码管上显示2号防区。 4.5红外传感功能测试 当人靠近PIR红外热释电传感器时,红外热释电传感器对人体释放的、特定波长的红外光感生出微弱的电信号,经过电路的放大处理,与单片机相连的P17产生低电平,并通过蜂鸣器报警,同时数码管上显示3号防区。 4.6温度传感功能测试 当外界温度高于20?C低于26?C时,2号发光二极管点亮,同时数码管上显示1号防区;当外界温度高于26?C时,蜂鸣器报警,数码管被显示1号防区。 4.7模拟串口数码管显示测试 为节省I/0接口,本系统将P2.6,P2.7作为模拟串口,以74LS164作为串入并出移位锁存器,按照串口通信方式将显示数据送入锁存器锁存,并在数码管中显示出来。数码管对时间和温度与防区进行轮流显示,这样可对人对时间温度防区信息有实时的了解。 模拟串口显示子程序: #include sbit simuseri_CLK=P2^6; //用P2^6模拟串口时钟 sbit simuseri_DATA=P2^7; //用P2^7模拟串口数据 sbit drive74164_CLR=P1^7; //用P1^7控制CLR sbit a0=ACC^0; void delay(unsigned int t) //1ms的延时子程序 { unsigned int i,j; for(i=0;i>1; } while(--i!=0); simuseri_CLK=0; } void PA_out (char Pseri_out ) { drive74164_CLR =0; //并口输出清零 drive74164_CLR =1; //开始串行移位 out_simuseri(Pseri_out); } main() {char i; while(1) { PA_out(0x9f); delay(1000); } } 4.8 时钟温度功能测试 时钟芯片DS18B20可把时间信息通过中断送入数码管,温度传感器DS18B20可对外界温度进行实时监测也送入数码管显示。 5结束语 本系统以MCU89S52为核心部件,把各功能模块有机高效地组织在一起,通过软件编程,实现按键控制功能,红外遥控功能,PC通信功能,光电传感温度传感红外传感功能,数码显示功能,时钟温度功能,报警功能。其中矩阵按键控制模块可方便对各种家用电器开关的进行控制,红外遥控用作单片机系统的输入,解决了常规键盘线路板过大,布线复杂,占用过多I/O口的弊端,同时主人也可手握遥控器轻轻松松地对家用电器开关的进行控制。PC通信可以让主人坐在电脑旁通过PC轻松实现对单片机应用系统控制与反馈,拓展了单片机的应用领域。光电传感器对房间光线强度进行监测,当光线变暗时可提醒主人不再看书。红外传感器应用于家居报警,当深夜有人闯入时鸣叫报警,让主人提高警惕。温度传感器可控制室内空调,达到智能化控制室内温度的变化范围。数码显示模块可对时钟芯片的时间信息,温度芯片的实时温度以及防区号进行轮流显示,使主人对时间温度防区信息一目了然。总之,这套智能家居系统让主人尽情享受舒适安全人性化地家居环境,体验现代电子技术发展带来的愉悦与顺畅。 18 参考文献 1. 黄智伟编著.全国大学生电子设计竞赛系统设计.北京:北京航空航天大学出版社,2006年第一版 2. 黄智伟编著.全国大学生电子设计竞赛电路设计.北京:北京航空航天大学出版社,2006年第一版 3. 黄智伟编著.全国大学生电子设计竞赛技能训练.北京:北京航空航天大学出版社,2006年第一版 4. 黄智伟编著.全国大学生电子设计竞赛制作实训.北京:北京航空航天大学出版社,2006年第一版 5. 黄智伟主编,王彦,陈文光,朱卫华等编著.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社,2005年第一版 6. 黄智伟编著. 射频电路设计.北京:电子工业出版社,2006年第一版 7. 高吉祥主编,吴佳,步凯,翟庆林编著.全国大学生电子设计竞赛培训系列教程高频电子线路设计.北京:电子工业出版社,2007年第一版 8. 高吉祥主编,吴佳,步凯,翟庆林编著.全国大学生电子设计竞赛培训系列教程模拟电子线路设计.北京:电子工业出版社,2007年第一版 9. 高吉祥主编,高天万副编,陈和,朱卫华等编著.模拟电子技术[M].北京:电子工业出版社,2004年第一版 10. 高吉祥主编,黄智伟、陈和、胡见堂等编著.高频电子线路[M].北京:电子工业出版社,2003年第一版 附录1主要元器件清单 主要元器件清单见表1所示。 表1 主要元器件清单 序号 名称/型号 封装 数量 备注 1 AT89S52 DIP-40 1 51单片机 2 DS12887 DIP-24 1 时钟芯片 3 LM324 DIP-14 1 四运放集成芯片 4 SM0038 DIP-3 1 红外接收芯片 5 DS18B20 DIP-3 1 温度测量芯片 6 MAX232 DIP-16 1 电平转换芯片 7 74LS164 DIP-14 4 移位寄存器 8 74LS00 DIP-14 1 四输入与非门 附录2系统完整程序 #include #include #include #define uchar unsigned char #define MCA XBYTE[0XFF0A] #define MCB XBYTE[0XFF0B] #define MCC XBYTE[0XFF0C] #define MCD XBYTE[0XFF0D] sbit simuseri_CLK=P2^6; //用P1^6模拟串口时钟 sbit simuseri_DATA=P2^7; //用P1^5模拟串口数据 19 sbit a0=ACC^0; char xdata *dis=0xFF00; //寄存器首地址 char code dis_7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09 }; //0~9 char disp[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //送入数码显示的数据 char stat1[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // 处理后的数据 char stat[6]={0x56,0x39,0x10,0x22,0x10,0x06}; //初始化时钟数据 char at[6]={0,2,4,7,8,9}; //时钟寄存器 char dis_test,red_test; void delay(unsigned char x); void delay1(unsigned char ms); sbit IRIN = P3^2; sbit buzzer=P3^5; sbit red=P1^7; sbit light=P1^6; sbit P2_0= P2^0; sbit P2_1= P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; unsigned char bdata flag; sbit led1=flag^0; sbit led2=flag^1; sbit led3=flag^2; sbit led4=flag^3; sbit led5=flag^4; sbit led6=flag^5; sbit ring=flag^6; unsigned char IRCOM[8]; unsigned char temp,a,datmsg[1],wendu; unsigned char displaybuf[8]={10,10,10,10,10,10,10,10}; unsigned char readdata[2]; sbit DQ=P3^4; 20 bit resetpulse(void) { unsigned char i; DQ=0; for(i=255;i>0;i--); DQ=1; for(i=60;i>0;i--); return(DQ); for(i=200;i>0;i--); } void writecommandtods18b20(unsigned char command) //向温度芯片写命令 { unsigned char i; unsigned char j; for(i=0;i<8;i++) { if((command & 0x01)==0) { DQ=0; for(j=35;j>0;j--); DQ=1; } else { DQ=0; for(j=2;j>0;j--); DQ=1; for(j=33;j>0;j--); } command=_cror_(command,1); } } unsigned char readdatafromds18b20(void) //从温度芯片中读取温度数据 { unsigned char i; unsigned char j; unsigned char temp; temp=0; for(i=0;i<8;i++) { temp=_cror_(temp,1); DQ=0; 21 _nop_(); _nop_(); DQ=1; for(j=10;j>0;j--); if(DQ==1) { temp=temp | 0x80; } else { temp=temp | 0x00; } for(j=200;j>0;j--); } return(temp); } void tem(void) {unsigned char x,result; while(resetpulse()); writecommandtods18b20(0xcc); writecommandtods18b20(0xbe); readdata[0]=readdatafromds18b20(); readdata[1]=readdatafromds18b20(); for(x=0;x<8;x++) { displaybuf[x]=10; } readdata[1]=readdata[1]<<4; x=readdata[0]; x=x>>4; x=x & 0x0f; readdata[1]=readdata[1] | x; x=2; result=readdata[1]; displaybuf[x]=result%10; result=result/10; x++; displaybuf[x]=result; while(resetpulse()); writecommandtods18b20(0xcc); writecommandtods18b20(0x44); } 22 void delay(unsigned char x) { unsigned char i; while(x--) { for (i = 0; i<13; i++) {} } } void delay1(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i<120; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } void delay2(unsigned int t) //1ms的延时子程序 { unsigned int i,j; for(i=0;i>1; } while(--i!=0); simuseri_CLK=1; } void start(void) //程序初始化 { MCA=0X20; //开启振动 MCB=0X72; //设置DS12887工作状态 SCON=0X00; } void wrCM() //写函数 { char i; MCB=0x80; //芯片停止工人,准备初始化 25 for(i=0;i<6;i++) //初始化时钟 *(dis+at[i])=stat[i]; MCB=0x02; } void rCM() //读函数 { char i; while(MCA&0x80==0x80); //等待时间准备更新完毕 for(i=0;i<6;i++) //更新时间 stat[i]=*(dis+at[i]); } test() //数据处理函数 {char i; stat1[1]=stat[0]>>4; stat1[0]=stat[0]&0x0f; stat1[3]=stat[1]>>4; stat1[2]=stat[1]&0x0f; stat1[5]=stat[2]>>4; stat1[4]=stat[2]&0x0f; stat1[7]=stat[3]>>4; stat1[6]=stat[3]&0x0f; stat1[9]=stat[4]>>4; stat1[8]=stat[4]&0x0f; stat1[11]=stat[5]>>4; stat1[10]=stat[5]&0x0f; for(i=0;i<12;i++) { disp[i]=dis_7[stat1[i]]; } } scan() //时钟显示函数 { char i; for(i=5;i>1;i--) {out_simuseri(disp[i]); }delay2(700); } main() //主函数 {uchar i; while(resetpulse()); 26 writecommandtods18b20(0xcc); writecommandtods18b20(0x44); buzzer=1; a=datmsg[0]=1; flag=0; P2_0=1; P2_1=1; P2_2=1; P2_3=1; P2_4=1; P2_5=1; P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; IE = 0x91; //允许总中断中断,使能 INT0 外部中断 TCON = 0x01; //触发方式为脉冲负边沿触发 delay1(50); IRIN=1; start(); wrCM() ; rCM(); test(); dis_test=stat1[2]; red_test=stat1[2]-1; scan(); TMOD=0x20; PCON=0x80; TH1=0xfd;TL1=0xfd; TR1=1; SCON=0x50; delay1(50); while(1) {keydetect(); rCM(); test(); if(stat1[0]==0) scan(); if(stat1[0]==3||stat1[0]==4||stat1[0]==5||stat1[0]==6||stat1[0]==7||stat1[0]==8 ||stat1[0]==9) { tem(); 27 for(i=5;i>=2;i--) {if(displaybuf[3]>=2) displaybuf[5]=1; if(light==0) displaybuf[5]=2; if(red==0) displaybuf[5]=3; out_simuseri(dis_7[displaybuf[i]]); }delay2(700); } if((displaybuf[3]>=2&&displaybuf[2]>5)||red==0) buzzer=0; else buzzer=1; } } void scon_int(void) interrupt 4 using 2 //串口中断程序 { if(RI==1) {RI=0; datmsg[0]=SBUF; a=datmsg[0]%10; } if(TI==1) {TI=0; } if(a==9) led1=~led1; if(a==0) led2=~led2; if(a==1) led3=~led3; if(a==2) led4=~led4; if(a==3) led5=~led5; if(a==4) led6=~led6; } void IR_IN() interrupt 0 //红外中断程序 { unsigned char i,j,k,N=0; 28 EA = 0; I1: for (i=0;i<4;i++) { if (IRIN==0) break; if (i==3) {EA =1;return;} } delay(20); if (IRIN==1) goto I1; while (!IRIN) {delay(1);} for (j=0;j<4;j++) { for (k=0;k<8;k++) { while (IRIN) {delay(1);} while (!IRIN) {delay(1);} while (IRIN) { delay(1); N++; if (N>=30) {EA=1;return;} } IRCOM[j]=IRCOM[j] >> 1; if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} N=0; } } if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;} IRCOM[5]=IRCOM[2] & 0x0F; IRCOM[6]=IRCOM[2] & 0xF0; IRCOM[6]=IRCOM[6] >> 4; EA = 1; } 29
/
本文档为【智能家居系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索