⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guajiechengxu.txt

📁 在Keil里面编写的可以运行于80C51单片机上的计算器程序。可以实现简单的加减乘除运算。
💻 TXT
字号:
     ORG    0000H
     AJMP   START
     ORG    000BH
     AJMP   ERROR
START: 
     ACALL  CLEARALL
     MOV    SP, #50H 
     ACALL  WATCHDOG
CAQULATER:
     ACALL  FEEDDOG
     ACALL  DISPLAY
     ACALL  KEYREAD
     MOV    A,22H
     ANL    A,#0F0H
     JZ             NUMPROCESS_SLECT
     JB     22H.4,  ASMDPROCESS_SLECT 
     JB     22H.5,  CLEARALL_SLECT
     JB     22H.6,  RESULTOUT_SLECT
     JB     22H.7,  NOKEYDOWN_SLECT
NUMPROCESS_SLECT:
     ACALL  NUMPROCESS
     AJMP   CAQULATER
ASMDPROCESS_SLECT:           
     ACALL  ASMDPROCESS
     AJMP   CAQULATER
CLEARALL_SLECT:     
     ACALL  CLEARALL
     AJMP   CAQULATER
RESULTOUT_SLECT:
     ACALL  RESULTOUT
     AJMP   CAQULATER
NOKEYDOWN_SLECT:
     AJMP   CAQULATER

;读键子程
      NEW_KEY	EQU	22H
      OLD_KEY	EQU	23H
KEYREAD:
	CLR	PSW.5
KEY_AGAIN:
	ACALL	KEY_INPUT
	JNB	PSW.5,	KEY_OVER
	ACALL	KEY_DELAY
	ACALL	KEY_INPUT
	JNB	PSW.5,	KEY_OVER
	MOV	A,	NEW_KEY
	CJNE	A,	OLD_KEY,KEY_OVER
UPKEY:
	ACALL	KEY_INPUT
	JB	PSW.5,	UPKEY
	ACALL	KEY_INPUT
	JB	PSW.5,	UPKEY
	MOV	R0,NEW_KEY
	RET
KEY_INPUT:
        MOV  A,    #00H		;显示0
        MOV   DPTR, #9000H
        MOVX  @DPTR, A	;ZIXING
	CLR	F0
	MOV	R1,	#00H
	MOV	R2,	#04H
	MOV	R3,	#01H
KEY_LOOP:
	MOV	A,	R3
	MOV	DPTR,	#8000H
	MOVX	@DPTR,	A
	MOVX	A,	@DPTR
        MOV	R4,	#04H
KEY_LOOP1:
	RRC	A
	JNC	NEXT_KEY
	MOV	OLD_KEY,NEW_KEY
	MOV	A,	R1
	MOV     DPTR, #KEY_TABLE_BCD
	MOVC    A,    @A+DPTR
	MOV	NEW_KEY, A
	SETB	F0
	AJMP	KEY_OVER_OK
NEXT_KEY:
	INC	R1
	DJNZ	R4,KEY_LOOP1
	MOV	A, R3
	RL	A
	MOV	R3, A
	DJNZ	R2, KEY_LOOP
	AJMP	KEY_OVER_OK
KEY_OVER:
	MOV	22H, #80H
KEY_OVER_OK:
	RET
KEY_DELAY:
	MOV	R0, #0FFH
	DJNZ	R0, $			
	RET
KEY_TABLE_BCD:
      DB  	07H,08H,09H,11H
      DB	04H,05H,06H,12H
      DB	01H,02H,03H,14H
      DB	00H,20H,40H,18H    

;显示子程
DISPLAY:
	CALL    DISPNUM
        MOV     R5,  2DH
        MOV     R2,  #01H
        MOV     R0,  #48H
  DISP1:MOV     DPTR,#8FFFH
        MOV     A,   R2 
	MOVX    @DPTR,A
	MOV     A,   @R0
  DISP2:MOV     DPTR,#SHOWTABLE
        MOVC    A,   @A+DPTR
	MOV     DPTR,#9FFFH
	MOVX    @DPTR,A
	ACALL   DEL0
	ACALL   DEL0
        ACALL   DEL0
	ACALL   DEL0
        ACALL   DEL0
	MOV     A,   R2
	RL      A
	MOV     R2,  A
	INC     R0
	DJNZ    R5,  DISP1
      RET
SHOWTABLE:
        DB   3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
  DEL0: MOV     R6,  #00H
    TM: MOV     R7,  #01H
        DJNZ    R7,  $
	DJNZ    R6,  TM
      RET
;显示数字位数字程
DISPNUM:
     JNB     20H.4, YYY
     MOV     A,21H
     JZ      NUM5_SLECT
 YYY:MOV     A,   4CH
     ORL     A,   21H
     MOV     2EH, A
     JB     2EH.3,  NUM4_SLECT
     JB     2EH.2,  NUM3_SLECT     
     JB     2EH.1,  NUM2_SLECT
     JB     2EH.0,  NUM1_SLECT
NUM1_SLECT:
     MOV    2DH, #1
     AJMP   RETURN2
NUM2_SLECT:           
     MOV    2DH, #2
     AJMP   RETURN2
NUM3_SLECT:     
     MOV    2DH, #3
     AJMP   RETURN2
NUM4_SLECT:
     MOV    2DH, #4
     AJMP   RETURN2
NUM5_SLECT:
     MOV    2DH,4DH
     AJMP   RETURN2
RETURN2:MOV 4DH,2DH
    RET

;数字键处理子程
NUMPROCESS:
      MOV   4CH,#0H
      MOV   A, 20H
      JZ    BCD1
 BCD2:MOV   A, 21H
      CJNE  A, #2, BCD2IN
      AJMP  RETURN 
BCD2IN:MOV  37H, 36H
      MOV   36H, 22H
      INC   21H
      MOV   48H, 36H
      MOV   49H, 37H
      AJMP  RETURN
 BCD1:MOV   A, 21H
      CJNE  A, #2, BCD1IN
      AJMP  RETURN
BCD1IN:MOV  31H, 30H
      MOV   30H, 22H
      INC   21H
      MOV   48H, 30H
      MOV   49H, 31H
RETURN:RET
     
;清RAM子程
CLEARALL:
         MOV  R5,  #2EH
         MOV  R0,  #20H
CLEARRAM:MOV  @R0, #00H
         INC  R0
         DJNZ R5,  CLEARRAM
       RET

;运算键处理子程
ASMDPROCESS:
       MOV  A, 31H
       SWAP A
       ORL  A, 30H
       MOV  34H,A
       MOV  20H,22H
       MOV  21H,#0H
     RET

;等于键处理子程
RESULTOUT:
      JNB   20H.4,RETURN3 
      MOV  A, 37H 
      SWAP A
      ORL  A, 36H
      MOV  3AH,A
     JB     20H.0,  BCDADD_SLECT 
     JB     20H.1,  BCDSUB_SLECT
     JB     20H.2,  BCDMUL_SLECT
     JB     20H.3,  BCDDIV_SLECT
BCDADD_SLECT:
     ACALL  BCDADD
     AJMP   RESULTPROCESS
BCDSUB_SLECT:           
     ;ACALL  BCDSUB
     AJMP   RESULTPROCESS
BCDMUL_SLECT:     
     ;ACALL  BCDMUL
     AJMP   RESULTPROCESS
BCDDIV_SLECT:
     ;ACALL  BCDDIV
     AJMP   RESULTPROCESS
RESULTPROCESS:
     MOV   4CH, #0H
     MOV   A,  3CH
     ANL   A,  #0FH
     MOV   48H,A
     SETB  2FH.0
     MOV   A,  3CH
     SWAP  A
     ANL   A,  #0FH
     JZ    SETTEN
     SETB  2FH.1
SETTEN:MOV   49H,A
     MOV   A,  3DH
     ANL   A,  #0FH
     JZ    SETHUN
     SETB  2FH.2  
 SETHUN:MOV   4AH,A 
     MOV   A,  3DH
     SWAP  A
     ANL   A,  #0FH
     JZ    SETTHO
     SETB  2FH.3
SETTHO:MOV   4BH,A 
     MOV  4CH,2FH
     MOV   R5,  #20H
     MOV   R0,  #20H
CLEARRAM2:
     MOV  @R0, #00H
     INC  R0
     DJNZ R5,  CLEARRAM2
RETURN3:
    RET   

;加法运算子程
BCDADD:
	CLR   C
	MOV   A,  34H
	ADDC  A,  3AH
	DA    A
	MOV   3CH, A
	MOV   A,  #00H
	RLC   A
	MOV   3DH,A
     RET

;减法运算子程
BCDSUB:

;乘法运算子程
BCDMUL:

;除法运算子程
BCDDIV:



;WATCHINGDOG的软件实现子程
;看门狗设置与启动
WATCHDOG:
     MOV  TMOD, #01H
     MOV  TH0,  #00H
     MOV  TL0,  #01H
     MOV  IE,   #82H
     SETB  TR0
    RET 
;喂狗
FEEDDOG:
     MOV  TH0,  #00H
     MOV  TL0,  #01H    
    RET
;程序跑飞处理子程
ERROR:
     AJMP START   
    RETI  
 END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -