⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key_ledbb

📁 做了个流水灯程序
💻
📖 第 1 页 / 共 2 页
字号:
	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 + -