收藏 分销(赏)

单片机数字时钟课程设计报告.docx

上传人:仙人****88 文档编号:11722032 上传时间:2025-08-09 格式:DOCX 页数:31 大小:112.46KB 下载积分:10 金币
下载 相关 举报
单片机数字时钟课程设计报告.docx_第1页
第1页 / 共31页
单片机数字时钟课程设计报告.docx_第2页
第2页 / 共31页


点击查看更多>>
资源描述
单 片 机 应 用 综 合 设 计 报 告 设 计 题 目: 学 院 名 称: 专 业: 班 级: 姓 名: 指 导 教 师: 日 期: 2015.12.28~2015.12.31 一、任务书 1. 用80C51设计一个数字时钟。 2. 可显示时、分、秒。 3. 按键实现时、分、秒人工校准。 4. 具有闹钟功能。 5. 实现秒表/时钟转换,秒表要求精确到10ms。 二、总体方案 用80C51设计一个数字时钟。该数字钟能显示时、分、秒,并具有闹钟、秒表功能。由四个按键控制,功能分别为启动、调时,调闹、止闹、退出调时,切换秒表时钟,加一,减一、暂停。另外两个按键为电源控制键,复位键。 该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。 用两个四位一体共阴数码管作时间显示:能显示时、分、秒。用一个+5V有源蜂鸣器做闹钟声报警功能,并用四个按键做时间和闹钟调整的数字钟。利用定时/计数器、中断系统来实现时钟计数。 用定时器1实现时钟计时,定时器0实现秒表计时。把定时器0和定时器1都设为工作方式1,定时时间为1.25ms和125ms,则计数溢出8次即得时钟、秒表计时最小单位(10毫秒/秒)。晶振频率f=6MHz。 X1=216-125*103/2=0BDCH。 X2=216-1.25*103/2=0FEFFH。 采用中断方式进行溢出次数累计,计满8次。从秒到分和从分到时的计时是通过累加和数值比较实现。 三、硬件设计 (1) 单片机最小系统 单片机最小系统由单片机,时钟电路,复位电路组成。其中由6MHz晶振构成的振荡电路,并通过使复位端经电阻与Vcc电源接通而实现的按键电平复位电路。 (2) 电源系统 以+5V直流稳压电源作为电源供应系统。 (3) 输入系统 由四个调整键组成独立式键盘,分别具有为启动、调时、退出调闹,调闹、止闹、退出调时,秒表切换,加一,减一、暂停功能。 (4) 输出系统 由两个四位一体的共阴数码管,并以74LS244做驱动电路构成显示输出,由NPN三极管以及一个蜂鸣器构成闹铃。 四、软件设计 4.1 单片机资源使用情况 (1) 时钟与秒表的时分秒在片内RAM存储地址如表3.1所示。 表3.1 时钟存储地址 名称 时 分 秒 十 位 7AH 78H 76H 个 位 79H 77H 75H 表3.4 秒表存储地址 名称 时 分 秒 十 位 66H 64H 62H 个 位 65H 63H 61H (2) 电子钟的时钟时间在八位数码管上进行显示,因此,在片内RAM中设置显示缓冲区共8个单元。 LED7 LED6 LED5 LED4 LED3 LED2 LED1 LED0 74H 73H 72H 71H 70H 6FH 6EH 6DH 显示缓冲区从左至右依次存时、-、分、-、秒的数值。 (3) 闹钟的时分秒在片内RAM存储地址如表3.2所示。 表3.2 闹钟标志位存储地址表 名称 时 分 秒 十 位 6CH 6AH 68H 个 位 6BH 69H 67H (4) P0口作为数据显示输出、P1.4作为闹铃输出,P1.0-P1.3接按键输入, 20H.0-20H.3作为P1.0-P1.3的位标志存储地址。 (5) 运用了定时器1作为1秒计时所用,定时器0作为10ms计时所用。 4.2 软件系统程序流程框图 主程序流程框图如图3.1所示。 图3.1 主程序流程框图 (2) 1秒计时子程序流程框图如图3.2所示。 图3.2 1秒计时流程框图 图3.3 键监控程序流程框图 (3) 键监控子程序流程框图如图3.3所示,它还包含了键扫描和P1口处理子程序,它们的程序流程框图分别为图3.4和3.5。 图3.5 P1口处理子程序流程框图 图3.4 键扫描子程序流程框图 4.3 源程序清单 LJMP MAIN ORG 000BH LJMP INTT0 ORG 001BH LJMP INTT1 ;--------------------------------------------------------- ;-----------------主程序---------------------------------- ;--------------------------------------------------------- MAIN: LCALL BEGIN ;上电显示“PP” MOV SP, #30H MOV R0, #7AH ;清7AH-67H单元 MOV R1, #14H LCALL CLR0 MOV 20H, #00H MOV 6CH, #01H MOV 6BH, #02H MOV 7BH, #0CH ;熄灭符 MOV TMOD, #11H ;定时器0、1的工作方式为1 MOV TH1, #0BH ;125ms MOV TL1, #0DCH MOV TH0, #0FEH MOV TL0, #0FFH ;1.25ms MOV R7, #08H ;125ms*8=1s,1.25ms*8=10ms SETB EA SETB ET1 SETB TR1 LOOP: LCALL DIR ;调显示子程序 LCALL CLOCK ;查闹钟 LCALL KEYC JB 20H.0, KEYAA ;若A键按下跳转,调时 JB 20H.1, KEYCC ;若B键按下跳转,调闹 JB 20H.2, KEYEE ;若C键按下跳转,切换秒表 JB 20H.3, KEYDD ;若D键按下跳转,暂停 LJMP LOOP ;--------------秒表显示程序----------------------- KEYEE: CLR ET1 CLR TR1 SETB ET0 SETB TR0 MBLOOP: LCALL DIRS LCALL DIRS LCALL KEYCS JB 20H.2, OUTSETS JB 20H.3, MBZ LJMP MBLOOP OUTSETS:CLR ET0 CLR TR0 SETB ET1 SETB TR1 LJMP LOOP MBZ: CLR ET0 CLR TR0 MBZLOOP:LCALL KEYCS JB 20H.3, OUTMBZ JB 20H.2, OUTSETS LJMP MBZLOOP OUTMBZ: SETB ET0 SETB TR0 LJMP MBLOOP ;------------------------------------------------- ;--------------闹钟调整程序----------------------- ;------------------------------------------------- KEYCC: CLR ET1 LCALL SETCH SETB ET1 LJMP LOOP ;------------------------------------------------- ;------------------暂停--------------------------- ;------------------------------------------------- KEYDD: CLR ET1 CLR TR1 LOOPSP: LCALL KEYC ;键扫描 JB 20H.3, OUTSP ;D键按下,暂停取消,继续走 LJMP LOOPSP OUTSP: SETB TR1 SETB ET1 LJMP LOOP ;------------------------------------------------- ;-------------时钟调整程序------------------------ ;------------------------------------------------- KEYAA: CLR TR1 CLR ET1 LJMP SETHH OUTSET: SETB ET1 SETB TR1 LJMP LOOP ;---------------时位调整------------------------- ;------------------------------------------------ SETHH: MOV R5, #0FFH LOOPH0: MOV R0, #79H MOV R1, #7AH LCALL RDIRH ;输出 LCALL DIR ;显示 LCALL DIR LCALL KEYC ;键扫描 JNB 20H.0, H1 LJMP SETMM ;A键按下,调分 H1: JNB 20H.1, H2 LJMP OUTSET ;B键按下,退出调时 H2: JNB 20H.2, H3 LJMP ADDH1 ;C键按下,加 1 H3: JNB 20H.3, H4 LJMP SUBH1 ;D键按下,减1 H4: DJNZ R5, LOOPH0 ;无键按下,循环,返回 LJMP OUTSET ;------------时加减一---------------------------- ADDH1: MOV R0, #79H ;加一 LCALL ADD1 LJMP SETH SUBH1: MOV R0, #79H ;减一 LCALL SUBBH1 LJMP SETH SETH: MOV R0, #79H MOV R1, #7AH LCALL RDIRH CJNE R3, #24H, SETHH MOV 79H, #00H MOV 7AH, #00H LJMP SETHH ;==============分位调整=========================== SETMM: MOV R5, #0FFH LOOPM0: MOV R0, #77H MOV R1, #78H LCALL RDIRM LCALL DIR LCALL DIR LCALL KEYC JNB 20H.0, M1 LJMP SETSS ;A键按下,调秒 M1: JNB 20H.1, M2 LJMP OUTSET M2: JNB 20H.2, M3 LJMP ADDM1 M3: JNB 20H.3, M4 LJMP SUBBM M4: DJNZ R5, LOOPM0 LJMP OUTSET ;---------------分加减一-------------------------- ADDM1: MOV R0, #77H ;加一 LCALL ADD1 LJMP SETM SUBBM: MOV R0, #77H ;减一 LCALL SUBBMS LJMP SETM SETM: MOV R0, #77H MOV R1, #78H LCALL RDIRM CJNE R3, #60H, SETMM MOV 77H, #00H MOV 78H, #00H LJMP SETMM ;==================秒位调整======================= SETSS: MOV R5, #0FFH LOOPS0: MOV R0, #75H MOV R1, #76H LCALL RDIRS LCALL DIR LCALL DIR LCALL KEYC JNB 20H.0, S1 LJMP SETHH S1: JNB 20H.1, S2 LJMP OUTSET S2: JNB 20H.2, S3 LJMP ADDS1 S3: JNB 20H.3, S4 LJMP SUBBS S4: DJNZ R5, LOOPS0 LJMP OUTSET ;-------------------秒加减一---------------------- ADDS1: MOV R0, #75H ;加一 LCALL ADD1 LJMP SETS SUBBS: MOV R0, #75H ;减一 LCALL SUBBMS LJMP SETS SETS: MOV R0, #75H MOV R1, #76H LCALL RDIRS CJNE R3, #60H, SETSS MOV 75H, #00H MOV 76H, #00H LJMP SETSS ;------------------------------------------------ ;==============闹钟调整子程序==================== ;------------------------------------------------ ;================时位调整======================== SETCHH: MOV R5, #0FFH LOOPCH0:MOV R0, #6BH MOV R1, #6CH LCALL RDIRH LCALL DIR LCALL KEYC JNB 20H.0, CH0 LJMP OUTSC ;结束子程序 CH0: JNB 20H.1, CH1 LJMP SETCM ;B键按下,调分 CH1: JNB 20H.2, CH2 LJMP ADDCH1 CH2: JNB 20H.3, CH3 LJMP SUBCH1 CH3: DJNZ R5, LOOPCH0 LJMP OUTSC ;-----------------时加减一----------------------- ADDCH1: MOV R0, #6BH ;加一 LCALL ADD1 LJMP SETCH SUBCH1: MOV R0, #6BH ;减一 LCALL SUBBH1 LJMP SETCH SETCH: MOV R0, #6BH MOV R1, #6CH LCALL RDIRH CJNE R3, #24H, SETCHH MOV 6CH, #00H MOV 6BH, #00H MOV R0, #6BH MOV R1, #6CH LCALL RDIRH LJMP SETCHH ;==================分位调整====================== SETCMM: MOV R5, #0FFH LOOPCM0:MOV R0, #69H MOV R1, #6AH LCALL RDIRM LCALL DIR LCALL KEYC JNB 20H.0, CM0 LJMP OUTSC CM0: JNB 20H.1, CM1 LJMP SETCH CM1: JNB 20H.2, CM2 LJMP ADDCM1 CM2: JNB 20H.3, CM3 LJMP SUBCM1 CM3: DJNZ R5, LOOPCM0 LJMP OUTSC ;---------------------分加减一-------------------- ADDCM1: MOV R0, #69H ;加一 LCALL ADD1 LJMP SETCM SUBCM1: MOV R0, #69H ;减一 LCALL SUBBMS LJMP SETCM SETCM: MOV R0, #69H MOV R1, #6AH LCALL RDIRM CJNE R3, #60H, SETCMM MOV 6AH, #00H MOV 69H, #00H MOV R0, #69H MOV R1, #6AH LCALL RDIRM LJMP SETCMM OUTSC: RET ;------------------------------------------------- ;===========调整显示装载子程序==================== ;------------------------------------------------- RDIRH: MOV 6DH, 7BH MOV 6EH, 7BH MOV 6FH, 7BH MOV 70H, 7BH MOV 71H, 7BH MOV 72H, 7BH MOV 73H, @R0 MOV 74H, @R1 RET RDIRM: MOV 6DH, 7BH MOV 6EH, 7BH MOV 6FH, 7BH MOV 70H, @R0 MOV 71H, @R1 MOV 72H, 7BH MOV 73H, 7BH MOV 74H, 7BH RET RDIRS: MOV 6DH, @R0 MOV 6EH, @R1 MOV 6FH, 7BH MOV 70H, 7BH MOV 71H, 7BH MOV 72H, 7BH MOV 73H, 7BH MOV 74H, 7BH RET ;-------------------------------------------------- ;=====================键扫描子程序================= ;-------------------------------------------------- KEYC: LCALL KEYDEAL ;键扫描子程序 LCALL DIR LCALL DIR LCALL KEYDEAL ;再次确认键有无按下,去抖动 JZ EXIT MOV B, 20H KEYSF: LCALL KEYDEAL JZ KEY1 LCALL DIR LJMP KEYSF ;当键按下弹起后保存键值,返回 KEY1: MOV 20H, B EXIT: RET ;----------------------秒表键扫描子程序-------------- KEYCS: LCALL KEYDEAL ;键扫描子程序 LCALL DIRS LCALL DIRS LCALL KEYDEAL JZ EXITS MOV B, 20H KEYSFS: LCALL KEYDEAL JZ KEY1S LCALL DIRS LJMP KEYSFS KEY1S: MOV 20H, B EXITS: RET ;---------------P1口处理子程序---------------------- KEYDEAL:PUSH PSW ;P1口处理子程序 MOV A, P1 CPL A ANL A, #0FH MOV 20H, A POP PSW RET ;--------------------------------------------------- ;=================1S计时程序======================== ;--------------------------------------------------- INTT1: PUSH PSW PUSH ACC CLR ET1 CLR TR1 MOV TH1, #0BH MOV TL1, #0DCH SETB TR1 DJNZ R7, OUTT0 ADDSS: MOV R7, #08H MOV R0, #75H LCALL ADD1 CLR C CJNE R3, #60H, ADDMM ADDMM: JC OUTT1 MOV 75H, #00H MOV 76H, #00H MOV R0, #77H LCALL ADD1 CLR C CJNE R3, #60H, ADDHH ADDHH: JC OUTT0 MOV 77H, #00H MOV 78H, #00H MOV R0, #79H LCALL ADD1 CLR C CJNE R3, #24H, HOUR HOUR: JC OUTT0 MOV R0, #75H MOV R1, #06H LCALL CLR0 OUTT0: MOV 6FH, #0CH ;熄灭符 MOV 72H, #0CH LJMP OUTT2 OUTT1: MOV 6FH, #0BH ;‘-’ MOV 72H, #0BH ;‘-’ OUTT2: MOV 6DH, 75H ;秒个位 MOV 6EH, 76H ;十位 MOV 70H, 77H ;分个位 MOV 71H, 78H ;十位 MOV 73H, 79H ;时个位 MOV 74H, 7AH ;十位 SETB ET1 POP ACC POP PSW RETI ;----------------10ms计时程序------------------ INTT0: PUSH PSW PUSH ACC CLR ET0 CLR TR0 MOV TH0, #0FEH MOV TL0, #0FFH SETB TR0 DJNZ R7, OUTTT0 ADDSSS: MOV R7, #08H MOV R0, #61H LCALL ADD1 CLR C CJNE R3, #99H, ADDMMS ADDMMS: JC OUTTT1 MOV 61H, #00H MOV 62H, #00H MOV R0, #63H LCALL ADD1 CLR C CJNE R3, #60H, ADDHHS ADDHHS: JC OUTTT0 MOV 63H, #00H MOV 64H, #00H MOV R0, #65H LCALL ADD1 CLR C CJNE R3, #60H, HOURS HOURS: JC OUTTT0 MOV R0, #61H MOV R1, #06H LCALL CLR0 OUTTT0: MOV 6FH, #0CH ;熄灭符 MOV 72H, #0CH LJMP OUTTT2 OUTTT1: MOV 6FH, #0BH ;‘-’ MOV 72H, #0BH ;‘-’ OUTTT2: MOV 6DH, 61H ;秒个位 MOV 6EH, 62H ;十位 MOV 70H, 63H ;分个位 MOV 71H, 64H ;十位 MOV 73H, 65H ;时个位 MOV 74H, 66H ;十位 SETB ET0 POP ACC POP PSW RETI ;---------------------------------------------------- ;===============加1子程序 入口R0,出口R0,R3=========== ;---------------------------------------------------- ADD1: MOV A, @R0 INC R0 SWAP A ORL A, @R0 SWAP A ADD A, #01H DA A MOV R3, A ANL A, #0F0H SWAP A MOV @R0, A DEC R0 MOV A, R3 ANL A, #0FH MOV @R0, A RET ;------------------------------------------------------ ;=============时减一子程序 入口R0,出口R0,R3=========== ;------------------------------------------------------ SUBBH1: MOV A, @R0 INC R0 SWAP A ORL A, @R0 SWAP A JZ OUTS0 DEC A MOV R3, A ANL A, #0FH CLR C SUBB A, #0AH JC SBCLSG DEC R0 MOV @R0, #09H MOV A, R3 ANL A, #0F0H SWAP A INC R0 MOV @R0, A RET SBCLSG: MOV A, R3 ANL A, #0F0H SWAP A MOV @R0, A MOV A, R3 ANL A, #0FH DEC R0 MOV @R0, A RET OUTS0: MOV @R0, #02H DEC R0 MOV @R0, #03H MOV R3, #23H RET ;-------------------------------------------------------- ;============分秒减一子程序 入口R0,出口R0,R3============= ;-------------------------------------------------------- SUBBMS: MOV A, @R0 INC R0 SWAP A ORL A, @R0 SWAP A JZ OUTS1 DEC A MOV R3, A ANL A, #0FH CLR C SUBB A, #0AH JC SBCLG DEC R0 MOV @R0, #09H MOV A, R3 ANL A, #0F0H SWAP A INC R0 MOV @R0, A RET SBCLG: MOV A, R3 ANL A, #0F0H SWAP A MOV @R0, A MOV A, R3 ANL A, #0FH DEC R0 MOV @R0, A RET OUTS1: MOV @R0, #05H DEC R0 MOV @R0, #09H MOV R3, #59H RET ;----------------------------------------------------- ;================清零子程序 入口R0,R1 ================ ;----------------------------------------------------- CLR0: MOV @R0, #00H DEC R0 DJNZ R1, CLR0 RET ;----------------------------------------------------- ;===================闹铃子程序======================== ;----------------------------------------------------- CLOCK: PUSH ACC PUSH PSW MOV A, 6CH CJNE A, 7AH, OUTCLK ;查时十位 MOV A, 6BH CJNE A, 79H, OUTCLK MOV A, 6AH CJNE A, 78H, OUTCLK MOV A, 69H CJNE A, 77H, OUTCLK MOV A, 68H CJNE A, 76H, OUTCLK MOV A, 67H CJNE A, 75H, OUTCLK CLR P1.4 LCALL DL60S OUTCLK: SETB P1.4 POP PSW POP ACC RET ;---------------------------------------------------------------- ;=====================显示子程序================================= ;---------------------------------------------------------------- DIR: PUSH PSW PUSH ACC MOV DPTR, #TABLE ;74~~~76D时到秒、十到个 MOV R0, 74H CJNE R0, #00H, MIEL MOV 74H, #0CH MIEL: MOV R0, #74H MOV R1, #01H LOOPR: MOV A, R1 CPL A MOV P2, A ;送扫描字 MOV A, @R0 MOVC A, @A+DPTR ;查表 MOV P0, A LCALL DL1MS MOV A, R1 JB ACC.7, OUT
展开阅读全文

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


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

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

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

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服