发布网友 发布时间:2022-05-01 14:18
共1个回答
热心网友 时间:2023-10-17 22:56
软件是要硬件支持的 下面有个图参考
程序可能要调试一下 你是 高手这个应该没什么问题吧。。。
LED BIT P3.7 ;指示灯
TT0 EQU 09H
TT1 EQU 0AH
TT2 EQU 0BH ;位定义
XIAN0 EQU 50H
XIAN1 EQU 51H
XIAN2 EQU 52H
XIAN3 EQU 53H ;显存定义
FEN EQU 54H ;分存定义
SHI EQU 55H ;时存定义
ZHI EQU 57H ;按钮暂存内容定义
FLASH BIT 30H ;闪烁标志位定义
SBIAO BIT 31H ;定时器工作两种状态的标志位
KEY BIT 32H ;正常工作时屏蔽“加键”标志位
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP NIEDS0
ORG 0050H
MAIN:
MOV SP,#60H
MOV ZHI,#00 ;按钮初始值
MOV R7,#10
MOV R6,#2
MOV R5,#10
MOV R4,#2
MOV XIAN0,#0
MOV XIAN1,#0
MOV XIAN2,#0
MOV XIAN3,#0
MOV R0,#FEN
MOV FEN,#0
MOV SHI,#0
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB FLASH ;开机显示不闪
SETB SBIAO ;开机定时器正常工作
SETB LED
CLR KEY ;初始屏蔽加键
SETB TR0
SETB ET0
SETB EA
NIEXQ:
LCALL DISP
LCALL KEYHAND
LJMP NIEXQ
NIEDS0:
PUSH ACC
PUSH PSW
JNB SBIAO,DSSS ;判断是正常工作还是闪烁标志位取反
DJNZ R5,NIEOUT
MOV R5,#10
CPL LED ;指示灯1S闪烁,因为是取反,所以要500MS取反一次
DJNZ R4,NIEOUT
MOV R4,#2
MOV A,FEN
INC A
MOV FEN,A
CJNE A,#60,NIEOUT
MOV FEN,#0
MOV A,SHI
INC A
MOV SHI,A
CJNE A,#24,NIEOUT
MOV SHI,#0
AJMP NIEOUT
DSSS:
DJNZ R7,NIEOUT
MOV R7,#10
CPL FLASH ;进入调整状态,标志位取反,显示中判断
CPL LED ;指示灯在调整时也闪烁
DJNZ R6,NIEOUT
MOV R6,#2
NIEOUT:
MOV TH0,#3CH
MOV TL0,#0B0H
POP PSW
POP ACC
RETI
DISP:
LCALL PAND ;判断子程序,为了达到调整时闪烁
CLR P3.3
SETB P3.2
SETB P3.1
SETB P3.0 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN0
LCALL CHAB ;查段码
CLR P3.2
SETB P3.3
SETB P3.1
SETB P3.0 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN1
LCALL CHAB ;查段码
CLR P3.1
SETB P3.2
SETB P3.3
SETB P3.0 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN2
LCALL CHAB ;查段码
CLR P3.0
SETB P3.1
SETB P3.2
SETB P3.3 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN3
LCALL CHAB ;查段码
RET
CHAB:
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#0FFH
RET
PAND: ;判断是否闪烁???
MOV A,R0
CJNE A,#FEN,PPS
JNB FLASH,FFS
LCALL DIVDIV
RET
FFS:
MOV XIAN1,#10
MOV XIAN0,#10
RET
PPS:
JNB FLASH,SSS
LCALL DIVDIV
RET
SSS:
MOV XIAN2,#10
MOV XIAN3,#10
RET
DIVDIV: ;分``时分解
MOV A,FEN
MOV B,#10
DIV AB
MOV XIAN1,A
MOV XIAN0,B
MOV A,SHI
MOV B,#10
DIV AB
MOV XIAN3,A
MOV XIAN2,B
RET
KEYHAND: ;按键扫描子程序
LCALL KAP
JZ NOKEY
PUSH P1 ;暂存P1状态!!
LCALL DISP
POP P1
LCALL KAP
JZ NOKEY
MOV A,P1
JNB ACC.0,K1
JNB ACC.1,K2
NOKEY:
RET
KAP: ;通用型KAP
MOV A,P1
ORL A,#0FCH
CPL A
RET
DENDAI: ;等待键弹起
PUSH P1
LCALL DISP
POP P1
LCALL KAP
JNZ DENDAI
RET
K1:
LCALL DENDAI
MOV A,ZHI
INC A
MOV ZHI,A
CJNE A,#1,KTF
CLR SBIAO ;按第一次时开启定时器中FLASH标志位取反``
SETB KEY ;取消屏蔽
RET
KTF:
CJNE A,#2,KKAI
MOV R0,#SHI ;按第二次属调时
RET
KKAI:
CJNE A,#3,K1OUT
MOV ZHI,#0
MOV R0,#FEN ;恢复初始状态``调分
SETB SBIAO ;开启定时1S工作
SETB FLASH ;判断PAND子程序中用到
CLR KEY ;屏蔽K2键
K1OUT :
RET
K2:
JNB KEY,K2OUT ;是否屏蔽
LCALL DENDAI
MOV A,R0
CJNE A,#FEN,KKS ;是否调分
MOV A,FEN
INC A
MOV FEN,A
CJNE A,#60,K2OUT
MOV FEN,#0
RET
KKS: ;不是调分``一定是调时
MOV A,SHI
INC A
MOV SHI,A
CJNE A,#24,K2OUT
MOV SHI,#0
K2OUT:
RET
DELAY:
MOV TT1,#02
DEE1:
MOV TT2,#0FFH
DJNZ TT2,$
DJNZ TT1,DEE1
RET
TAB:
DB 0FH,1FH,2FH,3FH,4FH,5FH,6FH,7FH,8FH,9FH,0FFH
END
热心网友 时间:2023-10-17 22:56
软件是要硬件支持的 下面有个图参考
程序可能要调试一下 你是 高手这个应该没什么问题吧。。。
LED BIT P3.7 ;指示灯
TT0 EQU 09H
TT1 EQU 0AH
TT2 EQU 0BH ;位定义
XIAN0 EQU 50H
XIAN1 EQU 51H
XIAN2 EQU 52H
XIAN3 EQU 53H ;显存定义
FEN EQU 54H ;分存定义
SHI EQU 55H ;时存定义
ZHI EQU 57H ;按钮暂存内容定义
FLASH BIT 30H ;闪烁标志位定义
SBIAO BIT 31H ;定时器工作两种状态的标志位
KEY BIT 32H ;正常工作时屏蔽“加键”标志位
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP NIEDS0
ORG 0050H
MAIN:
MOV SP,#60H
MOV ZHI,#00 ;按钮初始值
MOV R7,#10
MOV R6,#2
MOV R5,#10
MOV R4,#2
MOV XIAN0,#0
MOV XIAN1,#0
MOV XIAN2,#0
MOV XIAN3,#0
MOV R0,#FEN
MOV FEN,#0
MOV SHI,#0
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB FLASH ;开机显示不闪
SETB SBIAO ;开机定时器正常工作
SETB LED
CLR KEY ;初始屏蔽加键
SETB TR0
SETB ET0
SETB EA
NIEXQ:
LCALL DISP
LCALL KEYHAND
LJMP NIEXQ
NIEDS0:
PUSH ACC
PUSH PSW
JNB SBIAO,DSSS ;判断是正常工作还是闪烁标志位取反
DJNZ R5,NIEOUT
MOV R5,#10
CPL LED ;指示灯1S闪烁,因为是取反,所以要500MS取反一次
DJNZ R4,NIEOUT
MOV R4,#2
MOV A,FEN
INC A
MOV FEN,A
CJNE A,#60,NIEOUT
MOV FEN,#0
MOV A,SHI
INC A
MOV SHI,A
CJNE A,#24,NIEOUT
MOV SHI,#0
AJMP NIEOUT
DSSS:
DJNZ R7,NIEOUT
MOV R7,#10
CPL FLASH ;进入调整状态,标志位取反,显示中判断
CPL LED ;指示灯在调整时也闪烁
DJNZ R6,NIEOUT
MOV R6,#2
NIEOUT:
MOV TH0,#3CH
MOV TL0,#0B0H
POP PSW
POP ACC
RETI
DISP:
LCALL PAND ;判断子程序,为了达到调整时闪烁
CLR P3.3
SETB P3.2
SETB P3.1
SETB P3.0 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN0
LCALL CHAB ;查段码
CLR P3.2
SETB P3.3
SETB P3.1
SETB P3.0 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN1
LCALL CHAB ;查段码
CLR P3.1
SETB P3.2
SETB P3.3
SETB P3.0 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN2
LCALL CHAB ;查段码
CLR P3.0
SETB P3.1
SETB P3.2
SETB P3.3 ;直接对独立指定位CLR/SETB是为了不影响到P3.7指示灯的闪烁
MOV A,XIAN3
LCALL CHAB ;查段码
RET
CHAB:
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#0FFH
RET
PAND: ;判断是否闪烁???
MOV A,R0
CJNE A,#FEN,PPS
JNB FLASH,FFS
LCALL DIVDIV
RET
FFS:
MOV XIAN1,#10
MOV XIAN0,#10
RET
PPS:
JNB FLASH,SSS
LCALL DIVDIV
RET
SSS:
MOV XIAN2,#10
MOV XIAN3,#10
RET
DIVDIV: ;分``时分解
MOV A,FEN
MOV B,#10
DIV AB
MOV XIAN1,A
MOV XIAN0,B
MOV A,SHI
MOV B,#10
DIV AB
MOV XIAN3,A
MOV XIAN2,B
RET
KEYHAND: ;按键扫描子程序
LCALL KAP
JZ NOKEY
PUSH P1 ;暂存P1状态!!
LCALL DISP
POP P1
LCALL KAP
JZ NOKEY
MOV A,P1
JNB ACC.0,K1
JNB ACC.1,K2
NOKEY:
RET
KAP: ;通用型KAP
MOV A,P1
ORL A,#0FCH
CPL A
RET
DENDAI: ;等待键弹起
PUSH P1
LCALL DISP
POP P1
LCALL KAP
JNZ DENDAI
RET
K1:
LCALL DENDAI
MOV A,ZHI
INC A
MOV ZHI,A
CJNE A,#1,KTF
CLR SBIAO ;按第一次时开启定时器中FLASH标志位取反``
SETB KEY ;取消屏蔽
RET
KTF:
CJNE A,#2,KKAI
MOV R0,#SHI ;按第二次属调时
RET
KKAI:
CJNE A,#3,K1OUT
MOV ZHI,#0
MOV R0,#FEN ;恢复初始状态``调分
SETB SBIAO ;开启定时1S工作
SETB FLASH ;判断PAND子程序中用到
CLR KEY ;屏蔽K2键
K1OUT :
RET
K2:
JNB KEY,K2OUT ;是否屏蔽
LCALL DENDAI
MOV A,R0
CJNE A,#FEN,KKS ;是否调分
MOV A,FEN
INC A
MOV FEN,A
CJNE A,#60,K2OUT
MOV FEN,#0
RET
KKS: ;不是调分``一定是调时
MOV A,SHI
INC A
MOV SHI,A
CJNE A,#24,K2OUT
MOV SHI,#0
K2OUT:
RET
DELAY:
MOV TT1,#02
DEE1:
MOV TT2,#0FFH
DJNZ TT2,$
DJNZ TT1,DEE1
RET
TAB:
DB 0FH,1FH,2FH,3FH,4FH,5FH,6FH,7FH,8FH,9FH,0FFH
END