/*******************************************************************/
/******************P0作段码,P3位选码*******************************/
/*******************************************************************/
/*******************************************************************/
/*******************************************************************/
M BIT P1.0 //主键
U BIT P1.1 //+1键
D BIT P1.2 //-1键
R BIT P1.5 //移位键
O BIT P1.6 //OK键
SECOND EQU 30H //秒
MINUTE EQU 31H //分
HOUR EQU 32H //小时
TCNT EQU 33H //50毫秒到1秒的中转
SS EQU 34H
ORG 00H
SJMP START
ORG 0BH //T0中断
LJMP TIME0
START: MOV DPTR,#TABLE
MOV HOUR,#0 ;初始化
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#(65536-50000)/256 ;定时50MS
MOV TL0,#(65536-50000)MOD 256
MOV IE,#82H
ANJIANSAOMIAO:CLR F0
MOV R6,#00
SETB TR0
LCALL DISPLAY
JNB M,MAIN //主键输入
LJMP ANJIANSAOMIAO //按键扫描
MAIN:
LCALL DELAY //按键去抖
JB M,ANJIANSAOMIAO //如M=1,是抖动返回
CLR TR0
SETB F0
WUHUI:
LCALL DISPLAY //数码管动态扫描
JNB O,OK //确定键
JNB U,JIA //加一键
JNB D,JIAN //减一键
JNB R,YIWEI //移位键
SJMP WUHUI
YIWEI:
LCALL DELAY
JB R,WUHUI //移位处理子程序
INC R6 //R6用0~3作LED0~LED3位
CJNE R6,#3,HUI
MOV R6,#00H
HUI:LJMP WUHUI
OK: //OK键处理子程序
LCALL DELAY
JB O,WUHUI
LJMP ANJIANSAOMIAO
JIA: //加一处理子程序
LCALL DELAY
JB U,WUHUI
CJNE R6,#0,YIWEIJIA
MOV R5,HOUR //R5作LED0~3的中转
CJNE R5,#24,I0 //到24变0返回
MOV HOUR,#00
LJMP WUHUI
I0:INC HOUR //没有到24加1
YIWEIJIA:CJNE R6,#1,ERWEIJIA
MOV R5,MINUTE
CJNE R5,#59,I1
MOV MINUTE,#00
LJMP WUHUI
I1:INC MINUTE
ERWEIJIA:CJNE R6,#2,GO
MOV R5,SECOND
CJNE R5,#59,I2
MOV SECOND,#00
LJMP WUHUI
I2:INC SECOND
GO:LJMP WUHUI
JIAN:
LCALL DELAY //减一处理子程序
JB D,WUHUI
CJNE R6,#0,YIWEIJIAN
MOV R5,HOUR
CJNE R5,#0,D0
MOV HOUR,#24
LJMP WUHUI
D0:DEC HOUR
YIWEIJIAN:CJNE R6,#1,ERWEIJIAN
MOV R5,MINUTE
CJNE R5,#0,D1
MOV MINUTE,#59
LJMP WUHUI
D1:DEC MINUTE
ERWEIJIAN:CJNE R6,#2,GO1
MOV R5,SECOND
CJNE R5,#0,D2
MOV SECOND,#59
LJMP WUHUI
D2:DEC SECOND
GO1:LJMP WUHUI
TIME0: MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
INC TCNT
MOV A,TCNT
CJNE A,#20,RETURN ;计时1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETURN
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETURN
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETURN
MOV HOUR,#0
RETURN: RETI
DISPLAY:
MOV A,SECOND ;显示秒
MOV B,#10
DIV AB
CLR P3.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.6
MOV A,B
CLR P3.7
MOVC A,@A+DPTR
JNB F0,QU
CJNE R6,#2,QU
ORL A,#80H
QU: MOV P0,A
LCALL DELAY
SETB P3.7
CLR P3.5
MOV P0,#40H ;显示分隔符
LCALL DELAY
SETB P3.5
MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P3.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.3
MOV A,B
CLR P3.4
MOVC A,@A+DPTR
JNB F0,QU1
CJNE R6,#1,QU1
ORL A,#80H
QU1:MOV P0,A
LCALL DELAY
SETB P3.4
CLR P3.2
MOV P0,#40H ;显示分隔符
LCALL DELAY
SETB P3.2
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P3.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.0
MOV A,B
CLR P3.1
MOVC A,@A+DPTR
JNB F0,QU2
CJNE R6,#0,QU2
ORL A,#80H
QU2:MOV P0,A
LCALL DELAY
SETB P3.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DELAY: MOV R0,#10
D5: MOV R7,#250
DJNZ R7,$
DJNZ R0,D5
RET
END
文章评论(0条评论)
登录后参与讨论