四个按键控制四个数字递增

来源:互联网 发布:mac的桌面 编辑:程序博客网 时间:2024/05/01 18:32

电路:

采用AT89S52单片机。

P3.0到P3.3外接四个按键。
P3.4到P3.7是控制四个数码管的位选端口,P1口是数码管的段选端口。

要求:

初始数字都是0。
每按一次第一个按键第一个数字 + 1;
每按一次第二个按键第二个数字 + 2;
每按一次第三个按键第三个数字 + 3;
每按一次第四个按键第四个数字 + 4。

当其值大于8后就减8后显示。

悬赏分:50 |  解决时间:2011-7-8 10:44
;===================================================
最佳答案:

按照要求,用PROTEUS绘制电路,并仿真,效果截图如下:四个按键控制四个数字递增 - 非著名博主 - 电子信息角落
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/2ece818a4e124b73c9fc7a21.html#

控制程序用汇编语言编写,下列程序,已经调试成功:

    ORG  0000H
    JMP  START

START:
    MOV  30H, #0
    MOV  31H, #0
    MOV  32H, #0
    MOV  33H, #0
;----------------------------
M_LOOP:
    CALL DISP
    MOV  P3, #0FH
    MOV  A, P3       ;读入按键信息.
    CPL  A
    ANL  A, #0FH
    JZ   M_LOOP      ;没有按键就循环显示.
;--------------------
    CALL DISP        ;延时消抖.
    MOV  P3, #0FH
    MOV  A, P3
    CPL  A
    ANL  A, #0FH
    JZ   M_LOOP      ;再次确认.
    MOV  B, #1
    JB   ACC.0,  J1  ;分支.
    JB   ACC.1,  J2
    JB   ACC.2,  J3
    JB   ACC.3,  J4
    JMP  M_LOOP
;------------------下面计算加1234
J4: INC  B
J3: INC  B
J2: INC  B
J1: MOV  A, #2FH
    ADD  A, B
    MOV  R0, A
    MOV  A, @R0
    ADD  A, B
    MOV  B, #8
    DIV  AB
    MOV  @R0, B
;------------------下面等待按键释放.
J_J:
    CALL DISP
    MOV  P3, #0FH
    MOV  A, P3
    ORL  A, #0F0H
    CPL  A
    JNZ  J_J
    JMP  M_LOOP
;------------------下面是显示程序
DISP:
    MOV  R0, #30H
    MOV  R2, #10H
D_LOOP:
    MOV  A,  @R0
    INC  R0
    ADD  A,  #(D_TAB - $ - 3)
    MOVC A, @A + PC
    MOV  P3, #0FH
    MOV  P1, A
    MOV  P3, R2
    CALL DELAY
    MOV  A,  R2
    RL   A
    MOV  R2, A
    CJNE R2, #1, D_LOOP
    RET
;----------------------------
D_TAB:
    DB  0C0H, 0F9H, 0A4H, 0B0H,  99H,  92H, 82H, 0F8H
    DB   80H,  90H,  88H,  83H, 0C6H, 0A1H, 86H,  8EH, 0FFH ;FF是空白的代码.
;---------------------------------------
DELAY:
    MOV  R6, #20
D1: MOV  R7, #250
    DJNZ R7, $
    DJNZ R6, D1
    RET
;---------------------------------------
END

;===================================================
回答时间:2011-7-7 23:20 | 我来评论
回答者: 做而论道 | 十五级采纳率:43%
提问者对于答案的评价:大神非常感谢。
不好意思啊我没注意只剩5分了加不了20了。加你好友了下回多给点。祝你工作顺利.....
原题网址:http://zhidao.baidu.com/question/289213222.html?fr=im100400
;===================================================
后记:
提问者的电路已经做成了 PCB 板子,显示部分的实际电路是采用了三极管反相器来进行位驱动。
因此,显示程序应该做如下修改:

;------------------下面是显示程序
DISP:
    MOV  R0, #30H
;    MOV  R2, #10H
    MOV  R2, #0EFH
D_LOOP:
    MOV  A,  @R0
    INC  R0
    ADD  A,  #(D_TAB - $ - 3)
    MOVC A, @A + PC
;    MOV  P3, #0FH
    MOV  P3, #255
    MOV  P1, A
    MOV  P3, R2
    CALL DELAY
    MOV  A,  R2
    RL   A
    MOV  R2, A
;    CJNE R2, #1, D_LOOP
    CJNE R2, #254, D_LOOP
    RET
;----------------------------

把修改后的程序通过电子邮件进行传递,稍候即有邮件回复:
太牛了  我弄了好几天了 。。没弄好。。谢谢 行啦。一次就烧录成功了!非常感谢。。
程序工作在实际的电路板上的照片如下:四个按键控制四个数字递增 - 非著名博主 - 电子信息角落
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/64de528ad0ddd51e9f2fb42b.html#
;===================================================

0 0