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

📄 subprogram.asm

📁 this file is for keil LCD
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;SUBPROGRAM  FOR  LCD  DISPLAY
;ASM  FILE  FOR  LCD   DISPLAY  
 
;;;;.asm
; 直接访问方式地址定义,根据用户平台接口修改
;;WE MUST SHUOMING THAT THE CHINESECU AND THE CHARACTO CU MUST BUILD IN ASM FILES
;;必须说明中文字库埠?/和西文字库都要在汇编和文件中建立
CWADD1  EQU	0D000H		; 写指令代码地址
DWADD1	EQU	0D001H		; 写参数及显示数据地址
DRADD1	EQU	0D001H		; 读参数及显示数据地址
; 间接控制方式信号定义,根据用户平台接口修改
;//RS	EQU	P3.0            ; RS
;//RD	EQU	P3.1            ; /RD
;//WR	EQU	P3.2            ; /WR
;//DATBUS	EQU	P1              ; 数据总线
; 程序参数定义,根据用户选择的LCM型号修改
PARA1   EQU    0A0H             ; 显示区域宽度
; 程序变量定义,根据用户平台提供的内部资源修改
COM	EQU	50H		; 指令寄存器
DAT1	EQU	51H		; 参数及显示数据寄存器
COUNT1	EQU 	52H             ; 计数器1
COUNT2	EQU	53H             ; 计数器2
O_XL	EQU	54H		; X坐标低8位寄存器(字节)
				; X坐标低8位寄存器(点列)
O_XH	EQU	55H		; X坐标高8位寄存器(点列)
				; D7位为绘点(D7=1)和消点(D7=0)标志位
O_YL	EQU	56H		; Y坐标寄存器低8位(点行)
O_YH	EQU	57H		; Y坐标寄存器高8位(点行)
CODEE	EQU	58H		; 字符代码

GRAYB   EQU     59H         
                               ; 00H-暗;01H-淡;
                               ; 10H-深;11H-亮
GRAYH   EQU     5AH            ; 灰度数据寄存器高字节
GRAYL   EQU     5BH            ; 灰度数据寄存器低?
  PUBLIC GRAYB
  PUBLIC CLEAR,_ONEBYTE_PR,_CLCW_PR,_CL_DOT
  PUBLIC _W_DOT,_CCW_PR,_CC24PR,_CW_PR,_CW_PRR,_CLCW_PRR
mypro segment code
rseg mypro                     ; 允许编译器重新定位








;=====汉字(16x16点阵)库===============================
; 根据北京清华蓬远科贸公司提供的软件PICKHZ.EXE建立字库
   
CCTAB:  DB 000H,040H,037H,010H,083H,060H,02FH,008H;清
        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;华
        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


; 汉字(24x24点阵)写入子程序
;=====汉字(24x24点阵)库===============================
; 根据北京清华蓬远科贸公司提供的软件PICKHZ.EXE建立字库

CCTAB24:DB 000H,000H,000H,07FH,000H,020H,018H,00CH;蓬
        DB 00CH,008H,001H,00CH,07EH,00CH,00CH,00CH
        DB 00CH,00DH,00CH,00CH,032H,061H,020H,000H
        DB 082H,0E3H,0C3H,0FFH,0D3H,09AH,03FH,030H
        DB 049H,087H,019H,064H,086H,07FH,006H,07FH
        DB 006H,0FFH,006H,006H,004H,0FFH,0FFH,000H
        DB 000H,080H,00CH,0FEH,000H,040H,0E0H,0C0H
        DB 080H,000H,0FEH,078H,000H,0F0H,000H,0E0H
        DB 000H,0F8H,000H,000H,000H,0FEH,0F8H,000H
        DB 000H,018H,00CH,006H,006H,004H,000H,000H;远
        DB 006H,07FH,006H,006H,006H,006H,006H,006H
       DB 006H,006H,006H,006H,009H,030H,010H,000H
       DB 000H,000H,03FH,000H,000H,000H,000H,0FFH
        DB 019H,019H,019H,019H,019H,019H,019H,011H
       DB 031H,021H,060H,0C0H,000H,0FFH,07FH,000H
       DB 000H,060H,0F0H,000H,000H,000H,018H,0FCH
        DB 080H,080H,080H,080H,080H,088H,088H,088H
       DB 08CH,0FCH,0F8H,000H,000H,0FFH,0FCH,000H
; 汉字(24x24点阵)演示程序            callby
;DISCH24:MOV     GRAYB,#4CH           ;灰度值设置: 正向显示
;        MOV     O_XL,#0CH
;        MOV     O_YL,#20H
;        MOV     O_YH,#00H
 ;       MOV     CODEE,#00H
 ;       LCALL   _CC24PR
 ;;;       MOV     GRAYB,#0C4H        ;灰度值设置: 负向显示
  ;      MOV     O_XL,#15H
   ;     MOV     O_YL,#38H
   ;     MOV     O_YH,#01H
   ;     MOV     CODEE,#01H
   ;     LCALL   _CC24PR
   ;     SJMP $
; 绘图演示程序段       callby
;DRAW:           MOV     GRAYB,#0C0H  ;有灰度的显示将把所有显示都分成相应的灰度等级
 ;               MOV     R2,#00H
 ;               MOV     R3,#00H
 ;               MOV     R4,#00H
  ;              MOV     R5,#00H
  ;      LOOP1:  MOV     O_XL,R2
  ;              MOV     O_XH,R3
   ;             MOV     O_YL,R4
   ;             MOV     O_YH,R5
   ;             LCALL   _W_DOT
   ;             MOV     A,R2
    ;            MOV     R2,A
    ;            MOV     A,R3
    ;            ADDC    A,#00H
    ;            MOV     R3,A
     ;           MOV     A,R4
     ;           ADD     A,#01H
     ;           MOV     R4,A
      ;          MOV     A,R5
     ;           ADDC    A,#00H
      ;          MOV     R5,A
      ;          CJNE    A,#01H,LOOP1    
      ;          SJMP     $
;----------------------------------callby----------------
;WIPE:           MOV     GRAYB,#00H
;                MOV     R2,#00H
;                MOV     R3,#80H
;                MOV     R4,#00H
;                MOV     R5,#00H
 ;       LOOP2:  MOV     O_XL,R2
 ;               MOV     O_XH,R3
 ;               MOV     O_YL,R4
 ;               MOV     O_YH,R5
 ;               LCALL   _W_DOT
 ;               MOV     A,R2
 ;               ADD     A,#01H
  ;              MOV     R2,A
  ;              MOV     A,R3
  ;              ADDC    A,#00H
  ;              MOV     R3,A
  ;              MOV     A,R4
  ;              ADD     A,#01H
  ;              MOV     R4,A
  ;              MOV     A,R5
  ;              ADDC    A,#00H
   ;             MOV     R5,A
  ;              CJNE    A,#01H,LOOP2
   ;             SJMP    $
;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;  直接访问方式的驱动子程序
;   程序口地址设置CWADD1,DWADD1,DRADD1
;   占用内部资源DAT1,A,COM
;   程序输入变量: DAT1,,COM
;===============直接访问方式驱动子程序==================
; 写指令子程序      ////childprogram(7)
PR1:    PUSH    DPL
        PUSH    DPH
        MOV     DPTR,#CWADD1
	MOV	A,COM
        MOVX    @DPTR,A
        POP     DPH
        POP     DPL
        RET
; 写数据子程序    childprogram(8)
PR2:    PUSH    DPL
        PUSH    DPH
        MOV     DPTR,#DWADD1
	MOV	A,DAT1
        MOVX    @DPTR,A
        POP     DPH
        POP     DPL
        RET
; 读数据子程序    childprogram(9)
PR3:    PUSH    DPL
        PUSH    DPH
        MOV     DPTR,#DRADD1
        MOVX    A,@DPTR
	MOV	DAT1,A
        POP     DPH
        POP     DPL
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;======西文字符库==============================================
CHTAB:  DB 000H,000H,000H,000H,000H,000H,000H,000H ;" "代码"0"
	DB 004H,004H,004H,004H,000H,000H,004H,000H ; ! 代码"1"
	DB 00AH,00AH,00AH,00AH,000H,000H,000H,000H ; " 代码"2"
	DB 00AH,00AH,01FH,00AH,01FH,00AH,00AH,000H ; # 代码"3"
	DB 004H,00FH,014H,00EH,005H,01EH,004H,000H ; $ 代码"4"
	DB 018H,019H,002H,004H,008H,013H,003H,000H ; % 代码"5"
	DB 00CH,012H,014H,008H,015H,012H,00DH,000H ; & 代码"6"
	DB 00CH,004H,008H,000H,000H,000H,000H,000H ; ' 代码"7"
	DB 002H,004H,008H,008H,008H,004H,002H,000H ; ( 代码"8"
	DB 008H,004H,002H,002H,002H,004H,008H,000H ; ) 代码"9"
	DB 000H,004H,015H,00EH,015H,004H,000H,000H ; * 代码"A"
	DB 000H,004H,004H,01FH,004H,004H,000H,000H ; + 代码"B"
	DB 000H,000H,000H,000H,00CH,004H,008H,000H ; , 代码"C"
	DB 000H,000H,000H,01FH,000H,000H,000H,000H ; - 代码"D"
	DB 000H,000H,000H,000H,000H,00CH,00CH,000H ; . 代码"E"
	DB 000H,001H,002H,004H,008H,010H,000H,000H ; / 代码"F"
	DB 00EH,011H,013H,015H,019H,011H,00EH,000H ; 0 代码"10"
	DB 004H,00CH,004H,004H,004H,004H,00EH,000H ; 1 代码"11"
	DB 00EH,011H,001H,002H,004H,008H,01FH,000H ; 2 代码"12"
	DB 01FH,002H,004H,002H,001H,011H,00EH,000H ; 3 代码"13"
	DB 002H,006H,00AH,012H,01FH,002H,002H,000H ; 4 代码"14"
	DB 01FH,010H,01EH,001H,001H,011H,00EH,000H ; 5 代码"15"
	DB 006H,008H,010H,01EH,011H,011H,00EH,000H ; 6 代码"16"
	DB 01FH,001H,002H,004H,004H,004H,004H,000H ; 7 代码"17"
	DB 00EH,011H,011H,00EH,011H,011H,00EH,000H ; 8 代码"18"
	DB 00EH,011H,011H,00EH,001H,002H,00CH,000H ; 9 代码"19"
	DB 000H,00CH,00CH,000H,00CH,00CH,000H,000H ; : 代码"1A"
	DB 000H,00CH,00CH,000H,00CH,004H,008H,000H ; ; 代码"1B"
	DB 002H,004H,008H,010H,008H,004H,002H,000H ; < 代码"1C"
	DB 000H,000H,01FH,000H,01FH,000H,000H,000H ; = 代码"1D"
	DB 008H,004H,002H,001H,002H,004H,008H,000H ; > 代码"1E"
	DB 00EH,011H,001H,002H,004H,000H,004H,000H ; ? 代码"1F"
	DB 00EH,011H,001H,00DH,015H,015H,00EH,000H ; @ 代码"20"
	DB 00EH,011H,011H,011H,01FH,011H,011H,000H ; A 代码"21"
	DB 01EH,009H,009H,00EH,009H,009H,01EH,000H ; B 代码"22"
	DB 00EH,011H,010H,010H,010H,011H,00EH,000H ; C 代码"23"
	DB 01EH,009H,009H,009H,009H,009H,01EH,000H ; D 代码"24"
	DB 01FH,010H,010H,01FH,010H,010H,01FH,000H ; E 代码"25"
	DB 01FH,010H,010H,01EH,010H,010H,010H,000H ; F 代码"26"
	DB 00EH,011H,010H,013H,011H,011H,00FH,000H ; G 代码"27"
	DB 011H,011H,011H,01FH,011H,011H,011H,000H ; H 代码"28"
	DB 00EH,004H,004H,004H,004H,004H,00EH,000H ; I 代码"29"
	DB 007H,002H,002H,002H,002H,012H,00CH,000H ; J 代码"2A"
	DB 011H,012H,014H,018H,014H,012H,011H,000H ; K 代码"2B"
	DB 010H,010H,010H,010H,010H,010H,01FH,000H ; L 代码"2C"
	DB 011H,01BH,015H,011H,011H,011H,011H,000H ; M 代码"2D"
	DB 011H,019H,019H,015H,013H,013H,011H,000H ; N 代码"2E"
	DB 00EH,011H,011H,011H,011H,011H,00EH,000H ; O 代码"2F"
	DB 01EH,011H,011H,01EH,010H,010H,010H,000H ; P 代码"30"
	DB 00EH,011H,011H,011H,015H,012H,00BH,000H ; Q 代码"31"
        DB 01EH,011H,011H,01EH,014H,012H,011H,000H ; R 代码"32"
	DB 00EH,011H,010H,00EH,001H,011H,00EH,000H ; S 代码"33"
	DB 01FH,004H,004H,004H,004H,004H,004H,000H ; T 代码"34"
	DB 011H,011H,011H,011H,011H,011H,00EH,000H ; U 代码"35"
	DB 011H,011H,011H,011H,011H,00AH,004H,000H ; V 代码"36"
	DB 011H,011H,011H,015H,015H,01BH,011H,000H ; W 代码"37"
	DB 011H,011H,00AH,004H,00AH,011H,011H,000H ; X 代码"38"
	DB 011H,011H,011H,00AH,004H,004H,004H,000H ; Y 代码"39"
	DB 01FH,001H,002H,004H,008H,010H,01FH,000H ; Z 代码"3A"
	DB 00EH,008H,008H,008H,008H,008H,00EH,000H ; [ 代码"3B"
	DB 000H,010H,008H,004H,002H,001H,000H,000H ; \ 代码"3C"
	DB 00EH,002H,002H,002H,002H,002H,00EH,000H ; ] 代码"3D"
	DB 004H,00AH,011H,000H,000H,000H,000H,000H ; ^ 代码"3E"
	DB 000H,000H,000H,000H,000H,000H,01FH,000H ; _ 代码"3F"
	DB 010H,008H,004H,000H,000H,000H,000H,000H ; ` 代码"40"
	DB 000H,000H,00EH,001H,00FH,011H,00FH,000H ; a 代码"41"
	DB 010H,010H,016H,019H,011H,011H,01EH,000H ; b 代码"42"
	DB 000H,000H,00EH,011H,010H,011H,00EH,000H ; c 代码"43"
	DB 001H,001H,00DH,013H,011H,011H,00FH,000H ; d 代码"44"
	DB 000H,000H,00EH,011H,01FH,010H,00EH,000H ; e 代码"45"
	DB 002H,005H,004H,00EH,004H,004H,004H,000H ; f 代码"46"
	DB 000H,00DH,013H,013H,00DH,001H,00EH,000H ; g 代码"47"
	DB 010H,010H,016H,019H,011H,011H,011H,000H ; h 代码"48"
	DB 004H,000H,00CH,004H,004H,004H,00EH,000H ; i 代码"49"
	DB 002H,000H,006H,002H,002H,012H,00CH,000H ; j 代码"4A"
	DB 008H,008H,009H,00AH,00CH,00AH,009H,000H ; k 代码"4B"
	DB 00CH,004H,004H,004H,004H,004H,00EH,000H ; l 代码"4C"
	DB 000H,000H,01AH,015H,015H,015H,015H,000H ; m 代码"4D"
	DB 000H,000H,016H,019H,011H,011H,011H,000H ; n 代码"4E"
	DB 000H,000H,00EH,011H,011H,011H,00EH,000H ; o 代码"4F"
	DB 000H,016H,019H,019H,016H,010H,010H,000H ; p 代码"50"
	DB 000H,00DH,013H,013H,00DH,001H,001H,000H ; q 代码"51"
	DB 000H,000H,016H,019H,010H,010H,010H,000H ; r 代码"52"
	DB 000H,000H,00FH,010H,01EH,001H,01FH,000H ; s 代码"53"
	DB 008H,008H,01CH,008H,008H,009H,006H,000H ; t 代码"54"
	DB 000H,000H,012H,012H,012H,012H,00DH,000H ; u 代码"55"
	DB 000H,000H,011H,011H,011H,00AH,004H,000H ; v 代码"56"
	DB 000H,000H,011H,011H,015H,015H,00AH,000H ; w 代码"57"
	DB 000H,000H,011H,00AH,004H,00AH,011H,000H ; x 代码"58"
	DB 000H,000H,011H,011H,013H,00DH,001H,00EH ; y 代码"59"
	DB 000H,000H,01FH,002H,004H,008H,01FH,000H ; z 代码"5A"
	DB 002H,004H,004H,008H,004H,004H,002H,000H ; { 代码"5B"
	DB 002H,002H,002H,000H,002H,002H,002H,000H ; | 代码"5C"
	DB 008H,004H,004H,002H,004H,004H,008H,000H ; } 代码"5D"
	DB 008H,015H,002H,000H,000H,000H,000H,000H ; ~ 代码"5E"
	DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;" "代码"5F"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 灰度生成子程序(字节)GRAYt m       childprogram//(6)//
;  占用内部资源:GRAYB,GRAYH,GRAYL,COUNT2,A
;  内部调用子程序:PR2
;  程序调用入口: GRAY
;  程序输入变量:GRAYB
;  灰度生成子程序(字节)如下:

_GRAY:  ; MOV GRAYB,R7         ;用两个字节来描述一个字节的内容这一个字节的数据,1代表前景数据,0代表背景数据,但是
       ;MOV A,R6               ;前景数据是分等级的我们一定要注意这一点,这里似乎又是堆栈内存空间的不足造成了这样
       ;MOV GRAYB,#0CH         ;的无法预知的错误

        MOV     GRAYH,#00H     ; 灰度寄存器清零
        MOV     GRAYL,#00H
        MOV     COUNT2,#08H
GRAY1:  RLC     A              ; 取数据位
        PUSH    ACC            ; 存数据
        MOV     A,GRAYB        ; 取灰度寄存器,首先得到前景和后景的灰度的等级.
        JC      GRAY3          ; 判数据位是否为"0"  ,这一个跳转上选择显示前景还是显示后景
        MOV     C,ACC.3        ; 为"1" 取前景灰度数据
        XCH     A,GRAYL        ; 生成灰度数据,前景和背景形成反差和0,1形成反差是一样的道理
        RLC     A
        XCH     A,GRAYL        ;GRAYH<-GRAY_L 也就是说两个变量全部加入移位的过程,C位的隐含的使用 
        XCH     A,GRAYH
        RLC     A
        XCH     A,GRAYH
        MOV     C,ACC.2        ; 取前景灰度数据
        XCH     A,GRAYL
        RLC     A
        XCH     A,GRAYL
        XCH     A,GRAYH
        RLC     A
        XCH     A,GRAYH
GRAY2:  POP     ACC            ; 取数据
        DJNZ    COUNT2,GRAY1   ; 计数器计数
        MOV     DAT1,GRAYH     ; 数据写入显示RAM
        LCALL	PR2
        MOV     DAT1,GRAYL     ; 已经设好地址而后才写入数据.
        LCALL	PR2
        RET
GRAY3:  MOV     C,ACC.7        ; 为"0"取背景灰度数据
        XCH     A,GRAYL        ; 生成灰度数据
        RLC     A
        XCH     A,GRAYL
        XCH     A,GRAYH
        RLC     A
        XCH     A,GRAYH
        MOV     C,ACC.6        ; 取背景灰度数据
        XCH     A,GRAYL
        RLC     A
        XCH     A,GRAYL
        XCH     A,GRAYH
        RLC     A
        XCH     A,GRAYH
        LJMP    GRAY2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 汉字写入子程序(16*16点阵字库)CCW_PR      childprogra           (5)m
;  占用内部资源:O_XL,O_YL,O_YH,CODE,COUNT1,A,B,DPTR
;  内部调用子程序:PR1,PR2,GRAY
;  连接字库:      CCTAB
;  程序参数: PARA1
;  程序调用入口:  CCW_PR
;  程序输入变量:  O_XL,O_YL,O_YH,CODE ,之所以O_XL只用一个字节是因为横向是以字节为单位的640*480横向也就是60个字节
;  汉字写入子程序如下:  基本的过程就是首先计算地址而后取字模的数据
_CCW_PR: MOV     A,R7             ;注意参数的传递的顺序奇数是低字节,而偶数是高字节
         MOV     O_XL,A
	  MOV     A,R5
         MOV     O_YL,A
	  MOV     A,R4
         MOV     O_YH,A
	  MOV     A,R3
	  MOV     CODEE,A
         MOV     COUNT1,#00H   ; 计数器=0

⌨️ 快捷键说明

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