首页 简易家用电器远程遥控器的设计

简易家用电器远程遥控器的设计

举报
开通vip

简易家用电器远程遥控器的设计简易家用电器远程遥控器的设计 题 目: 简易家用电器远程遥控器的设计 院系名称: 信息科学与工程学院 专业班级: 电子信息科学与技术 级 班 学生姓名: 学 号: 指导教师: 教师职称: 讲师 20 年6月3日 摘 要 随着社会的发展和科技的进步,越来越多的家用电器进入了人们的生活,这些家用电器给人们的生活带来了很多的方便和享受,同时随着电话在家庭的普及,电话机的功能将进一步得到开发和利用。利用电话实现家用电器遥控是家电未来的发展方向之一。 本文设计的是一种基于AT89C51单片机的远程电话控制系统。...

简易家用电器远程遥控器的设计
简易家用电器远程遥控器的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目: 简易家用电器远程遥控器的设计 院系名称: 信息科学与工程学院 专业班级: 电子信息科学与技术 级 班 学生姓名: 学 号: 指导教师: 教师职称: 讲师 20 年6月3日 摘 要 随着社会的发展和科技的进步,越来越多的家用电器进入了人们的生活,这些家用电器给人们的生活带来了很多的方便和享受,同时随着电话在家庭的普及,电话机的功能将进一步得到开发和利用。利用电话实现家用电器遥控是家电未来的发展方向之一。 本文设计的是一种基于AT89C51单片机的远程电话控制系统。控制系统是以单片机AT89C51为核心、基于电话网络开发的家用智能电话控制电器。利用电话网传输数字和语音信息,远程控制部分接收电话网发送来的DTMF信号,对其进行解码,解码后由中央处理器AT89C51根据解码信息控制家用电器;本系统设计实用,功能灵活多样,可靠性高,操作方便,可以广泛地应用于家庭或者其它场所的智能控制。该系统通过嵌入式的智能语音提示, 突出的语音提示功能和密码控制系统, 可使操作者根据各种提示音及时了解受控对象的有关信息。系统可实现通过发出语音命令用电话远程控制多个家电, 用户可以查询家电状态, 提供密码功能, 只有输入正确的密码才能控制家电, 从而提高了安全性。 关键词:单片机 电话 远程遥控 双音解码 I Title Summary of household appliances remote control to the design of the text Abstract With the development of scientific technology,an increasing number of home appliances have come into people's daily lives. These home appliances have brought in much convenience and enjoyment to people's life. The function of telephones will be further utilized and developed along with the popularization of telephones. Home appliances will probably be controlled by the telephone using the remote control technique in the future. The article designed the remote telephone control system which based on microcontroller AT89C51. Basing on the telephone net, the system which uses the core controller Single-chip microcomputer AT89C51 realizes long-distance control household appliances . The telephone control system, which uses the telephone net convert and voice information receives DTMF code from the telephone net, and interpret the code, the core controller AT89C51 controls the state of household appliances responded to the interpretation. This system is practical, and the function is flexible, and the operation is convenient with high reliability, which can be used extensive in various kinds of control equipment to home and others field. The designing of a system of long-distance control based on sound processing technology and DTMF decoding technology is presented in this paper. By using sound commands of sound recognition technology, this system realizes its control of household electrical appliances through telephone networks and so realizes the intelligently control of them in residence. The embedded and intelligent sound indication, its outstanding sound function of prompt and its code control system enable the operators to timely obtain the relative information of the controlled objects through indicated sounds. The system can use telephone to control many household electrical appliances in long distance through uttering sound commands and provides the code safeguard function. Only through inputting the correct password to control them, the users can control the condition of household electrical equipment, So the system security can be improved. Key words : MCU Telephone Remote control DTMF II 目录 摘 要 ...................................................................... I ABSTRACT ................................................................... II 1. 绪论 ..................................................................... 1 1.1 课题背景 .............................................................. 1 1.2 本设计的任务 .......................................................... 2 1.3系统总体设计 .......................................................... 2 2. 系统方案和主要芯片的选择 ................................................. 5 2.1 系统整体方案 .......................................................... 5 2.2 主要芯片选择 .......................................................... 5 3. 系统硬件设计 ............................................................ 13 3.1 振铃检测和模拟摘机 ................................................... 13 3.2 声音监听和语音提示电路 ............................................... 14 3.3 单片机控制和密码存储电路 ............................................. 15 3.4 DTMF检测电路 ......................................................... 16 3.5 继电器控制电路 ....................................................... 17 4. 系统软件设计 ............................................................ 19 4.1 系统软件设计基本思路 ................................................. 19 4.2 定时中断子程序 ....................................................... 20 4.3 MT8870中断子程序 ..................................................... 21 5. 系统的调试 .............................................................. 23 5.1 整体系统调试 ......................................................... 23 5.2 硬件及软件调试 ....................................................... 23 总结 ....................................................................... 24 致谢 ....................................................................... 25 参考文献 ................................................................... 26 附录一:元器件清单 ......................................................... 27 附录二:电话远程控制器原理图 ............................................... 28 附录三:电话远程控制器PCB图 ............................................... 29 附录四:电话远程控制器程序 ................................................. 30 III 1. 绪论 1.1 课题背景 20世纪90年代初,美国、欧洲等经济比较发达的国家先后提出了“智能住宅” [1]的概念。基本思想是:将家庭中各种与信息相关的通信设备家用电器和家庭保安装置通过家庭总线技术连接到一个家庭智能化系统上,以进行集中的或异地的监视 [2]控制和家庭事物性管理,并保持这些家庭设备与住宅环境的和谐及协调。因此,住宅智能化即是通过家庭总线这个通信网络,把住宅的安全防范系统,能源管理系统,公共服务系统,信息系统集成起来。 随着经济的发展,人们对生活质量的追求越来越高,在人们快节奏工作和学习的同时,迫切希望在家中有一个灵活自如的,能为人们提供方便的环境。由于现代家庭中设备或电器越来越多,且通讯线路高速发展,所以利用现有的通讯线路对家中的设备或电器进行控制,已成为未来家居自动化发展的趋势。远程电话控制有其优越性,利用电话进行远程控制不需要专门布线,不占用无线电频率资源,不受距 [3]离和环境影响,可跨省市、甚至跨越国家进行远程控制。所以设计一种远距离电话控制的电路,必然给人们的生活带来诸多方便。用手机远距离控制家用电器智能 [4]化家庭信息中心平台已成为国家“八六三” 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 重点课题。 [5]目前家庭的网络化是住宅的热点。国外的同类产品的性能虽然很好,但是其价格很难让中国百姓所接受,而国内的系统开发商、房地产开发商只青睐于新建住宅,而对旧有住宅的网络化需求关注不够。问题的症结在于住宅内部及其与外界信息交换的通信网络。电力线载波和无线通信可做为住宅内部通信手段,但电力线载波通信的可靠性较差,无线通信的价格偏高,故应用较少,目前主流产品均采用单独布线的通信方式,但对已建住宅,不免会使重新布线困难重重。由于DTMF(双音 [6]多频)编码通信技术的发展,使得借助低压电力线进行数据通信成为可能。电话远程控制器主要接收电话线上传来的控制家电的信息,译码后经并行通信向智能控制器发控制家电指令;接收由智能控制器传来的报警或求援信息(经并行通信),自动拨号(可由键盘预先设置)后,以语音形式将信息传送给用户或直接报警。都是在线调试,已经在宿舍连接电话经过真正的交换机实验并且成功。本设计的各种电器接口、各项标准都严格遵循国家有关标准,为以后的产品化提供了良好的基础。 1 家庭网络系统主要由电话远程控制器、智能控制器、一些功能模块组成。电话远程控制器主要接收电话线上传来的控制家电的信息,译码后经并行通信向智能控制器发控制家电指令;接收由智能控制器传来的报警或求援信息(经并行通信),自动拨号(可由键盘预先设置)后,以语音形式将信息传送给用户或直接报警。 1.2 本设计的任务 电话远程智能遥控系统的具体设计要求: ? 通过电话网对异地的电器实现控制(开/关); ? 控制器可以实现自动模拟摘挂机; ? 控制器设置密码校验; 设计目标: (1)控制系统能对家中电器实现远程控制; (2)控制系统可以实现双方通信; (3)控制系统主人的身份校验、在线密码修改及存储; (4)控制系统有语音功能提示,以方便主人操作; (5)控制系统有声音监听功能,随时了解家中情况; (6)控制系统外加了电器延时开、关的功能。 1.3系统总体设计 本系统是一个用来控制各种家电的设备,它通过来自电话的控制信号来实现对家电的控制。当用户不在家时,通过随身携带的移动电话或者身边的固定电话,拔通家里的电话,依照事先规定的一些规则,通过在电话里的语音提示,进行不同的数字按键操作来完成对不同家电的控制,达到用户的预期目的。系统的功能以确定设计具体要求如下: (1)控制系统能通过电话终端通信设备对家中电器实现远程控制; (2)控制系统可以实现自动模拟摘挂机,以实现双方通信; (3)控制系统主人的身份校验、在线密码修改及存储; (4)控制系统有语音功能提示,以方便主人操作; (5)控制系统有声音监听功能,随时了解家中情况; (6)控制系统外加了电器延时开、关的功能。 本系统由单片机构成主控部分,进行主要的信息处理,接收外部操作指令形成 2 各种控制信号,并完成对于各种信息的记录;接口电路提供单片机与电话外线的接 DTMF口。其中包括铃流检测、摘挂机控制、双音频识别、语音提示电路及电器控制。总体电路框图如图1.1所示。 振铃检测电路 模拟摘机 电单 监听电路 话片 继电器1 机 机DTMF解码电路 端继电器2 口 语音提示电路 电源电路 图1.1 系统总体框图 系统主要由AT89C51单片机、DTMF解码芯片MT8870和语音芯片ISD2560组成。AT89C51单片机完成电话机振铃信号次数的检测、控制和加密。此系统具有以下单元功能模块: (1)铃音检测、计数; (2)自动模拟摘挂机; (3)密码校验; (4)在线修改密码; (5)双音频信号解码; (6)输入信息 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ; (7)控制电器开关; (8)电器状态查询; 根据电话机和交换机发出的不同信号音以及电话线各种状态的不同要求,结合实际情况对具体的单元功能模块作出软件或硬件上的不同分工,具体如下。 理论上交换机所发出的各种信号音都可以通过软件编程而识别,即通过单片机发出的脉冲信号来检测信号音单位时间内的脉冲个数计算出其频率,从而完成信号音识别。但是从系统的可靠性和程序的结构设计上分析,我选择了硬件来解决振铃音检测、忙音检测、双音频信号解码等功能模块。自动摘挂机和电器的控制必须使用具体硬件电路来实现。振铃音计数、忙音计数、密码校验、在线修改密码、输入 3 信息分析、电器状态查询等功能模块使用软件编程方式要比硬件电路简单的多,实现也很容易。 综上所述,本系统信号音检测、自动摘挂机、控制电器、双音频解码等功能模块使用硬件电路实现。而信号音计数、密码校验、在线修改密码、信息分析、电器状态查询等功能模块使用软件编程完成。 系统为突出电话遥控的信息反馈功能,并使产品达到非常高性价比。故未对电话装置的其他功能进行进一步的扩展,而且所有使用的集成电路和其它元器件都尽量选择廉价的。譬如:在各路终端上接上传感器即可实现对环境声响的监听;加上留言电路,主人不在家时客人留言。利用遥控方式可使主人很方便地在异地提取留言信息;在各路终端上接上传感器即可实现对环境声响的监听;接上自动拨码电路可定时将预定信息转至主人传呼机或特定电话,从而达到定时提醒主人的目的。本系统还可以应用于工厂企业的自动化控制等领域。 4 2. 系统方案和主要芯片的选择 2.1 系统整体方案 由于采用PLC技术和Web服务器实现家电控制价格昂贵一般人承受不了,且用电话实现家电控制解决了电力线载波通信的可靠性较差,无线通信的价格偏高以及布线困难的问题,使得借助低压电力线进行数据通信成为可能,而且开发周期短。所以我选择利用电话实现家电控制。 该系统利用遍及千家万户的电话线来传输信息,这是目前可以实现住宅内与住宅外信息交换最有效的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。主要应用于电话遥控控制的家用电器,用户在户外可通过任意一部双音多频电话(包括手机、电话分机),根据语音提示可以对各种电器(如电饭锅、微波炉等电器)进行远程控制,使人们的生活更加便捷与享受。该系统可以使用单片机配合新型的DTMF解码芯片和语音电路来实现了电话对家用电器的远程控制。 在使用时只需先将电话线的进线插入本装置,用户使用本装置时只要拨打家中的电话,装置检测到有铃流(可以设定30S以后还有铃流),装置发出模拟摘机信号,并控制语音处理电路提示用户输入密码(预先设定),用户听到这一提示音后就在自己所使用的双音频电话机或手机上按下密码所对应的数字键即可,密码所对应的双音频信号经电话线传给双音频接收发送电路,检测译码,传给主控单元,识别正确后,语音芯片再提示用户进行控制家用电器的操作,最后,主控单元把控制家电的信息译码,经并行通信传给智能控制器,由控制器执行控制家电的操作。 2.2 主要芯片选择 电话智能遥控器由单片机构成主控部分,进行主要的信息处理,接收外部操作指令形成各种控制信号,并完成对于各种信息的记录;接口电路提供单片机与电话外线的接口。其中包括铃流检测、摘挂机控制、忙音检测、双音频DTMF识别,及语音提示电路。 2.2.1 主控制器选择 单片机就是在一块芯片上集成了CPU、RAM、ROM(EPROM或EEPROM)、时钟、定时/计数器、多种功能的串行和并行I/O口。如Intel公司的8031系列等。除了以上基本功能外,有的还集成有A/D、D/A,如Intel公司的8098系列。概括起来 5 说,单片机具有如下特点:具有位处理能力,强调控制和事务处理功能,价格低廉。如低档单片机价格只有人民币几元钱。开发环境完备,开发工具齐全,应用资料众多。后备人才充足。国内大多数高校都开设了单片机课程和单片机实验。本系统我们采用美国ATMEL公司生产的AT89C51。 AT89C51的介绍 AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含4K bytes的可反复擦写的Flash只读程序内存和128bytes的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置用8位中央处理器和Flash存储单元,功能强大的AT89C51单片机可以提供许多高性价比的应用场合,可灵活应用各种控制领域。其引脚如图2.1所示。 AT89C51主要性能参数: 1、与MCS-51产品指令系统完全兼容; 2、4K字节可反复擦写Flash闪速内存; 3、1000次擦写周期; 4、全静态操作:0Hz,24Hz; 5、三级加密程序内存; 6、128×8字节内部RAM; 7、32个可编程I/O口线; 8、2个16位定时、计数器; 图2.1 AT89C51单片机引脚 9、6个中断源; 10、低功耗空闲和掉电模式。 AT89C51是标准的40引脚双列直插式集成电路芯片。它具有32个外部双向输入/输出(I/O)端口,2个外部中断口,2个16位可编程定时计数器,1个全双工串行通信口。按其功能可分为电源、时钟、控制和I/O接口四大部分: 1、电源引脚 VCC:芯片主电源,外接+5V。 GND:电源地线。 2、时钟引脚 XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。 6 3、控制引脚 (1)ALE/:地址锁存控制信号。当访问外部内存时,地址锁存允许输出PROG 电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 (2):外部程序内存读选信号。在由外部程序内存取指期间,每个机器PSEN 周期两次有效。但在访问外部数据存储器时,这两次有效的信号将不PSENPSEN出现。 EAEA(3)/VPP:访问程序内存控制信号。当信号为低电平时,只访问片外程 EA序内存;而当为高电平时,则对ROM的读操作是从内部程序内存开始,并可延续至外部程序内存。 (4)RST/VPD:复位/掉电保护信号输入。当输入的复位信号延续2个机器周期以上高电平即为有效,用以完成单片机的复位操作。 4、I/O引脚 P0口(P0.0,P0.7):8位双向并行I/O接口。扩展片外内存或I/O口时,作为低8位地址和8位数据总线的分时复用接口,它为双向三态。P0口可带8个TTL负载电流。P0口作为I/O输出口使用时,由于P0口为开漏输出,必须外接上拉电阻才能有高电平输出。 P1口(P1.0,P1.7):8位准双向并行I/O接口。P1口每一位都可以独立设置成输入输出位,P1口可以驱动4个TTL电路。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。 P2口(P2.0,P2.7):8位准双向并行I/O接口。扩展外部数据、程序内存时,作为高8位地址输出端口。P2口可以驱动4个TTL电路。 P3口(P3.0,P3.7):8位准双向接口并行I/O。除了与P1口有一样的I/O功能外,每一个引脚还兼有第二功能。如表2-1所示。P3口的第二功能信号都是单片机的重要控制信号,因此,在实际使用时,先按需要选用第二功能信号,剩下的才以 7 第一功能的身份作为数据位的I/O使用。P1、P2、P3口片内均含有固定的上拉电阻,故称为准双向并行I/O接口。P0口片内无固定的上拉电阻,由两个MOS管串接,既可开路输出,又可处于高阻的“悬空”状态,故称为双向三态并行I/O接口。 表2.1 P3口各引脚对应的第二功能 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD RXD T0 T1 INT1RD WRINT0 2.2.2 DTMF芯片概述 8870芯片它集成了陷波滤波器和数字解码功能。在滤波器部分,使用了开关电容技术;解码部分,用数字计数的方法检测所有16种DTMF音频对,并将它们编成4bits的码。通过在芯片上放置差分输入放大器,时钟晶振和可锁存的三态输出,可以使外围元器件最少。本系统的解码芯片我们采用MT8870。 MT8870是一个完整的DTMF接收解码电路。和其它电路,如LCD驱动电路一起,可实现CALLERID功能。它集成了陷波滤波器和数字解码功能。在滤波器部分,使用了开关电容技术;解码部分,用数字计数的方法检测所有16种DTMF音频对,并将它们编成4bits的码。通过在芯片上放置差分输入放大器,时钟晶振和可锁存的三态输出,可以使外围元上件最少。 信号经过输入放大,过滤掉噪声,再被由6阶高频组带通滤波器和8阶低频组带通滤波器组成的陷波滤波器滤出DTMF信号,然后经过平滑滤波,再由过零检测器将模拟信号转换成数字信号,进入数字部分。信号在数字部分分为两路,一路直接送到频率检测部分,分别对信号进行高频和低频检测。如果输入信号频率在预先设置的范围内,则将检测结果送到编码部分进行编码,并等待D触发器的同步输出信号;如果输入信号频率不在预先设置的范围内,检测结果维持为0不变。另一路则送到频率平均算法部分,分别经过4,8分频,以初步检测信号的持续时间,将诸如噪声之类的干扰消除掉;同时,进一步设置更为严格的频率检测范围。如果信号通过了检测,就使ESt端输出高电平,通过外围RC回路对St端充电(R,C的值可以根据不同的工业标准进行选择),如果ESt端高电平持续时间足够长,使充电后Vc>=Vtst(2(35V,这是通过比较器比较),这就意味着所检测的信号满足DTMF的工作标准,则使引导逻辑部分的输出同步脉冲到编码部分,使4位编码输出,经过延迟单元,锁存进三态输出单元,输出正确的码;同时,引导逻辑部分产生StD端高电平信号,同时使GT维持儿高电下。如果充电时间不够长,这就是说即使被检 8 测信号的频率在DTMF频率范围内,但它的持续时间不足以满足DTMF的工业标准,输出同步脉冲保持为0,编码结果不输出。 2.2.3语音芯片 ISD250060ISD2500本系统采用的是美国公司的芯片,按录放时间秒。系列和1400系列语音电路一样,具有抗断电、音质好,使用方便等优点。它的最大特点在 2EPROM480K(1400128K)10于片内容量为系列为,所以录放时间长;有个地址输入(14008)1024600OVF端系列仅为个,寻址能力可达位;最多能分段;设有(溢出) 端,便于多个器件级联。 2.2.4 存储芯片 对于存储芯片的选择,我们选择AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM。它是内含256×8位存储空间,具有工作电压宽(2.5,5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。 AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在AT89C51试验开发板上它们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输 2入/输出,数据通过这条双向IC总线串行传送,在AT89C51试验开发板上和单片机的P3.5连接。第6脚SCL为串行时钟输入线,在AT89C51试验开发板上和单片机的P3.6连接。SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚需要接地。 24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。 2IC总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 222 1(IC总线的基本结构 采用IC总线标准的单片机或IC器件,其内部不仅有IC接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。 2(双向传输的接口特性 传统的单片机串行接口的发送和接收一般都各用一条 9 2线,如MCS51系列的TXD和RXD,而IC总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从 2器件。IC总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。 总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与” 2功能。IC总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。 22 3(IC总线上的时钟信号 在IC总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。 当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。 2 4(数据的传送 在数据传送过程中,必须确认数据传送的开始和结束。在IC总线技术规范中,开始和结束信号(也称启动和停止信号)的定义。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。 22 IC总线的数据传送格式是:在IC总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器 10 件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)确定。 2 在IC总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫应答位(ACK)。送过程如每次都是先传最高位,通常从器件在接收到每个字节后都会作出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器件正在处理一个实时事件而不能接收数据时,(例如正在处理一个内部中断,在这个中断处理完之前 2就不能接收IC总线上的数据字节)可以使时钟SCL线保持低电平,从器件必须使SDA保持高电平,此时主器件产生1个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL线,主器件继续传送。 当主器件发送完一个字节的数据后,接着发出对应于SCL线上的一个时钟(ACK)认可位,在此时钟内主器件释放SDA线,一个字节传送结束,而从器件的响应信号将SDA线拉成低电平,使SDA在该时钟的高电平期间为稳定的低电平。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。 2 IC总线还具有广播呼叫地址用于寻址总线上所有器件的功能。若一个器件不需要广播呼叫寻址中所提供的任何数据,则可以忽略该地址不作响应。如果该器件需要广播呼叫寻址中提供的数据,则应对地址作出响应,其表现为一个接收器。 5(总线竞争的仲裁 总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况。例如,多单片机系统中,可能在某一时刻有两个单片机 2要同时向总线发送数据,这种情况叫做总线竞争。IC总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入 2数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用IC总线上的信息进行仲裁,因此不会造成信息的丢失。 226. IC总线接口器件 目前在视频处理、移动通信等领域采用IC总线接口器件 22已经比较普遍。另外,通用的IC总线接口器件,如带IC总线的单片机、RAM、ROM、A/D、D/A、LCD驱动器等器件,也越来越多地应用于计算机及自动控制系统。 11 12 3. 系统硬件设计 本系统使用了大量的硬件电路完成部分功能模块,其目的就是充分利用硬件电路的可靠性、稳定性,使整体电路达到比较高的稳定性。此电路主要包括电话线路摘机检测和线路振铃信号的检测电路,语音提示电路,单片机控制和密码存储电路,DTMF检测电路及电器驱动电路。 3.1 振铃检测和模拟摘机 振铃检测的功能是检测有无铃流,当用户被呼叫时,电话交换机发来铃流信号。振铃为25?3HZ的正弦波,谐铃失真不大于10%,电压有效值90?15V。振铃信号以5秒为周期,即1秒送,4秒断。振铃检测电路如图3.1所示。 P3.7是振铃信号检测端,根据振铃信号电压比较高的特点,可以先使用高压稳压二极管进行降压,然后输入至光电耦合器。经过RC回路进行滤波,输入给光电耦合器的波形,经过光电耦合器的隔离转换输出很标准的方波。方波信号就可以直接输出至单片机的端口,完成整个振铃音检测和计数的过程。 模拟摘机电路的功能是当电话振铃到一定时间后接通电话,其电路如图3.1所示。如果电话线路上出现了振铃信号,90VPP的振铃电压使得光电耦合器U2输出端按振铃频率导通和截止,单片机在每次振铃信号结束后进行振铃次数计数,并将单片机振铃次数计数器中的数据与已经设定的振铃摘机数据比较,两者相等P3.1下拉,光电耦合器U1导通,则Q1和Q2也导通,从而实现模拟摘机。 图3.1 振铃检测与模拟摘机电路 13 监测电路是为了监测电话机是否模拟摘机,电路如图3.1所示。 电路中的DW1、R2、R13、C6、Q3组成电话线路摘机检测,平时电话线路电压使得DW1击穿,使Q3的基极电位为高,三极管导通,P3.0脚被下拉成低电平,此时单片机主要任务是监测P3.0脚的电压升高变化。当该系统接收到振铃信号,且达到规定的振铃次数后模拟摘机,电话线路上电压均由原来的48V下降到7-8V,此时DW1截止,P3.0被本身的上拉电阻上拉成高电平。单片机测试到P3.0脚的高电平后,开启外部中断0,单片机随时接收MT8870发出的选通信号,单片机根据选通信号的到来及时接收MT8870数据端11-14脚上的双音多频信号数据。 3.2 声音监听和语音提示电路 语音提示电路是此系统的重要组成部分,能提供给用户直观的的反馈信息,为了使系统更加人性化,语音提示直接采用了语音芯片,将一些操作规则事先存于芯片中,根据不同的DTMF信号产生不同的提示信息,从而来完成控制整个系统的目的,由于需要存储的信息容量比较大,电路采用了ISD2560,此芯片可录一分钟的语音信息,对本系统以足够使用,电路如图3.2所示。 图3.2 语音提示电路 声音监听和语音提示都由P3.6控制,声音信号是由MIC话筒产生的,而语音信号是由ISD2560语音芯片输出的。当P3.6为高电平时,三极管Q6截止,因此对声音信号和语音信号没有放大功能;当P3.6为低电平时,三极管Q6导通,对信号有放大作用,此时可以监听声音或者自动语音提示。 语音提示电路包括语音芯片及外围电路,语音放大反馈回路,反馈信息由单片机控制,2500系列最多可分为600段,只要在分段录/放音操作前(不少于300纳秒), 14 给地址A0~A9赋值,录音及放音功能均从设定的起始地址开始,录音结束由停止键操作决定,芯片内部自动在该段的结束位置插入结束标志(EOM);而放音时芯片遇到EOM标志即自动停止放音。 使用操作模式时需要注意两点: 10、所有操作模式下的操作都是从地址开始,以后的操作根据模式的不同,而从相应的地址开始工作。当电路中录音转放音或进入省电状态时,地址计数器复位0 为。 2、操作模式位不加锁定,可以在MSB(A8、A9)地址位为高电平时,CE电平变低的任何时间执行操作模式操作。如果下一片选周期MSB(A8、A9)地址位中有一个(或两个)变为低电平,则执行信息地址,即从该地址录音或放音,原来设定的操作模式状态丢失。 3.3 单片机控制和密码存储电路 本电路单片机采用了AT89C51作为控制芯片,并采用EEPROM作为密码的存储。为了减小电路的体积及单片机I/O口,存储器采用了24C02,有2K的存储空间,当系统掉电后密码也不会丢失。密码存储电路如图3.3所示。 图3.3密码存储电路 AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在与AT89C51连接时它们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输 2入/输出,数据通过这条双向IC总线串行传送,和单片机的P1.7连接。第6脚SCL为串行时钟输入线,和单片机的P1.6连接。SDA和SCL都需要和正电源间各接一个10K的电阻上拉。可以通过软件编程对密码进行修改和存储。 15 3.4 DTMF检测电路 此部分是整个系统的关键,它的工作情况直接决定了系统的可靠性。DTMF编、解码方式在电话拨号系统中应用非常广泛,其突出的优点是抗干扰能力很强。经过翻阅大量的文献资料,发现使用电话专用的双音频编解码芯片进行输入双音频信号的解码,是比较常用的一种方法。使用集成电路不但外围电路简单,而且可靠性强。经过专用集成电路的解码,信号转换成为不同的码制信号,可以直接被单片机读取。一般常用的电话双音频编解码集成电路有8870、8880、8888等,经过反复论证比较,决定使用双音频解码集成片MT8870来完成此功能模块。DTMF检测电路如图3.4所示。 图3.4 DTMF检测电路 P3.2为单片机的中断引脚,当MT8870接收来自电话线的双音多频信号并准备好输出时,产生中断信号。 MT8870的2、3脚接收来自电话机的双音多频脉冲信号,该双音多频信号先经其内部的拨号音滤波器,滤除拨号音信号,然后经前置放大后送入双音频滤波器,将双音频信号按高、低音频信号分开,再经高、低群滤波器,幅度检测器送入输出译码电路,经过数字运算后,在其数据输出端(11-14脚)输出相对应的8421码。MT8870的数据输出端Q1-Q4连到AT89C51的P1口的P1.0-P1.3,CPU经P1口识别4位代码。电话按键与相应译码(Q4-Q1)输出见表3-1。其中,A,B,C,D 4 16 个按键常被当作R/P,REDIAL,HOLD,HANDSFREE等功能使用。注意,需要特别指出的是,对于“0”号码,MT8870输出的8421码并非是“0000”,而是“1010”;另外,“*”,“#”字号码,MT8870输出的8421码分别为“1011”和“1100”。有些技术资料会出现错误,包括比较权威的手册,所以在实验中,记录下测量的每一组数据后,才把这些数据应用于程序当中。为了使单片机AT89C51获取有效数据,MT8870的STD有效端经反相后接CPU的/INT0引脚。当MT8870获取有效双音多频信号后,STD电平由低变高,再反相为低,CPU检测后,指示P1口接收有效二进制代码。而无效的双音频信号(电话线路杂音、人们的语音信号等)是不会引起MT8870的STD端变化的。DTMF数据输出如表3.1所示。 表3.1DTMF数据输出表 OE D4 D3 D2 D1 低通(HZ) 高通(HZ) 数字 697 1209 1 H L L L H 697 1336 2 H L L H L 697 1477 3 H L L H H 770 1209 4 H L H L L 770 1336 5 H L H L H 770 1477 6 H L H H L 852 1209 7 H L H H H 852 1336 8 H H L L L 852 1477 9 H H L L H 941 1336 0 H H L H L 941 1209 * H H L H H 941 1477 # H H H L L 697 1633 A H H H L H 770 1633 B H H H H L 852 1633 C H H H H H 941 1633 D H L L L L - - ANY L Z Z Z Z 3.5 继电器控制电路 电器控制可采用继电器,可控硅等来控制强电的通与断,为了达到电话机能控制家用电器的开关作用,此设计采用了继电器,一共设定了两路继电器开关,电器控制电路如图3.5所示。 17 图3.5 电器控制电路 继电器的开关由单片机控制,并可设定延时开延时关的功能。在系统中还设置了三个当地按键,其中两个控制两路继电器的开和关,另一个用于复位初始密码的,当用户忘记自己设定的密码时,可以用此按键进行密码的复位,初始密码为123456。 18 4. 系统软件设计 4.1 系统软件设计基本思路 本系统反应软件主要完成各种状态的检测以及数据的发送和接收工作,程序的 基本流程如图4.1所示。 开始 振铃检测 N 5次正常振铃 Y 模拟摘机 信号音提示 N 密码正确否 Y 功能操作 N 操作完成否 Y 挂机 结束 图4.1 系统软件流程图 为提高控制系统的可靠性、可维护性和编程的效率性,控制系统的软件采用模 块化结构,用C语言编写,简洁、明了。在硬件的基础上,智能型电话遥控器的所 有功能都是由软件实行的,通过软件编程可以控制电器的开关、延时开关、声音监 19 听、密码修改和语音提示等等。因此,电路的设计中,软件编程也起到了关键性的作用。软件设计包括振铃检测、模拟摘机、语音提示、密码存储、各功能操作、8870中断作这些模块。 在图4.1系统软件流程图中,功能操作包括了很多的功能,如图4.2所示。 功能操作 无无 延延 延 状 时时开时修 态开开 关开 改 查关关监关密 询 电电听 电码 器器 器 2 1 图4.2系统功能图 4.2 定时中断子程序 在软件编程中,需要考虑到电路中中断的使用。智能型电话遥控器系统里用到了一个定时中断。定时中断是用于两路电器延时开和关时间的计时,50ms中断一次,电器的延时时间最小单位是分,延时开和关都有计数值,当计数值减为0时,对电器进行操作。 void timer0() interrupt 1 using 1 {TL0=0xb0; TH0=0x3c; dlycount1--; if(dlycount1==0) {dlycount1=1200; if(opencount1!=0) {opencount1--; if(opencount1==0) {p24=0;} } if(opencount2!=0) {opencount2--; if(opencount2==0) {p25=0;} } if(closecount1!=0) 20 {closecount1--; if(closecount1==0) {p24=1;} } if(closecount2!=0) {closecount2--; if(closecount2==0) {p25=1;} } if(!(opencount1|opencount2|closecount1|closecount2)) {TR0=0;} } } 4.3 MT8870中断子程序 在软件编程中还用到一个外中断,外中断是用于MT8870DTMF解码芯片的,当 DTMF信号解码成功后,解码芯片会产生一个高电平,提示单片机已经解码成功。 void int0() interrupt 0 using 1 {uchar i,j,k; k=0; dat=P1; dat=dat&0x0f; if(allow==1) {function();} if(allow==0) {count1++; if(count1<7) {if(dat==10) {data1[count1-1]=0;} else {data1[count1-1]=dat;} } else {if(dat==0x0c) {for(i=0;i<6;i++) {if(passward[i]==data1[i]) {k++;_nop_();} } if(k==6) {allow=1;count1=0;i=0;j=0;k=0; //密码输入正确 play(5); } else 21 {allow=0; j++; i=0; k=0; count1=0; if(j==1) {play(1);} if(j>=2) {p31=1;j=0;} //密码输入错误两次则挂机 } } } } } 22 5. 系统的调试 本装置的调试主要分为硬件调试、软件调试和联机调试等三大部分。经过初步的分析设计后,在制作硬件电路的同时,调试也在穿插进行。这样有利于问题的分析和解决,不会造成问题的积累,而且不会因为一个小问题而进行整体电路的检查,从而可以节约大量的调试时间。软件编程中,我是首先完成单元功能模块的调试,然后进行系统调试,整体上与硬件调试的方法差不多。联机调试是最重要的一部分,同时也是本装置成功的关键。有许多新问题都不是很容易解决的。 5.1 整体系统调试 根据控制系统调试的需要,我们自己准备了一些调试设备. (1)5V直流电源 一个 (2)数字万用表 一个 (3)电话线 两根 (4)SmartPROX5编程器 一个 (5)PC机 一台 5.2 硬件及软件调试 由于采用单片机程序控制,所以硬件调试工作量不大,只要保证硬件电路的电源和时钟、复位能正常就行。 首先完成DTMF双音多频信号解码和振铃信号检测电路的调试。 第一步:检查实验电路的焊接是否正确,用万用表检查是否有短路和断路的地方。 第二步:连接好电源,静态检查MT8870芯片和AT89C51芯片的电源是否正常。AT89C51芯片的时钟和复位是否正常,振铃电路能否检测到振铃信号。 第三步:用SmartPROX5编程器将目标下载到AT89C51单片机中,然后利用手机(或电话机)发送的DTMF信号,看是否能成功的解码。不断的检查硬件和程序,找出原因,解决问题。 根据遥控系统的要求写了软件后,修改一些错误后,再与硬件一起调试。由于软件的正常运行是建立在硬件的基础上,所以软件的调试,放在硬件部分调试中完成和优化。 23 总结 本系统由单片机构成主控部分,进行主要的信息处理,接收外部操作指令形成各种控制信号,并完成对家用电器的控制;接口电路提供单片机与电话外线的接口。其中包括铃流检测、摘挂机控制、忙音检测、双音频DTMF识别,及语音提示电路。并且具有密码检测、密码修改、状态查询等功能。 语音提示电路受单片机的控制产生相应的提示音提示,并通过反馈电路反馈至电话外线。从而使操作者对电器的操作达到交互式,并能及时了解有关的信息;显示电路用于状态设置时的显示;控制部分即受控的终端,如前所述,可通过接驳不同的终端并对电话进行必要的改动从而达到功能的扩展。本系统的每一个接口电路(振铃检测、模拟摘挂机、语音反馈、双音频解码等)都已经经过实际的交换机在线实验,具有很强的实用性。本系统使用最简单的电路、最便宜的电路芯片实现了完善的功能。 该电话远程控制系统能够在不改变家中任何家电的情况下,对家里的电器进行方便地控制,使人们享受高科技带来的简便快捷的现代生活。本系统还特别采用了语音识别密码和语音提示电路,使用起来更加方便,安全和可靠,具有实用价值和推广意义。 随着信息化时代的到来,手机已经到了人人都有的程度,手机和电话已经相当的方便难,因此用手机和电话实现远程控制是非常可行的。适用范围非常的广泛,家电的远程控制,办公设备的远程控制,可以说有电话的地方都可以实现这种远程控制。电话远程控制系统的出现将拓宽了电话远程控制领域,而且可以使人们的生活更加的简洁方便,不在家中也可以控制家中电器,这对于工作繁忙的人们来说是非常便利的。 24 致谢 在毕业设计完成之际,在此衷心地感谢我的指导老师 ,在毕业设计过程中,她给予了我悉心的关怀和指导。从课题的选择到项目的最终完成,李老师都始终给予我细心的指导和不懈的支持。 还要感谢我的同学张兵兵,他在系统的硬件和软件方面都给予我很大的帮助,使我能顺利完成毕业设计。 最后感谢学校对我多年的培养,谢谢关心、鼓励和帮助我的所有老师和同学。 25 参考文献 [1] 师文庆,张智勇,陈用(基于DTMF与单片机的电话远程和红外近程测控系统 [J](测控技术与仪器仪表(2007 [2] 吕仁礼,周金和,李茂详(电话DTMF数据收发模块的设计[J](电子技术应 用(1998,(4):46,48。 [3] 李艳雄, 汪鲁才(电话报警及远程控制系统的设计[J](现代电子技术,2005, (13):70- 73。 [4] 姜凤武(基于AT89C51单片机的家用电器电话遥控装置[J](自动化技术与应 用(2006,(08):94,97。 [5] 张建辉(基于单片机的家电远程控制系统设计[J](苏州科技学院学报(工程技术 版(2006,(02):14,17。 [6] 曹建平(利用电话的“有线+无线”远程控制系统[J](南京工业职业技术学院学 报(2002,(01):13,16。 [7] 李雪梅,李秋红(AT85C51单片机在电话远程控制器中的应用[J](现代电子技 术(2006,20(4):36,41。 [8] 谢孝良(用AT89C2051实现电话远程控制家用电器[J](单片机与嵌入式系统应 用(2003,(01):24,27。 [9] 杨为理(现代通讯集成电路应用技术手册[M](电子工业出版社,2002,(1): 25,28。 [10] 李广地, 朱月秀,王秀山(单片机基础[M](北京航空航天大学出版社,2005, (02):23,27。 [11] 张志柏(基于单片机的家用电器远程电话控制系统的实现[J](常州信息职业技 术学院学报(2006,(01):30,32。 [12] 李华(MCS-51系列单片机实用接口技术[M](北京航空航天大学出版社。 [13] 李传南(单片机与DTMF信号收发芯片MT8870的直接接口设计[J](电子与 自动化(2002.2: 30-35 。 [14] 张大明(单片机控制实训[M](机械工业出版社2007,234,258 [15] Austin(DTMF-RD(www.silabs.com。 [16] Atmel Corporation(AT89C51,8-bit MCU with 2K Bytes Flash。 。 [17] Neaman(Semiconductor and Devices:Basic Principles [M](3rdEd( McGra w Hill Inc,2004:449-522。 26 附录 附录一:元器件清单 名称 规格 数量 名称 规格 数量 单片机 AT89C51 1 语音芯片 ISD2560 1 DTMF芯片 CM8870 1 存储芯片 AT24C02 1 光耦 P521 2 继电器 HK4100F 2 发光二极管 LED 4 二极管 4002 4 驻级话筒 HX034P 1 开关 4 二极管 4148 2 三极管 5551 1 三极管 9014 4 三极管 9012 3 三极管 5401 1 电阻 3K 1 电阻 100K 3 电阻 470 1 电阻 120 1 电阻 68 1 电阻 4.7K 2 电阻 220K 1 电阻 220K 1 电阻 12K 1 电阻 5.1K 1 电阻 10K 3 电阻 470K 2 电阻 39K 1 电阻 39K 1 电阻 62K 1 电阻 1K 1 电容 1u 4 电容 0.1u 5 电容 0.01u 2 瓷片电容 30p 2 电解电容 10u 1 电解电容 22u 4 底座 40p 1 底座 8p 1 底座 18p 1 底座 28p 1 晶振 3.58 1 27 附录二:电话远程控制器原理图 VCC R34.7KR2100KRETR1R1010K10K VCCP3.0R12VCC160V R17R141003K R234.7K IC1VCCC17 104R32R33100K470KR3410KC21 JT130P3.58C22 VCC30PU3P0.01288870A0VCCD216A1VCCAC12Q1VCC3A20.1UFC13C14C55401P0.14++A30.1UF22UF10UFC2P0.2512S1A4VSSDR6L1P0.3613A5VSSAC110KJ1VCCP0.47SW-PB1uA6D1D21u8C11104U13A740024002GNDAQ2914MIC2A8SP+VCCP0.51015P3.65551R5R71K1A9SP-R4P3.1C19104220KD312KCON3J3Q411C20AUX INOPTOISO1LEDP0.62320智能型电话遥控器4/CEANAINP0.7243PDR38Q5P2.627210.1UF2P/RANAOUTR21C7P2.725185.1k1/EOMMICREF4.7KD5DW190122217U2/OVFMICR25414818-27VCON42619XCLKAGC4.7K104R16470C9Q3ISD25609014R229014OPTOISO1R20R8R9560K4.7K1u10K10KVCCL2C8MIC1C6D6D7R13R15D8R18R19C18R39VCC+1u10040024002100K414812068K4.7UF470kR24472MICJ2 P1.7541kSDAVSSVCCP1.663SCLA2Q672WPA1P2.481VCCA0P3.6L1L2R27C324CXX1KR28R30104Q8D10K1D947K47K9014VCCRELAY-SPDT4148VCCR2610KLEDJ5C15C16PNPU4VCC1103103R11P1.0139P0.0P10P0022KQ7P1.1238P0.1P11P013P1.2337P0.2P12P024P1.3436P0.3P13P035P1.4535P0.4P14P046P1.5634P0.5P15P057R31P3.2P1.6733P0.69014P16P06839KJ4P1.7832P0.7P17P079VCC6D4VCCQ9P3.31321P2.0CON9VCC5INT1P20R29LED9014P3.21222P2.14INT0P2123P2.262K3P22P1.3P3.51524P2.32T1P23Q11P3.41425P2.4D121T0P24K2D11P1.226P2.5P3.7P25RELAY-SPDT4148R35R36R37CON6P2.53127P2.6VCCEA/VPP262.2K2.2k2.2kP1.128P2.7P27R41 LEDX1191KX1PNPP1.0X218X2S2Q10C4RET910P3.0P2.0VCCRESETRXDX111P3.1SW-PBTXDR4010KP3.71730S3 RDALE/P130PP3.61629P2.1WRPSEN12MC10SW-PBX28051S49014P2.230PSW-PB 28 附录三:电话远程控制器PCB图 29 附录四:电话远程控制器程序 /**********************************************用户头文件************************************************/ #include #include #include /**********************************************宏定义 ************************************************/ #define uchar unsigned char #define uint unsigned int #define I2CReadAdr 0xA1 //AT24C02写地址,格式为:(命令1010+器件3位地址+读/写)。 #define I2CWriteAdr 0xA0 //AT24C02读地址 /**********************************************管脚定义************************************************/ sbit I2CSCK = P1^6; //24C02时钟信号 sbit I2CSDA = P1^7; //24C02数据信号 sbit HoldTest = P3^0; //模拟摘机检测端,为1时处于摘机状态 sbit HoldOn = P3^1; //模拟摘机控制端,为0时摘机 sbit Control1 = P2^4; //继电器控制端 sbit Control2 = P2^5; //继电器控制端 sbit RingInt = P3^7; //振铃信号检测端 sbit ISDPR = P2^6; //语音录/放控制端(0为录,1为放) sbit ISDPD = P0^7; //芯片低功耗状态控制(1为低功耗) sbit KEY1 = P2^0; //当地操作按键1 sbit KEY2 = P2^1; //当地操作按键2 sbit KEY3 = P2^2; //当地操作按键3 sbit ISDEOM = P2^7; //录放音结束信号输出 sbit ISDCE = P0^6; //芯片片选 sbit VoiceEn = P3^6; //监听控制端 /**********************************************全局变量************************************************/ uchar GRingCount; //振铃次数计数 uchar allow; uchar dat; uchar dat1; uchar open; uchar close; uchar a; uint dlycount; uint dlyGRingCount; uint openGRingCount; uint opencount2; uint closeGRingCount; 30 uint closecount2; //延时计数值 uchar ucGPassward[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //初始密码为123456,存储在24C02中 uchar data1[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //输入密码暂存 uchar code ucGISDAddr[9] = { //代码,存储于FLASH中,语音芯片录音段其始地址 0x40, //录音第一段(0x40):请输入密码; 0x49, //录音第二段(0x49):密码错误,请重新输入; 0x50, //录音第三段(0x50):1开; 0x54, //录音第四段(0x54):1关; 0x58, //录音第五段(0x58):2开; 0x5c, //录音第六段(0x5c):开电器1请按1,关电器1请按2,开电器2请按3,关电器2请按4,延时开请按5,延时关请按6,开监听请按7,关监听请按8,修改密码请按9,状态查询请按0,挂机请按*键; 0x61, //录音第七段(0x61):密码修改成功; 0x68, //录音第八段(0x68):2关; 0x6d }; //录音第九段(0x6d):设置成功。 /******************************************************************** ** Function name: 延时函数,共三个 ** Descriptions : 延时函数,定时不准 ** Input : 延时时间长度 ** Output : 无 ********************************************************************/ void Delay1ms() /* 1ms 定时*/ { uint i = 0; for (i = 150; i > 0; i--); } void Delay20ms() /* 延时20ms */ { uchar i = 0; uchar j = 0; for (i = 50; i > 0; i--) { for (j = 200; j > 0; j--) ; } } void DelayNs(uchar ucdly) /* 延时1s */ { uchar i = 0; uchar j = 0; uchar k = 0; for ( ; ucdly > 0; ucdly--) { for (i = 10; i > 0; i--) { 31 for (j = 200; j > 0; j--) { for (k = 250; k > 0; k--) ; } } } } /******************************************************************** ** Function name: I2C读写子程序 ** Descriptions : ** Input : ** Output : 无 ********************************************************************/ void I2CStart(void) /*******************I2C起********************/ { I2CSDA = 1;//SCK为高电平时,SDA由高电平向低电平跳变,开始传送数据 I2CSCK = 1; _nop_(); //时序要求600ns,保证正确起始 _nop_(); I2CSDA = 0; I2CSCK = 0; } void I2CStop(void) /*******************I2C停止********************/ { I2CSCK = 0;//SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据 I2CSDA = 0; I2CSCK = 1; I2CSDA = 1; } /*******************从24C02读数据********************/ uchar I2CRead(void) { uchar i = 0; uchar ucReadDat = 0; for (i = 8; i > 0; i--) { //8位,先读最高位 I2CSCK = 1; //获得总线操作 ucReadDat = ucReadDat << 1; //数据左移,空出最低位,用于接收数据 ucReadDat = ucReadDat | (uchar)I2CSDA; //保存低位数据,采用按位或的方式 I2CSCK = 0; //释放总线 } return(ucReadDat); //返回获得的数据 } 32 /*******************写数据到24C02********************/ bit I2CWrite(uchar ucWriteDat) { uchar i; bit bACK; //应答 for (i = 8; i > 0; i--) { //8位,先读最高位 if (ucWriteDat & 0x80) { //发送数据到数据总线上 I2CSDA=1; } else { I2CSDA=0; } I2CSCK = 1; //获得总线操作 _nop_(); //适当延时,等待对方接收完毕 _nop_(); I2CSCK = 0; //释放总线 ucWriteDat = ucWriteDat << 1; //数据左移,继续传送下一位 } I2CSDA = 1; //接收应答信号 _nop_(); _nop_(); I2CSCK = 1; //获得总线操作,等待从器件将数据线信号拉低 _nop_(); _nop_(); bACK = I2CSDA; //读取应答信号 I2CSCK = 0; return (bACK); //返回 } /**************在指定地址addr处写入数据write_data********/ void I2CByteWrite(uchar ucAdr,uchar ucData) { I2CStart(); //发送开始信号 I2CWrite(I2CWriteAdr); //发送器件写地址 I2CWrite(ucAdr); //发送(指定)片内字节地址 I2CWrite(ucData); //发送数据 I2CStop(); //结束 } /***************在指定地址读取************/ uchar I2CByteRead(uchar ucAdr) { uchar ucData; I2CStart(); //发送开始信号 I2CWrite(I2CWriteAdr); //发送器件写地址 33 I2CWrite(ucAdr); //发送(指定)片内字节地址 I2CStart(); //重新发送开始信号,进行数据传送 I2CWrite(I2CReadAdr); //发送器件读地址 ucData = I2CRead(); //接收数据 I2CStop(); //结束 return(ucData); //返回接收到的数据 } /************放音程序**************/ void ISDPlay(uchar ucAdr) { P0=ucGISDAddr[ucAdr]; VoiceEn=0; DelayNs(1); ISDCE=0; DelayNs(1); while (ISDEOM == 0) ; ISDPD=1; VoiceEn=1; ISDCE=1; } /************各键功能*************/ void function() { uchar i,fun,delayopen,delayclose,laws,flag; if (dat == 10) { dat1 = 0; } else { dat1 = dat; } if (delayopen) { i++; if (i == 1) { if (dat == 1) { open = 1; } else { if(dat==2) { open = 2; } else { delayopen = 0; } } } if((i > 1) && (i < 4)) { dlycount = dlycount * 10 + dat1; 34 } else { if (i == 4) { dlycount = dlycount * 10 + dat1;//输入三位数后延时开计时 if (open == 1) { openGRingCount = dlycount; dlycount = 0; } else { opencount2 = dlycount; dlycount = 0; } TR0 = 1; i = 0; delayopen = 0; open = 0; ISDPlay(8); } } } if (delayclose) { i++; if (i == 1) { if (dat == 1) { close = 1; } else { if (dat == 2) { close = 2; } else { delayclose = 0; } } } if ((i > 1) && (i < 4)) { dlycount = dlycount * 10 + dat1; } else { if (i == 4) { dlycount = dlycount * 10 + dat1 //输入三位数后延时关计时 if (close == 1) { closeGRingCount = dlycount; dlycount = 0; } else { closecount2 = dlycount; dlycount = 0; } TR0 = 1; 35 i = 0; delayclose = 0; close = 0; ISDPlay(8); } } } if (laws) { i++; if (i < 7) { data1[i-1] = dat1; } else { if (dat == 0x0c) { EX0 = 0; TR0 = 0; for (a = 0; a < 6; a++) { I2CStart(); I2CWrite(I2CWriteAdr); I2CWrite(a); I2CWrite(data1[a]); I2CStop(); Delay1ms(); } TR0 = 1; EX0 = 1; ISDPlay(6); i = 0; laws = 0; } else { laws = 0; i = 0; } } } if (fun == 0) { switch (dat1) { case 0x01: if (Control1 == 1) { Control1 = 0; ISDPlay(8); } break; case 0x02: if (Control1 == 0) { Control1 = 1; 36 ISDPlay(8); } break; case 0x03: if (Control2 == 1) { Control2 = 0; ISDPlay(8); }break; case 0x04: if (Control2 == 0) { Control2 = 1; ISDPlay(8); }break; case 0x05: delayopen = 1; break; case 0x06: delayclose = 1; break; case 0x07: VoiceEn = 0; break; case 0x08: VoiceEn = 1; Delay20ms(); break; case 0x09: laws = 1; break; case 0x00: if (Control1 == 0) { ISDPlay(2); } else { ISDPlay(3); } //1关 if (Control2 == 0) { ISDPlay(4); } else { ISDPlay(7); };break; //2关 case 0x0b: HoldOn = 1; allow=0; default: break; 37 } if (delayopen | delayclose | laws) { fun = 1; } } if (!(delayopen | delayclose | laws)) { fun = 0; } } /***********T0定时中断****************/ void timer0() interrupt 1 using 1 { TL0 = 0xb0; TH0 = 0x3c; dlyGRingCount--; if (dlyGRingCount == 0) { dlyGRingCount = 1200; if (openGRingCount != 0) { openGRingCount--; if (openGRingCount == 0) { Control1 = 0; } } if (opencount2 != 0) { opencount2--; if (opencount2 == 0) { Control2 = 0; } } if (closeGRingCount != 0) { closeGRingCount--; if (closeGRingCount == 0) { Control1 = 1; } } if (closecount2 != 0) { closecount2--; if (closecount2 == 0) { Control2 = 1; } } if (!(openGRingCount|opencount2|closeGRingCount|closecount2)) { TR0 = 0; } 38 } } /************CM8870中断*************/ void int0() interrupt 0 using 1 { uchar i,j,k; k = 0; dat = P1; dat = dat&0x0f; if (allow == 1) { function(); } if (allow == 0) { GRingCount++; if (GRingCount < 7) { if (dat == 10) { data1[GRingCount-1] = 0; } else { data1[GRingCount-1] = dat; } } else { if (dat == 0x0c) { for (i = 0; i < 6; i++) { if (ucGPassward[i] == data1[i]) { k++; _nop_(); } } if (k == 6) { allow = 1; GRingCount = 0; i = 0; k = 0; //密码输入正确 ISDPlay(5); } else { allow = 0; i = 0; k = 0; GRingCount = 0; if (j == 1) { ISDPlay(1); } if (j >= 2) { HoldOn = 1; 39 j = 0; } //密码输入错误两次则挂机 } } } } } /************主程序***************/ main() { uchar ucHoldFlag = 1; //摘机标志,为0时标示为摘机 uchar ucRingCount = 0; //振铃次数 uchar i = 0; //用于计数 TMOD=0x01; //使用定时器0 TL0=0xB0; //50ms定时 TH0=0x3C; IT0 = 1; //边缘触发 dlycount=0; dlyGRingCount=1200; EA=1; //开放中断 ET0=1; //定时器0中断允许 GRingCount=0; openGRingCount=0; opencount2=0; closeGRingCount=0; closecount2=0; ISDPD=1; //ISD芯片掉电 ISDCE=0; _nop_(); ISDCE=1; while (1) { while (ucHoldFlag) { //振铃次数检测,振铃信号为25HZ,1秒振铃,4秒停 if(RingInt == 0) { Delay20ms(); //低电平20ms if (RingInt == 1) { Delay20ms(); //高电平20ms if (RingInt == 0) { Delay20ms(); //低电平20ms if (RingInt == 1) { //检测到两个周期振铃信号时,振铃次数加1 ucRingCount++; DelayNs(1); //等待下一个振铃次数检测 } } } 40 } if (ucRingCount >= 8) { //振铃次数大于8 HoldOn = 0; //摘机 ucRingCount = 0; //振铃计数清零 Delay20ms(); //适当延时,等待电话线上信号稳定 if (HoldTest == 1) { //检测到摘机信号,可以开始通信 EX0 = 1; //允许中断0(MT8870中断) ucHoldFlag = 0; //标示为已摘机状态 for (i = 0; i < 6; i++) { //从24C02中读取密码,密码为6位 ucGPassward[i] = I2CByteRead(i); //从24C02的0-5地址中读取 } ISDPlay(0); //播放"请输入密码" } } if (KEY1 == 0) { //手动操作 Control1 =! Control1 //按键1按下时,取反继电器的状态 Delay20ms(); Delay20ms(); while (KEY1 == 0) ; //等待按键放开 } if (KEY2 == 0) { //手动操作 Control2 =! Control2;//按键1按下时,取反继电器的状态 Delay20ms(); Delay20ms(); while (KEY2 == 0) ; //等待按键放开 } if (KEY3 == 0) { //初始化密码 for (i = 0; i < 6; i++) { //密码为6位 I2CByteWrite(i, i+1);//在24C02的0-5地址上写入1-6 Delay1ms(); //适当延时,等待24C02存储结束 } Delay20ms(); Delay20ms(); while(KEY3 == 0) ; //等待按键放开 } } if (HoldTest == 1) { //检测摘机状态 ucHoldFlag = 0; //摘机状态 } else { ucHoldFlag = 1; //挂机后,标示为未摘机状态 } } 41
本文档为【简易家用电器远程遥控器的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_196623
暂无简介~
格式:doc
大小:216KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-11-29
浏览量:10