毕业设计(论文)远程电话控制器的设计与实现

上传人:1777****777 文档编号:36022935 上传时间:2021-10-29 格式:DOC 页数:32 大小:604.01KB
返回 下载 相关 举报
毕业设计(论文)远程电话控制器的设计与实现_第1页
第1页 / 共32页
毕业设计(论文)远程电话控制器的设计与实现_第2页
第2页 / 共32页
毕业设计(论文)远程电话控制器的设计与实现_第3页
第3页 / 共32页
点击查看更多>>
资源描述
淮阴师范学院毕业设计摘 要:在现有电话网络的基础上,以STC89C52控制器为核心,设计了远程电话控制器的硬件与软件,实现了铃流检测、摘挂机控制、语音提示、密码校验、控制及驱动、键盘控制、功能显示等功能。为充分利用资源,增加了时钟和闹钟定时,实时显示时间和给出语音提示。按此设计制作的样机,经测试、试用完全达到设计要求,用户可以用电话很方便地控制家中的电器设备。本文详细阐述了控制器的系统方案、硬件设计、软件设计,给出了系统电路图和系统软件流程图。关 键 词:解码,MT8870,单片机,液晶显示Abstract: The long-distance telephone controller (include hardware and software) was designed in the existing telephone network foundation.It ook the STC89C52 controller as the core and realized many functions, such as the bell-stream examination, picking and hang off controlling,voice prompting,password verification,controlling and actuation,keyboard controlling and function demonstration .So, the manufacture prototype has been designed,for the full use of resources,with the clock and alarm clock to fix time, the real-time to display time and also,the voice prompt can be given by it .This manufacture prototype has been gone through the test which proved that it can achieve the design request perfectly .With the help of this machine,the electric appliance equipment can be controlled by users very conveniently.This article elaborated in detail the controller system plan, the hardware design and the software design .Besides, the system circuit diagram and system software flow chart has also been given.Key word: Decoding, MT8870, monolithic integrated circuit, liquid crystal display目 录1 引言32 系统方案43系统原理分析43.1 振铃音检测43.2 自动摘挂机53.3 DTMF信号解码53.4 显示电路设计63.5 控制及驱动63.6 语音提示64 系统硬件设计64.1 振铃音检测电路64.2 自动摘挂机电路74.3 DTMF信号解码电路74.4 显示电路84.5 控制及驱动电路94.6 语音提示电路94.7 单片机资源口分配104.8电源设计115 系统软件设计125.1有电话打入135.2 无电话打入135.3 子程序编写及注意点145.4 软件流程图14结论16参考文献17致谢18附录A19附录B2020附录C211 引言21世纪是信息时代,各种电信新技术推动了人类文明的进步。现代电话网络是由交换机和电话传输线共同组成,它的性能已经有了很大的改进,而且可靠性非常高。无线电遥控不可避免的须占用一定的无线电频率资源,会造成电磁污染;常规的有线遥控需进行专门的布线,增加了投入;而红外线、超声波遥控则受距离所限制。基于此,电话属双工通信,利用电话进行控制有更大优越性,操作者可以通过各种提示音即时了解受控对象的有关信息,从而进行进一步的操作。设计采取单片机智能控制,利用不同的提示音达到对于不同操作的提示及对受控方状态的信息反馈,使作品达到交互式与智能化。2 系统方案远程电话控制器由单片机构成主控部分,进行主要的信息处理,接收外部操作指令形成各种控制信号,并完成对于各种信息的记录;接口电路提供单片机与电话外线的接口。其中包括铃流检测、摘挂机控制、忙音检测、双音频DTMF识别,液晶显示电路,控制电器设备电路及语音提示电路,系统原理如图1所示。单片机控制电路显 示 器键 盘DTMF信号解码模拟摘挂机并行口控制语音提示驱动电路铃流检测电话图1 系统总体框图 在软件方面,主要采用单片机C语言编写,C语言易读性和可移植性强,对于以后系统维护与开发有一定的好处。软件编写主要完成铃流检测、用户密码验证、密码修改、设定启动/关闭电器、时间设定、闹钟设定、液晶模块显示、语音提示等功能。3系统原理分析3.1 振铃音检测当用户被呼叫时,电话交换机发来铃流信号。振铃为正弦波,失真不大于10%。振铃以5秒为周期,即1秒送,4秒断。根据振铃信号电压比较高的特点,可以先使用阻容降压,并且加上限流电阻,采用稳压二极管进行半波整流,变成直流信号,然后输入光电耦合器。经过光耦的隔离转换,从光电耦合器输出再经过施密特触发器,波形输出为标准的方波。此时方波信号就可以直接输出至单片机的中断计数器输入口,完成振铃音检测和计数。3.2 自动摘挂机根据国家有关标准规定:不论任何电话机,摘机状态的直流电阻应小于300欧, 有“R” 键的电子电话机的摘机状态直流电阻应小于350欧。在挂机状态下,其漏电流小于5微安。当用户摘机时,电话机通过叉簧接上约300欧的负载,使整个电话线回路流过约30毫安的电流。交换机检测到该电流后便停止铃流发送,并将线路电压降为十几伏的直流。当控制器检测到有三次信号进入,单片机给出摘机信号完成模拟摘挂机。3.3 DTMF信号解码DTMF 双音多频信号解码电路是移动电话、程控交换机及无线通信设备中广泛应用的集成电路。它包括DTMF 发送器与DTMF 接受器,前者主要应用于按键电话作双音频信号发送器,发送一组双音多频信号,从而实现音频拨号。双音多频信号是一组由高频信号与低频信号叠加而成的组合信号,CCITT 和我国国家标准都规定了电话键盘按键与双音多频信号的对应关系如表1 所示。表1 电话拨号数字对应高低频率组合关系数 字 键 盘高 频 组1209133614471633低频组697123A770456B852789C941*0#D采用MT8870 芯片作为DTMF 信号的解码核心器件,解码输出相应16种频率组合的四位并行二进制码1。MT8870 具有拨号音抑制和模拟信号输入可调功能, 所以在设计解码电路时,只需外加一些阻容元件即可。3.4 显示电路设计该部分设计较为简单,市场上有成熟的模块,综合多方面的因素,笔者选用1602液晶屏,显示时间、控制设备运行状况、闹钟时间,键盘操作等信息,便于人机交流。3.5 控制及驱动单片机接口驱动能力有限,本部分电路主要采用单片机控制继电器来控制大功率设备的运转,其中难点是单片机如何驱动继电器,我们采用工作电流较大的晶体管作为无触点开关,来控制继电器。3.6 语音提示 该部分电路主要是为方便人们对控制器的控制而设计,单片机在接收到信号后提示用户下一步操作。语音提示信号通过小型的音频耦合变压器耦合到电话线路中,解决了语音信号进入电话网络的问题,并且在控制器端有扬声器,方便提示用户。4 系统硬件设计4.1 振铃音检测电路电话交换机发来铃流信号,通过阻容降压、半波整流电路,再经过施密特触发器,波形输出为标准的方波。此时方波信号就可以供单片机检测,完成整个振铃音检测和计数2,在设计中为了增大单片机的驱动能力,加入上拉电阻。硬件电路设计如图2。图2 振铃音检测电路4.2 自动摘挂机电路自动摘挂机电路一般由单片机控制继电器开关,继电器的控制端连接一个大约300的电阻接入电话线两端,在继电器的使用过程中触点容易损坏,且线圈会产生高压,对系统的稳定性有影响,故笔者采用晶体管Q1作为无触点开关,经过桥式整流电路,然后控制晶体管Q1导通,完成电话机的模拟摘挂机3,电路如图3。图3 自动摘挂机电路4.3 DTMF信号解码电路双音多频DTMF信号解码电路由MT8870主要承担,电路连接采用单信号输入方式(如图5),由它的2、3脚接收来自电话机的双音多频脉冲信号。该双音多频信号先经其内部的拨号音滤波器,然后经前置放大后送入双音频滤波器,将双音频信号按高、低音频信号分开,再经高、低群滤波器,幅度检测器送入输出译码电路,经过数字运算后,在其数据输出端(1114脚)输出相对应的8421码4。MT8870的数据输出端Q4Q1连到STC89C52的P1口的P1.0 P1.3,CPU采取查询的方式检测4位代码,电话按键与相应译码如表2所示。表2 电话按键译码表电话按键DTMF译码电话按键DTMF译码00101(0x05)60110(0x06)11000(0x08)71110(0x0e)20100(0x04)80001(0x08)31100(0x0c)91001(0x09)40010(0x02)#0011(0x03)51010(0x0a)*1101(0x0d)图4 DTMF信号解码电路4.4 显示电路单片机与 LCD1602之间有11条线相连,信号线有 11 条,地线是作为电平参考的线,所以也必须相连在一起,LCD1602液晶屏的管脚定义如表3,电路连接如图5所示。表3 LCD1602管脚定义脚数定义功能1VSS接电源地 , 0V2VDDLCD 的工作电压 , +5V3VOLCD 上 背光电压电压调节4RS接高电平为数据,接低电平为指令5R/W接高电平为读出,接低电平为写入6Elcm使能信号,用下降下沿来读出或写入信号714DB0DB7数据线15LED A模组背光的正电源( 5V )16LED K模组背光的负电源( 0V )图5 LCD1602显示电路4.5 控制及驱动电路使用晶体管设计时,发现一只晶体管的驱动电流有限,且容易对单片机5控制系统产生影响,我们采用一只PNP和一只NPN型晶体管,并加上二极管保护,如图6所示。当电路工作时,电路中发光二极管会亮,继电器常开触点闭合,电路处于工作状态。图6 控制驱动电路4.6 语音提示电路此部分电路主要PM50语音芯片构成,该芯片由专用的语音单片机和FLASHRAM存储器集合构成,它既有几秒到200秒的多段语音播放功能,也有单片机可编程的智能特性,大规模复杂电路已经缩微到只有COB28封装(18*36mm)的印板上,可以方便地作为DIP28封装的标准集成电路来使用。PM5电路的连接采用标准串行控制方式(如图7),由单片机发串行指令控制6放音的段号,段数最大128段,专用于语音组合时使用。在该串行模式下最大可分128段,K1为数据端,K2为时钟端,O1为忙信号端。时钟上升沿时数据端有效。语音段的地址为80HFFH,第一段的地址是80H,按顺序排列,最多128段语音。图7 PM50语音提示电路在语音提示电路中,要把声音耦合到电话电路中,但是考虑到隔离与提示音的效果,我们在市场上找到了一种电话耦合变压器,使用效果较好,电路连接如图8所示。图8 语音耦合电路4.7 单片机资源口分配STC89C52RC单片机有080M的时间范围,8K的FLASH程序存储空间,512字节的RAM,高抗静电,宽电压,不怕抖动,宽温度范围,I/O口经过特殊处理,单片机内部的电源供电系统经过特殊处理,内部复位、与看门狗电路经过特殊处理,支持ISP串口在线下载,无须专用编程器,适合大规模与开发时使用,远程控制器的MCU端口资源分配如表4所示。表4 单片机端口分配表端口(P0)功能端口(P1)功能端口(P2)功能端口(P3)功能P00四个按键输入K1 K4P10DTMF解码信号输入Q4Q1P20LCD1602数据端口P30(RXD)串行编程端P01P11P21P31(TXD)P02P12P22P32铃声检测P03P13P23P33PM50数据端P04四路继电器控制口P14MT8870-STDP24P34T0P05P15摘挂机P25P35LCD1602三个控制口:RS、RW、ElcmP06P16PM50忙音检测P26P36P07P17PM50时钟信号P27P37图9 单片机电路图48电源设计 普通的线性直流稳压电源电路效率比较低,电源的变压器体积大,重量重,成本较高。开关电源电路结构较复杂,成本高,电源纹波大,RFI和EMI干扰是难以解决的。针对以上问题设计了电容降压型直流稳压电源电路,结构非常简单,具体有:体积小、重量轻、成本低廉、动态响应快、稳定可靠、高效(可达90%以上)等特点。(1)电容降压原理当一个正弦交流电源U(220V AC 50HZ)施加在电容电路上时,电容器两极板上的电荷,极板间的电场都是时间的函数。也就是说:电容器上电压电流的有效值和幅值同样遵循欧姆定律。即加在电容上的电压幅值一定,频率一定时,就会流过一个稳定的正弦交流电流。容抗越小(电容值越大),流过电容器的电流越大,在电容器上串联一个合适的负载,就能得到一个降低的电压源,可经过整流,滤波,稳压输出。电容在电路中只是吞吐能量,而不消耗能量,所以电容降压型电路的效率很高。(2)电路设计电路由降压电容,限流,整流滤波和稳压分流等电路组成,设计如图10。图10 电源设计图设计要求:电压直流5V,电流为最大350mA左右,最小120mA左右1.降压电容:相当于普通稳压电路中的降压变压器,直接接入交流电源回路中,几乎承受全部的交流电源U,应选用无极性的金属膜电容。市电中:U=220V,f=50Hz 且U有10%的波动,取故C取值为6uF,耐压为AC250V2.限流电路:在合上电源的瞬间,有可能是U的正或负半周的峰_峰值,此时瞬间电流会很大,因此在回路中需串联一个限流电阻,以保证电路的安全。则复阻抗 (R1取值为47)求得电流有效值为: 电阻实际承受的功率为: 电阻R选用线绕电阻器,功率为9W。3.整流滤波:全波整流输出电压高,脉动小,设计中采用全波桥式整流。4.稳压分流:电压经过降压、整流电路后,电流有效值I是稳定的,不受负载电流大小变化的影响,因此在稳压电路中,要有分流回路,以响应负载电流的大小变化。先通过12V的稳压管然后滤波,再进入三端集成稳压块7805稳压。5 系统软件设计软件编写主要完成铃流检测、用户密码验证、密码修改、设定启动/关闭电器、时间设定、闹钟设定、液晶模块显示、语音提示等功能。5.1有电话打入铃流检测由一般的采用单片机的外中断改为采用查询的方法,当检测到有三次电话进来而无人接听的时候完成模拟摘机过程。当摘机完成后,检验用户密码,在三次输入均不正确的情况下,为防止其他人恶意等行为,系统自动挂机。当检验正确后,根据提示,用户可以选择是设置启动/关闭项目、修改密码等操作:(1)设置启动/关闭项目:根据语音提示用户输入启动/关闭项目的编号、设定时间,然后给出设定成功提示。输入的格式为三位,按星号键(*)结束:启动关闭项目编号(1位)设定启动时间(采用两位,以分钟为单位)星号键(*)(2)修改密码:根据语音提示用户输入六位数新密码(原密码作废),然后再次输入新密码,对比两次输入是否一致,若一致则修改成功,否则重新输入。5.2 无电话打入在没有电话打进来的时候,在软件方面做了相应的设置,来扩展电话远程遥控器的功能,使其具备了一机多用的特点。按键的说明与功能的设置如下:系统设置了四个按键,作为手动输入起动项目,分别为:KM、KN、KD、KOK。在不同的模式下有不同的功能,起到了一键多能的作用,具体功能见表5所示。表5 模式与按键功能说明表模 式按 键功 能模式0KM=0显示基本界面模式一KM模式设置,每按一次模式加一KN选择启动/关闭项目编号,每按一次项目后移一次KD设定项目启动/关闭,第一次按启动,再次按下关闭KOK设定时间,每按一次时间加5分钟,设置的时间最大为60分钟模式二设定时间KM模式设置KN设定时钟的小时,每按一次时加一KD设定时钟的分,每按一次分加一KOK保留模式三设定闹钟KM模式设置KN设定闹钟的小时,每按一次闹钟时加一KD设定闹钟的分,每按一次,闹钟分加一KOK保留LCD1602液晶屏的显示格式为:PControl 00:00LCD1602液晶屏第一行显示的内容为:LCD1602液晶屏第二行显示的内容为:表6 LCD1602第二行显示内容表模式显示内容模式0DLong HuanYingNI模式一名称显示当前项目设定时间Mod1:100模式二/模式三名称设定时间(时位、分位)Set time:/ SetClock:00:005.3 子程序编写及注意点(1)MT8870解码输出MT8870的数据输出端Q4 Q1连到STC89C52的P1口的P1.0P1.3,STD接到单片机的P1.4口,采用查询的方法,查询这五个位上的数据,并且在查询中用软件防抖动,节省硬件成本。(2)控制按键系统设置了四个按键,用来提供给用户手动输入,四个按键定义为KM、KN、KD、KOK,分别连接到单片机P0.0P0.3,硬件电路连接简单,采用软件防抖动,节省硬件成本,并且在有电话进来的时候,这个四个按键被屏蔽。(3)控制电器电路因为采用继电器控制设备,有一定的机械特性,为了防止发生误动作,在软件设计时,每个时钟周期都对驱动电路进行重新赋值,保证机械电路正常工作。5.4软件流程图针对以上各点,在编写软件程序时遵照以下流程图:开 始初 始 化是否有电话话?模式1/2/3振铃检测3次设定启动项设定闹钟设定时间NYNY模式1模式2模式3校验密码?是否3次?NY模式选择 设置新密码 重新新密码检测2次输入 设定启动项设定结束?设定成功设定时间挂 机结 束结 束YNNYYNY设定成功设定时间设定成功设定成功设定成功结 论在远程电话控制器的设计与实现过程中,针对铃流检测与DTMF信号解码的难点,查阅大量资料,最后决定由原来常规的外中断检测改为查询的方式,较好的解决了这两个问题。经过测试,可以通过电话对控制器进行控制操作,能够完成铃流检测、双音频信号解码、语音提示、密码验证、密码修改、控制电器启动关闭、液晶提示等功能,且稳定性较好、安全方便。为充分利用系统中的资源,在完成以上功能同时,将其剩余资源制作成电子时钟,液晶显示屏时时地显示时间,并且在此基础上,还使之具有闹钟定时功能,在到达设定的时间时,系统将给出语音提示。根据前期的调查及数据分析,远程电话控制器有不小的市场空间,笔者在设计与制作的具体实施过程中,遵照预先制定的计划,按时完成了设计制作,并且具有很强的可操作性,为今后的规模生产奠定了基础。所以,笔者很有信心地提出,“电话远程控制器”可以作为新产品投资项目申报立项,以期早日投放市场,方便广大用户。参 考 文 献1 胡伟, 季晓衡.单片机C程序设计及应用实例M. 北京:人民邮电出版社,2003年7月第1版.2 康华光.电子技术基础数字部分M. 北京:高等教育出版社,2000年6月第4版.3 康华光.电子技术基础模拟部分M. 北京:高等教育出版社,2004年2月第4版.4 李华.MCS-51系列单片机实用接口技术M. 北京:北京航空航天大学出版社,2000年10月第6版.5 求是科技.单片机典型模块设计实例导航M. 北京:人民邮电出版社,2004年5月第1版.6 余锡存,曹国华.单片机原理及接口技术M. 西安:西安电子科技大学出版社,2000年7月第1版.致 谢在这里,我要感谢我的导师杨军老师,他给了我许多关键性的提示和指导。我还要感谢毕业设计过程中所有给我真诚帮助的老师和同学。附 录 A系统电路图:附 录 B语音芯片声音文件地址地址序号声音80H0081H1182H2283H3384H4485H5586H6687H7788H8889H998AH10十8BH11二十8CH12三十8DH13四十8EH14五十8FH15六十90H16北京时间91H17现在时刻92H18点93H19分94H20秒95H21请您输入密码,按星号键结束96H22密码错误,请重新输入密码。97H23请您输入六位数新密码,按星号键结束98H24请再次输入新密码,按星号键结束99H25您的新密码已设置成功。9AH26确认输入请按一,重新输入请按二。9BH27按星号键结束。9CH28修改密码请按2。9DH29启动关闭按请19EH30年9FH31月A0H32日A1H33启动A2H34关闭A3H35编号A4H36模式1A5H37模式2设定时间A6H38模式3设定闹钟A7H39设定成功A8H40你输入已超过最大次数A9H41请设置启动关闭项目AAH42运行ABH43停止ACH44电话到ADH45闹铃(鸡叫)AEH46返回上一层请按星号键,结束请挂机AFH47欢迎B0H48谢谢附录C系统程序:#include #include #include typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#define KM 0x01#define KN 0x02#define KD 0x04#define KOK 0x08#define K0 0x05 /0#define K1 0x08 /1#define K2 0x04 /2#define K3 0x0c /3#define K4 0x02 /4#define K5 0x0a /5#define K6 0x06 /6#define K7 0x0e /7#define K8 0x01 /8#define K9 0x09 /9#define KBack 0x0d /*#define KEnd 0x03 /#uchar sec,min,hour,chour,cmin,zjtime;uchar key_new,m,cm,mod,start=0;uchar count,mcount;bit key_on, key_again,key_enable=0;uchar key_new,key7,Password6,disp2,time4,State4;uchar delay_time;bit NewTime=0,KNagain=0,Nmod=0,Cnew=0,zjt=0; static uchar data keylong;sbit P15=P15; /模拟摘挂机sbit P32=P32;bit t_en=0;sbit RS =P35; /液晶显示sbit RW= P36;sbit Elcm =P37;#define DataPort P2#define Busy 0x80code uchar StrM01= Welcome! ;code uchar StrM02= ;code uchar StrM03=P-Control ;code uchar StrM04=DLong HuanYingNI;code uchar mod1=Mod1: ;code uchar mod2=Set time: ;code uchar mod3=SetClock: ;sbit P04=P04;/继电器控制端口1、2、3、4sbit P05=P05;sbit P06=P06;sbit P07=P07;sbit tx_pin=P33; /语音芯片控制口sbit clk_pin=P17;sbit busy_pin=P16;void keyscan();void DTMF_scan();void delay(uchar t);void send_play(uchar sound_no);uchar CheckPassword();void ClearKey();void detect();void waitkey();uchar hex2asc(uchar ch);void cdisptime(uchar tx,uchar ty);/显示计数时间变量void ctime();void Delay400Ms(void);void Delay5Ms(void);void WaitForEnable(void);void LcdWriteData(char dataW);void LcdWriteCommand(uchar CMD,uchar Attribc);void LcdReset(void);void DispOneChar(uchar x,uchar y,uchar Wdata);void ePutstr(uchar x,uchar y,uchar code *ptr);void LocateXY( char posx,char posy);void main() uchar i=0; P0=0xff;P1=0x0df;P2=0xff;P3=0xff; LcdReset(); key_enable=0; P04=1; P05=1; P06=1; P07=1; for(i=0;i4;i+) Statei=1; TMOD=0x01; TH0=0x3c;/24M晶振设置定时器初值,25ms中断一次 TL0=0x0b0; /SCON=0x50; /TH1=0xfd; TL1=0xfd; TR0=1; /TR1=1; ET0=1; /ES=1; / EX0=1; EA=1; IP=0; PX0=1; IT0=1; for(i=0;i6;i+)Passwordi=i+1; ePutstr(0,0,StrM03); ePutstr(0,1,StrM02); P15=0; zjt=0; disp0=hour; disp1=min; cdisptime(10,0); while(1) if(P15) send_play(21);delay(1);while(busy_pin);/请输入密码,按*号键结束 zjtime=0; while(1) ClearKey(); waitkey();/等待*号键结束 zjtime=0; detect(); if(CheckPassword()=1)break; /检查密码是否正确 send_play(22);delay(2);while(busy_pin);/密码错误 send_play(27);delay(1);while(busy_pin);/按*号键结束 while(1) zjtime=0; send_play(29);delay(2);while(busy_pin);/启动关闭1 send_play(28);delay(2);while(busy_pin);/修改密码按2 key_enable=1; key6=0x0ff; while(1)if(key6!=0x0ff)break; zjtime=0; switch(key6) case K1: send_play(41);delay(1);while(busy_pin);/请设置启动关闭项目 send_play(27);delay(1);while(busy_pin);/按*号键结束 waitkey();/等待*号键结束 detect(); zjtime=0; i=key3-1; Statei=!Statei; timei=key4*10+key5; send_play(39);delay(1);while(busy_pin);/ 设定成功 break; case K2: send_play(23);delay(1);while(busy_pin);/请您输入六位数新密码,按*号键结束 while(1) ClearKey(); waitkey();/等待*号键结束 detect(); zjtime=0; for(i=0;i6;i+)Passwordi=keyi; send_play(24);delay(1);while(busy_pin);/请再次输入新密码,按*号键结束 ClearKey(); waitkey();/等待*号键结束 detect(); if(CheckPassword()=0) send_play(22);delay(1);while(busy_pin);/密码错误 elsesend_play(39);delay(1);while(busy_pin);break;/ 设定成功 break; send_play(46);delay(1);while(busy_pin); key_enable=1; key6=0x0ff; while(1)if(key6!=0x0ff)break; if(zjt)zjt=0;break; /=在不摘机的情况下= else if(key_on) key_on=0; if(Nmod) Nmod=0;if(mod)send_play(mod+35);delay(2);/ 模式,语音文件要在连续的存储空间 switch(mod) case 0:ePutstr(0,0,StrM03); ePutstr(0,1,StrM04); break; case 1:ePutstr(0,1,mod1); ctime(); if(KNagain) KNagain=0; /send_play(35);delay(2);while(busy_pin);/ /send_play(start+1);delay(1);while(busy_pin);/ if(Statestart)send_play(34);delay(1);while(busy_pin);/关闭 else send_play(33);delay(1);while(busy_pin);/ 启动 break; case 2:ePutstr(0,1,mod2); disp0=hour; disp1=min; cdisptime(9,1); cdisptime(10,0); break; case 3:ePutstr(0,1,mod3); disp0=chour; disp1=cmin; cdisptime(9,1);break; if(Cnew) Cnew=0; if(mod=1)ctime(); if(chour=hour&cmin=min) send_play(45);delay(2);while(busy_pin); for(i=0;i4;i+) if(timei=0)&(Statei=0) Statei=1;send_play(45);delay(2);while(busy_pin); void timer_0(void) interrupt 1 uchar j; TH0=0x3c;/24M晶振设置定时器初值,25ms中断一次 TL0=0x0b0; delay_time+; count+; DTMF_scan(); keyscan(); if(count=40) count=0; sec+;zjtime+; if(sec=60) sec=0;min+; NewTime=1;Cnew=1; for(j=0;j4;j+) if(timej!=0)timej=timej-1; if(min=60)min=0;hour+; hour=hour%24; disp0=hour; disp1=min; cdisptime(10,0); j=P3&0x04; if(j) m+; if(m=6)m=0;mcount+; else j=0;m=0; if(mcount=3) mcount=0; P15=1; key_enable=1; if(zjtime=60) P15=0; key_enable=0; zjt=1; key6=KEnd; if(key_on) if(key_new=KM) mod+;mod=mod%4;Nmod=1; switch(mod) case 1:switch(key_new) case KN:start+;start%=4;break; case KD:KNagain=1; Statestart=!Statestart; break; case KOK:timestart=timestart+5;timestart=timestart%65; break; case 2:count=0; switch(key_new) case KN:hour+;hour=hour%24;break; case KD:min+;min=min%60; break; case 3:switch(key_new) case KN:chour+;chour=chour%24;break; case KD:cmin+;cmin=cmin%60; P04=State0; P05=State1; P06=State2; P07=State3;void keyscan()uchar key_temp; if(key_enable)return; key_temp=(P0)&0x0f;if(key_temp=0) key_new=key_temp; keylong=0; key_on=0; else if(key_new!=key_temp) key_new=key_temp;key_on=0; keylong=1;else if(keylong4) key_on=0; keylong+;else if(keylong=4) key_on=1; keylong+;void DTMF_scan() uchar key_temp,j; if(key_enable=0) return; key_temp=(P1)&0x0f;if(P1&0x10)=0) key_temp=0xff;if(key_temp=0xff) key_new=key_temp; keylong=0; key_again=0;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 任务书类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!