0到99可增减计数器的单片机系统。求汇编语言程序。在线等。特急。

要求:
51单片机
两个按键。。一个加一。一个减一。
两个8段共阴极数码管显示两位数
99时加一变为00。00时减一变为99
汇编语言。
PS。。只有20分了。有点少。实在对不住。。以后有分一定追加。
下面是我在网上找到的程序。。只有加,没有减。。大神可以帮我修改一下也行。
Count EQU 30H
SP1 BIT P3.7
ORG 0
START: MOV Count,#00H
NEXT: MOV A,Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
WT: JNB SP1,WT
WAIT: JB SP1,WAIT
LCALL DELY10MS
JB SP1,WAIT
INC Count
MOV A,Count
CJNE A,#100,NEXT
LJMP START
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

第1个回答  2012-07-17

Count         EQU 30H

KEY1          BIT P3.6

KEY2          BIT P3.7

                  ORG 0

START:         MOV Count,#00H

NEXT:          MOV A,Count

               MOV B,#10

               DIV AB

               MOV DPTR,#TABLE

               MOVC A,@A+DPTR

      MOV P2,#02H

               MOV P0,A

      LCALL DELAY

               MOV A,B

               MOVC A,@A+DPTR

      MOV P2,#01H

               MOV P0,A

      LCALL DELAY

WT:            JB KEY1,WT1

               LCALL DELY10MS

               JB KEY1,WT1

               JNB KEY1,$

               INC Count

               MOV A,Count

               CJNE A,#100,NEXT

      MOV Count,#0

               LJMP NEXT

WT1:

               JB KEY2,WT2

      LCALL DELY10MS

      JB KEY2,WT2

      JNB KEY2,$

      MOV A,Count

      JZ WT11

      DEC Count

      LJMP NEXT

WT11:

               MOV Count,#99

WT2:

               LJMP NEXT

DELAY:

               MOV R3,#6

DELAY1:

               MOV R4,#250

      DJNZ R4,$

      DJNZ R3,DELAY1

      RET

DELY10MS:      MOV R6,#20

D1:            MOV R7,#248

               DJNZ R7,$

               DJNZ R6,D1

               RET

TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

 

本回答被提问者采纳
第2个回答  2012-07-25

按照楼主给出的程序,增加了减一的功能。

程序已经调试成功,如下:



Count  EQU  30H

SP1    BIT  P3.7

SP2    BIT  P3.6

    ORG   0

START:

    MOV   Count, #0

;---------------------------

M_LOOP:

    CALL  DISP

WT1:

    JB    SP1, WT2

    LCALL DELY10MS

    JB    SP1, WT2

    JNB   SP1, $

    INC   Count

    MOV   A, Count

    CJNE  A, #100, M_LOOP

    LJMP  START

;---------------------------

WT2:

    JB    SP2, WT1

    LCALL DELY10MS

    JB    SP2, WT1

    JNB   SP2, $

    DEC   Count

    MOV   A, Count

    CJNE  A, #255, M_LOOP

    MOV   Count, #99

    LJMP  M_LOOP

;---------------------------

DELY10MS:

    MOV   R6, #20

D1: MOV   R7, #248

    DJNZ  R7, $

    DJNZ  R6, D1

    RET

;---------------------------

DISP:

    MOV   A, Count

    MOV   B, #10

    DIV   AB

    MOV   DPTR, #TABLE

    MOVC  A, @A + DPTR

    MOV   P0, A

    MOV   A, B

    MOVC  A, @A + DPTR

    MOV   P2, A

    RET

TABLE:

    DB  3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH

;---------------------------

END 

仿真截图如下:

第3个回答  2012-07-17
Count EQU 30H ; 应该这样试试
SP1 BIT P3.7
SP2 BIT P3.6
ORG 0
START: MOV Count,#00H
NEXT: MOV A,Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
WT1: JB SP1,WAIT1
JB SP2,WAIT2
JMP WT1
WAIT1: JB SP1,WAIT1
LCALL DELY10MS
JB SP1,WAIT1
INC Count
MOV A,Count
CJNE A,#100,NEXT
LJMP START
WAIT2: JB SP2,WAIT2
LCALL DELY10MS
JB SP2,WAIT2
DEC Count
MOV A,Count
CJNE A,#100,NEXT
LJMP START
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH本回答被网友采纳
第4个回答  2012-07-17
Count EQU 30H
SP1 BIT P3.7
SP2 BIT P3.6
ORG 0
START: MOV Count,#00H
NEXT: MOV A,Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
WT1: JNB SP1,WT1
WT2: JNB SP2,WT2
WAIT1: JB SP1,WAIT1
LCALL DELY10MS
JB SP1,WAIT1
INC Count
MOV A,Count
CJNE A,#100,NEXT
LJMP START
WAIT2: JB SP1,WAIT2
LCALL DELY10MS
JB SP1,WAIT2
DEC Count
MOV A,Count
CJNE A,#100,NEXT
LJMP START
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
相似回答