




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
自动打铃器摘要文章介绍了一种以P89C51RD2FN单片机为核心片外扩展at93c46电擦除可编程只读存储器并带有数码LED显示时.分.秒和以指示灯做标志的按键校时自动打铃器。关键词单片机存储器数码管一、引言用单片机控制的自动打铃器,充分发挥单片机体积小,价格便宜,功耗低可靠性好等特点。可用于学校作息,方便了广大师生。二、总体设计方案 .设计思路利用单片机及定时器设计的一个时钟,在每次秒加1的计时过程中,都与规定的时间作比较,如果相等就进行开关电铃,不等则返回。2.总体设计框图打铃广播一体机使用一片微电脑组成一个单片机最小系统完成管理控制工作。输入信号通过键盘输入和红外遥控器两种方法输入,输入的数据储存到储存器中已被在控制过程中调用。一体机有一个显示板,显示板上有5个数码管,分别显示时间小时和分钟以及星期,显示板上面有两个状态指示灯和5个数点指示灯分别指示不同的工作状态。一体机上的时钟信号来自专用的时钟IC,时钟IC具有万年历功能,在这里仅仅取用其中的部分数据。时钟模块在交流停电状态下由备用电池供电,保证正常的时钟走时。打铃广播一体机最终是完成对电铃打铃的管理,完成对电器控制的管理,完成对原有广播系统的管理,完成音乐打铃的管理。管理分为手动和定时自动控制两种情况,定时管理的时间控制靠精确的时钟模块提供准确的时间完成控制。使用内部功放和原有广播系统完成广播或者音乐打铃的信号源来自内部的数码录音,来内部的使用软件编写的音乐曲目,来自本机上的话筒和外部的信号源。这些信号源除可以控制有无外,还有一个电子模拟开关统一进行管理信号源的切换,以达到输出不同的广播、不同的音乐打铃的铃声的目的。一体机的电源有为功放电路提供的正负平衡的18V电源,有为继电器提供的12V电源,有为单片机提供的5V工作电源和为数码录音IC提供的3V工作电源。本机有一个监听电路,用来监听内部或者外部打铃及广播的内容。三、设计原理分析1、 时钟与数据储存器时钟与储存器电路如图3所示:储存器和专用时钟IC均使用IIC通讯方式与单片机通讯,两个IIC器件的地址不同,单片机根据不同的地址分别对不同的器件进行数据传送,储存器AT24C16用来储存键盘或者红外遥控器输入的数据,正常工作时,单片机从储存器中取出数据进行定时比较。时钟模块DS1307除在校正时间时需要写入数据外,其它时间都工作在读出数据的状态下。DS1307的OUT脚设置成输出1HZ的时钟输出,该输出直接驱动秒点闪烁,同时被单片机的一个输入口检测,当出现输出变化时刷新一次显示屏。微电脑IC4是电路中的核心元件,使用P89C51RD2FN单片机。它完成协调、控制外围器件正常、协调地工作的任务。它周围器件有专用时钟模块IC2,型号是DS1307,时钟模块使用IIC通讯方式,内部万年历到2099年,自动闰年处理,DS1307在正常交流供电情况下不消耗备用电池能量,当交流供电断电后,始终正常走时通过内部备用电池来提供能量,其消耗的电流仅2微安。数据储存器IC3,型号AT24C16,与主机IIC通讯,具有16K数据位的储存量。两个IIC通讯的器件使用统一的IIC总线通讯。单片机直接的外围器件还有两块语音模块IC9和IC10,型号是ISD4004-8,ISD4004语音模块与单片机之间采用SPI串行通讯方式,两个语音模块共用串行总线,语音块的使能是通过单片机分别对语音块使能脚的控制来完成。该语音IC可以反复擦写,擦写寿命为1000000次,语音内容可保存100年。语音快可执行的控制指令有“从当前行录音”,“从指定位置录音”,“从当前行放音”,“从指定位置放音”“器件上电”,“器件掉电”,“操作停止”等10条指令,限于篇幅问题此处不在详细叙述该器件的其它特性。有兴趣者可以参看无线电杂志2003年电子制作征文大赛中的“数码录音自动播放机”一文的详细内容。单片机同时担任3路输出中的继电器控制,同时接收键盘输入,控制显示屏的显示数据的不断刷新,控制20W功放输出模块的静音管理和输出单片机编程的音乐曲目等等。2、 电源供电电路:AC220V的交流电源通过35W的电源变压器变压后,经过整流、滤波、稳压后为个部分电路提供电压值不等的电源。电源变压器次级是一个双绕组输出,中心抽头为公共端,两个绕组通过桥式整流电路整流后,通过两组对称的滤波电路滤波后,得到正负18V电源为音频功放模块供电,功放模块是本机在功放输出期间的主要耗电器件,12V继电器和内部监听功放的供电通过12V三端稳压器IC7从VDD电源来获得12V电源为继电器供电,IC8再次稳压获取5V电压为单片机供电,IC9再次稳压获得3V电压为语音电路供电。3、 键盘、显示与红外接收电路:键盘电路有7个I/O口组成,鉴于I/O口的连接参照电路图3.通过键盘插座与面板电路连接,键盘电路如图5所示。3个继电器受单片机控制,其输出触点根据定时自动控制和人工手动控制来完成开关,用来接通电铃、广播系统和电器的供电电源。、 通过“电铃控制器”控制电铃发出不同持续时间、不同间隔时间、不同打铃次数的电铃铃声,实现打铃内容可区分的电铃打铃;、 通过“广播控制器”对现有的普通广播系统供电,并控制音乐信号通过电子开关输出到外部的广播系统中发出音乐铃音。广播控制器除控制音乐打铃的任务外,也可按外部信号源提供的信号进行广播;、 通过“电器控制器”完成对某些电器的电源管理控制,例如:学校的路灯,校园报刊栏等等。音乐铃声可以通过机内“20W高保真功放”发出音乐铃的声音,也可以通过广播管理通过广播系统发送铃声,此处以通过20W功放来完成打铃、广播和扩音来叙述机内功放的工作过程。本机中的功放既可以输出打铃信号,也可以用于会议扩音和广播,功放模块使用一块带有静音管理的双声道电路,其型号是TDA2616。在非工作期间,功放模块的静音管理开启上述的4路控制的控制方式可以是手动控制,更主要的是使用定时功能完成的自动控制。定时控制的设置中可以设置时间、工作方式、音乐铃声的选择、循环执行的遍数等等。用户输入可以通过“键盘”输入,也可以使用“红外遥控器”进行输入设置。输入的数据储存到一个非易失储存器中,这种储存器在掉电状态下数据不会丢失。非易失储存器使用AT24C16,储存器容量是16K数据位,完全可以容纳四路控制每天定时128次的任务。定时工作方式,工作时段等设置按“周”进行设置。在一周时间内又可将某期段设为工作段。例如:音乐打铃是按“天”循环打铃,还是在一个星期中的某段期间内进行打铃。在一周时间内可以任意设定定时工作时间段连续的天数。显示器使用5个数码管,分别显示小时、分钟和星期,小时和分钟数据之间有秒点指示灯按秒钟闪烁。5个数码管对应的5个小数点分别用来作状态指示,前面4个数点对应14路的定时工作方式,数点灯点亮,表示对应路定时功能开启,否则关闭了定时功能。这种使用分路定时管理来开启或关闭定时功能的方法非常方便用户的使用操作。最后面的一个数点指示键盘锁定。该打铃器电路中使用了一个专门的时钟模块,该时钟模块在交流停电状态下能够正常走时,保证了时钟工作的准确性和可靠性。该机内部使用两块美国ISD公司的语音IC,型号是ISD4004-8,该语音模块保真度好,每块语音电路储存语音的时间是8分钟,两块语音电路可以储存16分钟的语音信号。该机内共有19段音乐或者语音,前面的15段是固定在储存器内的音乐曲目,不占用语音模块的空间,612段音乐铃声音乐出厂前已经录制到语音模块中并进行保护,用户未经许可不能擦除,后面的1319段留给用户自由录制音乐段,这7段内容的时间大约是13分钟左右。用户可以进行删除、覆盖、反复使用。4.程序流程图首先对单片机及外围电路进行初始化处理,并从时钟模块中读出数据,显示当时的时间。本电路有两种输入方式,一种是键盘输入,另一种是红外遥控器输入 ,键盘数据采集采用键盘扫描方式进行,红外遥控器输入采用外部中断0中断读出,采用外部中断的目的是能够及时读取红外遥控器信号。在设置输入中,当微电脑查询到有键盘数据或者读取到红外遥控器输入数据后,微电脑通过对数据进行鉴别、判断、处理后,根据数据的分类储存到储存器的相应地址中,以备后面的程序从储存器中读出相关的数据使用。在正常的工作状态下,微电脑查询到键盘输入数据或者读取到红外遥控器命令后,根据命令的内容完成对应的操作。显示屏采用静态显示,每秒钟刷新两次,即便在输入数据的时候,更新数据的显示也已经足够快捷。4路定时的时间设置的分辨率是分钟,所以每到分钟进位的时候,根据4路定时功能是否开启来决定是否对该路进行时间比较。对开启定时功能的定时路,微电脑将当前时间与设置储存到储存器中的时间进行比较,当两个时间满足相等的条件后,再从数据中提取对应的开关机数据等,根据设置的数据作出相应的管理操作。5.程序清单1.初始化程序:READ EQU 0 ;读93C46WRITE EQU 2 ;写入93C46EWEN EQU 4 ;93C46写入使能EWDS EQU 6 ;93C46写入禁止ADR46 EQU 21H ;93C46地址显示显示启动定时器进入工作状态时分值送显示缓存区K1 有按键吗?清分单元显示分值加1置校分标志K3 有按键吗?K1 有按键吗?是60 分吗?THIGH EQU 0F8HTLOW EQU 5FHTIMENEQU 30 ;打铃持续时间(30秒)CS BIT P3.7 ;93C46CSCLK BIT P3.6 ;93C46CLKDI BIT P3.5 ;93C46DIDO BIT P3.4 ;93C46DOORG 0000H ;主程序起始地址AJMP START ;跳至主程序ORG 000BH ;TIMER0中断起始地址AJMP TIM0 ;跳至TIMER0中断子程序START:MOV SP,#60H ;设置堆栈在60HMOV 28H,#00 ;显示寄存器初值为00MOV R6,#12H ; 时寄存器值为12HMOV R5,#00H ;“分”寄存器值为00HMOV R4,#00H ;“秒”寄存器值为00HMOV TMOD,#01H ;设TIMER0为MODE1MOV TH0,#THIGH ;计时中断为4000微秒MOV TL0,#TLOWMOV IE,#82 ;TIMER中断使能MOV R2,#250 ;中断250次SETB TR0 ;启动TIMER02.键值处理程序:LOOP: SETB P0.5 ;工作模式CLR P0.6CLR P0.7JB P0.0,N1 ;K1(模式选择键)按了?不是则跳至N1ACALL DELAY ;消除抖动JNB P0.0,$ ;K1(模式选择键)放开了?ACALL DELAY ;消除抖动AJMP SET ;转到定时模式SETN1: MOV 2FH,R6 ;将时钟数据载入2FH中MOV 2EH,R5 ;将分钟数据载入2EH中MOV ADR46,#00 ;把93C46地址置0SETB RS0 ;将工作寄存器组选择1区LOOP1: MOV A,#READ ;读93C46ACALL TO93c46MOV A,R3 ;取出定时器的状态ANL A,#01HCJNE A,#01H,N2 ;定时器为关闭,则跳转至N2MOV A,R4 ;取出定时器分钟数据CJNE A,2FH,N2 ;定时器分钟数据与时钟分钟不同则转至N2MOV A,R5 ;取出定时器时钟数据CJNE A,2EH,N2 ;定时器时钟数据与时钟时钟不同则转至N2SETB P2.1 ;定时器时间到,打铃MOV A,ADR46 ;将93C46地址载入A中N2: CJNE A,#1EH,N3 ;到定时器数据表表尾?没到转至N3MOV ADR46,#00 ;到表尾,置93C46地址为表头AJMP LOOP1 ;转至LOOP1N3: INC ADR46 ;93C46地址加2INC ADR46AJMP LOOP1 ;转至LOOP1SET: CLR P0.5 ;校时模式SETB p0.6CLR P0.7LOOPS: JB P0.0,N11 ;K1(模式选择键)按了?不是则跳至N11ACALL DELAY ;消除抖动JNBP0.0,$ ;K1(模式选择键)放开了?ACALL DELAY ;消除抖动AJMP SETTIME ;转至SETTIMEN11: JB P0.1,N13 ;K2(时钟加1键)按了?不是则跳至N13ACALL DELAY ;消除抖动MOV A,R6 ;将时寄存器的值载入AADD A,#01H ;A内容加1DA A ;做十进制调整MOV R6,A ;将A的值存入时寄存器CJNE A,#24H,N12 ;是否超过24时?不是则跳至N12MOV R6,#00H ;是则清除时寄存器的值为00N12: JNB P0.1,$ ;K2(时钟加1键)放开了?ACALL DELAY ;消除抖动N13: JB P0.2,N15 ;K3(分钟加1键)按了?不是则跳至N15ACALL DELAY ;消除抖动MOV A,R5 ;将分寄存器的值载入AADD A,#01 ;A内容加1DA A ;做十进制调整MOV R5,A ;将A的值存入分寄存器CJNE A,#60H,N14 ;是否超过60分?不是则跳至N14MOV R5,#00H ;是则清除分寄存器的值为00N14: JNB P0.2,$ ;K3(分钟加1键)放开了?ACALL DELAY ;消除抖动N15: JB P0.3,N17 ;K4(秒钟加1键)按了?不是则跳至N17ACALL DELAY ;消除抖动MOV A,R4 ;将秒寄存器的值载入AADD A,#01 ;A内容加1DA A ;做十进制调整MOV R4,A ;将A的值存入秒寄存器CJNE A,#60H,N16 ;是否超过60秒?不是则跳至N16MOV R4,#00 ;是则清除分寄存器的值为00N16: JNB P0.3,$ ;K4(秒钟加1键)放开了?ACALL DELAY ;消除抖动N17: AJMP LOOPS ;转至LOOPSSETTIME:CLR P0.5 ;定时模式CLR P0.6SETB P0.7MOV ADR46,#00HMOV A,#READ ;读93C46地址为ADR46中的数据ACALL TO9346LOOPB:ACALL DISP ;调用DISPJB P0.0,N21 ;K1(模式选择键)按了?不是则跳至N21ACALL DELAY ;消除抖动JNB P0.0,$ ;K1(模式选择键)放开了?ACALL DELAY ;消除抖动AJMP LOOP ;转至LOOPN21: JB P0.1,N22 ;K2(定时器组加1键)按了?不是则跳至N22ACALL DELAY ;消除抖动MOV A,ADR46 ;将地址载入ACLR C ;清除进位位RRC A ;A右移1位ADD A,#01H ;地址加1MOV R6,A ;将A存入R6CLR C ;清除进位位RLC A ;A左移1位MOV ADR46,A ;将A中地址存入ADR46MOV A,#READ ;读93C46地址为ADR46中的数据ACALL TO9346JNB P0.1,$ ;K2(定时器组加1键)放开了?ACALLDELAY ;消除抖动N22: JB P0.2,N24 ;K3(定时器分钟加1键)按了?不是则跳至N24ACALLDELAY ;消除抖动MOV A,R4 ;将定时器分寄存器的值载入AADD A,#01 ;A内容加1DA A ;做十进制调整MOV R4,A ;将A的值存入定时器分寄存器CJNE A,#60H,N23 ;是否超过60分?不是则跳至N16MOV R4,#00H ;是则清除分寄存器的值为00N23: JNB P0.2,$ ;K3(定时器分钟加1键)放开了?ACALL DELAY ;消除抖动N24: JB P0.3,N26 ;K4(定时器时钟加1键)按了?不是则跳至N26ACALL DELAY ;消除抖动MOV A,R5 ;将定时器时寄存器的值载入AADD A,#01H ;A内容加1DA A ;做十进制调整MOV R5,A ;将A的值存入定时器时寄存器CJNE A,#24H,N25 ;是否超过24时?不是则跳至N25MOV R5,#00 ;是则清除分寄存器的值为00N25:JNB P0.3,$ ;K4(定时器时钟加1键)放开了?ACALL DELAY ;消除抖动N26:JB P0.4,N27 ;K5(改变定时器状态存储键)按了?不是则跳至N27ACALL DELAY ;消除抖动INC R3 ;改变R3最低位的值(表示定时器的状态,1表示开,0表示关)MOV A,#WRITE ;将A的值写入93C46地址为ADR46中ACALL TO9346JNB P0.4,$ ;K5(改变定时器状态存储键)放开了?ACALL DELAY ;消除抖动N27:AJMP LOOPB ;转至LOOPB3.读写93C46程序:TO9346:SETB CS ;CS=1SETB DI ;DI=1SETB CLK ;CLK=1ACALL DELAYCLR CLK ;CLK=0ACALL DELAYMOV DPTR,#JPTBL46JMP A+DPTR;JPTBL46:AJMPSREAD ;读AJMP SWRITE ;写AJMP SEWEN ;写使能AJMP SEWDS ;写禁止SREAD: MOV A,ADR46 ;地址载入AADD A,#80H ;10XXXX读指令ACALL SDT46 ;读入地址ACALL RDT46 ;读定时器时钟数据MOV R5,A ;存入R5ACALL RDT46 ;读定时器分钟数据MOV R4,A ;存入R4INC ADR46 ;地址加1MOV A,ADR46 ;地址载入AADD A,#80H ;10XXXX读指令ACALL SDT46 ;读入地址ACALL RDT46 ;读定时器状态数据ACALL RDT46DEC ADR46MOV R3,A ;存入R3AJMP EX9346SWRITE:MOVA,ADR46 ;写入地址载入AADD A,#40H ;01XXXX写指令ACALL SDT46 ; 载入地址MOV A,R5 ;载入定时器时钟数据ACALL SDT46 ;写入定时器时钟数据MOV A,R4 ;载入定时器分钟数据ACALL SDT46 ;写入定时器分钟数据INC ADR46 ;地址加1MOV A,ADR46 ;写入地址载入AADD A,#40H ;01XXXX写指令ACALL SDT46 ;载入地址MOV A,R3 ;载入定时器状态数据DEC ADR46 ;地址减1ACALL ADR46 ;写入定时器状态数据AJMP EX9346 ;转至EX9346SEWEN:MOVA,#30H ;0011XXXX写使能指令ACALL SDT46AJMP EX9346SEWDS:CLR A ;0000XXXX写禁止指令ACALL SDT46EX9346:CLRCS ;CS=0RETSDT46:MOV R2,#8 ;写入8位数据SD1: RLC AMOV DI,CSETB CLKACALL DELAYCLR CLKACALL DELAYDJNZ R2,SD1RETRDT46:MOV R2,#8 ;读出8位数据RD1: SETB CLKACALL DELAYCLR CLKACALL DELAYMOV C,DORLC ADJNZ R2,RD1RETDELAY:MOVR7,#0FH ;DJNZ R7,$RET4.中断程序:TIM0:MOV TH0,#THIGH ;重设计时4000微秒MOV TL0,#TLOWPUSH ACC ;将A的值存入堆栈PUSH PSW ;将PSW的值存入堆栈CLR RS0 ;设置工作寄存器为0区DJNZ R2,X2 ;计时1秒MOV R2,#250ACALL CLOCK ;调用计时子程序CLOCKACALL DISP ;调用显示子程序X2:ACALL SCAN ;调用扫描子程序POP PSWPOP ACCRETI显示器驱动程序:SCAN:MOV R0,#28H ;(28H)为扫描指针INC R0 ;扫描指针加1CJNE R0,#6,X3 ;扫描完6个显示器?不是跳至X3MOV R0,#00 ;是则扫描指针为0X3:MOV A,R0 ;扫描指针载入AADD A,#20 ;A加常数20H(显示寄存器地址)=各时间显示区地址;存入R1=各时间显示地址MOV R1,A ;扫描指针存入AMOV A,R0 ;将A高低4位交换(P1高4位为扫描值,SWAP A ;低4位为显示数据值)ORL A,R1 ;扫描值+显示值MOV R1,A ;输出至P1RET计时程序:CLOCK:MOV A,R4 ;R4为秒寄存器ADD A,#01 ;加1DA A ;做十进制调整MOV R4,A ;存入秒寄存器CJNE A,#TIMEN,X4 ;是否超过打零连续时间?不是则跳至X4CLR P2.0 ;关铃X4:CJNE A,#60H,X5 ;是否超过60秒?不是则跳至X5MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 惠州消防知识培训班课件地址
- 情绪世界课件
- 情感升华课件
- 销售管理工作方案
- 恶性心律失常的识别课件
- “绿化环境,播种绿色”植树节活动方案
- 老年趣味运动会活动策划方案
- 孤儿学校初中语文随班就读的工作方案
- 护士理论考试题及答案
- 扬州电动车考试试题及答案
- 【《惠东农商银行个人信贷业务发展现状及存在的问题和策略分析》15000字】
- 光伏项目开发培训课件
- 职业年金政策讲解
- 智联猎头企业薪酬调研白皮书-2025年年中盘点
- 基孔肯雅热、登革热等重点虫媒传染病防控技术试题
- 消防设施操作员(监控方向)中级模拟考试题及答案
- 2025年事业单位教师考试公共基础知识试题(含答案)
- 2025年可靠性工程师MTBF计算强化练习
- 2025秋季学期中小学学校学生校服采购工作方案
- 乳房肿块鉴别诊断
- 普速铁路信号维护规则业务管理
评论
0/150
提交评论