编写了一个控制程序,实现数码管上显示时-分-秒,通过按键可以设置时钟初始值。 1.proteus中电路图
2.代码
见附件
3.仿真 按键功能说明:
数码管初始状态为全零,当按下开关0,数字时钟开始计时,当按下开关1,数字时钟清零,当按下开关2,数字时钟的分加一,当按下开关3,数字时钟的分减一。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)完整文档下载(word格式 可编辑):
单片机源程序如下:
- ;//数码管显示01234569
- ;ORG 0000H
- ;AJMP START
- ;ORG 0030H
- ;START: MOV SP,#40H
- ;S1: MOV P2,#01H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#02H
- ;MOV P0,#0F9H
- ;LCALL DELAY
- ;MOV P2,#04H
- ;MOV P0,#0A4H
- ;LCALL DELAY
- ;MOV P2,#08H
- ;MOV P0,#0B0H
- ;LCALL DELAY
- ;MOV P2,#10H
- ;MOV P0,#099H
- ;LCALL DELAY
- ;MOV P2,#20H
- ;MOV P0,#092H
- ;LCALL DELAY
- ;MOV P2,#40H
- ;MOV P0,#82H
- ;LCALL DELAY
- ;MOV P2,#80H
- ;MOV P0,#90H
- ;LCALL DELAY
- ;SJMP S1
- ;DELAY: MOV R7,#20H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
-
-
- ;//数码管显示00-00-00
- ;ORG 0000H
- ;AJMP START
- ;ORG 0030H
- ;START: MOV SP,#40H
- ;S1: MOV P2,#01H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#02H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#04H
- ;MOV P0,#0BFH
- ;LCALL DELAY
- ;MOV P2,#08H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#10H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#20H
- ;MOV P0,#0BFH
- ;LCALL DELAY
- ;MOV P2,#40H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#80H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;SJMP S1
- ;DELAY: MOV R7,#20H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
-
- ;ORG 0000H
- ;MOV A,#0
- ;MOV R0,A
- ;MOV R1,A
- ;MOV R2,A
- ;AJMP MAIN
- ;ORG 000BH //定时器0入口
- ;AJMP INT_T0
- ;ORG 0100H
- ;MAIN: MOV SP,#40H
- ;MOV TMOD,#01H //定时器0工作方式1
- ;MOV TL0,#78H //写入初值
- ;MOV TH0,#0ECH
- ;SETB EA //允许
- ;SETB ET0
- ;SETB TR0 //启动定时器0
- ;HERE: LJMP HERE
- ;ORG 0200H
- ;INT_T0: MOV A,#0
- ;INC R0
- ;CJNE R0,#100,MOVEON //不等跳转
- ;MOV R0,A
- ;INC R1
- ;CJNE R1,#60,MOVEON
- ;MOV R1,A
- ;INC R2
- ;MOVEON: MOV TL0,#78H
- ;MOV TH0,#0ECH
- ;RETI
- ;DELAY: MOV R7,#10H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
- ;TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
- ;DB 92H,82H,0F8H,80H,90H
- ;END
- ;//定时器设计时钟10MS
- ;ORG 0000H
- ;MOV A,#0
- ;MOV R0,A
- ;MOV R1,A
- ;MOV R2,A
- ;AJMP MAIN
- ;ORG 000BH //定时器0入口
- ;AJMP INT_T0
- ;ORG 0100H
- ;MAIN: MOV SP,#40H
- ;MOV TMOD,#01H //定时器0工作方式1
- ;MOV TL0,#78H //写入初值
- ;MOV TH0,#0ECH
- ;SETB EA //允许
- ;SETB ET0
- ;SETB TR0 //启动定时器0
-
- ;HERE: MOV A,R0
- ;MOV B,#10
- ;DIV AB //A中为商,B为余数
-
- ;;MOV R3,A //显示查表
- ;MOV DPTR,#TABLE //秒的十位查表
- ;MOVC A,@A+DPTR
- ;MOV P2,#40H //位选
- ;MOV P0,A //段选
- ;LCALL DELAY
-
- ;MOV A,B //秒的个位查表
- ;MOVC A,@A+DPTR
- ;MOV P2,#80H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;MOV P2,#20H
- ;MOV P0,#0BFH
- ;LCALL DELAY
-
- ;MOV A,R1
- ;MOV B,#10
- ;DIV AB //A中为商,B为余数
- ;MOV DPTR,#TABLE
- ;MOVC A,@A+DPTR //秒
- ;MOV P2,#08H
- ;MOV P0,A
- ;LCALL DELAY
- ;MOV A,B //
- ;MOVC A,@A+DPTR
- ;MOV P2,#10H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;MOV P2,#04H
- ;MOV P0,#0BFH
- ;LCALL DELAY
-
- ;MOV A,R2
- ;MOV B,#10
- ;DIV AB //A中为商,B为余数
- ;MOV DPTR,#TABLE
- ;MOVC A,@A+DPTR //分
- ;MOV P2,#01H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;MOV A,B //
- ;MOVC A,@A+DPTR
- ;MOV P2,#02H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;LJMP HERE
-
- ;ORG 0200H
- ;INT_T0: PUSH ACC
- ;MOV A,#0
- ;INC R0
- ;CJNE R0,#100,MOVEON //不等跳转
- ;MOV R0,A
- ;INC R1
- ;CJNE R1,#60,MOVEON
- ;MOV R1,A
- ;INC R2
-
- ;MOVEON: MOV TL0,#78H
- ;MOV TH0,#0ECH
- ;POP ACC
- ;RETI
-
- ;DELAY: MOV R7,#10H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
- ;TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
- ;DB 92H,82H,0F8H,80H,90H
- ;END
-
-
- //按键控制的时钟
- K0 EQU P3.0
- K1 EQU P3.1
- K2 EQU P3.2
- K3 EQU P3.3
- ORG 0000H
- MOV A,#0
- MOV R0,A
- MOV R1,A
- MOV R2,A
- MOV R4,A
- AJMP MAIN
- ORG 000BH //定时器0入口
- AJMP INT_T0
- ORG 0100H
- MAIN: MOV SP,#40H
- MOV TMOD,#01H //定时器0工作方式1
- MOV TL0,#78H //写入初值
- MOV TH0,#0ECH
- SETB EA //允许
- SETB ET0
- START: PUSH ACC
- MOV A,#0FFH
- MOV P3,A
- POP ACC
- HERE:
-
- MOV A,R0
- MOV B,#10
- DIV AB //A中为商,B为余数
- MOV DPTR,#TABLE //秒的十位查表
- MOVC A,@A+DPTR
- MOV P2,#40H //位选
- MOV P0,A //段选
- LCALL DELAY
- MOV A,B //秒的个位查表
- MOVC A,@A+DPTR
- MOV P2,#80H
- MOV P0,A
- LCALL DELAY
- MOV P2,#20H
- MOV P0,#0BFH
- LCALL DELAY
- MOV A,R1
- MOV B,#10
- DIV AB //A中为商,B为余数
- MOV DPTR,#TABLE
- MOVC A,@A+DPTR //秒
- MOV P2,#08H
- MOV P0,A
- LCALL DELAY
- MOV A,B //
- MOVC A,@A+DPTR
- MOV P2,#10H
- MOV P0,A
- LCALL DELAY
- MOV P2,#04H
- MOV P0,#0BFH
- LCALL DELAY
- MOV A,R2
- MOV B,#10
- DIV AB //A中为商,B为余数
- MOV DPTR,#TABLE
- MOVC A,@A+DPTR //分
- MOV P2,#01H
- MOV P0,A
- LCALL DELAY
- MOV A,B
- MOVC A,@A+DPTR
- MOV P2,#02H
- MOV P0,A
- LCALL DELAY
- JNB K0,KEY0
- JNB K1,KEY1
- JNB K2,KEY2
- JNB K3,KEY3
- LJMP HERE
- KEY0: LCALL DELAY10
- JNB K0,$
- MOV R0,#0
- MOV R1,#0
- MOV R2,#0
- CLR TR0
- MOV TL0,#78H
- MOV TH0,#0ECH
- AJMP START
- KEY1: LCALL DELAY10
- JNB K1,$
- SETB TR0
- AJMP START
- KEY2: LCALL DELAY10
- JNB K2,$
- INC R2
- AJMP START
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
数字时钟.rar
(86.82 KB, 下载次数: 58)
|