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

📄 sukong.asm

📁 行列式键盘控制,实现液晶(UM12864B)驱动显示程序.
💻 ASM
📖 第 1 页 / 共 4 页
字号:
          ADD     A,#10H
          MOV     R5,A
          INC     R0
          INC     R4
          MOV     A,R4
          CJNE    A,#01H,RRRE1
          MOV     R6,#01H
          MOV     R5,#40H
   RRRE1: LJMP    LOOOPE1
    YYE1: MOV     A,R4
          CJNE    A,#00H,KS1
          LJMP    TSF0

    KS1:  MOV     DPTR,     #GG
          MOV     COMXSTART,#0BCH
          MOV     COMXEND,  #0BDH  ;(ma)
          MOV     COMYSTART,#50H
          MOV     COMYEND,  #5FH
          MOV     JCS1CS2,  #01H
          LCALL   DISP

;步进值的加,减(按制,按C键为加,按D键为减)
LOOOPE11: LCALL   KEY
          MOV     KEYZHI,A
          CJNE    A,#00H,YU
          LJMP    LOOOPE11
   YU:    MOV     A,KEYZHI
          CJNE    A,#0DH,SUB1      ;按下C键实现步进加
          LJMP    DSA
   SUB1:  LJMP    SUBB1
   DSA:   MOV     CY,#00H        ;两字节和一字节的加法
          MOV     A,48H          ;48h单元内容为步进值,56,57单元为给定值
          ADDC    A,57H
          MOV     57H,A
          MOV     A,56H
          ADDC    A,#00H
          MOV     56H,A

          LCALL   DAC08322

          ;LCALL   ADC0809

          MOV     30H,57H       ;所加和高位放在31H单元,30h为低位
          MOV     31H,56H

          LCALL   HEXBCD        ;调十六进制转换十进制的子程序
          MOV     A,41H         ;转换后的值放入40,41h单元
          ANL     A,#0F0H       ;拆字把压缩的BCD转换成非压缩的BCD
                                ;转换后放入50--53h单元(53为高位)
          SWAP    A
          MOV     53H,A
          MOV     A,41H
          ANL     A,#0FH
          MOV     52H,A

          MOV     A,40H
          ANL     A,#0F0H
          SWAP    A
          MOV     51H,A
          MOV     A,40H
          ANL     A,#0FH
          MOV     50H,A

          MOV     R6,#00H
          MOV     R5,#70H
          MOV     R4,#04H;显示数的个数
          MOV     R3,#00H
          MOV     R0,#53H

   KUE01: MOV     A,@R0
          INC     A
          MOV     KEYZHI,A
          LCALL   FINDTAB
          MOV     COMXSTART,#0B8H
          MOV     COMXEND,#0B9H
          MOV     COMYSTART,R5
          MOV     A,#0FH
          ADD     A,R5
          MOV     COMYEND,A
          MOV     JCS1CS2,R6
          LCALL   DISP
          MOV     A,R5
          ADD     A,#10H
          MOV     R5,A
          DEC     R0
          INC     R3
          MOV     A,R3
          CJNE    A,#01H,RRRE01
          MOV     R6,#01H
          MOV     R5,#40H
  RRRE01: DJNZ    R4,KUE01
          MOV     DPTR,     #GG
          MOV     COMXSTART,#0B8H
          MOV     COMXEND,  #0B9H  ;(ma)
          MOV     COMYSTART,#70H
          MOV     COMYEND,  #7FH
          MOV     JCS1CS2,  #01H
          LCALL   DISP
         ; SJMP    $
 WWW:     LCALL  ADC0809    ;读取实测值
          ;MOV     60H,#0C8H
          MOV     30H,60H       ;所加和高位放在31H单元,30h为低位
          MOV     31H,#00H

          LCALL  ADC0809    ;读取实测值
          ;MOV   60H,#0C8H
          MOV     30H,60H       ;所加和高位放在31H单元,30h为低位
          MOV     31H,#00H

          LCALL  HEXBCD        ;调十六进制转换十进制的子程序
          MOV     A,41H         ;转换后的值放入40,41h单元
          ANL     A,#0F0H       ;拆字把压缩的BCD转换成非压缩的BCD
                                ;转换后放入50--53h单元(53为高位)
          SWAP    A
          MOV     63H,A
          MOV     A,41H
          ANL     A,#0FH
          MOV     62H,A

          MOV     A,40H
          ANL     A,#0F0H
          SWAP    A
          MOV     61H,A
          MOV     A,40H
          ANL     A,#0FH
          MOV     60H,A

          MOV     R0,  #STEST
          MOV     A,   @R0
          LCALL   FINDTAB1
          MOV     COMXSTART,#0BAH
          MOV     COMXEND,  #0BBH
          MOV     COMYSTART,#70H
          MOV     COMYEND,  #7FH
          MOV     JCS1CS2, #00H
          LCALL   DISP

          DEC     R0
          MOV     A,   @R0
          LCALL   FINDTAB1
          MOV     COMXSTART,#0BAH
          MOV     COMXEND,  #0BBH
          MOV     COMYSTART,#40H
          MOV     COMYEND,  #4FH
          MOV     JCS1CS2, #01H
          LCALL   DISP

          DEC   R0
          MOV   A,   @R0
          LCALL FINDTAB1
          MOV   COMXSTART,#0BAH
          MOV   COMXEND,  #0BBH
          MOV   COMYSTART,#50H
          MOV   COMYEND,  #5FH
          MOV   JCS1CS2, #01H
          LCALL DISP

          DEC   R0
          MOV   A,   @R0
          LCALL FINDTAB1
          MOV   COMXSTART,#0BAH
          MOV   COMXEND,  #0BBH
          MOV   COMYSTART,#60H
          MOV   COMYEND,  #6FH
          MOV   JCS1CS2,  #01H
          LCALL DISP
          LJMP  LOOOPE11

;步进值减运算程序
 SUBB1:   MOV     A,KEYZHI
          CJNE    A,#0EH,RRR         ;按下D键实现步进减
          LJMP    OI
  RRR:    MOV     A,KEYZHI
          CJNE    A,#10H,LPE11
          MOV   SP,     #90H;
          MOV   PSW,    #00H;
          MOV   R0,     #20H
          MOV   R7,     #96
          CLR   A
 LOOPG:   MOV   @R0,    A
          INC   R0
          DJNZ  R7,     LOOPG
          LJMP    TSF0

LPE11:    LJMP    LOOOPE11

   OI:    CLR     CY
          MOV     A,57H
          SUBB    A,48H
          MOV     57H,A
          JNC     LQQ
          DEC     56H

  LQQ:   LCALL   DAC08322


          MOV     30H,57H
          MOV     31H,56H

          LCALL   HEXBCD
          MOV     A,41H
          ANL     A,#0F0H
          SWAP    A
          MOV     53H,A
          MOV     A,41H
          ANL     A,#0FH
          MOV     52H,A

          MOV     A,40H
          ANL     A,#0F0H
          SWAP    A
          MOV     51H,A
          MOV     A,40H
          ANL     A,#0FH
          MOV     50H,A

          MOV    R6,#00H;用于判是在左,还是在右显示
          MOV    R5,#70H;显示的起始列
          MOV    R4,#04H;显示数的个数
          MOV    R3,#00H
          MOV    R0,#53H;显示数的首地此

  KUE012: MOV     A,@R0
          INC     A
          MOV     KEYZHI,A
          LCALL   FINDTAB
          MOV     COMXSTART,#0B8H
          MOV     COMXEND,#0B9H
          MOV     COMYSTART,R5
          MOV     A,#0FH
          ADD     A,R5
          MOV     COMYEND,A
          MOV     JCS1CS2,R6
          LCALL   DISP
          MOV     A,R5
          ADD     A,#10H
          MOV     R5,A
          DEC     R0
          INC     R3
          MOV     A,R3
          CJNE    A,#01H,RRRE012
          MOV     R6,#01H
          MOV     R5,#40H
 RRRE012: DJNZ    R4,KUE012
          MOV     DPTR,     #GG
          MOV     COMXSTART,#0B8H
          MOV     COMXEND,  #0B9H  ;(ma)
          MOV     COMYSTART,#70H
          MOV     COMYEND,  #7FH
          MOV     JCS1CS2,  #01H
          LCALL   DISP
          LJMP    WWW
          LJMP    LOOOPE11




;数置转换区:
SZZH:     MOV    R0,#50H   ;十进制数转换成十六进制数(转换后存入56,57单元)
          MOV    R1,#4FH
          LCALL  BCDHEX
          ;MOV    5FH,#80H
          MOV    56H,5FH   ;56存放高位

;DAC0832子程序
 DAC0832: MOV    R0,#56H
          MOV    DPTR,#0000H
          MOV    A,@R0
          MOVX   @DPTR,A
          RET
DAC08322: MOV    R0,#57H
          MOV    DPTR,#0000H
          MOV    A,@R0
          MOVX   @DPTR,A
          RET

;读取实测值:
 ADC0809:SETB     P1.2   ;
         SETB     P1.1   ;M口控制
         SETB     P1.0
         LCALL    DELAY
         LCALL    DELAY
         LCALL    DELAY
         LCALL    DELAY
         CLR      P1.0   ;CLR控制
         LCALL   READRAM
         RET






;非压缩的BCD码转换成十六数
BCDHEX :
         MOV     4CH,#00H
         MOV     4DH,#00H
         MOV     4EH,#10H
         MOV     4FH,#00H
         MOV     R7,#04H
     KL: MOV     A,@R0
         MOV     @R1,A
         INC     R0
         MOV     A,@R0
         SWAP    A
         ORL     A,@R1
         MOV     @R1,A
         INC     R0
         DEC     R1
         DJNZ    R7,KL
         NOP		       ; N BYTES COMPRESSED BCD CODES TO M BYTES HEX CODES
	 MOV	 30H,#07H  ; HERE N=M=3	   BCD(4C,4D,4E,4FH)--HEX(5C,5D,5E,5FH)
	 MOV     31H,#07H
	 MOV     R1,#ADB
      	 MOV     R2,AD1
	 MOV     R3,AD0
	 MOV	 A,#ADA
	 CLR	 C
 	 SUBB    A,R3
	 INC	 A
	 MOV	 R0,A
  DBNZ:  MOV	 @R1,#00H
	 DEC	 R1
	 DJNZ	 R2,DBNZ
	 SJMP	 DBNB
  DBNJ:  MOV	 R1,#ADB
	 MOV	 R2,AD1
	 CLR	 00H
	 CLR	 A
  DBNM:  XCH	 A,@R1
	 MOV	 B,#64H
	 MUL	 AB
	 MOV	 C,00H
	 ADDC	 A,@R1
	 MOV	 @R1,A
	 MOV	 00H,C
	 MOV	 A,B
	 DEC	 R1
	 DJNZ	 R2,DBNM
 DBNB:	 CLR	 A
	 XCHD	 A,@R0
	 XCH     A,@R0
	 SWAP	 A
	 MOV	 B,#0AH
	 MUL	 AB
	 ADD	 A,@R0
	 INC	 R0
 DBNA:	 MOV	 R2,AD1
	 DEC	 R2
	 MOV	 R1,#ADB
	 ADD	 A,@R1
	 MOV	 @R1,A
 DBNL:	 DEC	 R1
	 CLR	 A
	 ADDC	 A,@R1
	 MOV	 @R1,A
	 DJNZ	 R2,DBNL
	 DJNZ	 R3,DBNJ
         NOP
         RET

;十六进制数转换成十进制数子程序
HEXBCD :  NOP			 ; 7 BYTE HEX TO 8 BYTE BCD : HEX(3XH-30H)-->BCD(4XH-40H)
  MUBTD:  MOV	     R0,#40H
	  MOV	     R7,#08H
	  CLR	     A
  LOPP1:  MOV	     @R0,A
	  INC	     R0
	  DJNZ	     R7,LOPP1

	  MOV	     R7,#38H
 LOOP4:   MOV	     R1,#30H
	  MOV	     R6,#07H
	  CLR	     C

  LOPP2:  MOV	     A,@R1
	  RLC	     A
	  MOV	     @R1,A
	  INC	     R1
	  DJNZ	     R6,LOPP2

	  MOV	     R5,#08H
	  MOV	     R0,#40H

  LOOP3:  MOV	     A,@R0
	  ADDC	     A,@R0
	  DA	     A
	  MOV	     @R0,A
	  INC	     R0
	  DJNZ	     R5,LOOP3
	  DJNZ	     R7,LOOP4
	  RET
 ;读双口RAM字程序
;读回的内容存放在00H~0FFH单元中
   GGRAM   EQU    0C0H   ;双口RAM高位地址
   DDRAM   EQU    03H    ;双口RAM地位地址
  READRAM: MOV    R7,    #08H
           MOV    R1,    #60H
           MOV    P2,    #GGRAM
           MOV    R0,    #DDRAM
    BB:    MOV    P0,    R0
           MOVX   A,     @R0
           MOV    @R1,   A
           INC    R0
           INC    R1
           DJNZ   R7,    BB
           RET


          END

⌨️ 快捷键说明

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