基于单片机控制的电铃控制器.doc
基于单片机控制的电铃控制器一 设计要求(一)基本功能1. 显示: 可以显示 星期、时、分和秒2. 打铃:每天可设置20次,打铃持续时间每次1-90秒可调,每次打铃的间隔时间1-99 分钟可调.3. 铃声: 置蜂鸣器可以发出监控声音 (二)性能: 时间日误差< 1.5秒(三)扩展功能:1可设定单/双休息日不打铃2随季节变化,每天自动调整开与关的时间目录1引言12总体设计方案12.1设计思路12.2总体设计框图12.3设计方案13设计原理分析23.1按键功能23.2状态指示23.3打铃控制23.4电路原理图24程序流程框图34.1总体程序流程图34.2主程序流程图34.3校时程序流程图44.4时钟打铃程序流程图45心得与体会5参考文献5附录615 / 17基于单片机控制的电铃控制器摘要:该设计介绍了一种以AT89c51单片机为核心,以七段数码管显示星期、时、分和秒,发光二极管作为指示灯标志与按键较时、定时的自动打铃器。关键词:单片机 电铃 自动 数码管 1引言基于目前传统电铃噪音大,声音刺耳,不符合人们追求绿色环保的要求,我们采用89c51单片机设计了一套自动打铃系统。单片机(SingleChip Microcomputer SCM)技术的应用,不但降低了生产成本,同时也方便了消费者,使操作简洁、安全。单片机的应用使许多复杂的事情,都能够简单、方便的实现了。用单片机控制的自动打铃器,充分发挥单片机体积小,价格便宜,功耗低,可靠性好等特点,充分发挥了单片机的控制优势。本打铃器可用于作息时间控制,方便了广大师生。2总体设计方案:2.1设计思路利用单片机与其定时器设计的一个时钟,在每次毫秒加1的计时过程中,都与设定的打铃时间作比较,如果相等就输出打铃信号,不等则返回。如此反复运行。2.2总体设计框图图1 总体设计框图2.3设计方案根据设计任务的基本要求,设计了由单片机(AT89S51)作为主控器件,七段数码管作为显示电路,七个按键组成的按键操作电路,七个发光二极管组成的状态指示电路,以与三极管、蜂鸣器组成的报警提示电路和继电器组成的打铃信号输出电路构成的自动打铃器。除了以上的硬件电路外,还充分利用软件、硬件相结合,充分发挥单片机设计的优势。使设计更具特色。系统可分成三部分,即时钟电路、时间显示电路、控制电路,而时钟电路起控制主导作用。时钟电路的构成由单片机与其定时器完成,时间显示电路则由单片机串口输出,送到外部集成芯片74LS164,最后由七段数码管显示出来。控制电路主要控制着复位电路、校时以与设置打铃点等操作,并配以状态指示电路辅助操作。3设计原理分析:3.1按键功能初步设计了由六个按键来完成所有的操作,它们的功能分别是:复位键、设置键、存储键、加一键、减一键、确认键,具体操作方法由软件设计为菜单式操作,使所有的操作更加的简洁,方便。3.2状态指示状态指示电路由硬件部分(六个发光二极管),结合软件使操作状态一目了然。第一个发光二极管亮时候,表明当前状态为时间显示;第二个发光二极管亮时候,表明此状态为时间调整状态;第三个发光二极管亮时候,表明此状态为时间加一状态;第四个发光二极管亮时候,表明此状态为时间减一状态;第五个发光二极管亮时候,表明此状态为定时时间设定存储状态。3.3打铃控制比较所存储的打零时间点,到打铃时间时进行打铃。3.4电路原理图图2 总体电路图图2中,S1为确认键,S2为设置键,S3为加一键,S4为减一键,S5为存储键,S7为复位键。当S2按下时L2亮,S3按下时L3亮,S4按下时L4亮,S5按下时L5亮。L1为正常运行指示。S5,L6暂无使用。蜂鸣器在每个操作时给予报警提示。继电器电路作为打铃信号输出电路,对外提供打铃信号。4程序流程框图4.1总体程序流程图根据硬件设计结果,为满足要求,程序应有主程序、按键处理程序、中断服务程序和显示程序等部分构成。主程序中主要是程序各部分的初始化;按键处理程序处理五个按键的操作,包括各个按键的响应程序以与按键指示、闪烁指示、报警输出等;显示程序显示星期、时、分、秒,主要是时钟显示。图3 总体程序流程图4.2主程序流程图该部分程序主要是对程序中所用到的数据单元进行初始化,以与定时器的赋初值。图4 主程序流程图4.3校时程序流程图该部分的键盘扫描为程序扫描方式,CPU不停的对P1口进行扫描,当任何一个键按下时,与之相连的输入数据线即被清0(低电平),而平时该线为1(高电平)。这种键盘扫描方式的优点是电路简单:缺点是当键数较多时,要占用较多的I/O线。由于按键的机械特性,在闭合与断开的瞬间均伴随有一连串的抖动,键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。该程序使用10ms延时程序作为去抖动程序去除键抖动。图5 校时程序流程图4.4时钟打铃程序流程图时钟打铃程序使用单片机T0、T1两个定时器中断,两个定时器均为方式一,初值为10ms,当定时器T0溢出时响应中断,使毫秒单元加1,当毫秒单元满100时分单元加1,依此类推。当定时器T1溢出时响应中断,依次比较存储的打铃点,条件符合就输出打铃信号。中断均需保护现场,返回时恢复现场。图6 时钟打铃中断程序流程图5心得与体会:周一老师布置了课程设计的任务,老师没有像其他小组一样好几个人做一个题目,而是让我们小组每人做一个题目,这给了我们足够的 空间,我们可以按照自己的想法去做,做自己感兴趣的东西。我几经周折最终选择做一个单片机控制的电铃,电铃可以按照我在程序中设定的时间自动打铃。开始就是上网查资料,去图书馆找有关方面的书籍,东拼西凑。周三才把程序和电路图做好。在上机调试的时候遇到了很大的麻烦,程序运行没有错误,就是连接电路时发现我用到的芯片实验台上都没有,我又找其他芯片代替,可没有找到合适,以至于调试不成功。 总之在这一周的课程设计中,我学到了很多课堂上学不到的东西,也深刻的体验到了实践的重要性。只学习理论而不实践,那理论就是一具空壳。只有实践才能检验自己所学的理论知识。实践的好处就在于能帮助你去更好地理解理论知识,平时课堂上不理解的东西,在实践的过程中就能很好的理解。虽然这次课程设计上机调试没有成功,但是我自己毕竟努力做了。参考文献:1周航慈.单片机应用程序设计基础M.:电子工业,1997年7月2朱承高.电工与电子技术手册M.:高等教育,19903阎石.数字电子技术基础(第三版)M.:高等教育,19894廖常初.现场总线概述J.电工技术,1999.65 朝青.单片机原理与接口技术(第三版)M.;航空航天大学,2005年10月附录1程序分为五部分:1.初始化程序,2.键值处理程序,3.中断程序,4.显示程序,5.延时程序2程序清单: ORG 0000HLJMP MAIN ORG 000BHLJMP TOINTORG 001BHLJMP DLBJ;*主程序*ORG 30HMAIN: MOV IE,#8AH ;开T0,T1中断 MOV TMOD,#11H ;定时器方式1MOV TH0,#0D8H MOV TL0,#0F0H ;初值MOV A,#0MOV 59H,AMOV 60H,A MOV 61H,A MOV 62H,A MOV 63H,AMOV 64H,AMOV 65H,A MOV 66H,A;清零 m_sec EQU 20H ;毫秒单元 sec EQU 21H ;秒单元 min EQU 22H ;分单元 hour EQU 23H ;时单元 week EQU 24H ;星期单元SETB TR0SETB TR1CLR P1.0CLR AMOV R0,AMOV R1,AMOV R2,AMOV R3,AMOV R5,AMOV R6,AMOV R7,A MOV ms ,#00 ;毫秒单元清零 MOV sec ,#00 ;秒单元清零 MOV min ,#00 ;分单元清零 MOV hour ,#00 ;时单元清零 MOV week ,#00 ;星期单元清零MOV 70H,AMOV 71H,AMOV 72H,AMOV 73H,AMOV 74H,A LCALL XS ;调用显示程序;*;*数字钟按键程序*;*;*调时钟按键*NET1: P0.0,NET2LCALL YS10MS P0.0,NET2 CLR p2.2 JNB P0.0,$ SETB p2.2 CLR P1.1 SETB P1.0 SETB TR0 ;开中断 SETB TR1 CLR P1.0 ;正常运行 SETB P1.1 SETB P1.2 SETB P1.3 MOV 59H,#00 MOV R7,#00* *调整时间部分切换键*NET2:MOV A ,59HCJNE A ,#00 ,NET3 P0.1 ,NET9 ;数字钟调整时间部分切换键LCALL YS10Ms P0.1 ,NET9 CLR p2.2INC 59HJNB P0.1 ,$SETB p2.2INC R7 CLR TR0CLR TR1SJMP NET4NET3: P0.1 ,NET4 LCALL YS10ms P0.1 ,NET4 CLR p2.2 INC 59H JNB P0.1 ,$ SETB p2.2 INC R7NET4: CJNE R7 ,#1 ,NET5 LCALL SSH ;秒闪烁 SJMP NET9NET5: CJNE R7 ,#2 ,NET6 LCALL MSH ;分闪烁 SJMP NET9NET6: CJNE R7 ,#3 ,NET7 LCALL HSH ;时闪烁 SJMP NET9NET7: MOV R7 ,#0 LCALL WSH ;星期闪烁 SJMP NET9NET8: LCALL XS ;*调整时间加1键*NET9: P0.2 ,NET115 ;数字钟调整时间键 LCALL YS10msP0.2 ,NET13 CLR p2.2 CLR P1.2 CJNE R7 ,#1 ,NET10 SETB p2.2 SETB P1.3 LCALL YS200ms INC sec ;秒单元加1 MOV A ,sec CJNE A ,#60 ,NET8 ;不等60时跳转显示,等60时将秒单元清零 MOV sec ,#00 LCALL XSP0.2 ,NET13 LJMP NET9NET115: LJMP NET15NET10: CJNE R7 ,#2 ,NET11 SETB p2.2 SETB P1.3 LCALL YS200ms INC min ;分单元加1 MOV A ,min CJNE A ,#60 ,NET8 ;不等60时跳转显示,等60时将分单元清零 MOV min ,#00 LCALL XSP0.2 ,NET13 LJMP NET9NET11: CJNE R7 ,#3 ,NET12 SETB p2.2 SETB P1.3 LCALL YS200ms INC hour ;时单元加1 MOV A ,hour CJNE A ,#24 ,NET8 ;不等24时跳转显示,等24时将时单元清零 MOV hour ,#00 LCALL XS P0.2 ,NET13 LJMP NET9NET12: SETB p2.2 SETB P1.3 LCALL YS200ms INC week ;星期单元加1 MOV A ,week CJNE A ,#08 ,NET8 ;不等7时跳转显示,等7时将星期单元清零 MOV week ,#01 LCALL XS JNB P0.2 ,NET13 LJMP NET9NET13: SJMP NET15 NET14: LCALL XS*调整时间减1键*NET15: P0.3 ,NET19 ;数字钟调整时间键 LCALL YS10msP0.3 ,NET19 CLR P2.2 CLR P1.3 CJNE R7 ,#1 ,NET16 SETB P2.2 SETB P1.2 LCALL YS200ms DEC sec ;秒单元减1 MOV A ,sec CJNE A ,#0FFH ,NET14 ;不等60时跳转显示,等60时将秒单元清零 MOV sec ,#59 LCALL NET14 P0.3 ,NET19 LJMP NET15NET16: CJNE R7 ,#2 ,NET17 SETB P2.2 SETB P1.2 LCALL YS200ms DEC min ;分单元减1 MOV A ,min CJNE A ,#0FFH ,NET14 ;不等60时跳转显示,等60时将分单元清零 MOV min ,#59 LCALL NET14P0.3 ,NET19 LJMP NET15NET17: CJNE R7 ,#3 ,NET18 SETB P2.2 SETB P1.2 LCALL YS200ms DEC hour ;时单元减1 MOV A ,hour CJNE A ,#0FFH ,NET14 ;不等24时跳转显示,等24时将时单元清零 MOV hour ,#23 LCALL NET14P0.3 ,NET19 LJMP NET15NET18: SETB P2.2 SETB P1.2 LCALL YS200ms DEC week ;星期单元减1 MOV A ,week CJNE A ,#00 ,NET14 ;不等7时跳转显示,等7时将星期单元清1 MOV week ,#07 LCALL NET14 P0.3 ,NET19 LJMP NET15NET19: LJMP DSH*定时程序*DSH: MOV R2,#00 P0.4 ,NT11 LCALL YS10ms P0.4 ,NT11 CLR P2.2 CLR P1.4 JNB P0.4,$ SETB P2.2 INC R2 CJNE R2,#01,NTA ;第1个打铃点 MOV R1,#30H LCALL CUNNT11: LJMP NT1NTA: CJNE R2,#02,NTB ;第2个打铃点 LCALL CUNNTB: CJNE R2,#03,NTC ;第3个打铃点 LCALL CUNNTC: CJNE R2,#04,NTD ;第4个打铃点 LCALL CUNNTD: CJNE R2,#05,NTE ;第5个打铃点 LCALL CUNNTE: CJNE R2,#06,NTF ;第6个打铃点 LCALL CUNNTF: CJNE R2,#07,NTG ;第7个打铃点 LCALL CUNNTG: CJNE R2,#08,NTH ;第8个打铃点 LCALL CUNNTH: CJNE R2,#09,NTI ;第9个打铃点 LCALL CUNNTI: CJNE R2,#10,NTJ ;第10个打铃点 LCALL CUNNTJ: CJNE R2,#11,NTK ;第11个打铃点 LCALL CUNNTK: CJNE R2,#12,NTL ;第12个打铃点 LCALL CUNNTL: CJNE R2,#13,NTM ;第13个打铃点 LCALL CUNNTM: CJNE R2,#14,NTN ;第14个打铃点 LCALL CUNNTN: CJNE R2,#15,NTO ;第15个打铃点 LCALL CUNNTO: CJNE R2,#16,NTP ;第16个打铃点 LCALL CUNNTP: CJNE R2,#17,NTQ ;第17个打铃点 LCALL CUNNTQ: CJNE R2,#18,NTR ;第18个打铃点 LCALL CUNNTR: CJNE R2,#19,NTS ;第19个打铃点 LCALL CUNNTS: CJNE R2,#20,NT1 ;第20个打铃点 LCALL CUNNT1: LJMP NET1;*打铃点存储子程序*CUN: MOV R1,hour INC R1 MOV R1,min INC R1;*时钟中断程序*TOINT: PUSH PSW PUSH ACC ;保护现场 MOV TH0 ,#0D8H MOV TL0 ,#0F0H ;重新赋计数初值 INC ms ;毫秒单元加1 MOV A ,ms CJNE A ,#100 ,NEXT1 MOV ms,#00 INC sec ;秒单元加1 MOV A ,sec CJNE A ,#60 ,NEXT1 MOV sec ,#00 INC min ; MOV A ,min CJNE A ,#60 ,NEXT1 MOV min ,#00 INC hour ; MOV A ,hour CJNE A ,#24 ,NEXT1 MOV hour ,#00 INC week MOV A ,week CJNE A ,#08 ,NEXT1 MOV week ,#01NEXT1: LCALL XS POP ACC POP PSW ;恢复现场 RETI ;中断返回;*打铃中断程序*DLBJ:PUSH PSW PUSH ACC MOV TH0,#0D8H MOV TL0,#0F0H MOV R0,#30HFH: MOV A,R0 CJNE A,hour,LOP1 INC R0 MOV A,R0 CJNE A,min,LOP2 CLR P2.2 CLR P1.4 ;铃声响 LCALL YS1min ;延时1分钟 SETB P2.2 SETB P1.4 ;铃声停 CLR AMOV 7FH,AAJMP LOP2LOP1: INC R0LOP2: INC R0CJNE R0,#58H,FHLOP3: LCALL XSPOP PSWPOP ACC RETI;*数字钟显示程序*XS: MOV A ,sec ;将秒送A MOV B ,#10 DIV AB MOV 60H ,B ;秒的个位 MOV 61H ,A ;秒的十位 MOV A ,min ;将分送A MOV B ,#10 DIV AB MOV 62H ,B ;分的个位 MOV 63H ,A ;分的十位 MOV A ,hour ;将时送A MOV B ,#10 DIV AB MOV 64H ,B ;时的个位 MOV 65H ,A ;时的十位 MOV A ,week ;星期的送A MOV B ,#10 DIV AB MOV 66H ,B ;星期的个位LCP: MOV R1 ,#60H MOV R5 ,#7 MOV DPTR ,#TABBK: MOV A ,R1 MOVC A ,A+DPTR MOV SBUF ,A JNB TI ,$ CLR TI INC R1 DJNZ R5 ,BK RETTAB: DB 11H,0D7H,32H,92H ,0D4H,98H,18H,0D3H,10H,90H;*延时10ms子程序*YS10ms: MOV R2 ,#10HTS1: MOV R3 ,#0FFHTS2: DJNZ R3 ,TS2 DJNZ R2 ,TS1 RET;*延时1分钟子程序*YS1min: MOV 70H ,#100DL6: MOV 71H ,#10HDL5: MOV 72H ,#0FFHDL4: DJNZ 72H ,DL4 DJNZ 71H ,DL5DJNZ 70H ,DL6 RET;*延时200ms子程序*YS200ms:MOV R3 ,#20DL3: MOV R4 ,#10HDL2: MOV R5 ,#0FFHDL1: DJNZ R5 ,DL1 DJNZ R4 ,DL2 DJNZ R3 ,DL3 RET;*秒显示闪烁子程序*SSH: LCALL XSLCALL YS200msMOV A ,#0FFH MOV B ,#0FFH MOV 60H ,B MOV 61H ,A LCALL LCP LCALL YS200ms RET;*分显示闪烁子程序*MSH: LCALL XSLCALL YS200ms MOV A ,#0FFHMOV B ,#0FFH MOV 62H ,B MOV 63H ,A LCALL LCP LCALL YS200ms RET;*时显示闪烁子程序*HSH: LCALL XS LCALL YS200ms MOV A ,#0FFH MOV B ,#0FFH MOV 64H ,B MOV 65H ,A LCALL LCP LCALL YS200ms RET;*星期显示闪烁子程序*WSH: LCALL XS LCALL YS200ms MOV A ,#0FFH MOV B ,#0FFH MOV 66H ,B LCALL LCP LCALL YS200ms RET END;*打铃点存储子程序*CUN: MOV R1,#30H MOV R1,hour INC R1 MOV R1,min INC R1