《基于单片机控制的电铃控制器.doc》由会员分享,可在线阅读,更多相关《基于单片机控制的电铃控制器.doc(18页珍藏版)》请在三一办公上搜索。
1、基于单片机控制的电铃控制器班级:应教042班 姓名:李瑞奇摘要 该设计介绍了一种以AT89S51单片机为核心,并带有片外扩展AT24C02为存储器。以七段数码管显示星期、时、分和秒。发光二极管作为指示灯标志和按键较时、定时自动打铃器。关键词 单片机 存储器 数码管 1引言随着科学技术的发展,自动控制在人们的生活中可以说是“无孔不入”小到遥控儿童玩具,大到冰箱空调的智能化,这都归结于科学技术的进步。特别是单片机(SingleChip Microcomputer SCM)技术的应用,不但降低了生产成本,而且更为重要的是方便了消费者,使操作简洁、安全。单片机的应用让许多很复杂的事情,都轻而易举的实现
2、了。用单片机控制的自动打铃器,充分发挥单片机体积小,价格便宜,功耗低,可靠性好等特点。可用于学校作息,方便了广大师生。2总体设计方案2.1设计思路 利用单片机及定时器设计的一个时钟,在每次秒加1的计时过程中,都与规定的时间作比较,如果相等就进行开关电铃,不等则返回。2.2总体设计框图AT89S51打铃器键盘电路复位电路数码管显示状态指示片外存储器图1 总体设计框图2.3设计方案 根据设计任务和其基本要求,针对当前一般打铃仪的操作繁琐,复杂,使用起来不太方便,设计了由单片机(AT89S51)作为主控器件,七位数码管作为显示电路,七个按键组成的按键操作电路,七个发光二极管组成的状态指示电路,掉电存
3、储电路和5V电源电路构成的自动打铃器。除了以上的硬件电路外,还充分利用软件、硬件相结合,充分发挥单片机设计的优势。使设计更具特色。系统可分成三部分,即时钟电路、时间显示电路、控制电路,而时钟电路起控制主导作用。时钟电路的构成由单片机及其定时器完成,时间显示电路则由单片机串口输出,送到外部集成芯片74LS164进行译码,最后由数码管显示出来。控制电路:这部分电路非常重要,它控制着RAM的复位操作、定时设置、时序控制、校时电路控制;由启动电路、延时控制等单元电路组成。其它辅助电路:因为RAM掉电后数据将会全部丢失,所以可加入掉电保护电路,来保存以设置好的定时信号,这样可以增加系统的可靠性。由AT2
4、4C02来完成。3设计原理分析3.1按键功能初步设计了由六个按键来完成所有的操作,它们的功能分别是:复位键、功能键、校时定时键、加一键、减一键、确定键,具体操作方法由软件设计为菜单式操作,使所有的操作更加的简洁,方便。使本打铃控制器更具有现代化。3.2状态指示状态指示电路由硬件部分(六个发光二极管),结合软件使操作状态一目了然。第一个发光二极管亮时候,表明当前状态为时间显示;第二个发光二极管亮时候,表明此状态为时间调整状态;第三个发光二极管亮时候,表明此状态为时间加一状态;第四个发光二极管亮时候,表明此状态为时间减一状态;第五个发光二极管亮时候,表明此状态为定时时间设定存储状态。3.3打铃控制
5、比较所存储的打零时间点,到打铃时间时进行打铃。3.4存储器介绍AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256 x 8存储空间,具有工作电压宽(2.5V-5.5V),擦写次数多(大于10000次),读写速度快(小于10ms)等特点。 AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在AT89C51试验开发板上它们都接地,第8脚和第4分别为正、负电源。第5脚SDA为串行输入输出,数据通过这条双向I2C总线串行传送。第6脚SCL为串行时钟输入线。SDA和SCL都需要和正电源间各接一个5.1K的上拉电阻。第7脚需要接地。 24C02中带有片内地址寄
6、存器。每写入或读出一个数据字节后,该地址寄存器自动加一,以实现对下一个存储单元的读写。所有的字节均以单一的方式进行读取。为降低总的写入时间,一次可写入多大8个字节的数据。3.5电路原理图(1)电源和继电器图2 电源电路图 图3 继电器电路图(2)主电路图4 主电路图4程序流程框图4.1总体程序流程图初始化主程序按键程处序理中断程服序务显示程序图5 总体程序流程图4.2主程序流程图比较打铃程序计时程序中断返回定时器溢出中断显 示校 时图6 主程序流程图4.3校时程序流程图YN减一?加一?NYN定时校时部分功能键星期调整小时调整分钟调整秒调整调用闪烁子程序调用显示子程序退出?.YN确定?Y保存设置
7、图7 校时程序流程图秒单元清0,分加14.4时钟打铃程序N分钟相等?YNYYNT0中断保护现场1s到?=60s?秒单元加1N中断保护现场比较小时小时相等?比较分钟秒单元清0,分加1 =7day?图9 打铃中断程序流程图YYYN=60min?分单元清0,时加1=24h?时单元清0,星期单元加1NN打铃Y恢复现场,中断返回星期单元清1图8 时钟中断程序流程图5心得与体会经过将近三周的单片机实习,在指导老师和同学的帮助下,我确实学到了不少平时在课堂上所学不到的知识。这样的实习不论是对我们的理论知识还是实践能力都有很大的帮助,经过这些实习可以使我们能更快更准确的掌握专业方面的理论知识。我们这次的设计是
8、基于单片机控制的自动打铃器,虽然说我们已经学习过单片机课程,但是对于单片机这个词还是有些陌生。并不是太清楚单片机的功能和性能方面的知识,为了使自己设计的题目更加合理,我可以说是在图书馆查阅了很多有关单片机和自动打铃器方面的知识,也对别人设计的相关题目进行了参考和分析。刚开始的时候看到这些电路觉得这些电路都不错,都挺符合自己所设计的要求,经过自己仔细分析和同学探讨,得到的结论是,虽然说资料上的驱动电路在理论分析上是行的通的,如果把它拿到实际的电路中,可以看到它并不一定能起到我们所要达到的目的。我感觉这次实习我们得到更多的是,对办任何事情我们都要先经过认真细致的观察和分析,才能确定我们到底该如何去
9、做它,要不然,只会是事倍功半,耽误我们的办事效率。我觉得这个方面的经验是最宝贵的,也是我们在毕业后,进入社会所必须的能力。我们也只有具备了这个基本的能力后,才不至于在以后的生活,学习和工作中误入歧途,对自己和对他人造成不必要的损失。总之,通过这次实习,我真正学到了很多东西,真正体会到了理论联系实际的重要性。我想如果在平时多搞几次这样的实习,那我们的知识会掌握的更多,更牢固。最后,衷心感谢辅导老师的指导和同学的帮助!参考文献1周航慈著.单片机应用程序设计基础.北京:电子工业出版社,1997年7月2朱承高.电工及电子技术手册M.北京:高等教育出版社,19903阎石.数字电子技术基础(第三版). 北
10、京:高等教育出版社,19894廖常初.现场总线概述J.电工技术,1999.65 李广弟编著.单片机应用程序设计基础.北京:北京航空航天大学出版社,1994年6月附录1程序分为五部分1.初始化程序,2.键值处理程序,3.中断程序,4.显示程序,5.延时程序2程序清单 ORG 0000H LJMP MAIN ORG 000BH LJMP TOINT ORG 001BH LJMP DLBJ;*主程序* ORG 30HMAIN:MOV IE,#8AH ;开T0,T1中断 MOV TMOD,#11H ;定时器方式1 MOV TH0,#0D8H MOV TL0,#0F0H ;初值 MOV A,#0 MOV
11、 59H,A MOV 60H,A MOV 61H,A MOV 62H,A MOV 63H,A MOV 64H,A MOV 65H,A MOV 66H,A;清零 m_sec EQU 20H ;毫秒单元 sec EQU 21H ;秒单元 min EQU 22H ;分单元 hour EQU 23H ;时单元 week EQU 24H ;星期单元 SETB TR0 SETB TR1 CLR P1.0 CLR A MOV R0,A MOV R1,A MOV R2,A MOV R3,A MOV R5,A MOV R6,A MOV R7,A MOV m_sec ,#00 ;毫秒单元清零 MOV sec ,#
12、00 ;秒单元清零 MOV min ,#00 ;分单元清零 MOV hour ,#00 ;时单元清零 MOV week ,#00 ;星期单元清零 MOV 70H,A MOV 71H,A MOV 72H,A MOV 73H,A MOV 74H,A LCALL xs ;调用显示程序;*;*数字钟按键程序*;*;*调时钟按键*NET1:JB P0.0,NET2 LCALL YS10MS JB 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.
13、1 SETB P1.2 SETB P1.3 MOV 59H,#00 MOV R7,#00;*调整时间部分切换键*NET2:MOV A ,59H CJNE A ,#00 ,NET3 JB P0.1 ,NET9 ;数字钟调整时间部分切换键 LCALL YS10Ms JB P0.1 ,NET9 CLR p2.2 INC 59H JNB P0.1 ,$ SETB p2.2 INC R7 CLR TR0 CLR TR1 SJMP NET4NET3: JB P0.1 ,NET4 LCALL YS10ms JB P0.1 ,NET4 CLR p2.2 INC 59H JNB P0.1 ,$ SETB p2.
14、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: JB P0.2 ,NET115 ;数字钟调整时间键 LCALL YS10ms JB P0.2 ,NET13 CLR p2.2 CLR P1.2 CJN
15、E 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 XS JB P0.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时将
16、分单元清零 MOV min ,#00 LCALL XS JB P0.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 JB P0.2 ,NET13 LJMP NET9NET12: SETB p2.2 SETB P1.3 LCALL YS200ms INC week ;星期单元加1 MOV A ,week CJN
17、E A ,#08 ,NET8 ;不等7时跳转显示,等7时将星期单元清零 MOV week ,#01 LCALL XS JNB P0.2 ,NET13 LJMP NET9NET13: SJMP NET15 NET14: LCALL XS;*调整时间减1键*NET15: JB P0.3 ,NET19 ;数字钟调整时间键 LCALL YS10ms JB P0.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 ,N
18、ET14 ;不等60时跳转显示,等60时将秒单元清零 MOV sec ,#59 LCALL NET14 JB 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 NET14 JB P0.3 ,NET19 LJMP NET15NET17: CJNE R7 ,#3 ,NET18 SETB P2.2 SETB P1.
19、2 LCALL YS200ms DEC hour ;时单元减1 MOV A ,hour CJNE A ,#0FFH ,NET14 ;不等24时跳转显示,等24时将时单元清零 MOV hour ,#23 LCALL NET14 JB P0.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 JB P0.3 ,NET19 LJMP NET15N
20、ET19: LJMP DSH;*定时程序*DSH: MOV R2,#00 JB P0.4 ,NT11 LCALL YS10ms JB 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
21、: 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
22、 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 ;第
23、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 m_sec ;毫秒单元加1 MOV A ,m_sec CJNE A ,#100 ,NEXT1 MOV m_sec ,#00 INC sec ;秒单元加1 MOV A ,sec CJNE A ,#60 ,NEXT1 MOV sec ,#00 INC min ; MOV A
24、 ,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
25、R0 MOV A,R0 CJNE A,min,LOP2 CLR P2.2 CLR P1.4 ;铃声响 LCALL YS1min ;延时1分钟 SETB P2.2 SETB P1.4 ;铃声停 CLR A MOV 7FH,A AJMP LOP2LOP1: INC R0LOP2: INC R0 CJNE R0,#58H,FHLOP3: LCALL XS POP PSW POP ACC RETI;*数字钟显示程序*XS: MOV A ,sec ;将秒送A MOV B ,#10 DIV AB MOV 60H ,B ;秒的个位 MOV 61H ,A ;秒的十位 MOV A ,min ;将分送A MOV
26、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:
27、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 ,DL5 DJNZ 70H ,DL6 RET;*延时200ms子程序*YS200ms:MOV R3 ,#20DL3: MOV R4 ,#10HDL
28、2: MOV R5 ,#0FFHDL1: DJNZ R5 ,DL1 DJNZ R4 ,DL2 DJNZ R3 ,DL3 RET;*秒显示闪烁子程序*SSH: LCALL XS LCALL YS200ms MOV A ,#0FFH MOV B ,#0FFH MOV 60H ,B MOV 61H ,A LCALL LCP LCALL YS200ms RET;*分显示闪烁子程序*MSH: LCALL XS LCALL YS200ms MOV A ,#0FFH MOV 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