收藏 分销(赏)

单片机课程设计-电子时钟2968502658.docx

上传人:xrp****65 文档编号:5930023 上传时间:2024-11-23 格式:DOCX 页数:24 大小:60.02KB
下载 相关 举报
单片机课程设计-电子时钟2968502658.docx_第1页
第1页 / 共24页
单片机课程设计-电子时钟2968502658.docx_第2页
第2页 / 共24页
点击查看更多>>
资源描述
单片机课程设计 -----定时闹铃 系别: 电子通信工程系 专业: 应用电子技术 班级: 嵌入式091班 姓名: 黄文钦 学号: 2009080202338 实训地点: 实训时间:2011年1月10日至1月14日 1.概述 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引脚低电平控制系统功能设置。 (6)单片机的复位电路,采用传统上电复位,通过Reset按键控制。 (7)系统通过一个发光二极管指示电路供电是或正常。 2.2 电原理图 图1 控制电路 2.3 各控制按钮控制功能说明 系统接通电源后指示灯LED亮,程序执行后工作,蜂鸣器发出两声响声,七段显示器显示“00 00 00”,表示程序开始执行,然后显示现在时间,按下操作键K1~K4动作如下: (1)按操作键K1,进入“设置现在时间”模式后,操作键功能如下: Ø 操作键K1:当前区域加1。 Ø 操作键K2:当前区域减1。 Ø 操作键K3:分、时区域切换。 Ø 操作键K4:设置完成,退出。 (2)按操作键K2,进入“显示、设置闹铃时间”模式后,操作键功能如下: Ø 操作键K1:当前闹铃区域加1。 Ø 操作键K2:当前闹铃区域减1。 Ø 操作键K3:分、时区域切换 Ø 操作键K4:第一次进入第二组,第二次为退出。 (3)按操作键K3:进入“秒表”模式后,操作键功能如下: Ø 操作键K1:启动秒表。 Ø 操作键K2:停止秒表。 Ø 操作键K3:清零。 Ø 操作键K4:退出。 (4)按操作键K4:在响铃时关闭闹钟自动退出,不是响铃则进入“设置闹铃的开关”模式后,操作键功能如下: Ø 操作键K1:启动当前闹铃。 Ø 操作键K2:停止当前闹铃。 Ø 操作键K3:切换闹铃组。 Ø 操作键K4:设置完成,退出。 (5)按操作键Reset:复位键,系统重启。 3.软件设计 3.1 资源分配表和程序流程图 表一 程序内存资源分配表 内存地址 变量名称 作用说明 20H 存放50毫秒计时 21H 存放0.5秒计时 22H SECON 存放1秒计时 23H MIN 存放1分计时 24H HOUR 存放1小时计时 25H 用于中断1(#6H) 26H 用于显示中的闪烁 27H.0 闹钟标志位 27H.1 允许响铃 27H.2 用于标志分、秒(1为秒),闹钟功能时也一样 27H.3 闹钟总开关(1为开) 27H.4 用于闪烁标志 27H.5 用于闪烁 27H.6 秒表标志 27H.7 两组闹钟的标志位,默认值为0 28H-29H 用于保存闪烁时的调时区地址 30H-35H 存放调时区地址 36H DISP 用于存放要显示的首字(例如秒) 37H-39H 第一组闹钟的时分 40H SP 栈底 50H-52H 秒表 53H-55H 第二组闹钟的时分 56H 存放闹钟调分地址 57H 存放闹钟调时地址 2AH.0 闹钟组的切换标志(默认值为0) 2AH.1 切换(默认值为0) 2AH.2 闹钟第二组开关(默认值为0) 表二 芯片端口资源分配表 芯片端口 变量名称 作用说明 P1.0 K1 操作键K1 P1.1 K2 操作键K2 P1.2 K3 操作键K3 P1.3 K4 操作键K4 P1.7 SPK 压电喇叭控制信号 P0 七段显示器数数字形状控制 P2.2 控制时间小时的十位七段显示器亮灭 P2.3 控制时间小时的个位七段显示器亮灭 P2.4 控制时间分钟的十位七段显示器亮灭 P2.5 控制时间分钟的个位七段显示器亮灭 P2.6 控制时间秒钟的十位七段显示器亮灭 P2.7 控制时间秒钟的个位七段显示器亮灭 P3.0 BELL 蜂鸣器 P3.1 LED半秒闪烁 P3.2 LED显示第一组闹钟是否开启 P3.3 LED显示第二组闹钟是否开启 表三 寄存器资源分配表 组 寄存器 作用说明 第 0 组 R0 存放秒显示地址 R1 显示首址 R2 #06H R3 #0FEH R4 #3H R6、R7 延时初始值 第 1 组 R0 用于keyB、C R5 用于中断 图2主程序控制流程图 初始化定时器 N Y Y 进入“设置闹铃的开关”模式 ④ 进入“秒表 ”模式 ③ Y 进入“显示、设置闹铃时间”模式 ② 进入“设置现在时间”模式 ① N N 是否按K4键? 是否按K3键? 是否按K2键? N Y 是否按K1键? 扫描显示器更新时间, 启动定时器T0 初始化变量 开始 N N N Y Y Y Y 退出 调时区切换 当前区减1 当前区加1 KEY3 KEY2 KEY4 KEY1 更新时间显示 设置现在时间 ①N 切换二组闹铃 第一次 更新显示 N N Y Y Y Y 退出 时分切换 当前区减1 当前区加1 KEY3 KEY2 KEY4 KEY1 转换闹铃模式 显示设置闹铃时间 ② ③ N N N Y Y Y Y 退出 清零 关闭 启动 KEY3 KEY2 KEY4 KEY1 秒表显示 秒表 ④ 显示 KEY1 N N Y Y Y Y 退出 闹铃组切换 关当前闹铃 开当前闹铃 KEY3 KEY2 KEY4 闹钟正在响 关闭响铃 秒表 N 中断程序T0 置标志位 N 检测闹铃 时变量变0 Y Y 整点报时 时变量=24 分=0时加1 分变量=60 秒=0分加1 N Y Y Y 清标志位 21H=2 次数到 检查闹铃开、关 响铃 N N Y Y Y Y 1 Y N 0 N 秒变量加1 秒变量=60 标志位 21H加1半秒指示灯闪 累加器入栈 重新载入计数初值、定时器计数10次 计时中断程序开始 计时中断程序结束 将累加器出栈 中断程序T1 1 1 1 0 0 0 分=60 秒=60 中断返回 分变量=0 秒变量=0 分变量加1 毫秒变量=0 秒变量加1 10毫秒单元加1 毫秒=1000 重装初始值 中断返回 1 0 6次 取反闪烁标志 0 1 重装初始值 中断程序1开始 用以闪烁、秒表 标志位 3.2 源程序清单 本系统程序清单如下: ;--------------------------------------------------------------- ;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:设置闹铃开关(当真正闹铃时停掉闹钟并退出) ; -->K1:当前闹铃组开 ; -->K2:当前闹铃组关 ; -->K3:切换闹组 ; -->K4:OK ;--------------------------------------------------------------- KEY1 EQU P1.0 ;调时间调分再调时 KEY2 EQU P1.1 KEY3 EQU P1.2 KEY4 EQU P1.3 SECON EQU 22H ;时钟的秒 MIN EQU 23H HOUR EQU 24H DISP EQU 36H ;显示的首地址存放 BELL BIT P3.0 ORG 0000H LJMP START ORG 000BH LJMP T0_INT ORG 001BH LJMP T1_INT ORG 0100H START: MOV 20H,#00H MOV 21H,#00H ;0.5秒计时 MOV 22H,#00H ;1秒计时 MOV 23H,#00H ;1分计时 MOV 24H,#00H ;1h计时 MOV 38H,#01H ;闹钟分 MOV 39H,#00H ;闹钟时 MOV 37H,#101 ;第一组闹钟的首字节显示"-1" MOV 53H,#102 ;第二组闹铃的首字节显示”-2“ MOV 25H,#6H ;中断1,50ms*6=0.3s闪烁一次 MOV TMOD,#11H MOV TL1,#0B0H MOV TH1,#3CH MOV TL0,#0B0H MOV TH0,#3CH SETB ET0 SETB ET1 SETB EA SETB TR0 MOV SP,#40H ;*********主程序********* MAIN: MOV DISP,#SECON LCALL DISPLAY LCALL KEYA LCALL KEYB LCALL KEYC LCALL KEYD SJMP MAIN /*数码管显示*/ DISPLAY:PUSH PSW MOV PSW,#08H ;用第二组寄存器 MOV R0,DISP MOV R1,#30H MOV R4,#03H;秒分时 LOOP0: MOV A,@R0 MOV B,#10 DIV AB MOV @R1,B INC R1 MOV @R1,A INC R0 INC R1 DJNZ R4,LOOP0 DISKEY: MOV R1,#30H ;显示缓冲区首址 MOV R2,#06H MOV R3,#0FEH CLR 27H.5 MOV 29H,28H PLAY: MOV A,@R1 MOV DPTR,#TABLE MOVC A,@A+DPTR ;*********** 闪烁用 JNB 27H.4,WEN ;在调时时用作熄灭,1为开 MOV 26H,A MOV A,R1 CJNE A,29H,WEN1 JB 27H.5,LPPC1 INC 29H SETB 27H.5 LPPC1: CLR A SJMP WEN WEN1: MOV A,26H ;*********** WEN: MOV P0,A MOV P2,R3 INC R1 LCALL DELAY MOV A,R3 RL A MOV R3,A DJNZ R2,PLAY POP PSW RET DELAY: MOV R6,#4 D1: MOV R7,#250 D0: DJNZ R7,D0 DJNZ R6,D1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H /*中断T0处理*/ T0_INT: MOV TL0,#0B0H MOV TH0,#3CH PUSH ACC INC 20H MOV A,20H CJNE A,#10,EXIT JNB 27H.3,LQQ1 SJMP LQQ2 LQQ1: JNB 2AH.2,LP0 LQQ2: JNB 27H.1,LP0 ;闹铃检查1响 CPL BELL DJNZ R5,LP0 ;响铃次数 SETB BELL CLR 27H.1 LP0: MOV 20H,#00H CPL P3.1 ;半秒led闪烁 INC 21H MOV A,21H CJNE A,#2,EXIT SETB BELL ;关闭整点报时 MOV 21H,#00H INC SECON MOV A,SECON CJNE A,#60,EXIT SETB 27H.0 ;闹钟检查标志 MOV SECON,#00H INC MIN MOV A,MIN CJNE A,#60,EXIT CPL BELL ;整点报时启动 MOV MIN,#00H INC HOUR MOV A,HOUR CJNE A,#24,EXIT MOV HOUR,#00H EXIT: JNB 27H.3,EXITQ;闹铃1组开关1为开 JNB 27H.0,EXITQ;闹钟检查 MOV A,MIN CJNE A,38H,EXITQ MOV A,HOUR CJNE A,39H,EXITQ SETB 27H.1 MOV R5,#120 EXITQ: JNB 2AH.2,EXIT1 JNB 27H.0,EXIT1 CLR 27H.0 MOV A,MIN CJNE A,54H,EXIT1 MOV A,HOUR CJNE A,55H,EXIT1 SETB 27H.1 MOV R5,#120 EXIT1: POP ACC RETI ;********************** ;*********KEY1******** KEYA: JB KEY1,LOOP1 LCALL DISPLAY LCALL DISPLAY JB KEY1,LOOP1 JNB KEY1,$ CLR TR0 MOV 28H,#32H; 从分闪烁 SETB TR1 MOV SECON,#0H SETB 27H.2 MOV R0,#MIN ;************ LCP0: LCALL DISPLAY JB KEY3,LCP1 LCALL DISPLAY LCALL DISPLAY JNB KEY3,$ CPL 27H.2 JB 27H.2,LP1 MOV R0,#HOUR MOV 28H,#34H SJMP LCP1 LP1: MOV R0,#MIN MOV 28H,#32H LCP1: JB KEY1,LCP2 LCALL DISPLAY LCALL DISPLAY JB KEY1,LCP2 JNB KEY1,$ LCALL ADD1 LCP2: JB KEY2,LCP5 LCALL DISPLAY LCALL DISPLAY JB KEY2,LCP5 JNB KEY2,$ LCALL DEC1 LCP5: JB KEY4,LCP0 LCALL DISPLAY JB KEY4,LCP0 JNB KEY4,$ LCALL DISPLAY JNB KEY4,$ SETB TR0 CLR TR1 ;退出闪烁 CLR 27H.4 ;闪烁的标志还原 LOOP1: RET ;***********KEY2********* KEYB: JB KEY2,LOOP1 LCALL DISPLAY LCALL DISPLAY JB KEY2,LOOP1 JNB KEY2,$ LCALL DISPLAY JNB KEY2,$ SETB TR1 CLR 2AH.0 ;闹钟组的切换 MOV 28H,#32H ;闪烁单元默认为份 CLR 27H.7 ;闹钟组0为1组 MOV DISP,#37H ;默认显示第一组闹铃时间 SETB 27H.2;为1时调分 MOV 56H,#38H MOV 57H,#39H MOV R0,#38H ;************ QQ1: LCALL DISPLAY ;闹钟的主要显示 JB KEY3,QQ2 LCALL DISPLAY LCALL DISPLAY JNB KEY3,$ CPL 27H.2 JB 27H.2,LQ1 MOV R0,57H MOV 28H,#34H SJMP QQ2 LQ1: MOV R0,56H MOV 28H,#32H ;***********加1 QQ2: JB KEY1,QQ3 LCALL DISPLAY LCALL DISPLAY JB KEY1,QQ3 JNB KEY1,$ LCALL ADD1 ;***********减1 QQ3: JB KEY2,QQ4 LCALL DISPLAY LCALL DISPLAY JB KEY2,QQ4 JNB KEY2,$ LCALL DEC1 QQ4: JB KEY4,QQ1 LCALL DISPLAY JB KEY4,QQ1 JNB KEY4,$ LCALL DISPLAY JNB KEY4,$ MOV DISP,#53H MOV 56H,#54H MOV 57H,#55H MOV R0,56H CPL 2AH.0 JB 2AH.0,QQ1 MOV DISP,#SECON CLR 27H.4 ;退出闪烁 CLR TR1 LPP1: RET ;*********KEY3***********秒表 KEYC: JB KEY3,QIN LCALL DISPLAY LCALL DISPLAY JB KEY3,QIN MOV DISP,#50H SETB 27H.6 QIN4: LCALL DISPLAY JB KEY1,QIN1 LCALL DISPLAY JB KEY1,QIN1 JNB KEY1,$ SETB TR1 QIN1: JB KEY2,QIN2 LCALL DISPLAY JB KEY2,QIN2 JNB KEY2,$ CLR TR1 QIN2: JB KEY3,QIN3 LCALL DISPLAY JB KEY3,QIN3 JNB KEY3,$ MOV 50H,#00H MOV 51H,#00H MOV 52H,#00H QIN3: JB KEY4,QIN4 LCALL DISPLAY JB KEY4,QIN4 JNB KEY4,$ CLR 27H.6 QIN: RET ;*********KEY4********** KEYD: JB KEY4,WW1 LCALL DISPLAY LCALL DISPLAY JB KEY4,WW1 JNB KEY4,$ JNB 27H.3,WW6 CLR 27H.3 SETB P3.2 SJMP WW1 WW6: JNB 2AH.2,WW7 CLR 2AH.2 SETB P3.3 SJMP WW1 WW7: CLR 2AH.1 MOV DISP,#37H ;默认显示第一组闹铃时间 WW2: LCALL DISPLAY JB KEY1,WW3 JNB KEY1,$ JB 2AH.1,WQQ1 SETB 27H.3 CLR P3.2 SJMP WW3 WQQ1: SETB 2AH.2 CLR P3.3 WW3: JB KEY2,WW4 JNB KEY2,$ JB 2AH.1,WQQ2 CLR 27H.3 SETB P3.2 SJMP WW4 WQQ2: CLR 2AH.2 SETB P3.3 WW4: JB KEY3,WW5 LCALL DISPLAY JNB KEY3,$ CPL 2AH.1 JB 2AH.1,XXX1 MOV DISP,#37H SJMP WW5 XXX1: MOV DISP,#53H WW5: JB KEY4,WW2 LCALL DISPLAY JB KEY4,WW2 JNB KEY4,$ LCALL DISPLAY JNB KEY4,$ WW1: RET ;********加减子程序****** ;*******加1子程序****** ADD1: JB 27H.2,MINU1 CJNE @R0,#23,LCP4 MOV @R0,#0H SJMP EXIT2 MINU1: CJNE @R0,#59,LCP4 MOV @R0,#0H SJMP EXIT2 LCP4: INC @R0 EXIT2: RET /*减1子程序*/ DEC1: CJNE @R0,#00,LCP3 JB 27H.2,MINU2 MOV @R0,#23 SJMP EXIT3 MINU2: MOV @R0,#60 LCP3: DEC @R0 EXIT3: RET ;****************** T1_INT: JB 27H.6,SECOND ;为1时为秒表 MOV TL1,#0B0H MOV TH1,#3CH DJNZ 25H,EEE MOV 25H,#6H CPL 27H.4 EEE: RETI ; 秒表程序 SECOND: PUSH ACC ;在显示时怕中断时影响显示 MOV TL1,#0F7H ;本应该是#0F0H考虑到精度问题 MOV TH1,#0D8H INC 50H MOV A,50H CJNE A,#100,XIN MOV 50H,#00H INC 51H MOV A,51H CJNE A,#60,XIN MOV 51H,#00H INC 52H MOV A,52H CJNE A,#60,XIN MOV 52H,#00H XIN: POP ACC RETI END
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服