有八个开关,按下相应开关显示0—7(或1-8)!

在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软件仿真运行如下图所示:

有八个开关,按下相应开关显示0—7(或1-8)! - 非著名博主 - 电子信息角落
图片链接: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值