首先:
如果这个图中使用的是51单片机
一般不用共阴极LED,而用共阳极,
因单片机高电平输出电流有限,而低电平吸收电流能力较强
其次:
在LED部分,外接排电阻不知何用?
如果接限流电阻,也应当串联于CPU引脚与LED引脚之间
而不是并联与其上
忽略上述问题,纯“理论”编程如下供参考:
假设——按“1”键显示“1”,余类似
;==== 主程序
MAIN: ACALL RKEY ;读按键
ACALL DTOC ;取得段码
ACALL SLED ;送显示
AJMP MAIN ;循环
;==== 读键值,无键等待,有键待抬起后返回
RKEY: MOV P1,#0FFH ;置高电平
MOV A,P1
INC A
JZ RKEY ;无键入,等待
ACALL XIAOD ;消抖
MOV A,P1
INC A
JZ RKEY
MOV R7,A ;保存键值
;====
RKEY1: MOV A,P1
INC A
JNZ RKEY1 ;等键抬起
RET
;==== 取得段码,如果同时两键按下,以低位键为准
DTOC: MOV A,R7
MOV R6,#00H
DTOC1: INC R6
RRC A
JC DTOC3 ;遇0即止
;---- 查表取得段码
MOV DPTR,DMB ;指向段码表
MOV A,R6
MOVC A,@A+DPTR
MOV R7,A ;暂存
RET
;==== 送显示。按题目,小数点及电机不考虑
SLED: MOV P0,A
RET
;==== 消抖,因晶振不同,需适当调整在10mS左右,此处为示例
XIAOD: MOV R7,#00H
DJNZ R7,$
RET
;====
DMB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,62H,0F8H,80H
;====
END