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

📄 subprogram.asm

📁 this file for bank in keil
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        MOV     B,#08H        ; 计算字符字模的首地址
        MUL     AB            ; 建立字模指针
        ADD     A,DPL
        MOV     DPL,A
        MOV     A,B
        ADDC    A,DPH
        MOV     DPH,A
 	MOV	A,O_XL
	RL	A	       ; X*2(change the acc to a)
	MOV	O_XL,A
	MOV	A,O_YL         ; 坐标值转换地址值计算
        MOV     B,#PARA1       ; 显示域宽度
        MUL     AB
	ADD	A,O_XL
        MOV     O_XL,A
	MOV	A,B
	ADDC	A,#00H
	MOV	O_YL,A
        MOV     A,O_YH
        MOV     B,#PARA1
        MUL     AB
        ADD     A,O_YL
        MOV     O_YL,A        ; 地址存入O_XL,O_YL和O_YH
        CLR	A
        ADDC    A,#00H
        MOV     O_YH,A
    cPP:MOV R0,#00H
C_PR51: MOV	A,O_YH
	MOV	C,ACC.0	      ; 取A16值
	CLR	A
	MOV	ACC.2,C
	MOV	COM,A
	ORL     COM,#08H      ; 设置显示RAM 单元地址
        LCALL   PR1
        MOV     DAT1,O_XL
        LCALL   PR2
	INC	COM
        LCALL   PR1
        MOV     DAT1,O_YL
        LCALL   PR2
	INC	COM	         ;设置写入显示数据指令
        LCALL   PR1           
        MOV A,#00H            ;因为有灰度等级所以稍显麻烦一些.  
      	LCALL   _GRAY          ; 调灰度生成子程?
        INC R0                
        MOV     A,O_XL        ; 修正地址值
        ADD     A,#PARA1      
        MOV     O_XL,A
        MOV     A,O_YL
        ADDC    A,#00H
        MOV     O_YL,A
	MOV	A,O_YH
	ADDC	A,#00H
	MOV	O_YH,A
        MOV A,R0
        MOV B,#02H
        DIV AB
        MOV A,B
        JNZ C_PR51
        INC     COUNT1 
       ;IF COUNT/2!=0; LCALL CW_PR51
        ; ELSE UNDER
         
        MOV	A,COUNT1
       CJNE   A,#08H,C_PR51 ; 循环
        RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  绘点子程序W_DOT           childprogram  (2)  JINBEN  基本的思路都是由行列的抽象地址取得绝对
;  占用内部寄存器:O_XL,O_XH,O_YL,O_YH,A,B              地址
;  内部调用子程序:PR1,PR2,PR3
;  程序调用入口: W_DOT
;  程序参数:PARA1
;  程序输入变量:  O_XL,O_XH,O_YL,O_YH 只有在点列中我们才会使用O_XH
   ;xh=r6,xl=r7,yl=r4,yh=r5;
_W_DOT: MOV     O_XL,R7	       
        MOV     O_XH,R6	      
        MOV     O_YL,R5	      
        MOV     O_YH,R4	      
        MOV     A,O_XH	      ; XY坐标值转换成地址值
        MOV     B,#40H        ; 256点占字节数(灰度)
        MUL     AB            ; 由于LCD屏幕宽度的限制所以乘积的结果中B的值为零
	    MOV     O_XH,A	      ; 低8位地址存O_XH
	    MOV     B,#PARA1      ; 显示域宽度值
        MOV     A,O_YL        ;
        MUL     AB
	    ADD	    A,O_XH
        MOV     O_XH,A
        MOV     A,B
	    ADDC    A,#00H
	    MOV	    O_YL,A	      ; 高8位地址存O_YL
        MOV	    A,O_YH
        CLR     ACC.7
        MOV     B,#PARA1      
        MUL     AB
        ADD     A,O_YL	      ;
        MOV     O_YL,A
 	MOV	    A,B
        ADDC    A,#00H
        MOV     O_YH,A	      ; A16存O_YH,我们当前的应用中只有A16是有数值的
        MOV     A,O_XL        
        MOV     B,#08H
        DIV     AB        
        MOV     O_XL,B
        MOV     B,#02H        ; 8位绘点数据占二个字节
        MUL     AB            ; A中的数据就是商即整数个字节数  
        ADD     A,O_XH
        MOV     O_XH,A        ; 地址值暂存DISADDL和DISADDH
        MOV     A,O_YL
        ADDC    A,#00H
        MOV     O_YL,A
	    MOV	    A,O_YH
	    ADDC	A,#00H
	    MOV	    O_YH,A
        MOV     B,O_XL        ; 计算点位置值
        INC     B
        CLR     A
        SETB    C
W_DOT1: RRC     A             ; 从这里开始RESEARCH
        DJNZ    B,W_DOT1      ; C==0
        MOV     B,A           ; 点位置数据暂存B
	    MOV	    A,O_YH
	    MOV	    C,ACC.0
	    CLR  	A
        MOV     ACC.2,C
        ORL     A,#08H        ; 设置显示单元地址
	    MOV 	COM,A
        LCALL   PR1
        MOV     DAT1,O_XH
        LCALL   PR2
        INC	    COM
        LCALL   PR1
        MOV     DAT1,O_YL
        LCALL   PR2
	    INC 	COM           ;一个前导的读写指令可以后跟无数的读写操作.    
	    LCALL	PR1
	    MOV	    COUNT1,#02H
W_DOT2:	LCALL	PR3
	MOV	A,B                   ; 将点数据位再次取出
	MOV     COUNT2,#04H
W_DOT3: RLC     A             ; 取数据位C==0 ,其他位包括C都为零,只有相应的数据位为零
	JC      W_DOT5
	XCH	A,DAT1
	RL	A
	RL	A
	XCH	A,DAT1
W_DOT4:	DJNZ	COUNT2,W_DOT3
	MOV	B,A                   ;再次保存点数据位  
	LCALL	PR2               ;由于写操作地址自动修正到下一个字节
	DJNZ	COUNT1,W_DOT2
	RET
W_DOT5:	XCH	    A,GRAYB
        MOV     C,ACC.7       ;取得背景数据值 
	    XCH	    A,DAT1
	    RLC  	A
	    XCH	    A,DAT1
        MOV     C,ACC.6
	    XCH 	A,DAT1
	    RLC  	A
	    XCH	    A,DAT1
	    XCH	    A,GRAYB
	    LJMP	W_DOT4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 清显示RAM 区(清屏)子程序CLEAR  childprogram//(1)//
; 占用内部寄存器:COM,DAT1,A,R3,R4
; 内部调用子程序:PR1,PR2,GRAY
; 程序输入变量:无
; 程序调用入口:CLEAR
;---------------------------------------------
CLEAR:  MOV     R3,#00H		; 循环量
        MOV     R4,#0A0H
        MOV     COM,#00H	; 低位地址设置
        LCALL   PR1
        MOV     DAT1,#00H
        LCALL   PR2
        MOV     COM,#01H	; 高位地址设置
        LCALL   PR1
        MOV     DAT1,#00H
        LCALL   PR2
        MOV     COM,#0AH        ; 选择数据通道
        LCALL   PR1
        MOV     A,GRAYB
        SWAP    A
        ANL     A,#0C0H
        MOV     DAT1,A
        RR      A
        RR      A
        ORL     A,DAT1
        MOV     DAT1,A
        SWAP    A
        ORL     A,DAT1
        MOV     DAT1,A       ;一个字节全部变成统一的前景 
CLR1:   LCALL   PR2          ; 写数据“0”
        LCALL   PR2          ;写入连续的两个地址
        DJNZ    R3,CLR1
	    DJNZ	R4,CLR1
        RET
;///////////////////////////////////////////////////////////////////////
;///   以下是擦点的子程序                                              
;;
;;
;;
;;//////////////////////////////////////////////////////////////////////


_CL_DOT:   MOV     O_XL,R7
             MOV     O_XH,R6
             MOV     O_YL,R5
             MOV     O_YH,R4
            MOV     A,O_XH	      ; XY坐标值转换成地址值
        MOV     B,#40H        ; 256点占字节数(灰度)
        MUL     AB
	MOV   O_XH,A	      ; 低8位地址存O_XH
	MOV     B,#PARA1      ; 显示域宽度值
        MOV     A,O_YL        ;
        MUL     AB
	ADD	A,O_XH
        MOV     O_XH,A
        MOV     A,B
	ADDC	A,#00H
	MOV	O_YL,A	      ; 高8位地址存O_YL
        MOV	A,O_YH
        CLR     ACC.7
        MOV     B,#PARA1
        MUL     AB
        ADD     A,O_YL	      ;
        MOV     O_YL,A
 	MOV	A,B
        ADDC    A,#00H
        MOV     O_YH,A	      ; A16存O_YH
        MOV     A,O_XL
        MOV     B,#08H
        DIV     AB
        MOV     O_XL,B        ;保存余数  
        MOV     B,#02H        ; 8位绘点数据占二个字节
        MUL     AB
        ADD     A,O_XH
        MOV     O_XH,A        ; 地址值暂存DISADDL和DISADDH
        MOV     A,O_YL
        ADDC    A,#00H
        MOV     O_YL,A
	MOV	A,O_YH
	ADDC	A,#00H
	MOV	O_YH,A
        MOV     B,O_XL        ; 计算点位置值
        INC     B
        CLR     A
        SETB    C
WW_DOT1: RRC     A
        DJNZ    B,WW_DOT1
        MOV     B,A           ; 点位置数据暂存B
	MOV	A,O_YH
	MOV	C,ACC.0
	CLR	A
        MOV     ACC.2,C
        ORL     A,#08H        ; 设置显示单元地址
	MOV	COM,A
        LCALL   PR1
        MOV     DAT1,O_XH
        LCALL   PR2
        INC	COM
        LCALL   PR1
        MOV     DAT1,O_YL
        LCALL   PR2
	INC	COM
	LCALL	PR1
	MOV	COUNT1,#02H
WW_DOT2:LCALL	PR3
	MOV	A,B
	MOV     COUNT2,#04H
WW_DOT3: RLC     A              ; 取数据位
	JC      WW_DOT5
	XCH	A,DAT1
	RL	A
	RL	A
	XCH	A,DAT1
WW_DOT4:	DJNZ	COUNT2,WW_DOT3
	MOV	B,A
	LCALL	PR2
	DJNZ	COUNT1,WW_DOT2
	RET
WW_DOT5:XCH	A,GRAYB
        MOV     C,ACC.3       ;取得前景数据而不是简单的清零
	XCH	A,DAT1
	RLC	A
	XCH	A,DAT1
        MOV     C,ACC.2
	XCH	A,DAT1
	RLC	A
	XCH	A,DAT1
	XCH	A,GRAYB
	LJMP	WW_DOT4
        RET

;;THE BLOW IS CHANGED BY 11/9

_ONEBYTE_PR:  MOV O_XL,R7
       MOV O_XH,R6
       MOV O_YL,R5
       MOV O_YH,R4
       MOV COUNT1,R3
       MOV	A,O_XL
	RL	A	       ; X*2
	MOV	O_XL,A
	MOV	A,O_YL         ; 坐标值转换地址值计算
        MOV     B,#PARA1       ; 显示域宽度
        MUL     AB
	ADD	A,O_XL
        MOV     O_XL,A
	MOV	A,B
	ADDC	A,#00H
	MOV	O_YL,A
        MOV     A,O_YH
        MOV     B,#PARA1
        MUL     AB
        ADD     A,O_YL
        MOV     O_YL,A        ; 地址存入O_XL,O_YL和O_YH
        CLR	A
        ADDC    A,#00H
        MOV     O_YH,A
CW_PR21: MOV	A,O_YH
	MOV	C,ACC.0	      ; 取A16值
	CLR	A
	MOV	ACC.2,C
	MOV	COM,A
	ORL     COM,#08H      ; 设置显示RAM 单元地址
        LCALL   PR1
        MOV     DAT1,O_XL
        LCALL   PR2
	INC	COM
        LCALL   PR1
        MOV     DAT1,O_YL
        LCALL   PR2
	INC	COM	      ; 设置写入显示数据指令
        LCALL   PR1
        MOV   A,COUNT1    ; 取字模数据/////ATENTION PLEAS THREE PARAMETES USE R3 THE LOW BYTE R2,THE HIGH BYTE
	LCALL   _GRAY          ; 调灰度生成子程序(IN THE PROGRAM ,CALL TWICE WRITEDATA COMMAND SEEMS LIKE PR1)
        RET
_CLCW_PR:  MOV O_XL,R7
         MOV O_XH,R6
       MOV O_YL,R5
       MOV O_YH,R4
        MOV     COUNT1,#00H   ; 计数器=0
       MOV	A,O_XL
	RL	A	       ; X*2
	MOV	O_XL,A
	MOV	A,O_YL         ; 坐标值转换地址值计算
        MOV     B,#PARA1       ; 显示域宽度
        MUL     AB
	ADD	A,O_XL
        MOV     O_XL,A
	MOV	A,B
	ADDC	A,#00H
	MOV	O_YL,A
        MOV     A,O_YH
        MOV     B,#PARA1
        MUL     AB
        ADD     A,O_YL
        MOV     O_YL,A        ; 地址存入O_XL,O_YL和O_YH
        CLR	A
        ADDC    A,#00H
        MOV     O_YH,A
CW_PR12: MOV	A,O_YH
	MOV	C,ACC.0	      ; 取A16值
	CLR	A
	MOV	ACC.2,C
	MOV	COM,A
	ORL     COM,#08H      ; 设置显示RAM 单元地址
        LCALL   PR1
        MOV     DAT1,O_XL
        LCALL   PR2
	INC	COM
        LCALL   PR1
        MOV     DAT1,O_YL
        LCALL   PR2
	INC	COM	      ; 设置写入显示数据指令
        LCALL   PR1
         MOV    A,#00H
         LCALL   _GRAY          ; 调灰度生成子程序
        MOV     A,O_XL        ; 修正地址值
        ADD     A,#PARA1
        MOV     O_XL,A
        MOV     A,O_YL
        ADDC    A,#00H
        MOV     O_YL,A
	MOV	A,O_YH
	ADDC	A,#00H
	MOV	O_YH,A
        INC     COUNT1        ; 计数器加一
        MOV	A,COUNT1
        CJNE    A,#08H,CW_PR12 ; 循环
        RET

⌨️ 快捷键说明

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