📄 key_ledbb
字号:
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,TIME55 ;判断显示时间是否为2.0S
JNB T20flag,MT_OUT ;出口返回
CLR T20flag ;清2。0S到时间标志位
LCALL LED_DISPLAY4 ;调显示方式4
LJMP MT_OUT ;出口返回
TIME55:
MOV KEY_VALUE,#11H
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
;***************************************************************
;***************************************************************
;取键盘按键状态标志程序
;***************************************************************
KEY_VALUE_GET:
PUSH ACC
PUSH PSW
K1G_NEXT0:
JNB K1_flag,K2G_NEXT0
CLR K1_flag ;清K1按键盘有效标志位
MOV A,KEY_GET_REG
K1_STA0: ;KEY进入状态
CJNE A,#00H,K1_STA1 ;判按键状态是否为00
CLR KEY_LED_flag ;清KEY/LED显示标志位,设为KEY显示状态
MOV KEY_GET_REG,#01H;将按键状态寄存器设为01,即模式选择状态
ORL KEY_VALUE,#80H ;指示模式选择
ANL KEY_VALUE,#0F7H
LJMP KEY_VALUE_OUT ;跳转返回
K1_STA1: ;KEY模式选择状态
CJNE A,#01H,K1_STA2 ;判按键状态是否为01
MOV KEY_GET_REG,#02H;将按键状态寄存器设为02,即时间选择状态
ORL KEY_VALUE,#08H;指示时间选择
ANL KEY_VALUE,#7FH
LJMP KEY_VALUE_OUT ;跳转返回
K1_STA2: ;KEY时间选择状态
CJNE A,#02H,K1_STA3
MOV KEY_GET_REG,#03H
LJMP KEY_VALUE_OUT ;跳转返回
K1_STA3:
CJNE A,#03H,K1_STA3 ;判按键状态是否为02
SETB KEY_LED_flag ;置KEY/LED显示标志位,设为LED显示状态
MOV DISP_REG,#0FEH ;重新初始化显示寄存器
MOV KEY_GET_REG,#00H;将按键状态寄存器设为00,即初始进入状态
LJMP KEY_VALUE_OUT ;跳转返回
K2G_NEXT0:
JNB K2_flag,KEY_VALUE_OUT
CLR K2_flag ;清K2按键盘有效标志位
MOV A,KEY_GET_REG ;读按键状态寄存器
KEY_MODE: ;模式选择
CJNE A,#01H,KEY_TIME ;判状态是否为模式选择方式
MOV A,KEY_VALUE ;将原键盘值取出
SWAP A
INC A ;将模式选择加1,即选择下一个LED显示模式
ANL A,#07H ;将高四位屏蔽
CJNE A,#05H,KEY_MODE1 ;模式选择只有1-4 四种方式
ANL A,#01H ;将低四位置为1
KEY_MODE1:
SWAP A
ANL KEY_VALUE,#0FH ;将高四位屏蔽
ORL KEY_VALUE,A
LJMP KEY_VALUE_OUT ;跳转返回
KEY_TIME: ;时间选择
CJNE A,#02H,KEY_VALUE_OUT ;判状态是否为时间选择方式
MOV A,KEY_VALUE ;将原键盘值取出
INC A ;将模式选择加1,即选择下一个LED显示模式
ANL A,#07H ;将高四位屏蔽
CJNE A,#05H,KEY_TIME1 ;时间选择只有1-4 四种方式
ANL A,#0F1H ;将低四位置为1
KEY_TIME1:
ANL KEY_VALUE,#0F0H ;将低四位屏蔽
ORL KEY_VALUE,A ;将KEY_VALUE返回
LJMP KEY_VALUE_OUT ;跳转返回
KEY_VALUE_OUT:
POP PSW
POP ACC
RET
;***************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -