T6963应用程序-----原创程序5

2020-02-05 09:30发布

;89C51  T6963   间接控制方式  P1.0-P1.7  -----D0-D7

;                             P3.2-----------C/D    控制/数据

;                             P3.3-----------/WR    写

;                             P3.4-----------/RD     读

;                            GND------------/CE     片选

;                            VCC---R_4K7-----/RESET,/HALT    复位

;                            GND------------FG,GND     框架地,地

;                            R_10K-------  Vadj     亮度调节器中心点

;   DMF5001N-----1_FG;2_GND;3_VCC;4_Vadj;5_Vee;6_/WR;7_/RD;8_/CS;9_C/D;10/HALT;11_RSET;

;                12,19------D0,D7 ;20  NC  ; 21,22----LED  OR  EL                           

ORG   0000H

      
        CD  EQU   P3.2    ;  通道选择信号

        W_R   EQU  P3.3    ; 写操作信号

        R_D   EQU  P3.4    ;  读操作信号

        DAT1  EQU  30H    ;

        DAT2  EQU  31H    ;
  
        COM   EQU  32H    ;



;测试程序

;该程序为通用测试程序,在240×128规模以内的液晶显示模块都适合。程序使用8031

;汇编语言,接口电路和相应的驱动子程序见上一、二节,初始化程序见三节。

MAIN:  MOV R6,#50H      ;----------------------------
        
       MOV R7,#00H      ;

DELY1: NOP

       DJNZ R7,DELY1

       DJNZ R6,DELY1              ; 上电延时

       MOV      SP,#60H           ;设堆栈

       ORL     P3,#1CH            ;间接控制方式用 (P3.4=1,P3.3=1,P3.2=1)

TEST:      LCALL    INT            ;调用初始化程序---------------------

           MOV      DAT1,#00H      ;设置显示RAM 首地址

           MOV      DAT2,#00H

           MOV      COM,#24H

           LCALL    PR1

           MOV      R3,#00       ;设置循环量

           MOV      R4,#20H      ;------------------------------

           MOV      COM,#0B0H      ;设置自动写方式

           LCALL    PR12

TEST1:     LCALL    ST3            ;判状态位S2

           MOV      A,#00H         ;置数据"0A" ;---------------------
     
           LCALL    PR13           ;写入数据

           DJNZ     R3, TEST1      ;循环

           DJNZ     R4, TEST1

           MOV      COM,#0B2H      ;设置自动写结束指令

           LCALL    PR12
     
            
           MOV COUNT ,#33 ;
   
           LCALL   CGRAM        ;   建立CGRAM子程序(地址设定在代码为80H起处)


KKK:       LCALL   WEN_BEN_1    ; 调用文本方式显示汉字子程序1-------------   

           LCALL   YAN_SHI        ;   

           LCALL   WEN_BEN_2    ; 调用文本方式显示汉字子程序2-------------

           LCALL   YAN_SHI        ;           

           AJMP     KKK  ;  循环

;该程序执行完毕后,屏上应该满屏显示竖道,同时竖道的左下角有一点,即每8

;行“****”(即图形数据0FH,“”表示空)和“/”(字符代码0FH)的合成

;显示效果。

;************    读壮态子程序   ******************************

   R_ST:  MOV  P1,#0FFH    ;  P1口置高

          SETB  CD         ;  CD=1

          CLR   R_D         ;  /RD=0

          MOV   A,P1       ;  读壮态

          SETB  R_D         ;  RD=1

          RET              ;

;**************************************************************


;(1) 判状态位STA1,STA0子程序(读写指令和读写数据状态),在写指令的读

; 数据之前这两个标志位必须同时为“1”。

ST01: LCALL R_ST           ;

      JNB      ACC.0,  ST01 ;

      JNB      ACC.1,  ST01 ;

       RET
;**************************************************************

;(2) 判状态位STA2子程序(数据自动读状态),该位在数据自动读操作过程中

;STA0和STA1有效。在连续读过程中每读一次之前都要确认STA2=1。

ST2:    LCALL   R_ST ;

        JNB      ACC.2,ST2 ;

        RET
;**************************************************************

;(3) 判状态位STA3子程序(数据自动写状态)

ST3:   LCALL    R_ST ;

      JNB      ACC.3,ST3

      RET
;**************************************************************

;(4) 判状态位STA6子程序(屏读/屏拷贝状态)

    ST6:  LCALL    R_ST

         JB        ACC.6,ERR

         RET

ERR:  LJMP     ST6    ; 出错处理程序

;**************************************************************

;间接控制方式是MPU通过I/O并行接口,按照模拟模块时序的方式,间接实现

;对液晶显示模块的控制。根据液晶显示模块的需要,并行接口需要一个11位并行接口

;由上图所示。8031的P1口作为数据总线。P3口中3位作为读、写及寄存器选择信号。

;对于只用于液晶显示模块的电路,/CE信号接地就行了。MPU通过并行接口管理液晶

;显示模块,要对其时序关系有一个清楚的了解,并在程序中应明确地反映出来。间接

;控制方式的基本程序如下:
        

;有关标志位的子程序可以直接调用直接访问方式中的ST01,ST2,ST3和ST6等子序。

;**************************************************************  

;  写指令和写数据子程序

PR1: LCALL    ST01            ; 双字节参数指令写入入口

     MOV      A,DAT1        ; 取第一参数单元数据

     LCALL    PR13            ; 写入参数

PR11: LCALL    ST01             ; 单字节参数指令写入入口

      MOV      A, DAT2         ; 取第二参数单元数据

      LCALL    PR13            ; 写入参数

PR12: LCALL    ST01             ; 无参数指令写入入口

      MOV      A,  COM ; 取指令代码单元数据

      LJMP     PR14 ; 写入指令代码

PR13: CLR      CD ; C/D=0/数据写入入口

PR14: MOV      P1,A            ; 设置数据

      CLR      W_R              ; /WR=0

      NOP                       ;------------

      SETB     W_R              ; /WR=1

     ; SETB     CD               ;---------------

      RET
;**************************************************************

;3、读数据子程序

PR2: LCALL    ST01           ; 判状态位

     CLR      CD             ; C/D=0

     MOV      P1,#0FFH      ; P1口置"1"

     CLR      R_D             ; /RD=0

     MOV      A,P1          ; 读取数据

     SETB     R_D             ; /RD=1

     MOV      DAT2,A        ; 数据存入第二参数/数据单元
      
     RET
  ;**************************************************************

;初始化程序

;   该程序以240×128点阵的液晶显示模块为例。

INT: MOV      DAT1,#00H      ;设置文本显示区域首地址 1000H

     MOV      DAT2,#10H     ;-----------------

     MOV      COM,#40H

     LCALL    PR1

     MOV      DAT1,#20H   ;设置文本显示区域宽度-------------------

     MOV      DAT2,#00H      ;即一行显示所占字节数

     MOV      COM,#41H

     LCALL    PR1

     MOV      DAT1,#00H      ;设置图形显示区域首地址

     MOV      DAT2,#08H      ;或为文本属性区域首地址 -------------------

     MOV      COM,#42H

     LCALL    PR1

     MOV      DAT1,#20H    ;设置图形显示区域宽度 -----------------

     MOV      DAT2,#00H      ;或为文本属性区域宽度

     MOV      COM,#43H       ;即一行显示所占字节数

     LCALL    PR1

     MOV      COM,#0A7H      ;光标形状设置

     LCALL    PR12

     MOV      COM,#88H      ;显示方式设置,逻辑“或”合成 ------------

     LCALL    PR12

     MOV      COM,#97H       ;显示开关设置 -------------------

     LCALL    PR12

     RET
;**************************************************************

;     建立CGRAM子程序(地址设定在代码为80H起处)

;    该程序是在内部CGROM有效时建立CGRAM的子程序,所以使用的字符代码是从80H开始的。

;   子程序有一个参数为COUNT,它用于设置写入8*8点阵字符的字模的个数。如果是汉字字模,

;   那么一个汉字字模就需要4个8*8点阵字符字模组合。子程序如下:

             COUNT    EQU  33H           ;西文字符(8*8点阵)个数

CGRAM:       MOV     DAT1,#00H           ;  设置偏移地址------------

             MOV     DAT2,#00H           ;

             MOV     COM,#22H            ;  

             LCALL    PR1

             MOV     DAT1,#00H     ;设置存储器地址指针---------------

             MOV     DAT2,#00H---------------------------------

             MOV     COM,24H

             LCALL    PR1

             MOV     COM,#0B0H    ;设置自动写方式

             LCALL    PR12

             MOV     A,COUNT      ;计算写入的字节数

             MOV     B,#08H

             MUL     AB

             MOV     COUNT,A       ;计算器低8位数据

             INC      B               ;计算器高8位数据

             MOV     DPTR,#CGTAB   ;取字符库首地址

             PUSH     DPH            ;存字符库指针

             PUSH     DPL  
         
CGRAM1:      LCALL    ST3            ;判自动写状态位

             POP       DPL           ;取字符库指针

             POP       DPH
         
             CLR       A

             MOVC     A,@A+DPTR    ;取数据

             INC       DPTR           ;字符库指针加一

             PUSH     DPH             ;存字符库指针

             PUSH     DPL
            
             LCALL    PR13            ;写入数据

             DJNZ     COUNT,CGRAM1  ;计数循环

             DJNZ     B,CGRAM1

             MOV     COM,#0B2H       ;写入结束自动写指令

             LCALL    PR12

             POP      ACC              ;修正栈指针

             POP      ACC      

             RET

  ;*********************************************************************************



;示例四:汉字写入子程序(文本方式)

; 在本文方式下显式汉字,首先要建立汉字CGRAM(如上一例所示)要定义汉字代码。

; 在文本方式下写汉字需要写入4个代码以组成一个汉字,子程序如下:

  CODE_1    EQU   34H        ;

   O_Y      EQU    35H       ; Y

   O_X      EQU    36H       ; X

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

  WRI_CT:

         MOV  A,O_Y   ; 计算显示RAM地址

         MOV    B, #20H

         MUL     AB

         ADD     A, O_X

         MOV    O_X, A

         MOV    DAT1, A

         MOV    A, B

         ADDC   A, #10H    ; 文本显示区首地址为1000H----------------

         MOV    O_Y, A

         MOV    DAT2, A    ; 设置显示RAM地址

         MOV    COM, #24H

         LCALL   PR1

         MOV    A, CODE_1    ; 取汉字代码

         MOV    DAT2, A     ; 写入左上半部汉字代码

         MOV    COM, #0C0H

         LCALL   PR11

         MOV    A, CODE_1

         ADD     A, #02H

         MOV    DAT2, A     ; 写入右上半部汉字代码

         LCALL   PR11

         MOV    A, #20H      ; 显示RAM地址修正

         ADD     A, O_X

         MOV    DAT1, A

         CLR     A

         ADDC   A, O_Y

         MOV    DAT2, A

         MOV    COM, #24H   ; 设置显示RAM地址

         LCALL   PR1

         MOV    A, CODE_1

         INC     A

         MOV   DAT2, A       ; 写入左下半部汉字代码

         MOV   COM, #0C0H

         LCALL  PR11

         MOV    A, CODE_1

         ADD     A, #03H

         MOV    DAT2, A      ; 写入右下半部汉字代码

         LCALL   PR11

         RET
;**************************************************************

;文本方式下汉字显示演示程序1:

WEN_BEN_1:

;------------------------------------------
         MOV  CODE_1, #01H

          MOV  O_X,#00H

          MOV  O_Y, #00H

          LCALL    WRI_CT
;--------------------------------------
          MOV  CODE_1, #05H

          MOV  O_X, #02H

          MOV  O_Y, #00H

          LCALL    WRI_CT

;------------------------------------
          MOV  CODE_1, #09H

          MOV  O_X,#04H

          MOV  O_Y, #00H

          LCALL    WRI_CT
;-------------------------------------
          MOV  CODE_1, #0DH

          MOV  O_X,#06H

          MOV  O_Y, #00H

          LCALL    WRI_CT

;------------------------------------------
         MOV  CODE_1, #11H

          MOV  O_X,#08H

          MOV  O_Y, #00H

          LCALL    WRI_CT
;--------------------------------------
          MOV  CODE_1, #15H

          MOV  O_X, #0AH

          MOV  O_Y, #00H

          LCALL    WRI_CT

;------------------------------------
          MOV  CODE_1, #19H

          MOV  O_X,#0CH

          MOV  O_Y, #00H

          LCALL    WRI_CT
;-------------------------------------
          MOV  CODE_1, #1DH

          MOV  O_X,#0EH

          MOV  O_Y, #00H

          LCALL    WRI_CT



          RET  
;************************************************************************  

;文本方式下汉字显示演示程序2:

WEN_BEN_2:

;------------------------------------------
         MOV  CODE_1, #01H

          MOV  O_X,#00H

          MOV  O_Y, #04H

          LCALL    WRI_CT
;--------------------------------------
          MOV  CODE_1, #05H

          MOV  O_X, #02H

          MOV  O_Y, #04H

          LCALL    WRI_CT

;------------------------------------
          MOV  CODE_1, #09H

          MOV  O_X,#04H

          MOV  O_Y, #04H

          LCALL    WRI_CT
;-------------------------------------
          MOV  CODE_1, #0DH

          MOV  O_X,#06H

          MOV  O_Y, #04H

          LCALL    WRI_CT

;------------------------------------------
         MOV  CODE_1, #11H

          MOV  O_X,#08H

          MOV  O_Y, #04H

          LCALL    WRI_CT
;--------------------------------------
          MOV  CODE_1, #15H

          MOV  O_X, #0AH

          MOV  O_Y, #04H

          LCALL    WRI_CT

;------------------------------------
          MOV  CODE_1, #19H

          MOV  O_X,#0CH

          MOV  O_Y, #04H

          LCALL    WRI_CT
;-------------------------------------
          MOV  CODE_1, #1DH

          MOV  O_X,#0EH

          MOV  O_Y, #04H

          LCALL    WRI_CT

          RET  
;************************************************************************         

; 示例五  汉字写入子程序(图形方式)

; 在图形方式下显示汉字是比较常用的方式。汉字库作在程序区内,按排序定义各汉字的代码。

; 写入汉字字模如同写入图形数据一般,在里提供单字节汉字代码使用的汉字写入子程序。

;CODE      EQU     33H      ; 汉字字符代码

;O_Y       EQU      35H      ; Y坐标(0_127)

;O_X       EQU      36H      ; X坐标(0_29)

;COUNT    EQU      38H      ; 计数器

WRI_CC:  MOV      A, O_Y   ; 计算图形显示RAM地址

          MOV      B, #20H   ; 地址显示区宽度为20H

          MUL      AB

          ADD      A, O_X

          MOV      O_X, A

          MOV      A, B

          ADDC     A, #08H    ; 图形显示区首地址为0800H

          MOV      O_Y, A

          MOV      DPTR, #CGTAB   ; 计算汉字库字符首地址

          MOV      A, CODE_1

          MOV      B, #20H

          MUL      AB

          ADD       A, DPL

          MOV      DPL, A

          MOV      A, B

          ADDC     A, DPH

          MOV      DPH, A

          PUSH      DPH        ; 存字库地址指针

          PUSH      DPL

          MOV      COUNT, #10H   ; 计数器设置为16次

WRI_CC1: MOV     DAT1, O_X    ; 设置显示RAM地址

         MOV      DAT2, O_Y

         MOV      COM, #24H

         LCALL     PR1

         LCALL      PR1

         POP        DPL     ; 取字库地址指针

         POP        DPH

         CLR        A

         MOVC      A, @A+DPTR   ; 取左部字模数据

         MOV       DAT2, A        ; 设置数据

         MOV       A, #10H        ; 偏置地址为16

         MOVC      A, @A+DPTR   ; 取右部字模数据

         MOV       DAT1, A        ; 暂存数据

         INC        DPTR          ; 字库地址指针加一

         PUSH      DPH            ; 存字库地址指针

         PUSH      DPL

         MOV      COM, #0C0H     ; 设置一次写数据指令代码

         LCALL     PR11           ; 写入数据

         MOV      DAT2, DAT1      ; 设置右部数据

         LCALL     PR11           ; 写入数据

         MOV      A, #20H         ; 显示RAM地址修正

         ADD      A, O_X

         MOV     O_X, A

         CLR      A

         ADDC    A, O_Y

         MOV     O_Y, A

         DJNZ     COUNT, WRI_CC1  ; 计数器循环

         POP      ACC              ; 修正栈指针

         POP      ACC

         RET
;----------------------------------------------------------------------------------
; 汉字库
CGTAB: DB 00H, 000H, 000H, 000H, 000H, 000H, 000H, 000H;  0--骗过CGRAM第一单元,否则全屏幕花屏

       DB 00H, 040H, 037H, 010H, 083H, 060H, 02FH, 008H;  "清"代码为01H

       DB 013H, 022H, 0E3H, 022H, 023H, 022H, 022H, 022H

       DB 040H, 048H, 0FCH, 040H, 0F8H, 040H, 0FEH, 008H

       DB 0FCH, 008H, 0F8H, 008H, 0F8H, 008H, 028H, 010H

       DB 004H, 004H, 008H, 008H, 018H, 029H, 04AH, 008H;  "华"代码为05H

       DB 009H, 001H, 0FFH, 001H, 001H, 001H, 001H, 001H

       DB 040H, 048H, 058H, 060H, 0C0H, 040H, 044H, 044H

       DB 03CH, 000H, 0FEH, 000H, 000H, 000H, 000H, 000H

       DB 004H, 0FFH, 005H, 041H, 033H, 014H, 001H, 0F6H;  "蓬"代码为09H

       DB 01BH, 010H, 013H, 010H, 017H, 010H, 028H, 047H

       DB 044H, 0FEH, 040H, 0F8H, 010H, 0E0H, 018H, 046H

       DB 0F8H, 040H, 0F8H, 040H, 0FCH, 040H, 046H, 0FCH

       DB 000H, 043H, 030H, 010H, 000H, 007H, 0F1H, 011H;  "远"代码为0DH

       DB 011H, 011H, 012H, 012H, 014H, 028H, 047H, 000H

       DB 010H, 0F8H, 000H, 000H, 008H, 0FCH, 020H, 020H

       DB 020H, 024H, 024H, 01CH, 000H, 006H, 0FCH, 000H


       DB 00H, 040H, 037H, 010H, 083H, 060H, 02FH, 008H;  "清"代码为11H

       DB 013H, 022H, 0E3H, 022H, 023H, 022H, 022H, 022H

       DB 040H, 048H, 0FCH, 040H, 0F8H, 040H, 0FEH, 008H

       DB 0FCH, 008H, 0F8H, 008H, 0F8H, 008H, 028H, 010H

       DB 004H, 004H, 008H, 008H, 018H, 029H, 04AH, 008H;  "华"代码为15H

       DB 009H, 001H, 0FFH, 001H, 001H, 001H, 001H, 001H

       DB 040H, 048H, 058H, 060H, 0C0H, 040H, 044H, 044H

       DB 03CH, 000H, 0FEH, 000H, 000H, 000H, 000H, 000H

       DB 004H, 0FFH, 005H, 041H, 033H, 014H, 001H, 0F6H;  "蓬"代码为19H

       DB 01BH, 010H, 013H, 010H, 017H, 010H, 028H, 047H

       DB 044H, 0FEH, 040H, 0F8H, 010H, 0E0H, 018H, 046H

       DB 0F8H, 040H, 0F8H, 040H, 0FCH, 040H, 046H, 0FCH

       DB 000H, 043H, 030H, 010H, 000H, 007H, 0F1H, 011H;  "远"代码为1DH

       DB 011H, 011H, 012H, 012H, 014H, 028H, 047H, 000H

       DB 010H, 0F8H, 000H, 000H, 008H, 0FCH, 020H, 020H

       DB 020H, 024H, 024H, 01CH, 000H, 006H, 0FCH, 000H


;  注:这里提供的汉字字模数据表是应用清华蓬远公司提供的汉字字模提取程序PICKZB,EXE建立的,

; 汉字字模排列格式为第1?6字节为汉字左半部分自上而下排列的字模数据,

; 第17?2字节为汉字右半部分自上而下排列的字模数据。

;  图形方式下汉字显示演示程序:

         MOV CODE_1 , #00H

         MOV      O_X, #00H

         MOV      O_Y, #00H

         LCALL    WRI_CC

         MOV     CODE_1, #01H

         MOV     O_X, #03H

         MOV     O_Y, #00H

         LCALL    WRI_CC

         MOV     CODE_1, #02H

         MOV     O_X, #06H

         MOV     O_Y, #00H

         LCALL    WRI_CC

         MOV     CODE_1, #03H

         MOV     O_X, #09H

         MOV     O_Y, #00H

        LCALL    WRI_CC


;   示例六  西文字符写入子程序(文本属性显示方式的应用)

;    非文本属性显示方式的西文字符写入非常简单,先设置显示地址指针(24H),

;   再写入字符代码即可。所以这里就不再举例说明了,可以取WRI_C程序的前15条指令作为参考。

;   该程序使用了字符代码和字符显示属性两个参数。将图形显示区域作为文本属性区。

;   在写入字符代码后将字符的属性参数写入相应的属性区内。

;CODE     EQU   33H     ; 字符代码

ATTR     EQU   37H     ; 字符属性码(低4位有效)

;O_Y      EQU   35H     ;Y坐标(0_15)

;O_X      EQU   36H     ; X坐标(0_29)

WRI_C:   MOV   A, O_Y  ; 计算文本显示RAM地址

         MOV   B, #20H  ; 文本显示区宽度为20H

         MUL    AB

         ADD    A, O_X

         MOV   DAT1, A

         MOV   A, B

         ADDC  A, #00H

         MOV   DAT2, A

         PUSH   ACC      ; 存地址的高8位

         MOV   COM, #24H   ;设置地址指针

         LCALL  PR1

         MOV    DAT2, CODE_1  ;写入字符代码

         MOV    COM, #0C4H

       LCALL    PR11

       POP      ACC        ;取地址的高8位

       ADD      A, #08H    ;计算相应的属性区RAM地址

       MOV     DAT2, A

       MOV     COM, #24H  ;设置地址指针

       LCALL    PR1

       MOV     DAT2, ATTR  ;写入属性参数

       MOV     COM, #0C4H

       LCALL    PR11

       RET
; ---------------------------------------------------------------------

;  文本属性方式设置程序段

       MOV    COM, #84H   ;设置文本属性显示方式

       LCALL   PR12

       MOV    COM, #9FH   ;开文本,图形显示及光标闪烁显示

       LCALL   PR12

;-----------------------------------------------------------------------------
;文本属性方式显示演示程序段

       MOV    DAT1, #0EH    ;文本光标位置设置

       MOV    DAT2, #01H

       MOV    COM, #21H

       LCALL   PR1

       MOV    R1, #00H      ;设置属性寄存器=0

LOOPA: MOV    R2, #00H     ;设置表间址寄存器=0

       MOV    R3, #00H      ;设置显示X坐标寄存器=0

       MOV    R4, #01H      ;设置显示Y坐标寄存器=1

LOOPB: MOV    A, R2

       MOV    DPTR, #DTAB

       MOVC   A, @A+DPTR

       MOV    CODE_1, A     ;置字符代码

       MOV    ATTR, R1     ;置字符属性值

       MOV    O_X, R3      ;置X坐标

       MOV    O_Y, R4      ;置Y坐标

       LCALL   WRI_C      ;调子程序

       INC      R2

       INC      R3

       MOV    A, R2

       CJNE    A, #11, LOOPB

       LCALL   DELAY

       INC      R1

       LJMP    LOOPA

DELAY: MOV    R5, #00H

       MOV    R6, #00H

DELAY1: NOP

         DJNZ     R5, DELAY1

         DJNZ     R6, DELAY1

         RET
DTAB:   DB 37H, 45H, 4CH, 43H, 4FH, 4DH, 45H

         DB 00H, 39H, 4FH, 55H; "Welcome you"

;   该演示程序有光标位置设置的程序段。字符属性参数在软件特性中已给出,

;   这里将该参数从0到FH循环设置一遍,使用者可以从中了解参数值的特性。

;  参数与显示效果为:

; 00A~02H, 07H   正向显示

;03H            禁止显示(白)

;04H, 06H       禁止显示(黑)

;05H           负向显示

;08H~0AH, 0FH  正向闪烁显示

;0BH           禁止显示(白)

;0CH, 0EH      禁止显示(黑)

;0DH           负向闪烁显示


;  示例七   绘点程序

;  利用T6960C的位操作指令,可以很简单的设置点或清除点。

;  这样使作图或作曲线简单化了。程序的关键点在于点地址的计算上。子程序如下:


;O_Y      EQU      35H      ;Y(0_127)/D7

                             ;D7=1; D7=0

;O_X      EQU      36H      ;X(0_239)

WRI_D:  MOV    A, O_Y    ;RAM

       CLR       ACC. 7

       MOV    B, #20H         ;20H

       MUL     AB

       MOV    DAT1, A

       MOV    DAT2, B

       MOV    A, O_X      ;

       MOV    B, #08H

       DIV     AB          ;B

       ADD     A, DAT1

       MOV     DAT1, A

       MOV    A, #08H     ;

       ADDC   A, DAT2

       MOV    DAT2, A

       MOV    COM, #24H   ;RAM

       LCALL   PR1

       MOV    A, B         ;

       CPL     A

       ANL    A, #07H

       XCH    A, O_Y      ;

       SWAP     A

       ANL      A, #08H

       ORL      A, #0F0H     ;

       ORL      A,O_Y       ;

       MOV     COM, A      ;

       LCALL    PR12

       RET

;     (0,0)→(80,80)→(160,0)→(240,80)

        MOV     R2, #00H     ;X=0

        MOV     R3, #00H     ;Y=0

        MOV     R4, #50H     ;

LOOP1: MOV      A, R2

       MOV     O_X, A       ;X

       MOV     A, R3

       SETB     ACC.7       ;

       MOV     O_Y, A       ;Y

       LCALL   WRI_D       ;

       INC      R2           ;X

       INC      R3           ;Y

       DJNZ    R4, LOOP1    ;

       DEC     R3           ;Y

       DEC     R3

LOOP2: MOV    A, R2

       MOV    O_X, A

       MOV    A, R3

       SETB    ACC. 7

       MOV    O_Y, A

       LCALL   WRI_D

       INC      R2         ;X

       DJNZ     R3, LOOP2  ;

       MOV     R4,#50H    ;

LOOP3: MOV    A, R2

       MOV    O_X, A

       MOV    A, R3

       SETB    ACC.7

;************************************************

YAN_SHI:   MOV  R4,#07FH  ;

KK2:     MOV  R5,#0FFH  ;

KK1:     MOV  R6,#0FFH  ;

         DJNZ  R6,$     ;

         DJNZ  R5,  KK1  ;

         DJNZ  R4,  KK2  ;

         RET             ;
           
;**************************************************


END
0条回答

一周热门 更多>