采用的单片机是89C52,用了两个锁存器74HC573来接入数码管的位选和段码引脚。
部分源码:
Proteus工程图:(下面的4*4按钮、最上面的128*64LCD显示屏和左边的发光二极管非本次内容的必要部分,可以删除)
三个按钮分别对应的功能:按钮1:在”调节时“和”调节分“中间轮换
按钮2:时间数值+1
按钮3:时间数值 -1
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机汇编语言源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 000BH
- LJMP INTT0
- MAIN:
- MOV R0,#70H ;70后面的12位地址清零
- MOV R7,#0CH
- INIT: MOV @R0,#00H
- INC R0
- DJNZ R7,INIT
-
- MOV 72H,#0AH
- MOV 75H,#0AH
-
- MOV TMOD,#01H
- MOV TL0,#00H
- MOV TH0,#4CH
- SETB EA
- SETB ET0
- SETB TR0
-
- START1: LCALL SCAN
- LCALL KEYSCAN
- SJMP START1
-
- ;延时1MS子程序
- DL1MS: MOV R6,#14H ;20*25*2us
- DL1: MOV R7,#19H
- DL2: DJNZ R7,DL2
- DJNZ R6,DL1
- RET
- ;延时20MS子程序
- DL20MS: MOV A,R2
- PUSH Acc
- MOV R2,#40
- DLY:MOV R4,#250
- DJNZ R4,$
- DJNZ R2,DLY
- POP Acc
- MOV R2,A
- RET
- ;数码管显示程序
- SCAN: MOV A,78H ;时间存入显示缓冲区相应位置
- MOV B,#0AH
- DIV AB
- MOV 71H,A ;秒
- MOV 70H,B
- MOV A,79H
- MOV B,#0AH
- DIV AB
- MOV 74H,A ;分
- MOV 73H,B
- MOV A,7AH
- MOV B,#0AH
- DIV AB
- MOV 77H,A ;时
- MOV 76H,B
-
- MOV R1,#70H ;循环扫描显示
- MOV R5,#7FH
- MOV R3,#08H
-
-
- SCAN1: MOV A,R5
- MOV P0,A ;位选信号
- SETB P2.7
- CLR P2.7
- MOV A,@R1
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
-
- MOV P0,A
- SETB P2.6
- CLR P2.6
- LCALL DL1MS
-
- INC R1
- MOV A,R5
- RR A
- MOV R5,A
- DJNZ R3,SCAN1
-
-
- MOV P0,#00H ;消影
- SETB P2.6
- CLR P2.6
-
- MOV P0,#0FFH
- SETB P2.7
- CLR P2.7
- RET
- TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;“0~9”,“-,_”的共阴极字段码
-
- ;定时器/计数器T0中断服务程序
- INTT0: PUSH Acc
- PUSH PSW
- CLR ET0
- CLR TR0
- MOV TL0,#00H
- MOV TH0,#4CH
- SETB TR0
- INC 7BH
- MOV A,7BH
- CJNE A,#14H,OUTT0 ;20*50=1s
- MOV 7BH,#00H
- INC 78H
- MOV A,78H
- CJNE A,#3CH,OUTT0 ;1s*60=1min
- MOV 78H,#00H ;秒计数器清零
- INC 79H ;分计数器+1
- MOV A,79H
- CJNE A,#3CH,OUTT0
- MOV 79H,#00H
- INC 7AH ;时计数器+1
- MOV A,7AH
- CJNE A,#18H,OUTT0
- MOV 7AH,#00H ;计到24后时计数器清零
- OUTT0:
- SETB ET0
- POP PSW
- POP Acc
- RETI
-
- ;按键处理程序
- KEYSCAN: CLR EA
- JNB P2.0,KEYSCAN0
- JNB P2.1,KEYSCAN1
- JNB P2.2,KEYSCAN2
- KEYOUT: SETB EA
- RET
- KEYSCAN0: LCALL DL20MS
- JB P2.0,KEYOUT
- WAIT0: JNB P2.0,WAIT0
- INC 7CH
- MOV A,7CH
- CLR ET0
- CLR TR0
- CJNE A,#03H,KEYOUT
- MOV 7CH,#00H
- SETB ET0
- SETB TR0
- SJMP KEYOUT
- KEYSCAN1: LCALL DL20MS
- JB P2.1,KEYOUT
- WAIT1: JNB P2.1,WAIT1
- MOV A,7CH
- CJNE A,#02H,KSCAN11
- INC 79H
- MOV A,79H
- CJNE A,#3CH,KEYOUT
- MOV 79H,#00
- SJMP KEYOUT
- KSCAN11: INC 7AH
- MOV A,7AH
- CJNE A,#18H,KEYOUT
- MOV 7AH,#00
- SJMP KEYOUT
- KEYSCAN2: LCALL DL20MS
- JB P2.2,KEYOUT
- WAIT2: JNB P2.2,WAIT2
- MOV A,7CH
- CJNE A,#02H,KSCAN21
- DEC 79H
- MOV A,79H
- CJNE A,#0FFH,KEYOUT
- MOV 79H,#3BH
- SJMP KEYOUT
- KSCAN21: DEC 7AH
- MOV A,7AH
- CJNE A,#0FFH,KEYOUT
- MOV 7AH,#17H
- SJMP KEYOUT
- END
复制代码
所有资料51hei附件下载:
Proteus仿真8.13和汇编程序.7z
(64.52 KB, 下载次数: 32)
|