📄 led_display.asm
字号:
ORG 0000H
LJMP MAIN
ORG 000BH ;定义定时器0中断
LJMP LED_INT
MAIN:MOV TMOD,#01H ;采用定时器工作方式1,16位计数器
MOV TH0,3CH ;采用T0计数器,并设初始值为3cafh
MOV TL0,0AFH
MOV P2,#0FFH ;对p2口初始化
MOV P0,#0FFH ;对P1口初始化
MOV P2,#00H ;清发光二极管显示
MOV P0,#00H ;清LED显示
SETB EA ;开中断
SETB ET0 ;开定时器中断
SETB TR0 ;起用定时器T0
;SETB P2.5
;SETB P2.6
CLR P3.5 ;关蜂鸣器
MOV R3,#00H ;设R3为显示寄存器
MOV R4,#014H ;设置50ms定时器的循环次数
MOV R7,#030H ;设置在中断情况下循环显示的次数
;*****************************************************
DISPLAY: ;显示程序
CJNE R3,#20H,CONTI
CONTI:
MOV P2,R3 ;点亮二极管
JC LED_DIS ;区分显示
MOV P2,#0FFH ;当R3大于32时显示全1
LED_DIS: ;LED显示
MOV A,R3
MOV B,#0AH ;将R3中的高低分开
DIV AB
SETB P1.0 ;设置位选
CLR P1.1
MOV DPTR,#TABLE
MOVC A,@A+DPTR ;查表取值
MOV P0,A
LCALL DELAY1
SETB P1.1
CLR P1.0
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LED_CONTR:JB P2.5,CONTR_INT ;按键功能定义
AJMP DISPLAY
;***************************************************
LED_INT:DJNZ R4,NEXT ;中断程序
INC R3 ;显存内容自加
CJNE R3,#63H,LOOP
MOV R3,#00H
LOOP: MOV R4,#014H
NEXT: MOV TH0,3CH ;初值重载
MOV TL0,0AFH
RETI
;**************************************************
CONTR_INT:CPL EA ;当P2.5按下对中断EA取反决定动静显示
LCALL DELAY
JB EA,DISPLAY ;静态显示下处理其它近键
LOOP2: JB P2.6,AD
JB P2.7,DE
LCALL DISPLAY1
JB P2.5,CONTR_INT
LJMP LOOP2
AD: INC R3
LCALL DISPLAY1 ;按键消抖用多次显示实现了
CJNE R3,#63H,LOOP2
MOV R3,#00H
AJMP LOOP2
DE: LCALL DISPLAY1
DJNZ R3,LOOP2
MOV R3,#63H
AJMP LOOP2
;**************************************************
DISPLAY1: ;按键响应过程中的显示程序
CJNE R3,#20H,CONTI1
CONTI1: MOV P2,R3
JC LED_DIS1
MOV P2,#0FFH
LED_DIS1:
MOV A,R3
MOV B,#0AH
DIV AB
SETB P1.0
CLR P1.1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
SETB P1.1
CLR P1.0
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
DJNZ R7,DISPLAY1
MOV R7,#030H
RET
DELAY: MOV R5,#00H ;去抖动延时程序
LOOP4: MOV R6,#00H
LOOP3: DJNZ R6,LOOP3
DJNZ R5,LOOP4
RET
DELAY1:MOV R5,#02H ;显示延时
LOOP6: MOV R6,#00H
LOOP5: DJNZ R6,LOOP5
DJNZ R5,LOOP6
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -