《课程设计-电子时钟.doc》由会员分享,可在线阅读,更多相关《课程设计-电子时钟.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机课程设计 -定时闹铃 系别: 电子通信工程系 专业: 应用电子技术 班级: 嵌入式091班 姓名:黄文钦 学号: 38 实训地点: 实训时间:2011年1月10日至1月14日1.概述1.1 系统的作用本系统是利用STC89C52单片机结合6个七段显示器以24时制“时时分分秒秒”格式显示时间的电子定时闹铃,系统可以设置2组定时闹铃;当定时闹铃时,该电子时钟通过蜂鸣器发出嘀嘀嘀嘀响声;本系统还具有整点报时功能,当现在时间为整点报时。还有秒表功能,由于该电子定时闹铃有强大功能可以在多种场合下使用,利用七段显示器发光也可以在夜晚和黑暗场合下使用。1.2 系统的功能要求(1)使用6位七段显示器显示
2、24时制时间。(2)时间显示格式为“时时分分秒秒”。(3)定时闹铃功能。(4)整点报时功能:当现在时间为整点时响铃。(5)定时闹铃和现在时间模式可以互相切换而不影响各自功能。(6)具有4个按键来进行功能设置,可以设置当前时间、闹铃的时间设置和秒表开关设置。(7)具有秒表计时功能(8)调时区域闪烁(9)通过复位按键可以重启系统。2.系统的硬件设计2.1系统的电路原理(1)系统以STC89C52单片机为本电路的核心元件,通过单片机的P0.0P0.7引脚和A102J排阻加上拉电压来驱动七段显示器段显示数字。(2)通过单片机的P2.2P2.7引脚连接A103J排阻拉升电压信号,控制共阴极七段显示器连通
3、接地来循环点亮6位七段显示器。(3)在七段显示器供电的同时由P0脚驱动显示不同数字。根据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定的数字。(4)系统使用了YXDZ蜂鸣器,通过单片机P3.0引脚连接8550PNP三极管推动发声。(5)电路通过4个按键连接单片机P1.0P1.3引脚低电平控制系统功能设置。(6)单片机的复位电路,采用传统上电复位,通过Reset按键控制。(7)系统通过一个发光二极管指示电路供电是或正常。2.2 电原理图图1 控制电路2.3 各控制按钮控制功能说明系统接通电源后指示灯LED亮,程序执行后工作,蜂鸣器发出两声响声,七段显示器显示“00 00 00”,表示程
4、序开始执行,然后显示现在时间,按下操作键K1K4动作如下:(1)按操作键K1,进入“设置现在时间”模式后,操作键功能如下: 操作键K1:当前区域加1。 操作键K2:当前区域减1。 操作键K3:分、时区域切换。 操作键K4:设置完成,退出。(2)按操作键K2,进入“显示、设置闹铃时间”模式后,操作键功能如下: 操作键K1:当前闹铃区域加1。 操作键K2:当前闹铃区域减1。 操作键K3:分、时区域切换 操作键K4:第一次进入第二组,第二次为退出。(3)按操作键K3:进入“秒表”模式后,操作键功能如下: 操作键K1:启动秒表。 操作键K2:停止秒表。 操作键K3:清零。 操作键K4:退出。(4)按操
5、作键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为秒),闹钟功能时也一样
6、27H.3闹钟总开关(1为开)27H.4用于闪烁标志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
7、.3K4操作键K4P1.7SPK压电喇叭控制信号P0七段显示器数数字形状控制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主程序控制流程图初始化定时器NYY进入“设置闹铃的开关”模式进入“秒表”模式Y进入“显示、设置闹铃时间”模式进入“设置现在时间”模式NN是否按K4键?是否按K3键?是否按K2键?NY是否按K1键?扫描显示器更新时间,启动定时器T0初始化变量开始NNNYYYY退出调时区切换当前区减1当前区加1KEY3KEY2KEY4KEY1更新时间显示设置现在时间N切换二组闹铃第一次更新显示NNYYYY退出时分切换当前区减1当前区加1KEY3KEY2KEY4KEY1转换闹铃模式显示设置闹铃时间 NNNYYYY退出清零关闭启动KEY3KEY2KEY4KEY1秒表显示秒表显示KEY1NNYYYY退出闹铃组切换关
9、当前闹铃开当前闹铃KEY3KEY2KEY4闹钟正在响关闭响铃秒表N中断程序T0置标志位N检测闹铃时变量变0YY整点报时时变量=24分=0时加1分变量=60秒=0分加1NYYY清标志位21H=2 次数到检查闹铃开、关响铃NNYYYY1YN0N秒变量加1秒变量=60标志位21H加1半秒指示灯闪累加器入栈重新载入计数初值、定时器计数10次计时中断程序开始计时中断程序结束将累加器出栈中断程序T1111000分=60秒=60中断返回分变量=0秒变量=0分变量加1毫秒变量=0秒变量加110毫秒单元加1毫秒=1000重装初始值中断返回106次取反闪烁标志01重装初始值中断程序1开始用以闪烁、秒表标志位3.2
10、 源程序清单本系统程序清单如下:;-;8052 CLOCK WITH SEGX6 CLOCK + 2ALARM + TIMER + SW;时钟+2闹钟+响铃+秒表;89C52 ASM USE: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:设置闹铃开关(当真正闹铃
11、时停掉闹钟并退出); -K1:当前闹铃组开; -K2:当前闹铃组关; -K3:切换闹组; -K4:OK;-KEY1 EQU P1.0;调时间调分再调时KEY2 EQU P1.1KEY3 EQU P1.2KEY4 EQU P1.3SECON EQU 22H;时钟的秒MIN EQU 23HHOUR EQU 24HDISP EQU 36H;显示的首地址存放BELL BIT P3.0ORG 0000H LJMP START ORG 000BH LJMP T0_INTORG 001BHLJMP T1_INT ORG 0100HSTART: MOV 20H,#00HMOV 21H,#00H ;0.5秒计时
12、 MOV 22H,#00H ;1秒计时 MOV 23H,#00H ;1分计时 MOV 24H,#00H ;1h计时MOV 38H,#01H ;闹钟分MOV 39H,#00H ;闹钟时MOV 37H,#101 ;第一组闹钟的首字节显示-1MOV 53H,#102 ;第二组闹铃的首字节显示”-2“MOV 25H,#6H ;中断1,50ms*6=0.3s闪烁一次 MOV TMOD,#11HMOV TL1,#0B0HMOV TH1,#3CH MOV TL0,#0B0H MOV TH0,#3CH SETB ET0SETB ET1 SETB EA SETB TR0MOV SP,#40H;*主程序*MAIN
13、:MOV DISP,#SECONLCALL DISPLAYLCALL KEYALCALL KEYBLCALL KEYCLCALL KEYDSJMP MAIN/*数码管显示*/DISPLAY:PUSH PSWMOV PSW,#08H;用第二组寄存器MOV R0,DISPMOV R1,#30HMOV R4,#03H;秒分时LOOP0:MOV A,R0MOV B,#10DIV ABMOV R1,BINC R1MOV R1,AINC R0INC R1DJNZ R4,LOOP0DISKEY:MOV R1,#30H ;显示缓冲区首址 MOV R2,#06H MOV R3,#0FEHCLR 27H.5MOV
14、 29H,28HPLAY: MOV A,R1 MOV DPTR,#TABLE MOVC A,A+DPTR;*闪烁用JNB 27H.4,WEN;在调时时用作熄灭,1为开MOV 26H,AMOV A,R1CJNE A,29H,WEN1JB 27H.5,LPPC1INC 29HSETB 27H.5LPPC1:CLR ASJMP WENWEN1: MOV A,26H;*WEN: MOV P0,AMOV P2,R3 INC R1 LCALL DELAY MOV A,R3 RL AMOV R3,ADJNZ R2,PLAYPOP PSWRETDELAY: MOV R6,#4D1: MOV R7,#250D0
15、: DJNZ R7,D0 DJNZ R6,D1 RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H/*中断T0处理*/T0_INT: MOV TL0,#0B0H MOV TH0,#3CHPUSH ACC INC 20H MOV A,20H CJNE A,#10,EXITJNB 27H.3,LQQ1SJMP LQQ2LQQ1:JNB 2AH.2,LP0LQQ2:JNB 27H.1,LP0;闹铃检查1响CPL BELLDJNZ R5,LP0;响铃次数SETB BELLCLR 27H.1LP0: MOV 20H,#00H CPL P3.1
16、;半秒led闪烁 INC 21HMOV A,21HCJNE A,#2,EXITSETB BELL;关闭整点报时 MOV 21H,#00HINC SECON MOV A,SECONCJNE A,#60,EXITSETB 27H.0;闹钟检查标志MOV SECON,#00H INC MIN MOV A,MINCJNE A,#60,EXITCPL BELL;整点报时启动 MOV MIN,#00H INC HOUR MOV A,HOURCJNE A,#24,EXIT MOV HOUR,#00HEXIT: JNB 27H.3,EXITQ;闹铃1组开关1为开 JNB 27H.0,EXITQ;闹钟检查MOV
17、 A,MINCJNE A,38H,EXITQMOV A,HOURCJNE A,39H,EXITQSETB 27H.1MOV R5,#120EXITQ:JNB 2AH.2,EXIT1JNB 27H.0,EXIT1CLR 27H.0MOV A,MINCJNE A,54H,EXIT1MOV A,HOURCJNE A,55H,EXIT1SETB 27H.1MOV R5,#120EXIT1:POP ACCRETI;*;*KEY1*KEYA:JB KEY1,LOOP1LCALL DISPLAYLCALL DISPLAYJB KEY1,LOOP1JNB KEY1,$CLR TR0MOV 28H,#32H;从
18、分闪烁SETB TR1MOV SECON,#0HSETB 27H.2MOV R0,#MIN;*LCP0:LCALL DISPLAYJB KEY3,LCP1LCALL DISPLAYLCALL DISPLAYJNB KEY3,$CPL 27H.2JB 27H.2,LP1MOV R0,#HOURMOV 28H,#34HSJMP LCP1LP1:MOV R0,#MINMOV 28H,#32HLCP1:JB KEY1,LCP2LCALL DISPLAYLCALL DISPLAYJB KEY1,LCP2JNB KEY1,$LCALL ADD1LCP2:JB KEY2,LCP5LCALL DISPLAYL
19、CALL DISPLAYJB KEY2,LCP5JNB KEY2,$LCALL DEC1LCP5:JB KEY4,LCP0LCALL DISPLAYJB KEY4,LCP0JNB KEY4,$LCALL DISPLAYJNB KEY4,$SETB TR0CLR TR1;退出闪烁CLR 27H.4;闪烁的标志还原LOOP1:RET;*KEY2*KEYB:JB KEY2,LOOP1LCALL DISPLAYLCALL DISPLAYJB KEY2,LOOP1JNB KEY2,$LCALL DISPLAYJNB KEY2,$SETB TR1CLR 2AH.0;闹钟组的切换MOV 28H,#32H;闪
20、烁单元默认为份CLR 27H.7;闹钟组0为1组MOV DISP,#37H ;默认显示第一组闹铃时间SETB 27H.2;为1时调分MOV 56H,#38HMOV 57H,#39HMOV R0,#38H;*QQ1:LCALL DISPLAY;闹钟的主要显示JB KEY3,QQ2LCALL DISPLAYLCALL DISPLAYJNB KEY3,$CPL 27H.2JB 27H.2,LQ1MOV R0,57HMOV 28H,#34HSJMP QQ2LQ1:MOV R0,56HMOV 28H,#32H;*加1QQ2:JB KEY1,QQ3LCALL DISPLAYLCALL DISPLAYJB
21、KEY1,QQ3JNB KEY1,$LCALL ADD1;*减1QQ3:JB KEY2,QQ4LCALL DISPLAYLCALL DISPLAYJB KEY2,QQ4JNB KEY2,$LCALL DEC1QQ4:JB KEY4,QQ1LCALL DISPLAYJB KEY4,QQ1JNB KEY4,$LCALL DISPLAYJNB KEY4,$MOV DISP,#53HMOV 56H,#54HMOV 57H,#55HMOV R0,56HCPL 2AH.0JB 2AH.0,QQ1MOV DISP,#SECONCLR 27H.4;退出闪烁CLR TR1LPP1:RET;*KEY3*秒表KEY
22、C:JB KEY3,QINLCALL DISPLAYLCALL DISPLAYJB KEY3,QINMOV DISP,#50HSETB 27H.6QIN4:LCALL DISPLAYJB KEY1,QIN1LCALL DISPLAYJB KEY1,QIN1JNB KEY1,$SETB TR1QIN1:JB KEY2,QIN2LCALL DISPLAYJB KEY2,QIN2JNB KEY2,$CLR TR1QIN2:JB KEY3,QIN3LCALL DISPLAYJB KEY3,QIN3JNB KEY3,$MOV 50H,#00HMOV 51H,#00HMOV 52H,#00HQIN3:JB
23、 KEY4,QIN4LCALL DISPLAYJB KEY4,QIN4JNB KEY4,$CLR 27H.6QIN:RET;*KEY4*KEYD:JB KEY4,WW1LCALL DISPLAYLCALL DISPLAYJB KEY4,WW1JNB KEY4,$JNB 27H.3,WW6CLR 27H.3SETB P3.2SJMP WW1WW6:JNB 2AH.2,WW7CLR 2AH.2SETB P3.3SJMP WW1WW7:CLR 2AH.1MOV DISP,#37H;默认显示第一组闹铃时间WW2:LCALL DISPLAYJB KEY1,WW3JNB KEY1,$JB 2AH.1,WQ
24、Q1SETB 27H.3CLR P3.2SJMP WW3WQQ1:SETB 2AH.2CLR P3.3WW3:JB KEY2,WW4JNB KEY2,$JB 2AH.1,WQQ2CLR 27H.3SETB P3.2SJMP WW4WQQ2:CLR 2AH.2SETB P3.3WW4:JB KEY3,WW5LCALL DISPLAYJNB KEY3,$CPL 2AH.1JB 2AH.1,XXX1MOV DISP,#37HSJMP WW5XXX1:MOV DISP,#53HWW5:JB KEY4,WW2LCALL DISPLAYJB KEY4,WW2JNB KEY4,$LCALL DISPLAYJ
25、NB KEY4,$WW1:RET;*加减子程序*;*加1子程序*ADD1:JB 27H.2,MINU1CJNE R0,#23,LCP4MOV R0,#0HSJMP EXIT2MINU1:CJNE R0,#59,LCP4MOV R0,#0HSJMP EXIT2LCP4:INC R0EXIT2:RET/*减1子程序*/DEC1:CJNE R0,#00,LCP3JB 27H.2,MINU2MOV R0,#23SJMP EXIT3MINU2:MOV R0,#60LCP3:DEC R0EXIT3:RET;*T1_INT: JB 27H.6,SECOND;为1时为秒表MOV TL1,#0B0HMOV TH1,#3CHDJNZ 25H,EEEMOV 25H,#6HCPL 27H.4 EEE:RETI;秒表程序SECOND:PUSH ACC;在显示时怕中断时影响显示MOV TL1,#0F7H ;本应该是#0F0H考虑到精度问题MOV TH1,#0D8H INC 50H MOV A,50HCJNE A,#100,XINMOV 50H,#00HINC 51HMOV A,51HCJNE A,#60,XINMOV 51H,#00HINC 52HMOV A,52HCJNE A,#60,XINMOV 52H,#00HXIN:POP ACCRETIEND
限制150内