仿真图:
系统采用通用的80C51芯片,显示器为6个共阳极LED数码管,用1个BCD 7段译码器74LS47驱动数码管(74LS47的输入为BCD码,其输出级为集电极开路输出,可直接驱动7段译码管,具有首尾消零等特点),用3-8译码器74LS138的输出作为动态扫描时数码管的选通信号,因为采用了上述两个芯片,所以在对数码管进行扫描显示时,只需要单片机的7条I/O线就能完成显示功能了。
选用P0.0--P0.3作为显示数据值的输出,连接在BCD 7段译码器74LS47的BCD码输入端,P0.4--P0.6作为扫描值的输出连接在3-8译码器74LS138的输入端(74LS138的A、B、C),因此,写程序时应以P0口高4位为位扫描值,低4位为显示数据值(分离BCD码)。由于LED数据管点亮时耗电量较大,因此使用了排阻作为电源驱动输出,以保证数码管的正常亮度。单片机的P1.0--P1.5口分别接在S1--S6 6个按键上,以控制“时”,“分”,“秒”的调整。
时间以24小时为一个周期,数字时钟钟的格式为:XX XX XX,由左向右分别为:时、分、秒。完成显示由秒加1,一直加1至59,再恢复为00;分加1,一直加1至59,再恢复00;时加1,一直加1至23,再恢复00。
***** 按键功能*****
1.启动时,数字时钟从23:59:00 开始自动计时;
2.按键S1控制对“时”的调整,每按一次时计数值加1;
3.按键S2控制对“分”的调整,每按一次分计数值加1;
4.按键S3控制对“秒”的调整,每按一次秒计数值加1;
5.按键S4控制对“时”的调整,每按一次时计数值减1;
6.按键S5控制对“分”的调整,每按一次分计数值减1;
7.按键S6控制对“秒”的调整,每按一次秒计数值减1。
课程设计报告内容预览:
单片机源程序如下:
- ORG 0000H
- LJMP START
- ORG 000BH
- LJMP TT0
- ORG 0050H
- START:
- MOV SP,#70H
- MOV 36H,#00H ;(36H)为扫描指针
- MOV 40H,#00H ;秒控制
- MOV 41H,#59H ;分控制
- MOV 42H,#23H ;时控制
- MOV 30H,#00H
- MOV 31H,#00H ;显示秒
- MOV 32H,#09H
- MOV 33H,#05H ;显示分
- MOV 34H,#03H
- MOV 35H,#02H ;显示时
- MOV TMOD,#01H ;定时器T0工作方式设定
- MOV TL0,#0B0H ;设置定时器T0低4位初值
- MOV TH0,#3CH ;设置定时器T0高4位初值
- MOV IE,#82H ;闭合EA,ET0
- MOV 50H,#20 ;定时1秒循环次数
- SETB TR0
- LOOP: JB P1.0,N2 ;S1按下时加1
- CALL DE ;消除抖动
- MOV A,42H
- ADD A,#01H
- DA A
- MOV 42H,A
- CJNE A,#24H,N1
- MOV 42H,#00H
- N1: JNB P1.0,$
- CALL DE
- N2: JB P1.1,N4 ;S2按下分加1
- CALL DE
- MOV A,41H
- ADD A,#01H
- DA A
- MOV 41H,A
- CJNE A,#60H,N3
- MOV 41H,#00H
- N3: JNB P1.1,$
- CALL DE
- N4: JB P1.2,N6 ;S3按下秒加1
- CALL DE
- MOV A,40H
- ADD A,#01H
- DA A
- MOV 40H,A
- CJNE A,#60H,N5
- MOV 40H,#00H
- N5: JNB P1.2,$
- CALL DE
- N6: JB P1.3,N8 ;S4按下时减1
- CALL DE
- MOV R7,34H
- CJNE R7,#00H,N60
- MOV R6,35H
- CJNE R6,#00H,N61
- MOV 42H,#23H
- JMP N7
- N60: MOV A,34H
- DEC A
- MOV 34H,A
- MOV A,35H
- SWAP A
- ADD A,34H
- MOV 42H,A
- JMP N7
- N61: MOV 34H,#09H
- MOV A,35H
- DEC A
- SWAP A
- ADD A,34H
- MOV 42H,A
- N7: JNB P1.3,$
- CALL DE
- N8: JB P1.4,N10 ;S5按下分减1
- CALL DE
- MOV R7,32H
- CJNE R7,#00H,N80
- MOV R6,33H
- CJNE R6,#00H,N81
- MOV 41H,#59H
- JMP N9
- N80: MOV A,32H
- DEC A
- MOV 32H,A
- MOV A,33H
- SWAP A
- ADD A,32H
- MOV 41H,A
- JMP N9
- N81: MOV 32H,#09H
- MOV A,33H
- DEC A
- SWAP A
- ADD A,32H
- MOV 41H,A
- N9: JNB P1.4,$
- CALL DE
- N10: JB P1.5,N11 ; S6按下秒减1
- CALL DE
- MOV R7,30H
- CJNE R7,#00H,N100
- MOV R6,31H
- CJNE R6,#00H,N101
- MOV 40H,#59H
- JMP N11
- N100: MOV A,30H
- DEC A
- MOV 30H,A
- MOV A,31H
- SWAP A
- ADD A,30H
- MOV 40H,A
- JMP N11
- N101: MOV 30H,#09H
- MOV A,31H
- DEC A
- MOV 31H,A
- SWAP A
- ADD A,30H
- MOV 40H,A
- N11: JNB P1.5,$
- CALL DE
-
- TT0: MOV TH0,#3CH
- MOV TL0,#0B0H
- PUSH ACC
- PUSH PSW
- DJNZ 50H,TINT0
- CALL TIME
- CALL VIEW
- TINT0: CALL SCAN
- POP ACC
- POP PSW
- LJMP LOOP
- SCAN: MOV R0,#36H
- SCAN0: MOV A,@R0
- ADD A,#30H ;A加30H即为显示缓冲区地址
- MOV R1,A
- MOV A,@R0
- SWAP A
- ORL A,@R1
- MOV P0,A ;P0高4位为扫描值,低4位为显示数据值
- CALL DELAY
- INC @R0
- CJNE @R0,#06H,SCAN0
- MOV @R0,#00H
- RET
- TIME: MOV A,40H
- ADD A,#01H
- DA A
- MOV 40H,A
- CJNE A,#60H,TTI
- MOV 40H,#00H
- MOV A,41H
- ADD A,#01H
- DA A
- MOV 41H,A
- MOV A,41H
- CJNE A,#60H,TTI
- MOV 41H,#00H
- MOV A,42H
- ADD A,#01H
- DA A
- MOV 42H,A
- CJNE A,#24H,TTI
- MOV 42H,#00H
- TTI: RET
- VIEW: MOV A,40H ;30H为显示缓冲区首地址
- ANL A,#0FH
- MOV 30H,A
- MOV A,40H
- SWAP A
- ANL A,#0FH
- MOV 31H,A
- MOV A,41H
- ANL A,#0FH
- MOV 32H,A
- MOV A,41H
- SWAP A
- ANL A,#0FH
- MOV 33H,A
- MOV A,42H
- ANL A,#0FH
- MOV 34H,A
- MOV A,42H
- SWAP A
- ANL A,#0FH
- MOV 35H,A
- RET
- DELAY: MOV R7,#65
- DJNZ R7,$
- RET
- DE: MOV R4,#10 ;延时5ms
- DE1: MOV R5,#249
- DJNZ R5,$
- DJNZ R4,DE1
- RET
- END
复制代码
所有资料51hei提供下载:
单片机课程设计可运行.zip
(393.35 KB, 下载次数: 82)
|