📄 led_key.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 + -