您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机课程设计-电子时钟2968502658
单片机课程设计-----定时闹铃系别:电子通信工程系专业:应用电子技术班级:嵌入式091班姓名:黄文钦学号:2009080202338实训地点:实训时间:2011年1月10日至1月14日单片机实训21.概述1.1系统的作用本系统是利用STC89C52单片机结合6个七段显示器以24时制“时时分分秒秒”格式显示时间的电子定时闹铃,系统可以设置2组定时闹铃;当定时闹铃时,该电子时钟通过蜂鸣器发出嘀嘀嘀嘀响声;本系统还具有整点报时功能,当现在时间为整点报时。还有秒表功能,由于该电子定时闹铃有强大功能可以在多种场合下使用,利用七段显示器发光也可以在夜晚和黑暗场合下使用。1.2系统的功能要求(1)使用6位七段显示器显示24时制时间。(2)时间显示格式为“时时分分秒秒”。(3)定时闹铃功能。(4)整点报时功能:当现在时间为整点时响铃。(5)定时闹铃和现在时间模式可以互相切换而不影响各自功能。(6)具有4个按键来进行功能设置,可以设置当前时间、闹铃的时间设置和秒表开关设置。(7)具有秒表计时功能(8)调时区域闪烁(9)通过复位按键可以重启系统。2.系统的硬件设计2.1系统的电路原理(1)系统以STC89C52单片机为本电路的核心元件,通过单片机的P0.0~P0.7引脚和A102J排阻加上拉电压来驱动七段显示器段显示数字。(2)通过单片机的P2.2~P2.7引脚连接A103J排阻拉升电压信号,控制共阴极七段显示器连通接地来循环点亮6位七段显示器。(3)在七段显示器供电的同时由P0脚驱动显示不同数字。根据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定的数字。(4)系统使用了YXDZ蜂鸣器,通过单片机P3.0引脚连接8550PNP三极管推动发声。(5)电路通过4个按键连接单片机P1.0~P1.3引脚低电平控制系统功能设置。单片机实训3(6)单片机的复位电路,采用传统上电复位,通过Reset按键控制。(7)系统通过一个发光二极管指示电路供电是或正常。2.2电原理图单片机实训4图1控制电路2.3各控制按钮控制功能说明系统接通电源后指示灯LED亮,程序执行后工作,蜂鸣器发出两声响声,七段显示器显示“000000”,表示程序开始执行,然后显示现在时间,按下操作键K1~K4动作如下:(1)按操作键K1,进入“设置现在时间”模式后,操作键功能如下:操作键K1:当前区域加1。操作键K2:当前区域减1。操作键K3:分、时区域切换。操作键K4:设置完成,退出。(2)按操作键K2,进入“显示、设置闹铃时间”模式后,操作键功能如下:操作键K1:当前闹铃区域加1。操作键K2:当前闹铃区域减1。操作键K3:分、时区域切换操作键K4:第一次进入第二组,第二次为退出。(3)按操作键K3:进入“秒表”模式后,操作键功能如下:单片机实训5操作键K1:启动秒表。操作键K2:停止秒表。操作键K3:清零。操作键K4:退出。(4)按操作键K4:在响铃时关闭闹钟自动退出,不是响铃则进入“设置闹铃的开关”模式后,操作键功能如下:操作键K1:启动当前闹铃。操作键K2:停止当前闹铃。操作键K3:切换闹铃组。操作键K4:设置完成,退出。(5)按操作键Reset:复位键,系统重启。3.软件设计3.1资源分配表和程序流程图表一程序内存资源分配表内存地址变量名称作用说明20H存放50毫秒计时21H存放0.5秒计时22HSECON存放1秒计时23HMIN存放1分计时24HHOUR存放1小时计时25H用于中断1(#6H)26H用于显示中的闪烁27H.0闹钟标志位27H.1允许响铃27H.2用于标志分、秒(1为秒),闹钟功能时也一样27H.3闹钟总开关(1为开)27H.4用于闪烁标志单片机实训6表一程序内存资源分配表内存地址变量名称作用说明27H.5用于闪烁27H.6秒表标志27H.7两组闹钟的标志位,默认值为028H-29H用于保存闪烁时的调时区地址30H-35H存放调时区地址36HDISP用于存放要显示的首字(例如秒)37H-39H第一组闹钟的时分40HSP栈底50H-52H秒表53H-55H第二组闹钟的时分56H存放闹钟调分地址57H存放闹钟调时地址2AH.0闹钟组的切换标志(默认值为0)2AH.1切换(默认值为0)2AH.2闹钟第二组开关(默认值为0)表二芯片端口资源分配表芯片端口变量名称作用说明P1.0K1操作键K1P1.1K2操作键K2P1.2K3操作键K3P1.3K4操作键K4P1.7SPK压电喇叭控制信号P0七段显示器数数字形状控制单片机实训7表二芯片端口资源分配表芯片端口变量名称作用说明P2.2控制时间小时的十位七段显示器亮灭P2.3控制时间小时的个位七段显示器亮灭P2.4控制时间分钟的十位七段显示器亮灭P2.5控制时间分钟的个位七段显示器亮灭P2.6控制时间秒钟的十位七段显示器亮灭P2.7控制时间秒钟的个位七段显示器亮灭P3.0BELL蜂鸣器P3.1LED半秒闪烁P3.2LED显示第一组闹钟是否开启P3.3LED显示第二组闹钟是否开启表三寄存器资源分配表组寄存器作用说明第0组R0存放秒显示地址R1显示首址R2#06HR3#0FEHR4#3HR6、R7延时初始值第1组R0用于keyB、CR5用于中断单片机实训8图2主程序控制流程图开始初始化变量启动定时器T0扫描显示器更新时间,是否按K1键?YN是否按K2键?是否按K3键?是否按K4键?NN①进入“设置现在时间”模式②进入“显示、设置闹铃时间”模式Y③进入“秒表”模式④进入“设置闹铃的开关”模式YYN初始化定时器单片机实训9YYNN①设置现在时间更新时间显示KEY1KEY4KEY2KEY3当前区加1当前区减1调时区切换退出YYN单片机实训10YYNN②显示设置闹铃时间转换闹铃模式KEY1KEY4KEY2KEY3当前区加1当前区减1时分切换退出YYN更新显示第一次切换二组闹铃单片机实训11YYYNN③秒表秒表显示KEY1KEY4KEY2KEY3启动关闭清零退出YN单片机实训12YYYNN④秒表关闭响铃闹钟正在响KEY4KEY2KEY3开当前闹铃关当前闹铃闹铃组切换退出YNKEY1显示单片机实训13将累加器出栈计时中断程序结束计时中断程序开始累加器入栈重新载入计数初值、定时器计数10次21H加1半秒指示灯闪标志位秒变量=60秒变量加1N0NY1YYYYNN响铃检查闹铃开、关次数到21H=2清标志位YYYN秒=0分加1分变量=60分=0时加1时变量=24整点报时YY时变量变0检测闹铃N置标志位中断程序T0单片机实训14标志位中断程序1开始用以闪烁、秒表重装初始值10取反闪烁标志6次01中断返回重装初始值毫秒=100010毫秒单元加1秒变量加1毫秒变量=0分变量加1秒变量=0分变量=0中断返回秒=60分=60000111中断程序T1单片机实训153.2源程序清单本系统程序清单如下:;---------------------------------------------------------------;8052CLOCKWITHSEGX6CLOCK+2ALARM+TIMER+SW;时钟+2闹钟+响铃+秒表;89C52ASMUSE:Keil;----------------------------------------------程序功能说明---;--K1:设置现在时间;--K1:当前单元加1;--K2:当前单元减1;--K3:切换单元区;--K4:OK;--K2:显示和设置闹铃时间,2个闹铃;--K1:当前单元加1;--K2:当前单元减1;--K3:切换单元区;--K4:切换闹铃组,第二次为OK;--K3:设置秒表;--K1:秒表启动;--K2:秒表暂停;--K2:秒表清零;--K4:OK;--K4:设置闹铃开关(当真正闹铃时停掉闹钟并退出);--K1:当前闹铃组开;--K2:当前闹铃组关;--K3:切换闹组;--K4:OK;---------------------------------------------------------------KEY1EQUP1.0;调时间调分再调时KEY2EQUP1.1单片机实训16KEY3EQUP1.2KEY4EQUP1.3SECONEQU22H;时钟的秒MINEQU23HHOUREQU24HDISPEQU36H;显示的首地址存放BELLBITP3.0ORG0000HLJMPSTARTORG000BHLJMPT0_INTORG001BHLJMPT1_INTORG0100HSTART:MOV20H,#00HMOV21H,#00H;0.5秒计时MOV22H,#00H;1秒计时MOV23H,#00H;1分计时MOV24H,#00H;1h计时MOV38H,#01H;闹钟分MOV39H,#00H;闹钟时MOV37H,#101;第一组闹钟的首字节显示-1MOV53H,#102;第二组闹铃的首字节显示”-2“MOV25H,#6H;中断1,50ms*6=0.3s闪烁一次MOVTMOD,#11HMOVTL1,#0B0HMOVTH1,#3CHMOVTL0,#0B0HMOVTH0,#3CHSETBET0SETBET1SETBEASETBTR0MOVSP,#40H;*********主程序*********MAIN:MOVDISP,#SECONLCALLDISPLAYLCALLKEYALCALLKEYBLCALLKEYCLCALLKEYDSJMPMAIN/*数码管显示*/单片机实训17DISPLAY:PUSHPSWMOVPSW,#08H;用第二组寄存器MOVR0,DISPMOVR1,#30HMOVR4,#03H;秒分时LOOP0:MOVA,@R0MOVB,#10DIVABMOV@R1,BINCR1MOV@R1,AINCR0INCR1DJNZR4,LOOP0DISKEY:MOVR1,#30H;显示缓冲区首址MOVR2,#06HMOVR3,#0FEHCLR27H.5MOV29H,28HPLAY:MOVA,@R1MOVDPTR,#TABLEMOVCA,@A+DPTR;***********闪烁用JNB27H.4,WEN;在调时时用作熄灭,1为开MOV26H,AMOVA,R1CJNEA,29H,WEN1JB27H.5,LPPC1INC29HSETB27H.5LPPC1:CLRASJMPWENWEN1:MOVA,26H;***********WEN:MOVP0,AMOVP2,R3INCR1LCALLDELAYMOVA,R3RLAMOVR3,ADJNZR2,PLAYPOPPSW单片机实训18RETDELAY:MOVR6,#4D1:MOVR7,#250D0:DJNZR7,D0DJNZR6,D1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H/*中断T0处理*/T0_INT:MOVTL0,#0B0HMOVTH0,#3CHPUSHACCINC20HMOVA,20HCJNEA,#10,EXITJNB27H.3,LQQ1SJMPLQQ2LQQ1:JNB2AH.2,LP0LQQ2:JNB27H.1,LP0;闹铃检查1响CPLBELLDJNZR5,LP0;响铃次数SETBBELLCLR27H.1LP0:MOV20H,#00HCPLP3.1;半秒led闪烁INC21HMOVA,21HCJNEA,#2,EXITSETBBELL;关闭整点报时MOV21H,#00HINCSECONMOVA,SECONCJNEA,#60,EXITSETB27H.0;闹钟检查标志MOVSECON,#00HINCMINMOVA,MINCJNEA,#60,EXITCPLBELL;整点报时启动MOVMIN,#00HINCHOURMOVA,HOURCJNEA,#24,EXITMOVHOUR,#00H单片机实训19EXIT:JNB27H.3,EXITQ;闹铃1组开关1为开JNB27H.0,EXITQ;闹钟检查MOVA,MINCJ
本文标题:单片机课程设计-电子时钟2968502658
链接地址:https://www.777doc.com/doc-68349 .html