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

📄 led_key.asm

📁 当今单片机厂商琳琅满目
💻 ASM
字号:
;*********************************
;2803芯片管脚定义
;*********************************
SELECT_LED_1 bit p2.0
SELECT_LED_2 bit p2.1
SELECT_LED_3 bit p2.2
SELECT_LED_4 bit p2.3

;*********************************
;4位7段数码管管脚定义
;*********************************
LIGHT_A		bit p0.0
LIGHT_B		bit p0.1
LIGHT_C		bit p0.2
LIGHT_D		bit p0.3
LIGHT_E		bit p0.4
LIGHT_F		bit p0.5
LIGHT_G		bit p0.6
LIGHT_DP		bit p0.7
;*********************************
;4位7段数码管内存定义
;*********************************
KEY_FIG	bit	20H
FLASH_FIG bit 	21H
STATE	DATA	22H
COUNT	DATA	23H
FLASH_BIT DATA	24H
DIR0	DATA	40H
DIR1	DATA 	41H
DIR2	DATA 	42H
DIR3	DATA	43H
;*********************************
;按键管脚定义
;*********************************
KEY_1			bit p2.4
KEY_2			bit p2.5
KEY_3			bit p2.6
KEY_4			bit p2.7
;*********************************
	ORG 0000H
	LJMP MIAN
	ORG 000BH
	LJMP TO_INTERRUPT	;t0定时中断入口地址
MAIN:MOV R7,#128
	MOV R0,#00H
LOOP_RAM:MOV A,@R0
	CLR A
	MOV @R0,A
	INC R0
	DJNZ R7,LOOP_RAM	;将128k的内部RAM全部清0
	LCALL INIT_LED		;初始化LED,全部点亮
	LCALL DELAY250M
	LCALL DELAY250M
	LCALL DELAY250M
	LCALL DELAY250M
	LCALL REMOD_LED		;熄灭LED
	CLR KB_FIG
	MOV FLASH_BIT,#0FFH
	MOV TMOD,#01H		;启动t0定时器,产生50毫秒定时
	MOV TH0,#03CH
	MOV TL0,#0B0H
	SETB ET0
	SETB EA
	SETB TR0
	SJMP $
;*********************************************************
;t0中断处理函数
;功能:复位定时器,重新产生50ms定时
;*********************************************************
TO_INTERRUPT:MOV TH0,#03CH
	MOV TL0,#0B0H
	LCALL KEY_P		;按键处理程序
	LCALL DIR_P		;显示子程序
	LCALL FLASH_P		;闪烁子程序
	RETI			;中断返回

;*********************************************************
;初始化LED子程序
;功能:点亮全部LED数码管,显示全"8"
;*********************************************************
INIT_LED:SETB LIGHT_A	;点亮所有LED数码管,显示全"8"
	SETB LIGHT_B
	SETB LIGHT_C
	SETB LIGHT_D
	SETB LIGHT_E
	SETB LIGHT_F
	SETB LIGHT_G
	SETB LIGHT_DP
	SETB SELECT_LED_1
	SETB SELECT_LED_2
	SETB SELECT_LED_3
	SETB SELECT_LED_4
	;LCALL DELAY250M
	RET
;*********************************************************
;熄灭LED子程序
;功能:熄灭全部LED数码管
;*********************************************************
REMOD_LED:CLR LIGHT_A	;点亮所有LED数码管,显示全"8"
	CLR LIGHT_B
	CLR LIGHT_C
	CLR LIGHT_D
	CLR LIGHT_E
	CLR LIGHT_F
	CLR LIGHT_G
	CLR LIGHT_DP
	CLR SELECT_LED_1
	CLR SELECT_LED_2
	CLR SELECT_LED_3
	CLR SELECT_LED_4
	;LCALL DELAY250M
	RET
;*********************************************************
;KEY_P按键处理子程序
;功能:识别是否有键按下,并判断是哪个键
;*********************************************************
KEY_P:	CJNE KEY_1,#00H,NOT_KEY1
	LCALL INC_KEY
	RET
NOT_KEY1:CJNE KEY_2,#00H,NOT_KEY2
	LCALL DEC_KEY
	RET
NOT_KEY2:CJNE KEY_2,#00H,NOT_KEY3
	LCALL FLASH_KEY
	RET
NOT_KEY3:lCALL ENTER_KEY
	RET
;*********************************************************
;DIR_P显示子程序
;功能:将显示缓冲区内的数据在4个LED上轮流显示
;*********************************************************
DIR_P:	MOV DPTR,#TAB_DIR
	MOV A,DIR0
	MOV B,#03H
	MUL AB
	JMP @A+DPTR
	SETB SELECT_LED_4	;将LED4(左边第一位)显示DIR0中的内容

	MOV DPTR,#TAB_DIR
	MOV A,DIR1
	MOV B,#03H
	MUL AB
	JMP @A+DPTR
	SETB SELECT_LED_3	;将LED3(左边第二位)显示DIR1中的内容

	MOV DPTR,#TAB_DIR
	MOV A,DIR2
	MOV B,#03H
	MUL AB
	JMP @A+DPTR
	SETB SELECT_LED_2	;将LED2(左边第三位)显示DIR2中的内容

	MOV DPTR,#TAB_DIR
	MOV A,DIR3
	MOV B,#03H
	MUL AB
	JMP @A+DPTR
	SETB SELECT_LED_1	;将LED1(左边第四位)显示DIR3中的内容
	RET
;*********************************************************
;FLASH_P闪烁子程序
;功能:闪烁LED的某一位
;*********************************************************
FLASH_P:
	RET
;*********************************************************
;INC_KEY子程序
;功能:使当前闪烁位自加1
;*********************************************************
INC_KEY:JB FLASH_FIG,INC_P
	RET
INC_P:MOV R1,#DIR0
	MOV A,FLASH
	ADD A,R1
	MOV R1,A
	MOV A,@R1
	ANL A,#0FH
	CJNE A,#09H,NC1
	CLR A
	MOV @R1,A
	RET

NC1:	INC A
	MOV @R1,A
	RET
;*********************************************************
;DEC_KEY子程序
;功能:使当前闪烁位自减1
;*********************************************************
DEC_KEY:JB FLASH_FIG,DEC_P
	RET
DEC_P:MOV R1,#DIR0
	MOV A,FLASH
	ADD A,R1
	MOV R1,A
	MOV A,@R1
	ANL A,#0FH
	CJNE A,#00H,DC1
	MOV A,#09H
	MOV @R1,A
	RET

DC1:	DEC A
	MOV @R1,A
	RET
;*********************************************************
;FLASH_KEY子程序
;功能:标识是否需要闪烁,并完成闪烁的移位
;*********************************************************
FLASH_KEY:SETB FLASH_FIG
	MOV A,FLASH
	INC A
	ANL A,#03H
	MOV FLASH,A
	RET
;*********************************************************
;ENTER_KEY子程序
;功能:确定修改完成,取消闪烁
;*********************************************************
ENTER_KEY:JB FLASH_FIG,ENTER_P
	RET
ENTER_P:CLR FLASH_FIG
	MOV FLASH,#0FFH
	RET
;**********************************************************
;延时250ms子程序
;**********************************************************
DELAY250M:MOV R1,#0FAH
L250M:LCALL DELAY996
	DJNZ R1,L250M
	RET
DELAY996:MOV R0,#0F9H
L996:	DJNZ R0,L996
	RET
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -