AT89S52单片机 P3.0到P3.3是四个KEY键。P3.4到P3.7是控制四个数码管口。P1口是数码管输出端口。

2025-02-24 05:27:41
推荐回答(3个)
回答1:

下列程序,已经调试成功.

    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

仿真效果,可见插图。

回答2:

你到底要原理图,还是要程序设计、还是要方案设计!

回答3:

"其值大于8后就减8后显示",那么应该一个数码管就可以显示吧,不知道你用四个数码管分别显示什么?