1、单片机数字时钟课程设计报告单 片 机 应 用 综 合 设 计 报 告设 计 题 目: 学 院 名 称: 专 业: 班 级: 姓 名: 指 导 教 师: 日 期: 2015.12.282015.12.31一、任务书1. 用80C51设计一个数字时钟。2. 可显示时、分、秒。3. 按键实现时、分、秒人工校准。 4. 具有闹钟功能。5. 实现秒表/时钟转换,秒表要求精确到10ms。二、总体方案用80C51设计一个数字时钟。该数字钟能显示时、分、秒,并具有闹钟、秒表功能。由四个按键控制,功能分别为启动、调时,调闹、止闹、退出调时,切换秒表时钟,加一,减一、暂停。另外两个按键为电源控制键,复位键。该电子
2、钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。用两个四位一体共阴数码管作时间显示:能显示时、分、秒。用一个+5V有源蜂鸣器做闹钟声报警功能,并用四个按键做时间和闹钟调整的数字钟。利用定时/计数器、中断系统来实现时钟计数。用定时器1实现时钟计时,定时器0实现秒表计时。把定时器0和定时器1都设为工作方式1,定时时间为1.25ms和125ms,则计数溢出8次即得时钟、秒表计时最小
3、单位(10毫秒/秒)。晶振频率f=6MHz。X1=216-125*103/2=0BDCH。X2=216-1.25*103/2=0FEFFH。采用中断方式进行溢出次数累计,计满8次。从秒到分和从分到时的计时是通过累加和数值比较实现。三、硬件设计(1) 单片机最小系统单片机最小系统由单片机,时钟电路,复位电路组成。其中由6MHz晶振构成的振荡电路,并通过使复位端经电阻与Vcc电源接通而实现的按键电平复位电路。(2) 电源系统 以+5V直流稳压电源作为电源供应系统。(3) 输入系统由四个调整键组成独立式键盘,分别具有为启动、调时、退出调闹,调闹、止闹、退出调时,秒表切换,加一,减一、暂停功能。(4)
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
5、72H 71H 70H 6FH 6EH 6DH显示缓冲区从左至右依次存时、-、分、-、秒的数值。(3) 闹钟的时分秒在片内RAM存储地址如表3.2所示。表3.2 闹钟标志位存储地址表名称时 分 秒十 位6CH 6AH68H个 位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
6、.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 6C
7、H, #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 TR1LOOP: LCALL DIR ;调显示子程序 LCALL CLOCK ;查闹钟 LCALL KEYC JB 20H.0, KEYAA ;若A键按下跳转,调时 JB 20H.1, K
8、EYCC ;若B键按下跳转,调闹 JB 20H.2, KEYEE ;若C键按下跳转,切换秒表 JB 20H.3, KEYDD ;若D键按下跳转,暂停 LJMP LOOP;-秒表显示程序-KEYEE: CLR ET1 CLR TR1 SETB ET0 SETB TR0MBLOOP: LCALL DIRS LCALL DIRS LCALL KEYCS JB 20H.2, OUTSETS JB 20H.3, MBZ LJMP MBLOOPOUTSETS:CLR ET0 CLR TR0 SETB ET1 SETB TR1 LJMP LOOPMBZ: CLR ET0 CLR TR0MBZLOOP:LCA
9、LL KEYCS JB 20H.3, OUTMBZ JB 20H.2, OUTSETS LJMP MBZLOOPOUTMBZ: SETB ET0 SETB TR0 LJMP MBLOOP;-;-闹钟调整程序-;-KEYCC: CLR ET1 LCALL SETCH SETB ET1 LJMP LOOP;-;-暂停-;-KEYDD: CLR ET1 CLR TR1LOOPSP: LCALL KEYC ;键扫描 JB 20H.3, OUTSP ;D键按下,暂停取消,继续走 LJMP LOOPSPOUTSP: SETB TR1 SETB ET1 LJMP LOOP ;-;-时钟调整程序-;-KEYA
10、A: CLR TR1 CLR ET1 LJMP SETHHOUTSET: SETB ET1 SETB TR1 LJMP LOOP;-时位调整-;-SETHH: MOV R5, #0FFHLOOPH0: 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键按下,加 1H3: JN
11、B 20H.3, H4 LJMP SUBH1 ;D键按下,减1H4: DJNZ R5, LOOPH0 ;无键按下,循环,返回 LJMP OUTSET;-时加减一-ADDH1: MOV R0, #79H ;加一 LCALL ADD1 LJMP SETH SUBH1: MOV R0, #79H ;减一 LCALL SUBBH1 LJMP SETHSETH: MOV R0, #79H MOV R1, #7AH LCALL RDIRH CJNE R3, #24H, SETHH MOV 79H, #00H MOV 7AH, #00H LJMP SETHH;=分位调整=SETMM: MOV R5, #0F
12、FHLOOPM0: 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 OUTSETM2: JNB 20H.2, M3 LJMP ADDM1M3: JNB 20H.3, M4 LJMP SUBBMM4: DJNZ R5, LOOPM0 LJMP OUTSET;-分加减一-ADDM1: MOV R0, #77H ;加一 LCALL ADD1 LJMP SETMSUBBM: MOV R0, #77H ;
13、减一 LCALL SUBBMS LJMP SETMSETM: MOV R0, #77H MOV R1, #78H LCALL RDIRM CJNE R3, #60H, SETMM MOV 77H, #00H MOV 78H, #00H LJMP SETMM;=秒位调整=SETSS: MOV R5, #0FFHLOOPS0: MOV R0, #75H MOV R1, #76H LCALL RDIRS LCALL DIR LCALL DIR LCALL KEYC JNB 20H.0, S1 LJMP SETHHS1: JNB 20H.1, S2 LJMP OUTSETS2: JNB 20H.2,
14、S3 LJMP ADDS1S3: JNB 20H.3, S4 LJMP SUBBSS4: DJNZ R5, LOOPS0 LJMP OUTSET;-秒加减一-ADDS1: MOV R0, #75H ;加一 LCALL ADD1 LJMP SETSSUBBS: MOV R0, #75H ;减一 LCALL SUBBMS LJMP SETSSETS: MOV R0, #75H MOV R1, #76H LCALL RDIRS CJNE R3, #60H, SETSS MOV 75H, #00H MOV 76H, #00H LJMP SETSS;-;=闹钟调整子程序=;-;=时位调整=SETCHH:
15、 MOV R5, #0FFHLOOPCH0: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 ADDCH1CH2: JNB 20H.3, CH3 LJMP SUBCH1CH3: DJNZ R5, LOOPCH0 LJMP OUTSC;-时加减一-ADDCH1: MOV R0, #6BH ;加一 LCALL ADD1 LJMP SETCH
16、SUBCH1: MOV R0, #6BH ;减一 LCALL SUBBH1 LJMP SETCHSETCH: 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, #0FFHLOOPCM0:MOV R0, #69H MOV R1, #6AH LCALL RDIRM LCALL DIR LCALL KEYC JNB 20H.0, CM
17、0 LJMP OUTSCCM0: JNB 20H.1, CM1 LJMP SETCHCM1: JNB 20H.2, CM2 LJMP ADDCM1CM2: JNB 20H.3, CM3 LJMP SUBCM1CM3: DJNZ R5, LOOPCM0 LJMP OUTSC;-分加减一-ADDCM1: MOV R0, #69H ;加一 LCALL ADD1 LJMP SETCMSUBCM1: MOV R0, #69H ;减一 LCALL SUBBMS LJMP SETCMSETCM: MOV R0, #69H MOV R1, #6AH LCALL RDIRM CJNE R3, #60H, SET
18、CMM MOV 6AH, #00H MOV 69H, #00H MOV R0, #69H MOV R1, #6AH LCALL RDIRM LJMP SETCMMOUTSC: 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 RETRDIRM: MOV 6DH, 7BH MOV 6EH, 7BH MOV 6FH, 7BH MOV 70H, R0 MOV 71H, R1 MOV 72H, 7B
19、H 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, 20HKEYSF: LCALL KEYDEAL JZ KEY1 LCALL DIR LJMP KEY
20、SF ;当键按下弹起后保存键值,返回KEY1: MOV 20H, BEXIT: RET;-秒表键扫描子程序-KEYCS: LCALL KEYDEAL ;键扫描子程序 LCALL DIRS LCALL DIRS LCALL KEYDEAL JZ EXITS MOV B, 20HKEYSFS: LCALL KEYDEAL JZ KEY1S LCALL DIRS LJMP KEYSFSKEY1S: MOV 20H, BEXITS: RET;-P1口处理子程序-KEYDEAL:PUSH PSW ;P1口处理子程序 MOV A, P1 CPL A ANL A, #0FH MOV 20H, A POP P
21、SW RET;-;=1S计时程序=;-INTT1: PUSH PSW PUSH ACC CLR ET1 CLR TR1 MOV TH1, #0BH MOV TL1, #0DCH SETB TR1 DJNZ R7, OUTT0ADDSS: MOV R7, #08H MOV R0, #75H LCALL ADD1 CLR C CJNE R3, #60H, ADDMMADDMM: JC OUTT1 MOV 75H, #00H MOV 76H, #00H MOV R0, #77H LCALL ADD1 CLR C CJNE R3, #60H, ADDHHADDHH: JC OUTT0 MOV 77H,
22、 #00H MOV 78H, #00H MOV R0, #79H LCALL ADD1 CLR C CJNE R3, #24H, HOURHOUR: JC OUTT0 MOV R0, #75H MOV R1, #06H LCALL CLR0OUTT0: MOV 6FH, #0CH ;熄灭符 MOV 72H, #0CH LJMP OUTT2OUTT1: 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计时程序-IN
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1