请教高手关于单片机按键LED显示的一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:51:17
小弟因为工作需要需做一个用单片机控制按键然后相应的数值显示在LED数码管上。但由于小弟出入江湖,才疏学浅自己做了一个程序只能够完成单个键值的显示,双位的做了好久都没做出来,所以请哪位高手大哥或大姐帮忙指点一下下,以下是我自己做的程序介绍:
单片机:AT89S51 P0:显示 P2.0~P2.3 按键扫描 P1.0~P1.3 读键值
硬件电路: 略过(画的不好)
KEYBUF EQU 30H
MOV KEYBUF,#2
WAIT:
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
CLR P2.0
CLR A
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
LCALL DELAY10MS
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
MOV A,P1
ANL A,#0FH
CJNE A,#0EH,NK1
MOV KEYBUF,#0
LJMP DK1
NK1: CJNE A,#0DH,NK2
MOV KEYBUF,#1
LJMP DK1
NK2: CJNE A,#0BH,NK3
MOV KEYBUF,#2
LJMP DK1
NK3: CJNE A,#07H,NK4
MOV KEYBUF,#3
LJMP DK1
NK4: NOP
DK1: MOV A,KEYBUF
MOV DPTR,#TABLE
MOV

建议,在做的时候,把各个数码管的显示做成子程序..
给予每个数码管一个存储空间..
比如说第一位.
DISP1:
MOV P0,#40H
SETB P2.0
MOV R7,#100
DJNZ R7,$
CLR P2.0
RET
之后再将键盘扫描程序写成子程序KEY_SCAN
之后再写个更改显示数字的子程序CHANGE
在里面直接把相应存储空间中的内容改后,下次显示就是新的内容了..
总体结构为:
MAIN:
LCALL DISP1
LCALL DISP2
LCALL DISP3
LCALL DISP4
LCALL KEY_SCAN
LCALL CHANG
AJMP MAIN
大概就是这样了..
祝你好运!
^_^

又是这个问题,你的led显示模块有锁存功能吗?如果没有,又要显示多个不同数值,只有采用动态扫描,还有你的键盘扫描最好是用一个标志位,有键按下时再去执行确认按键数值的子程序,应该再加上软件消抖功能!具体网上有资料!