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

毕业设计(论文)-基于单片机的红外遥控温度报警器设计

2017-10-08 50页 doc 300KB 24阅读

用户头像

is_686908

暂无简介

举报
毕业设计(论文)-基于单片机的红外遥控温度报警器设计毕业设计(论文)-基于单片机的红外遥控温度报警器设计 目录 摘 要: ........................................................................................................................................................ 3 关键词: .......................................................................
毕业设计(论文)-基于单片机的红外遥控温度报警器设计
毕业)-基于单片机的红外遥控温度报警器设计 目录 摘 要: ........................................................................................................................................................ 3 关键词: ........................................................................................................................................................ 3 Abstract: .......................................................................................................................................................... 4 Key words: ...................................................................................................................................................... 4 0 引言 ............................................................................................................................................................ 5 1 总体设计 .................................................................................................................................................. 5 1.1 设计思路及原理方框图............................................................................................................... 5 1.2 各模块选择 .......................................................................................................................... 7 1.2.1 控制器模块设计方案论证与选择 ................................................................................... 7 1.2.2 温度采集模块设计方案论证与选择 ............................................................................... 7 1.2.3 显示模块设计方案论证与选择 ....................................................................................... 7 1.2.4 语音模块设计方案论证与选择 ....................................................................................... 7 1.2.5 键盘模块设计方案论证与选择 ....................................................................................... 7 1.2.6 红外遥控模块设计方案论证与选择 ............................................................................... 8 2 红外遥控系统设计 .................................................................................................................................. 8 2.1 红外遥控原理 .............................................................................................................................. 8 2.2 红外遥控发射器 .......................................................................................................................... 8 2.3 红外接收器 .................................................................................................................................. 9 2.4 软件设计 ...................................................................................................................................... 9 2.4.1 红外编码设计................................................................................................................... 9 2.4.2 红外解码设计................................................................................................................. 10 3 温度系统设计 ......................................................................................................................................... 11 3.1 温度采集模块设计...................................................................................................................... 11 3.1.1 硬件电路设计.................................................................................................................. 11 3.1.2 软件设计.......................................................................................................................... 11 3.2 温度显示模块设计..................................................................................................................... 13 3.2.1 硬件电路设计................................................................................................................. 13 3.2.2 软件设计......................................................................................................................... 13 4 语音报警系统设计................................................................................................................. 14 4.1 硬件设计 ...................................................................................................................................... 14 4.2 软件设计 .................................................................................................................................... 16 5 调试及仿真 ............................................................................................................................................ 16 5.1 protues简介 ............................................................................................................................. 16 5.2 Protues使用注意事项.............................................................................................................. 16 5.3 本设计中PROTUES中的仿真 ..................................................................................................... 17 6 总结 ........................................................................................................................................................ 17 参考文献 ...................................................................................................................................................... 18 附录1 元件清单 ......................................................................................................................................... 19 1 附件2 红外接收及温度报警电路图 .......................................................................................................... 20 附件3 红外遥控电路图.............................................................................................................................. 21 4 红外解码及温度报警程序 ............................................................................................................. 22 附件 附件 5 红外解码程序 ................................................................................................................................ 33 2 红外遥控温度报警器设计 摘 要:温度,无论是在日常生活还是工业生产中都是人们十分关注的一个参数。任何物理变化和化学反应过程都与温度密切相关,不同的工业生产和工艺对温度都有着不同的要求,当温度过高或者过低时,都将会给生产带来很大的损失;同时随着科学技术的发展,越来越多的电器进入到人们的家庭生活之中,但是因此而引起的火灾的现象也越来越多,造成财产很大的损失。在这些情况下,一款好的温度报警将起到十分重要的作用,给人们的生产生活中带来很大的方便,减少了不必要的损失。 本文介绍了一款基于红外遥控技术与单片机技术的温度报警器设计。本设计采用8位AT89C51ED单片机为主控制器和高精度DS18B20为温度传感器,实现对环境温度的实时,当温度高于或低于预设温度时可通过ISD1420语音芯片进行报警。其实测温度值可通过12864液晶显示屏显示。同时还可通过红外遥控收发模块设定报警上下限值,方便人们进行远程控制。该温度报警器能够精确测量0.5摄氏度以内的温度,红外遥控模块更具实用性、方便性,语音播报更具人性化,液晶界面友好,还可以扩展功能,这是理想的温度报警的设计方案。 关键词: 温度;AT89C51ED2;报警;红外 3 Design of Infrared Remote Temperature Alarm Abstract: Temperature, both in daily life or industrial production is a parameter of great concern. Any physical change and chemical reaction process are closely related with the temperature, different temperature industrial production and technology all have different requirements, when the temperature is too high or too low, both will bring great losses to the production; the same time as the scientific and technological development, more and more electrical appliances into people's family lives, but so caused the fire phenomenon more and more, resulting in great loss of property. In these cases, a good temperature alarm will play an important role in the production of life to people brings great convenience, reducing unnecessary losses. This article describes a microcontroller based infrared remote control technology and design technology, temperature alarm.This design uses 8-bit AT89C51ED2 microcontroller-based controller and high-precision temperature sensor DS18B20 to achieve real-time detection of the ambient temperature, when the temperature is higher or lower than the preset temperature when the alarm by ISD1420 voice chip. In fact, temperature can be measured 12864 LCD display. By infrared remote control can also set the alarm up and down limits transceiver module to facilitate remote control of the people. The alarm can precisely measure the temperature of 0.5 degrees Celsius temperature, infrared remote control module is more practical, convenience, voice broadcast more humane, user-friendly LCD, but also able to extend functionality, which is ideal for temperature alarm design. Key words: temperature AT89C51ED2 wireless alarm 4 0 引言 温度,无论是在日常生活还是工业生产中都是人们十分关注的一个参数。任何物理变化很化学反应过程都与温度密切相关,不同的工业生产和工艺对温度都有着不同的要求,当温度过高或者过低时,都将会给生产带来很大的损失;同时随着科学技术的发展,越来越多的电器进入到人们的家庭生活之中,但是因此而引起的火灾的现象也越来越多,造成财产很大的损失。在这些情况下,一款好的温度报警将起到十分重要的作用,给人们的生产生活中带来很大的方便,减少了不必要的损失。 我国的温度报警控制系统经历了从无到有、从简单到复杂的发展过程,其智能化程度也越来越高。目前国内厂家多偏重用于大型锅炉厂、大型仓库、商场、高级写字楼、宾馆等场所大型报警系统的研发,他们采用集中区域报警控制方式,其系统复杂、成本较高。而在居民住宅区、机房、办公室、仓库等小型防火单位,以及一些家用电器设备,需要设置一种廉价实用的、方便灵活的自动探测报警装置,因此,研制一种结构简单、价格低廉的红外遥控温度报警器是非常必要的。 单片机自问世以来,所给人们的生产生活带来的很大方便。现在很多的设备都从从单片机技术入手,一切向着数字化控制,智能化控制方向发展。Atmel公司的生产的AT89S52单片机是一种低功耗/低电压、高性能的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套中断,3个16位可编程定时计数器,片内集成64K字节可改变程序Flash存储器,具有ISP在线编程功能,具有低功耗,速度快,程序擦写方便等优点,是一种很好的智能控制芯片。 红外线遥控是目前使用最广泛的一种通信和遥控手段。是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。同时由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计家用电器的红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。本系统的使用不会对原有系统造成任何负面影响,将有助于提高特定行业的安全系数,为企业提高预警效率、创造安全环境、降低潜在损失 本温度报警器采用AT89S52单片机进行智能控制,利用红外遥控技术的远程遥控能力。具有低成本,高稳定性,及时报警,远程遥控,功能扩展等特点。特别是其红外遥控技术的应用,使其具有更大的实用性,灵活性。能广泛的应用于中小型电锅炉、电采 暖炉、电茶炉、壁挂炉、空调、仓库、机房、办公室等。有着很好的发展前景。 1 总体设计 1.1 设计思路及原理方框图 5 本设计主要包括以下部分:红外收发,温度采集与显示,语音报警。这么大的工程量,为求的系统的稳定,且有较大的灵活性,我采用了2片AT89C51ED2,一片AT89C51ED2作为主机,它用于温度采集和接收红外发来的按键代码值,予以处理;控制语音模块实现报警和实时温度读数;并将温度送液晶屏显示,实现全程监控。其中温度采集我们采用高精度的数字温度传感器DS18B20,利用ISD1720语音芯片进行报警,其实测温度值通过12864液晶屏显示。同时为增加系统绝对可控性,增加了键盘。另一片AT89C51ED2则用于红外遥控发射部分,进行数据编码。其原理方框图如图1.1所示。 温度采集 按键控制 单 片 液晶显示 机 红外接收 语音报警 单 按键控制 红外发送 片 机 图1.1 原理方框 图 6 1.2 各模块方案选择 1.2.1 控制器模块设计方案论证与选择 单片机是集成了CPU、ROM、RAM、和I/O口的微型计算机,有很强的接口性能。此系统和外围接口芯片比较多,选单片机作为主控器是明智的,单片机运算功能强,软件编程灵活,自由度大,可用软件编程的实现各种算法和逻辑控制,并且由于其功耗低,体积小,技术成熟和成本低等优点,使其在各个领域应用广泛。Atmel公司的生产的AT89C51ED2单片机是一种低功耗/低电压、高性能的8位单片机,内部除CPU外,还包括256字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套中断,3个16位可编程定时计数器,片内集成64K字节可改变程序Flash存储器,具有ISP在线编程功能,具有低功耗,速度快,程序擦写方便等优点,是一种很好的智能控制芯片。所以我选用AT89C51ED2单片机作为主控器。 1.2.2 温度采集模块设计方案论证与选择 方案一、用热电偶测温 优点是测温范围宽,缺点是电动势低,对运放的要求高,重要的是热电偶测温需要冷端温度补偿,来消除冷端温度变化所产生的影响,对于本电路补偿温度要求精度很高,且准确,否则会给系统带来反所用,而且成本高,操作复杂。 方案二、利用数字温度传感器DS18B20,其测温范围,55?,,125?,在-10,+85?时精度为?0.5?,可编程的分辨率为9,12位,对应的可分辨温度分别为0.5?、0.25?、0.125?和0.0625?,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;同时DS18B20在使用中不需要任何外围元件(仅需一个4.7K的上拉电阻),全部传感元件及转换电路集成在形如一只三极管的集成电路内,硬件电路十分简单。 所以我们选择方案二。 1.2.3 显示模块设计方案论证与选择 方案一、采用数码管。数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度高,称量快,精确可靠,操作简单。但其显示内容单一,且不利于功能扩展。 方案二、采用液晶显示屏。液晶显示屏可很灵活地控制显示图形及任意指定大小和样式的字符显示;有利于功能的扩展,且硬件电路也很简单。 所以我们选择方案二。 1.2.4 语音模块设计方案论证与选择 方案一、采用APR9600系列语音录放芯片,继美国ISD公司以后采用模拟存储技术的又一款音质好、噪音低、不怕断电、可反复录放的新型语音电路,单片电路可录放32-60秒,串行控制时可分256段以上,并行控制时最大可分8段。但不能用软件实施控制播放音,所以不适合在数字播音的场合使用。 方案二、采用ISD1420系列语音芯片。ISD1420芯片采用CMOS技术,内含震荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、扬声器驱动及EEPROM阵列;可录放实际为8至20秒,音质好。拥有边缘/电平触发两种放音控制和唯一的录音控制。芯片采用多电平直接模拟量存储技术,每个采样直接存储在片内单个EEPROM中,其信息科保存一百年。最小的录放系统仅需麦克风、喇叭、几个按键、电源及少量的电容电阻,电路十分简单。 综上所述语音播报模块 我们选择ISD1420。 1.2.5 键盘模块设计方案论证与选择 7 本系统键盘主要用来设置上限下限温度,进行语音播报,数据输入按钮。因其按键需求不多,所以我们采用独立式按键。 1.2.6 红外遥控模块设计方案论证与选择 方案一:用2262和2272够成红外遥控器。专用的红外发射为2262IR型,才,但是发现用这两组组合的效果并不是很好,且数据传输效果也不理想,自主性不高。 方案二:直接用单片机自己编码和解码,采用AT89C51ED2的定时器产生38KHz载波,准确度好,在用另一AT89C81ED2的I/O作为接收口。效果很理想。 综上所述才用单片机编码和解码。 2 红外遥控系统设计 2.1 红外遥控原理 在通信系统中,常利用非电信号来传递控制信号和数据,以实现遥控或遥测的功能。红外通信,具有控制简单、实施方便,传输可靠性高的特点,是一种较为常用的通信方式。红外通信利用950nm近红外波段的红外线作为传递信息的媒体,发送端采用脉时调制方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送,接收端将收到的光脉冲转换成电信号。再经过放大、滤波处理后送给解调电路,还原为二进制数字信号后输出。在红外线通信系统中,由于自然光及人工光源等背景光信号的介入,信号源以及发射、接收设备中电学或光学噪声的影响,红外无线数字通信在某些场合的通信质量较差,因此采用信道编码技术来提高抗干扰能力。 通用红外遥控系统由发射和接收两大模块组成,使用编,解码专用集成电路控制操作。发射部分一般由指令键(或操作杆)、指令编码系统、调制电路、驱动电路、发射电路等几部分组成。当按下指令键或推动操作杆时,指令编码电路产生所需的指令编码信号,指令编码信号对载体进行调制,再由驱动电路进行功率放大后由发射电路向外发射经调制定指令编码信号。接收部分一般由接收电路、放大电路、调制电路、指令译码电路、驱动电路、执行电路(机构)等几部分组成。接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即还原为编码信号。指令译码器将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制。 2.2 红外遥控发射器 红外遥控发射器的关键是红外发光二极管和响应的驱动电路。红外发光二极管首先要满足其调制带宽大于信号的频谱宽度,保证通信线路畅通。此外发光二极管的发射波长应与接收端的光电探测器的峰值响应相匹配,最大程度地抑制背景杂散光干扰,现阶段一般选用780nm,950 nm的红外波段进行数字信号传输。由于红外无线通信系统的信噪比与发射功率的平方成正比,所以适当提高红外发射器的发射功率,并采用空间分集、全息漫射片等可使发射端的光功率在空间均匀分布的措施来降低误码率,提高通信质量。 红外遥控发射器的专用芯片很多,但在本遥控系统中,红外遥控器采用的是AT89C51ED2芯片。红外发射是由编码后的串行数据通过载波脉冲幅度调制而产生,发射电路中采用最常用的载频38 kHz遥控器。用P2、P3口组成矩阵扫描反馈,获取键值,用内部的定时器1产生一个38K的软件定时中断,驱动P1.3产生一个38K的方波,当作红外线的调制基波;需要发送的数据,直接送至P1.0的串口发送端。而后P1.0和P1.3 8 经过74LS02处理后,用三极管驱动红外发射管直接发出。红外发射电路如图2.1所示。 图2.1 红外发射电路 2.3 红外接收器 红外接收器包括红外接收部分以及后续的信号采滤波、判决、量化、均衡和解码等。红外接收端的工作过程,首先进行光电转换,将红外脉冲信号变为电信号,经过适当的频域均衡后进行码元判决,码元判决电路是接收器设计的核心部分。由于信号采用红外无线进行穿射,其电平变化范围较大,所以码元判决电路必须是自适应的。接收的信号经自适应码元判决后变成数字信号,再进行适当的解码转换为差分信号进入计算机网卡的信号输入端。 本设计中红外接收电路采用SM0038。SM0038集光电转换、解调和放大于一体,只需少数外接元件就能实现从红外接收到输出与TTL电平兼容的所有工作。SM0038输出高电平,当输入为遥控信号时,SM0038则输出高低电平脉冲。接收的遥控码是由一个低电平与一个高电平构成,不同脉宽高低电平的组合组成不同控制码。此设计将解调的信号直接送至AT89C51ED2的P3.2接收,通过内部中断服务程序实现脉冲的计数和存储。红外接收电路如图2.2所示。 图2.2 红外接收电路 2.4 软件设计 2.4.1 红外编码设计 发送主程序:初始化时设置定时器、看门狗,而后扫描键盘。若有键按下,进行按键处理;若是发送键,则置红外发送标志,启动定时器和红外发送程序,后返回主程序 9 中。 红外发送程序:现场保护,取发送数据至发送缓冲区,启动软件定时产生38K的方波,而后判数据是否发送完毕,结束则清除发送标志,反之,则返回继续送数据。 定时中断程序:现场保护回填定时长度,启动计数定时,并在指定的管脚P1.3取反,变成反相电平,返回。 定时器0中断程序红外编码:现场保护回填定时长度,启动计数定时,并对按键进行处理,进行红外,发送到P1.0口输出,返回。流程图如图2.3所示。 编码开始 NO 按键判断 YES 发送起始码 发送数据码 编码结束 图2.3 红外编码流程 图 2.4.2 红外解码设计 红外接收程序:现场保护后,取缓冲区数据,并对其作出判断,后返回主程序中的显示程序,送显示数据至缓冲区。 红外解码程序:首先对SM0038送来的脉冲流进行采样,检测脉冲宽度,并存储。然后判断引导脉冲是否有效,再据脉宽解出键码值和键码反码值,比较正码、反码,确认是否有误,最后译出键码值。程序流程图如图2.4所示 信号接收 解码准备 低电平计数 高电平计数 信号显示 图2.4 红外解码流程图 10 3 温度系统设计 3.1 温度采集模块设计 3.1.1 硬件电路设计 本温度报警器采用美国DALLAS公司生产的单线数字温度传感器DS18B20(如图3.1),可以把温度信号直接转换成串行数字信号工微机处理,是模数转换器件,而且读 DS18B20信息或写DS18B20信息仅需要单线接口,使用非常方便; 其测温范围,55?,,125?,在-10,+85?时精度为?0.5?,可 编程的分辨率为9,12位,对应的可分辨温度分别为0.5?、0.25?、 0.125?和0.0625?,可实现高精度测温在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温 度值转换为数字,速度更快;同时DS18B20在使用中不需要任何外 围元件(仅需一个4.7K的上拉电阻),全部传感元件及转换电路集 成在形如一只三极管的集成电路内,硬件电路十分简单。 DS18B20测温原理如图3.2所示。图中低温度系数晶振的振荡频 率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。 高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为 计数器2的脉冲输入。计数器1和温度寄存器被置在,55?所对应 的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减 法计数,当计数器1的预置值减到0时,温度寄存器的值将加1, 计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶 振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,图3.1 DS18B20 停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3.2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 本设计中利用单片的P1.6脚与DS18B20的DQ脚相连,进行数据的传送,如图3.3所示。 图 3.2 DS18B20测温原理 图 3.3 DS18B20电路图 3.1.2 软件设计 DSl8B20必须严格按照单总线通信协议,以保证数据的完整性。该协议定义了几种时隙类型:初始化、应答、写1、写0、读1、读0。除了应答时隙所有这些时隙都是有主机发出。总线上所传输的所有命令和数据都是字节的低位在前。 11 (1)初始化时隙 复位时隙和应答时隙。在初始化过程中,主机发送复位脉冲(最短为480μs的低电平信号)接着,释放总线并进入接收状态。当总线被释放后上拉电阻将总线拉高。DSl8B20在检测到总线的上升沿之后等待15-60us接着发出应答脉冲(低电平持续60-240 μs)。 (2)读和写时隙 在写时隙期间,主机向DS18B20写入数据;而在读时隙期间,主机读入来自DS18B20的数据。在每一个时隙,总线只能传输一位数据。 存在两种写时隙,即写1和写0。主机在写1时隙向DS18B20写入逻辑1。而在写0时隙向DS18B20写入逻辑0。所有写时隙至少需要60μS,而且两次写l时隙之间至少需要lμS的恢复时间。两种写时隙均以主机拉低总线开始。 产生写1时隙:主机拉低总线后,必须在15uS内释放总线。然后由上拉电阻将总线拉至高电平。 产生写0时隙:主机拉低总线后,必须在整个时隙期间保持低电平(至少60μS)。 在写时隙开始后的1 5,60 μS期间,DSl8B20采样总线的状态。如果总线为高电,则逻辑1被写入DSl8B20;如果总线为低电平,则0逻辑被写入DSl8B20。 读时隙:DSl8B20只能在主机发出读时隙时才能向主机传送数据。所以主机在发出读数据命令后,必须马上产生读时隙,以便DSl8B20能够传送数据。所有读时隙至少60μs,且在两次独立的读时隙之间至少需要1μS的恢复时间。 每次读时隙由主机发起,拉低总线至少1μS。在主机发起读时隙之后,DSl8B20开始在总线上传送1或0。若DS18B20发送1,则保持总线为高电平;若发送O,则拉低总线。当传送0时,DSl8B20在该时隙结束时释放总线,再由上拉电阻将总线拉回空闲高电平状态。DS18B20发出的数据在读时隙下降沿起始后的1 5uS内有效,因此主机必须在读时隙开始后的15μS内释放总线,并且采样总线状态。其程序流程图如图3.4所示。 图3.4 DS18B20程序流程 图 12 3.2 温度显示模块设计 3.2.1 硬件电路设计 M12864是一种正向黑白半透半反模式的图形点阵液晶显示器。它主要才用动态驱动原理有行驱动控制器和列驱动控制器两部分组成128×64的全点阵液晶显示;可很灵活地控制显示图形及任意指定大小和样式的字符显示;与CPU接口采用5条控制总线和8位并行数据总线输入输出。因此它能适应许多需要功能齐全的场合。其引脚功能如表3.1所示。 表3.1 12864引脚功能表 引脚号 引脚别名 电平 功能描述 1 VSS 0V 电源接地脚 2 VCC 5V 电源正脚 3 V0 对比度(亮度)调整 RS=“H”,表示DB7——DB0为显示数据; 4 RS(CS) H/L RS=“L”,表示DB7——DB0为显示指令数据 R/W=“H”,E=“H”,数据被读到DB7——DB0; 5 R/W(SID) H/L R/W=“L”,E=“H?L”, DB7——DB0的数据被写 到IR或DR 6 E H/L 使能信号 7,14 DB0,DB7 H/L 三态数据线 H:8位或4位并口方式,L:串口方式 15 PSB H/L 16 NC 空脚 17 /RESET H/L 复位端(低电平有效) LCD驱动电压输出端 18 VOUT 19 A VDD 背光源正端(+5V) 20 K VSS 背光源负端 本设计中单片机与液晶显示器硬件连接如图3.5所示;采用单片机P0口与液晶显示器数据总线相连,P1.0,P1.5口与液晶显示器的5条控制总线相连。 3.2.2 软件设计 使用带中文字库的128X64显示模块时编程时应注意以下几点: ?欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。 ?显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。 ?当字符编码为2字节时,应先写入高位字节,再写入低位字节。 ?模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个 13 指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。 ?“RE”为基本指令集与扩充指令集的选择控制位。当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。 12864液晶显示屏程序流程如图3.6所示。 图3.5 显示电路图 图3.6 12864程序流程图 4 语音报警系统设计 4.1 硬件设计 本设计所采用的语音芯片是华邦公司开发的高保真、不怕断电、录放一体化的单片固态语音集成电路生IDS1420。其片内设有时钟振荡器、128K字节EEPROM、低噪前置放 14 器、自动增益控制电路、反混叠滤波器、平滑滤波器、模拟转发器、差动功率放大器等高品质语音录放系统所需的全部基本功能电路。 IDS1420芯片工作原理:录音过程中,ISD142O在进行存储操作之前,要分几个阶段对信号进行调整。首先要输入信号放大到存储电路动态范围的最佳电平,这个阶段由前置放大器、放大器和自动增益控制部分来完成。前置放大器通过隔直流电容与麦克风连接,隔直流电容用来去掉交流小信号中的直流成份(大约2mA)。信号的放大分两步完成,先经过输入前置放大器,然后经过固定增益放大器。完成信号的通路要在模拟输出端(ANAOUT)和模拟输入端(ANAIN)两个管脚之间连接一个电容器。自动增益控制电路动态地监控放大器输出的信号电平并发送增益控制电压到前置放大器。前置放大器增益自动调节以便维持进入滤波器的信号为最佳电平,这样录音的信号能得到最高电平又使削波减至最小。我们可以通过选择连接到AGC 管脚的电阻和电容值来调节描述自动增益电路特性的两个时间常量,即响应时间和释放时间。下一个阶段的信号调整是由输入滤波器完成的。由于模拟信号的存储仍然是采用取样技术,因此还需要一个抗混淆滤波器以去掉(或至少减到可忽略不计的程度)取样频率1/2 以上的输入频率分量。这样就满足了所有数据采集系统都遵循的奈奎斯特取样定律。语音的质量要想优于电话的音质,取样频率要用8kHz 。低通滤波器的高频频限选在3.4kHz ,可满足奈奎斯特取样定律,而且仍有足够宽的频带以得到高音质的语音。滤波器是一个连续时间五极点低通滤波器,在3.4kHz 每个倍频程衰减40dB 。信号的调整完成后,将输入波形通过模拟收发器写入模拟存储阵列中。由skHz 取样时钟取样,并且经过电平移位而产生不挥发写入过程所需要的高电压,取样时钟也用于存储阵列的地址译码,以便输入信号顺序的写入存储阵列。 放音时,录入的模拟电压在取样时钟的控制下顺序地从存储阵列中读出,恢复成原来的取样波形。输出通道上的平滑滤波器去掉取样频率分量并恢复原始波形,平滑滤波器的输出通过一个模拟多路开关连接到输出功率放大器,两个输出管脚直接驱动扬声器。 本设计中,把单片机的P2.0脚与IDS1420的下降沿触发放音PLAYE脚相连(如图4.1所示),通过P2.0脚输出个低电平来控制IDS1420,使其放音。 图 4.1 语音电路图 15 4.2 软件设计 IDS1420程序流程图如图4.2所示。 采集温度 温度上限比较 大 小 大 温度下限比较 小 IDS1420报警 图4.2 IDS1420程序流程 图 5 调试及仿真 5.1 protues简介 本设计所使用的调试仿真工具是Proteus。它是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是: ?实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。 ?支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。 ?提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。 ?具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大 5.2 Protues使用注意事项 (1)在本设计中所使用的Protues仿真软件必须是7.4版本及其以上的,在这之前的版本中可能无法进行红外遥控仿真。 (2)当用Keil 和Proteus联调的时候,系统总是报告:"Error: Target DLL has been cancelled...."时,其解决办法主要有:?下载并安装最新的VSM Keil Debugger Driver;?使能Proteus下的“Use Remote Debug Monitor”;?在Keil的工程选项下设置使用Proteus VSM Simulator;?在Keil uVision Debug菜单下的Proteus VSM 16 Simulator设置主机IP地址为127.0.0.1 端口为8000;?如果电脑安装了防火墙,请设置其“允许通过”的规则;?如果上述操作还不能奏效,那就只有卸载proteus专业版和演示版,然后再重装专业版。 (3)当使用发光二极管是,不能选择名为“LED”的器件,必须选用“LED-RED”等带颜色的发光二极管器件,否则怎么运行它都不发光。 5.3 本设计中PROTUES中的仿真 本设计在PROTUES中的仿真情况如图5.1所示。 图5.1 PROTUES仿真图 6 总结 本红外遥控温度报警器主要可实现以下功能: (1)温度测量范围: 0,99摄氏度,误差?0.5摄氏度; (2)可通过红外遥控设定温度值并在点阵液晶12864显示设定值,显示精确1摄氏度; (3)在点阵液晶12864上实时显示测量温度值,其中显示精确度?0.1摄氏度; (4)当温度超出测量范围时,能实现语音报警; 同时因本红外遥控温度报警器中采用了红外遥控技术、单片机技术和液晶显示器,使其在实际生产中能根据需求进行功能扩展,例如可增加万年历功能,在液晶显示器上显示温度变化曲线等功能。 17 参考文献 1. 余永权. ATMEL89系单片机应用技术.北京:北京航空航天大学出版社,2001.1 2. 沈红文.单片机应用系统设计实例与分析.北京:北京航空航天大学出版社,2003 3. 徐惠民.单片机微型机原理接口及应用.北京:北京邮电大学出版社. 1999.2 4. 搂然苗.李兴飞.51系列单片机设计实例.北京:北京航空航天大学出版社,2000 5. 于海生.微型计算机控制技术.北京:清华大学出版社,1999 6. 扬振江.流行单片机实用子程序及应用实例. 西安:西安电子科学技术出版社. 2002.3 北京:北京航空航天大学出版社,2003.5 7. 周杭慈.单片机程序设计基础. 8. 赵 亮.单片机C语言编程与实例.北京:人民邮电出版社., 2002.9 9. 张培仁. MCS—51单片机原理与应用.北京:清华大学出版社. 1998.12 10. 王化祥等.传感器原理及其应用.天津:天津大学出版社. 1999. 11. 王为青.51单片机应用开发案例精选.北京:人民邮电出版社 2007.8 12 张毅剛. MCS-51单片机应用设计.哈尔滨:哈尔滨工业大学出版社. 2001. 13. 沙占友.新编实用数字化测量技术.北京:国防工业大学出版社. 1998. 14. 赵茂泰.智能仪器原理及应用.北京:电子工业出版社. 北京. 1999. 15 王福瑞.单片微机测控系统设计大全.北京:航空航天大学出版社. 1999. 16 AT89C51 DATA SHEEP Philips Semiconductors 1999 17 Huang Jian Wu、Leng Chu.Design of Interface Between MCU and Micro-printer[M]. Wuhan University of Technology Institute of Information Engineering, Wuhan 430070 18 Zharkov I,Podolich V.A Temperature-Controlled System For Optical Microscopy in the Tempetature Range 40m2800K,Instruments and Experimental Techniques, 2005 18 附录1 元件清单 类 型 封 装 型 号 数 量 备 注 电容 RAD-0.1 104 13 电容 RAD-0.1 20 10 电容 RAD-0.1 20 10 电容 RAD-0.1 102 10 电容 RAD-0.1 100uF 10 电容 RAD-0.1 10uF 10 插针 HDR1X16 16p 3 插针 HDR1X20 20p 2 插针 HDR1X40 40p 2 插针 HDR1X28 28p 1 蜂鸣器 RB5-10.5 有源5V 1 温度传感器 HDR1X3 DS18B20 1 三极管 HDR1X3 8550 1 电位器 RP3 10K 1 电位器 RP3 20K 1 电阻 AXIAL-0.4 1K 10 电阻 AXIAL-0.4 10K 10 电阻 AXIAL-0.4 200 10 电阻 AXIAL-0.4 4.7K 2 电阻 AXIAL-0.4 100 10 电阻 AXIAL-0.4 100K 10 液晶模块 HDRX21 LCM240128 1 按键 10 集成电路 40P6 AT89C51ED2 1 集成电路 HDR1X3 SM0038 1 集成电路 DIP-16 74LS02 1 集成电路 DIP-28 ISD1402 1 集成电路 8P3 OP07CP 1 晶振 RAD-0.2 12MHz 1 19 附件2 红外接收及温度报警电路图 20 附件3 红外遥控电路图 21 附件 4 红外解码及温度报警程序 #include #include #include #include "12864.h" //12864显示程序 #include "model.h" //显示数据 #include "one-wire.h" //DS18B20测温程序 #include "input_080627.h" //按键扫描程序 sbit IRM_DQ = P3^2; //红外接收头 extern unsigned char irm_code;//红外解码键值返回全局变量 #define uchar unsigned char #define uint unsigned int #define NoUpLine 1 #define UpLine 0 #define NoUnderLine 1 #define UnderLine 0 #define FALSE 0 #define TRUE 1 #define XXWENDU 0x90 //下限温度存储 #define SXWENDU 0x92 //上限温度存储 #define SJWENDU 0x94 //实际温度存储 sbit NZ=P2^0; //IDS1420接口定义 bit BJ_Flag; //IDS1420位 typedef struct syswen //温度数据储存标识 { uchar cXXWENDU; uchar cSXWENDU; uchar cSJWENDU; }SYSWEN; SYSWEN swen; //系统温度 uchar bdata gTmp; //温度读取位 sbit t0 = gTmp^0; sbit t1 = gTmp^1; sbit t2 = gTmp^2; sbit t3 = gTmp^3; sbit t4 = gTmp^4; sbit t5 = gTmp^5; sbit t6 = gTmp^6; sbit t7 = gTmp^7; uchar dispBuf[7]; //采集温度储存 uchar wenZhi[8]; //温度比较数组 uchar T0_Count=0,Tmp_Count=0; 22 bit T0_Flag,Tmp_Flag,Flash_Flag; bit XXWENDU_Flag=TRUE; //设置上下限温度的标识 bit SXWENDU_Flag=TRUE; uchar State_Set=0; //设置状态 bit State_Flag=FALSE,Inc_Flag=FALSE,Dec_Flag=FALSE; //用来标志三个按键是否按下。 /*********************************************************** //函数名: LCD_ShowTime //功能:十位数字显示 *********************************************************** */ void LCD_ShowTime(char cDat,uchar X,uchar Y,bit show_flag,bit up,bit under) { uchar s[2]; s[0]=cDat/10+'0'; s[1]=cDat%10+'0'; en_disp(X,Y,2,Asc,s,show_flag,up,under); } /*********************************************************** // 函数名: Show_YMD() // 功能: 显示温度上下限 ***********************************************************/ void Show_YMD() //显示温度上下限 { LCD_ShowTime(swen.cXXWENDU,4,85,XXWENDU_Flag,NoUpLine,NoUnderLine); //下限温度 LCD_ShowTime(swen.cSXWENDU,6,85,SXWENDU_Flag,NoUpLine,NoUnderLine); //上限温度 } /************************************************************** // 函数名: LCD_ShowTemp() // 功能: 采集温度并显示 // 说明: 2ms更新一次 ***************************************************************/ void LCD_ShowTemp() { uchar datTm[2]; float temp; uchar buftmp; if(!Tmp_Flag) return; Tmp_Flag=FALSE; DS18B20_Init(); DS18B20_RomCmd(0xcc); //Skip Rom command; Delay_Xms(20); DS18B20_MemCmd(0x44); //Convert T command; 23 DS18B20_Init(); DS18B20_RomCmd(0xcc); DS18B20_MemCmd(0xbe); DS18B20_ReadDat(2,datTm); gTmp = datTm[0]; temp = (uchar)t0 * 0.0625 + (uchar)t1 * 0.125 + (uchar)(t2) * 0.25 + (uchar)(t3) * 0.5; //温度计算 buftmp = (uchar)(temp*10); dispBuf[2] = '.'; dispBuf[3] = buftmp + '0'; buftmp = (uchar)t4 + (uchar)t5*2 + (uchar)t6*4 + (uchar)t7*8; gTmp = datTm[1]; gTmp &= 0x07; buftmp += (gTmp * 16); dispBuf[0] = (buftmp/10) + '0'; dispBuf[1] = (buftmp%10) + '0'; dispBuf[4] = 0xdf; //摄氏度; dispBuf[2] = '.'; en_disp(2,85,2,Asc,dispBuf,1,NoUpLine,NoUnderLine); wenZhi[0]=dispBuf[0]; wenZhi[1]=dispBuf[1]; } /*********************************************************** // 函数名: LCD_ShowWNL() // 功能: 刷新 ***********************************************************/ void LCD_ShowWNL() { Show_YMD(); if(State_Set==3) State_Set=0; } /*********************************************************** // 函数名: CAL_Init() // 功能: 温度上下限初始化 ***********************************************************/ void CAL_Init() { swen.cXXWENDU=0x1A; swen.cSXWENDU=0x25; } /*********************************************************** // 函数名: SFR_Init() // 功能: 寄存器初始化 24 // 说明: 定时器0控制温度采集,定时器1控制按键扫描 ***********************************************************/ void SFR_Init() { T0_Flag=FALSE; Tmp_Flag=TRUE; Flash_Flag=FALSE; TMOD=0x11; ET0=1; ET1=1; TH0= 0xFE; TL0= 0x0C; TH1= (-10000)/256; TL1= (-10000)%256; IT0 = 1;//下降沿中断(红外接收) EX0 = 1; irm_code=0xff; EA=1; } /*********************************************************** // 函数名: GUI_Init() // 功能: 图形界面初始化 // 说明: 显示一些不变的量,例如:上限温度、下限温度等这样的汉字 ***********************************************************/ void GUI_Init() { uint i,j; ////////进入界面/////////// LCD12864_init(); ClearLCD(); //清显示 LCD_ShowTemp(); //在显示图片之前启动温度转换 img12864_disp(uBmp); //显示图片 for(i=0;i<10;i++) for(j=0;j<32767;j++); ClearLCD(); Show_YMD(); img_disp(0,0,128,16,Bmp); hz_disp(2,0,1,ucLunar[0],1,NoUpLine,NoUnderLine); hz_disp(2,16,1,ucLunar[1],1,NoUpLine,NoUnderLine); hz_disp(2,32,1,ucLunar[2],1,NoUpLine,NoUnderLine); hz_disp(2,48,1,ucLunar[3],1,NoUpLine,NoUnderLine); hz_disp(2,64,1,ucLunar[8],1,NoUpLine,NoUnderLine); 25 hz_disp(4,0,1,ucLunar[4],1,NoUpLine,NoUnderLine); //"下" hz_disp(4,16,1,ucLunar[6],1,NoUpLine,NoUnderLine); //"限" hz_disp(4,32,1,ucLunar[2],1,NoUpLine,NoUnderLine); hz_disp(4,48,1,ucLunar[3],1,NoUpLine,NoUnderLine); hz_disp(4,64,1,ucLunar[8],1,NoUpLine,NoUnderLine); hz_disp(6,0,1,ucLunar[5],1,NoUpLine,NoUnderLine); hz_disp(6,16,1,ucLunar[6],1,NoUpLine,NoUnderLine); //"限" hz_disp(6,32,1,ucLunar[2],1,NoUpLine,NoUnderLine); hz_disp(6,48,1,ucLunar[3],1,NoUpLine,NoUnderLine); hz_disp(6,64,1,ucLunar[8],1,NoUpLine,NoUnderLine); hz_disp(2,111,1,ucLunar[7],1,NoUpLine,NoUnderLine); hz_disp(4,111,1,ucLunar[7],1,NoUpLine,NoUnderLine); hz_disp(6,111,1,ucLunar[7],1,NoUpLine,NoUnderLine); ////////显示初始化温度////// en_disp(2,85,2,Asc,dispBuf,1,NoUpLine,NoUnderLine); hz_disp(2,111,1,ucLunar[7],1,NoUpLine,NoUnderLine); } /*********************************************************** // 函数名: Time_Set() // 功能: 温度上下限设置 ***********************************************************/ void Time_Set() { if(State_Flag) //设置键按下 { State_Flag=FALSE; State_Set++; //State_Set%=7; if(State_Set==4) State_Set=0; } XXWENDU_Flag=TRUE; SXWENDU_Flag=TRUE; switch(State_Set) //设置类型 { case 0: //无设置 break; case 1: XXWENDU_Flag=FALSE; //设置温度下限 break; case 2: SXWENDU_Flag=FALSE; //设置温度上限 break; case 3: 26 break; } if(Inc_Flag) //加键被按下 { Inc_Flag=FALSE; switch(State_Set) { case 0: break; case 1: swen.cXXWENDU++; swen.cXXWENDU=swen.cXXWENDU%100; //下限温度加 break; case 2: swen.cSXWENDU++; //上限温度加 swen.cXXWENDU=swen.cXXWENDU%100; break; } } if(Dec_Flag) //减键按下 { Dec_Flag=FALSE; switch(State_Set) { case 0: break; case 1: //下限温度减 swen.cXXWENDU=(swen.cXXWENDU+99)%100; break; case 2: //上限温度减 swen.cSXWENDU=(swen.cSXWENDU+99)%100; break; } } 27 } /*********************************************************** // 函数名: wenZcun // 功能: 上下限温度存入数组wenZhi ***********************************************************/ void wenZcun(void) { char a,b; a=swen.cXXWENDU; b=swen.cSXWENDU; wenZhi[2] = (a/10) + '0'; wenZhi[3] = (a%10) + '0'; wenZhi[4] = (b/10) + '0'; wenZhi[5] = (b%10) + '0'; } /*********************************************************** // 函数名: xbijiao() // 功能: 实际温度与系统预设下限温度比较 ***********************************************************/ void xbijiao(void) { if(wenZhi[2]>wenZhi[0]) BJ_Flag=0; else if(wenZhi[2]==wenZhi[0]) { if(wenZhi[3]>wenZhi[1]) BJ_Flag=0; } else BJ_Flag=1; } /*********************************************************** // 函数名: sbijiao() // 功能: 实际温度与系统预设上限温度比较 ***********************************************************/ void sbijiao(void) { if(wenZhi[4]300) break;} if((counter>10)&&(counter<300)) { if(flag==0) temp<<=1; if(counter>200) temp++; else flag ^= 0xff; } counter=0; while(IRM_DQ) {if(++counter>300) break;} if((counter>10)&&(counter<300)) { if(flag==0) temp<<=1; if(counter>200) temp++; else flag ^= 0xff; } } irm_code=(unsigned char)(temp&0x00ff); B_LCD(); IE0 = 0; EA = 1; } void main() { SFR_Init(); 30 CAL_Init(); GUI_Init(); TR0=1; TR1=1; while(1) { wenZcun(); LCD_ShowTemp(); //显示温度 sbijiao(); //上下温度比较 laba(); xbijiao(); //下限温度比较 laba(); LCD_ShowWNL(); //刷新 Time_Set(); //温度设置 } } void timer0() interrupt 1 //控制温度采集 { TH0= 0xFE; TL0= 0x0C; T0_Count++; if(T0_Count==20) { Tmp_Count++; T0_Count=0; } if(Tmp_Count==33) { Tmp_Count=0; Tmp_Flag=TRUE; } } void timer1() interrupt 3 //按键扫描 { TH1= (-10000)/256; TL1= (-10000)%256; 31 keyinput(); // 设置 if (keyvalue&0x10) { State_Flag=TRUE; keyvalue &= 0xef; //清键值,保证一直按下只执行一次按键动作。 } if (keyvalue&0x20 ) //加 { Inc_Flag=TRUE; keyvalue &= 0xdf; //清键值,保证一直按下只执行一次按键动作。 } //减 if (keyvalue&0x40) { Dec_Flag=TRUE; keyvalue &= 0xbf; //清键值,保证一直按下只执行一次按键动作。 } } 32 附件 5 红外解码程序 #include #define TIMEH 12 //基于12M时钟晶振,数字越大,时间越长 #define TIMEL 50 //基于12M时钟晶振,数字越大,时间越长 #define ROW P3 //矩阵按键接口定义 #define LINE P2 //矩阵按键接口定义 extern void timer_init(void); extern void delay(unsigned int); extern unsigned char scan_key(void); unsigned char irm_code; sbit QD = P1^0; sbit BB = P1^7; void main() { unsigned char tmp; irm_code=0xff; timer_init(); while(1) { tmp = scan_key(); if(tmp!=0xff) { if(irm_code==0xff) {//一次键值发射完成后会将irm_code置为0xff irm_code = tmp; //键值传递 TR0 = 1; //启动定时器,完成编码发射 } delay(10);//两次编码发射之间需要延时,连续发射会导致解码失败 } } } void timer_init(void) { TMOD = 0x21; TH0 = 0xff; TL0 = 0xff; TH1=0xf4;//定时13us,38K红外波,晶振12m TL1=0xf4; EA = 1; ET0=1; ET1 = 1; TR0=0; TR1=1; 33 } /*定时中断,红外编码*/ void timer_int(void) interrupt 1 { static unsigned char i=0,flag=0; QD=~QD; if(i<10) { //连续发射5个“0”引导码 TH0 = 255-TIMEH/2; TL0 = 255-TIMEL/2; i++; } else if(i<18) { //数据编码 if((irm_code & 0x80)==0x80) { TH0 = 255-TIMEH; TL0 = 255-TIMEL; irm_code <<= 1; i++; } else { TH0 = 255-TIMEH/2; TL0 = 255-TIMEL/2; if(flag) { irm_code <<= 1; i++; } flag ^= 0x01; } } else { TR0 = 0; i=0; QD=1; irm_code=0xff; TH0 = 0xff; TL0 = 0xff; } } void timer_int1(void) interrupt 3 { BB=!BB; TR1=1; } 34 void delay(unsigned int t) { unsigned char i; while(t--) for(i=0;i<230;i++); } /*矩阵按键扫描*/ unsigned char scan_key(void) { unsigned char j; static unsigned char i=0; ROW = 255-(1<
/
本文档为【毕业设计(论文)-基于单片机的红外遥控温度报警器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索