在51单片机中,如何编程使其按下第一个开关数显显示0(或1)...按下第8个开关数显显示7(或8),数显是共阴式!
即有八个开关,按下相应开关显示0—7(或1-8)!
请问有谁能帮我解答?!谢谢了!
悬赏分:10 - 解决时间:2010-7-13 11:08
问题补充:用汇编语言编程
;=====================================================
最佳答案:程序如下:
ORG 0000H
;-----------------------------------------
START:
MOV A, P1 ;读入8个按键.
MOV B, A
CPL A
JZ START
MOV R6, #8
CALL DL_R6_MS ;延时消抖.
MOV A, P1 ;读入8个按键.
CJNE A, B, START
;-----------------------------------------
WAIT_KEY:
MOV A, P1 ;读入8个按键.
CPL A
JNZ WAIT_KEY ;等待按键释放.
;-----------------------------------------
MOV R2, #0 ;按键号码.
JNB B.0, _0
JNB B.1, _1
JNB B.2, _2
JNB B.3, _3
JNB B.4, _4
JNB B.5, _5
JNB B.6, _6
;-----------------------------------------
INC R2
_6: INC R2
_5: INC R2
_4: INC R2
_3: INC R2
_2: INC R2
_1: INC R2
_0:
;-----------------------------------------
MOV A, R2
MOV DPTR, #DUAN
MOVC A, @A+DPTR ;
CPL A
MOV P0, A
SJMP START
;----------------------------------------------
DUAN:
DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H, 80H, 90H
; 0 1 2 3 4 5 6 7 8 9
;----------------------------------------------
DELAY1MS: ;延时: 999T = 1ms
MOV R7, #241
DJNZ R7, $
DJNZ R7, $
RET
;----------------------------------------------
DL_R6_MS: ;延时: R6*1ms
ACALL DELAY1MS
DJNZ R6, $ - 2
RET
END
;=====================================================
用PROTEUS软件仿真运行如下图所示:
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/4eb12ec55e647cf438db49bb.html
回答者:做而论道 - 十三级 2010-6-24 06:57
原题网址:http://zhidao.baidu.com/question/161757354.html