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

📄 key_led11

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