📄 key_led11
字号:
KEY_VALUE_OUT:
POP PSW
POP ACC
RET
;***************************************************************
;***************************************************************
;LED显示输出程序
;***************************************************************
TIME_MODE_SEL:
PUSH ACC
PUSH PSW
MOV A,KEY_VALUE
ANL A,#0F0H ;屏蔽低四位
MODE1: ;显示方式11-14 LED_DISPLAY1: LED逐个左移点亮
CJNE A,#10H, MODE2 ;判断是否为模式1
MOV A,KEY_VALUE
ANL A,#0FH ;屏蔽高四位
TIME11:
CJNE A,#01H,TIME12 ;判断显示时间是否为0。5S
JNB T05flag,TIME15 ;出口返回
CLR T05flag ;清0。5S到时间标志位
LCALL LED_DISPLAY1 ;调显示方式1
LJMP TIME15 ;出口返回
TIME12:
CJNE A,#02H,TIME13 ;判断显示时间是否为1。0S
JNB T10flag,TIME15 ;出口返回
CLR T10flag ;清1。0S到时间标志位
LCALL LED_DISPLAY1 ;调显示方式1
LJMP MT_OUT ;出口返回
TIME13:
CJNE A,#03H,TIME14 ;判断显示时间是否为1。5S
JNB T15flag,TIME15;出口返回
CLR T15flag ;清0。5S到时间标志位
LCALL LED_DISPLAY1 ;调显示方式1
LJMP TIME15 ;出口返回
TIME14:
CJNE A,#04H,TIME15 ;判断显示时间是否为2。0S
JNB T20flag,TIME15 ;出口返回
CLR T20flag ;清2。0S到时间标志位
LCALL LED_DISPLAY1 ;调显示方式1
LJMP TIME15 ;出口返回
TIME15:
LJMP MT_OUT
MODE2: ;显示方式21-24 LED_DISPLAY2: LED逐个右移点亮
CJNE A,#20H, MODE3 ;判断是否为模式2
MOV A,KEY_VALUE
ANL A,#0FH ;屏蔽高四位
TIME21:
CJNE A,#01H,TIME22 ;判断显示时间是否为0。5S
JNB T05flag,TIME25 ;出口返回
CLR T05flag ;清0。5S到时间标志位
LCALL LED_DISPLAY2 ;调显示方式2
LJMP TIME25 ;出口返回
TIME22:
CJNE A,#02H,TIME23 ;判断显示时间是否为1。0S
JNB T10flag,TIME25 ;出口返回
CLR T10flag ;清1。0S到时间标志位
LCALL LED_DISPLAY2 ;调显示方式2
LJMP TIME25 ;出口返回
TIME23:
CJNE A,#03H,TIME24 ;判断显示时间是否为1。5S
JNB T15flag,TIME25 ;出口返回
CLR T15flag ;清0。5S到时间标志位
LCALL LED_DISPLAY2 ;调显示方式2
LJMP TIME25 ;出口返回
TIME24:
CJNE A,#04H,TIME25 ;判断显示时间是否为2。0S
JNB T20flag,TIME25 ;出口返回
CLR T20flag ;清2。0S到时间标志位
LCALL LED_DISPLAY2 ;调显示方式2
LJMP TIME25 ;出口返回
TIME25:
LJMP MT_OUT
MODE3: ;显示方式31-34 LED_DISPLAY3: LED流水灯左移
CJNE A,#30H, MODE4 ;判断是否为模式3
MOV A,KEY_VALUE
ANL A,#0FH ;屏蔽高四位
TIME31:
CJNE A,#01H,TIME32 ;判断显示时间是否为0。5S
JNB T05flag,MT_OUT ;出口返回
CLR T05flag ;清0。5S到时间标志位
LCALL LED_DISPLAY3 ;调显示方式3
LJMP MT_OUT ;出口返回
TIME32:
CJNE A,#02H,TIME33 ;判断显示时间是否为1。0S
JNB T10flag,MT_OUT ;出口返回
CLR T10flag ;清1。0S到时间标志位
LCALL LED_DISPLAY3 ;调显示方式3
LJMP MT_OUT ;出口返回
TIME33:
CJNE A,#03H,TIME34 ;判断显示时间是否为1。5S
JNB T15flag,MT_OUT ;出口返回
CLR T15flag ;清1。5S到时间标志位
LCALL LED_DISPLAY3 ;调显示方式3
LJMP MT_OUT ;出口返回
TIME34:
CJNE A,#04H,MT_OUT ;判断显示时间是否为2。0S
JNB T20flag,MT_OUT ;出口返回
CLR T20flag ;清2。0S到时间标志位
LCALL LED_DISPLAY3 ;调显示方式3
LJMP MT_OUT ;出口返回
MODE4: ;显示方式41-44 LED_DISPLAY4: LED流水灯右移
CJNE A,#40H,MT_OUT ;判断是否为模式4
MOV A,KEY_VALUE
ANL A,#0FH ;屏蔽高四位
TIME41:
CJNE A,#01H,TIME42 ;判断显示时间是否为0。5S
JNB T05flag,MT_OUT ;出口返回
CLR T05flag ;清0。5S到时间标志位
LCALL LED_DISPLAY4 ;调显示方式4
LJMP MT_OUT ;出口返回
TIME42:
CJNE A,#02H,TIME43 ;判断显示时间是否为1。0S
JNB T10flag,MT_OUT ;出口返回
CLR T10flag ;清1。0S到时间标志位
LCALL LED_DISPLAY4 ;调显示方式4
LJMP MT_OUT ;出口返回
TIME43:
CJNE A,#03H,TIME44 ;判断显示时间是否为1。5S
JNB T15flag,MT_OUT ;出口返回
CLR T15flag ;清1。5S到时间标志位
LCALL LED_DISPLAY4 ;调显示方式4
LJMP MT_OUT ;出口返回
TIME44:
CJNE A,#04H,MT_OUT ;判断显示时间是否为2.0S
JNB T20flag,MT_OUT ;出口返回
CLR T20flag ;清2。0S到时间标志位
LCALL LED_DISPLAY4 ;调显示方式4
LJMP MT_OUT ;出口返回
MT_OUT:
POP PSW
POP ACC
RET
;***************************************************************
;***************************************************************
;流水灯执行子程序1,2---拉屏程序
;P1.0-P1.7以一定的时间间隔TIME_LED来逐个点亮
;***************************************************************
LED_DISPLAY1: ;LED逐个左移点亮
PUSH ACC
PUSH PSW
MOV P1,DISP_REG ;送P1显示
SETB C
MOV A,DISP_REG
RLC A ;左移
ANL A,DISP_REG
MOV DISP_REG,A
JC LED_DISP1
MOV DISP_REG,#0FEH
LED_DISP1:
POP PSW
POP ACC
RET
LED_DISPLAY2: ;LED逐个右移点亮
PUSH ACC
PUSH PSW
MOV P1,DISP_REG ;送P1显示
SETB C
MOV A,DISP_REG
RRC A ;右移
ANL A,DISP_REG
MOV DISP_REG,A
JC LED_DISP2
MOV DISP_REG,#7FH
LED_DISP2:
POP PSW
POP ACC
RET
;***************************************************************
;***************************************************************
;流水灯执行子程序3,4
;P1.0-P1.7以一定的时间间隔TIME_LED来流水点亮
;入口参数
;流水灯正反流动显示标志位:FOLLOW_BACK
;LED状态:LED_STATE
;***************************************************************
LED_DISPLAY3: ;LED流水灯左移
PUSH ACC
PUSH PSW
MOV A,DISP_REG ;送上次显示状态
MOV P1,A ;流水灯正向显示输出
RL A
MOV DISP_REG,A ;将状态回送
POP PSW
POP ACC
RET
LED_DISPLAY4: ;LED流水灯右移
PUSH ACC
PUSH PSW
MOV A,DISP_REG ;送上次显示状态
MOV P1,A ;流水灯正向显示输出
RR A
MOV DISP_REG,A ;将状态回送
POP PSW
POP ACC
RET
;***************************************************************
;***************************************************************
;中断定时器0的中断子程序
;***************************************************************
TIMER0:
PUSH ACC
PUSH PSW
MOV TH0,#0D8H ;重装记数初数,定时时间为10mS
MOV TL0,#0F0H
SETB T10MSflag ;置位10MS的定时时标位
DEC TIME_05 ;0.5S记数器减1
DEC TIME_10 ;1.0S记数器减1
DEC TIME_15 ;1.5S记数器减1
DEC TIME_20 ;2.0S记数器减1
MOV A,#00H ;定时0.5S记数器记数程序
CJNE A,TIME_05,T05_OUT
MOV TIME_05,#10 ;0.5S记数器重装记数值
SETB T05flag ;置位0.5S的定时时标位
T05_OUT:
;定时1.0S记数器记数程序
CJNE A,TIME_10,T10_OUT
MOV TIME_10,#20 ;1.0S记数器重装记数值
SETB T10flag ;置位1.0S的定时时标位
T10_OUT:
;定时1.5S记数器记数程序
CJNE A,TIME_15,T15_OUT
MOV TIME_15,#30 ;1.0S记数器重装记数值
SETB T15flag ;置位1.0S的定时时标位
T15_OUT:
;定时10S记数器记数程序
CJNE A,TIME_20,T20_OUT
MOV TIME_20,#40 ;2.0S记数器重装记数值
SETB T20flag ;置位2.0S的定时时标位
T20_OUT:
POP PSW
POP ACC
RETI
;***************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -