单片机如何在p1口用8按键输入,在p0口用七段led输出 求编程

如图
2025-03-01 02:40:09
推荐回答(1个)
回答1:

  首先:
  如果这个图中使用的是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