要求:四个按键S1、S2、S3、S4,按下对应按键时,LED上显示对应数字,如按下S1时,LED显示1。
思路:先将程序划分为几个模块,主程序:完成硬件初始化和子程序的调度;显示子程序:完成对应的显示功能;按键扫描程序:完成键值的获取;延时子程序:完成按键10ms的延时。
源程序
;项目:按键和LED显示实验
;功能:按下S1、S2、S3、S4时对应LED显示1、2、3、4
;描述:P0口接LED显示,P2口接按键
ORG 00H
AJMP START
ORG 30H
START:
MOV SP,#5FH;置堆栈指针
MOV P0,#0FFH;关LED显示
MOV P2,#0FH;初始化键盘口
LOOP:
ACALL KEY;调用键盘扫描程序
JBC 00H,DIS;判断显示标志位
AJMP LOOP
KEY:;键盘扫描子程序
PUSH ACC
SCAN:
MOV A,P2;取键值
MOV B,A
CPL A
ANL A,#0FH
JZ SCAN;无按键继续
ACALL DELAY
JNB B.0,S1
JNB B.1,S2
JNB B.2,S3
JNB B.3,S4;键值处理
S1:
MOV R5,#01H
AJMP RET_KEY
S2:
MOV R5,#02H
AJMP RET_KEY
S3:
MOV R5,#03H
AJMP RET_KEY
S4:
MOV R5,#04H
RET_KEY:
SETB 00H;置显示标识位
POP ACC
RET
DIS:;显示部分
MOV DPTR,#TAB
MOV A,R5
MOVC A,@A+DPTR
MOV P0,A
AJMP LOOP
DELAY:;延时子程序
MOV R7,#248
DEL:
MOV R6,#20
DJNZ R6,$
DJNZ R7,DEL
RET
TAB:DB 0FFH,0F9H,0A4H,0B0H,99H;LED字段码
END
文章评论(0条评论)
登录后参与讨论