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

📄 demo.asm

📁 这是LCD液晶显示器的主要控制器hd61830的软件包
💻 ASM
字号:
; 演示程序DEMO
; 该程序可以作为各子程序调用示例,也可以作为程序段使用
                ORG     0000H
                AJMP    MAIN
                ORG     0030H
        MAIN:   MOV     SP,#60H
        	ANL     P1,#0E3H        ; 间接控制方式初始化RS=R/W=E=0
; 以下是在文本显示方式运行
;               LCALL   TEXTINT         ; 调文本初始化子程序
; 初始化程序调用完成后, 调节液晶驱动电源的电位器, 显示画面将显示出因显
; 示RAM 的随机数据而呈现的随机内容. 这可以作为检查模块与计算机接口电路
; 及其驱动程序的正确性. 
                LCALL	CLEAR		; 清显示RAM
;		LJMP	DISTEXT		; 文本显示演示程序段
;		LJMP	BLINK		; 文本光标闪烁演示程序段
;		LJMP	READRAM		; 读显示数据程序段
; 以下是在图形显示方式运行
		LCALL	GRAPHINT	; 调图形初始化子程序
                LJMP	DISCHA		; 显示汉字程序段
;		LJMP	DRAW		; 绘制线显示程序段
;		LJMP	WIPE		; 清除线显示程序段
;		LJMP	SCROLL		; 滚动演示程序段(可与DISCHA联合使用)
;		
; 文本形式方式下的字符形式的操作演示程序
; 在程序中涉及到光标指针的设置方法, 字符组写入程序, 读显示数据操作和一
; 个字符写入的程序. 并在显示效果可以观察到底线光标和块状光标的显示效果. 
    DISTEXT:    MOV     O_XL,#00H       ; 设置列坐标为00
                MOV     O_YL,#00H       ; 设置行坐标为00
                SETB    CFLUG           ; 设置字符写入初次方式
		MOV	DPTR,#CTAB
		MOV	R2,#00H
		MOV     COUNT1,#1AH     ; 写入字符个数为26
       LOOP:    MOV	A,R2
		MOVC	A,@A+DPTR
		MOV	CODE,A
		LCALL   CW_PR           ; 调写入西文字符组子程序
		INC	R2
		CLR	CFLUG
		DJNZ	COUNT1,LOOP
		SJMP	$
;;
; 关光标开闪烁设置, 观察块状光标的显示效果.
      BLINK:   MOV       COM,#00H       ; 方式设置指令
               LCALL     PR1
               MOV       DAT1,#38H      ; 开闪烁关光标
               LCALL     PR2
               SJMP      $
;;               
; 读数据示例程序段
    READRAM:    MOV     O_XL,#00H       ; 设置列坐标地址为00
                MOV     O_YL,#00H       ; 设置行坐标地址为00
                LCALL   DD_PR
 		SJMP	$
; 西文字符表
        CTAB:   DB 53H,75H,70H,70H,6FH,72H,74H,20H,54H,45H,4CH,3AH
                DB 20H,30H,31H,30H,2DH,36H,32H,37H,38H,30H,38H,36H,36H
;;		
; 该子程序使用了单字节的汉字代码寄存器, 所以只能建立256 种汉字库. 如果
; 使用时不能满足要求, 则要扩展为双字节汉字代码寄存器. 那时仅修改子程序
; 的前九条指令(计算汉字字模首地址)即可. 汉字显示演示程序如下:
	DISCHA:	MOV     O_XL,#00H
                MOV     O_YL,#00H
                MOV     CODE,#00H
                LCALL   CCW_PR
                MOV     O_XL,#02H
                MOV     O_YL,#08H
                MOV     CODE,#01H
                LCALL   CCW_PR
                MOV     O_XL,#04H
                MOV     O_YL,#10H
                MOV     CODE,#02H
                LCALL   CCW_PR
                MOV     O_XL,#06H
                MOV     O_YL,#18H
                MOV     CODE,#03H
                LCALL   CCW_PR
                SJMP    $
;-------------- 汉字库 -----------------------------------
CCTAB:  DB 000H,040H,037H,010H,083H,060H,02FH,008H    ; 清
	DB 013H,012H,063H,022H,023H,022H,022H,022H
	DB 040H,048H,0FCH,040H,0F8H,040H,0FEH,000H
	DB 0F8H,008H,0F8H,008H,0F8H,008H,028H,010H

	DB 001H,041H,027H,021H,01FH,004H,0E2H,02FH    ; 达
	DB 021H,02FH,021H,03FH,021H,051H,08FH,000H
	DB 000H,000H,0E0H,000H,0F0H,020H,040H,0F0H
	DB 000H,0E0H,000H,0F8H,000H,000H,0FEH,000H

	DB 001H,021H,011H,009H,009H,001H,0FFH,004H    ; 光
	DB 004H,004H,004H,008H,008H,010H,020H,040H
	DB 000H,008H,00CH,010H,020H,004H,0FEH,040H
	DB 040H,040H,040H,040H,042H,042H,03EH,000H

	DB 01FH,041H,07FH,081H,03DH,001H,03DH,001H    ; 电
	DB 03FH,021H,03FH,021H,03FH,001H,001H,001H
	DB 0F0H,004H,0FEH,002H,074H,000H,070H,000H
	DB 0F8H,008H,0F8H,008H,0F8H,002H,002H,0FEH

; 绘图演示程序段
; 从(0,0)→(64,64)→(128,0)→(192,64)→(256,0)→(320,64)绘制折线
        DRAW:   MOV     R2,#00H         ; 列坐标=0
                MOV     R3,#00H
                MOV     R4,#00H         ; 行坐标=0
                MOV     R5,#63          ; 循环量=64
        LOOP1:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   S_DOT           ; 调绘点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                INC     R4              ; 行坐标加一
                DJNZ    R5,LOOP1        ; 循环
        LOOP2:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   S_DOT           ; 调绘点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                DJNZ    R4,LOOP2        ; 行坐标减一, 循环
                MOV     R5,#63          ; 循环量=64
        LOOP3:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   S_DOT           ; 调绘点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                INC     R4              ; 行坐标加一
                DJNZ    R5,LOOP3        ; 循环
        LOOP4:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   S_DOT           ; 调绘点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                DJNZ    R4,LOOP4        ; 行坐标减一, 循环
                MOV     R5,#63          ; 循环量=64
        LOOP5:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   S_DOT           ; 调绘点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                INC     R4              ; 行坐标加一
                DJNZ    R5,LOOP5        ; 循环
                SJMP    $
; 从(0,0)→(64,64)→(128,0)→(192,64)→(256,0)→(320,64)消除折线
        WIPE:   MOV     R2,#00H         ; 列坐标=0
                MOV     R3,#00H
                MOV     R4,#00H         ; 行坐标=0
                MOV     R5,#63          ; 循环量=64
        LOOP6:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   C_DOT           ; 调消点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                INC     R4              ; 行坐标加一
                DJNZ    R5,LOOP6        ; 循环
        LOOP7:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   C_DOT           ; 调消点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                DJNZ    R4,LOOP7        ; 行坐标减一, 循环
                MOV     R5,#63
        LOOP8:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   C_DOT           ; 调消点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                INC     R4              ; 行坐标加一
                DJNZ    R5,LOOP8        ; 循环
        LOOP9:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   C_DOT           ; 调消点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                DJNZ    R4,LOOP9        ; 行坐标减一, 循环
                MOV     R5,#63
        LOOPA:  MOV     O_XL,R2         ; 设置列坐标
                MOV     O_XH,R3
                MOV     O_YL,R4         ; 设置行坐标
                LCALL   C_DOT           ; 调消点子程序
                MOV     A,R2            ; 列坐标加一
                ADD     A,#01H
                MOV     R2,A
                MOV     A,R3
                ADDC    A,#00H
                MOV     R3,A
                INC     R4              ; 行坐标加一
                DJNZ    R5,LOOPA        ; 循环
                SJMP    $
;;		
; 滚动演示程序
; 定时间定间距地修改显示起始地址将产生显示画面的平滑滚动. 在文本显示方
; 式下, 滚动是以字符位为单位的. 向左和向右滚动是以一个字符(字节)为单位; 
; 向上和向下滚动也是以一字符行为单位的. 在图形显示方式下, 向左和向右滚
; 动是以 8点为(一字节)单位, 向上和向下滚动则是以一点行为单位的. 这里仅
; 提供向上和向下滚动的演示程序. 程序如下:
		SADL	EQU	32H
		SADH	EQU	33H
        SCROLL: MOV     SADL,#00H       ; 设置显示起始地址=0000H
                MOV     SADH,#00H
                MOV     COUNT1,#64      ; 设置计数器=8
          ; 向上滚动
        SCRU:   MOV     COM,#08H        ; 设置显示起始地址
                LCALL   PR1
                MOV     DAT1,SADL
                LCALL   PR2
                MOV     COM,#09H
                LCALL   PR1
                MOV     DAT1,SADH
                LCALL   PR2
                MOV     A,SADL          ; 显示起始地址加显示域宽度
                ADD     A,#PARA1        ; (依实际而定)
                MOV     SADL,A
                MOV     A,SADH
                ADDC    A,#00H
                MOV     SADH,A
                LCALL   DELAY           ; 调延时子程序
                DJNZ    COUNT1,SCRU     ; 循环
                LCALL	DELAY
                MOV     COUNT1,#64      ; 设置计数器=8
          ; 向下滚动
        SCRD:   MOV     COM,#08H        ; 设置显示起始地址
                LCALL   PR1
                MOV     DAT1,SADL
                LCALL   PR2
                MOV     COM,#09H
                LCALL   PR1
                MOV     DAT1,SADH
                LCALL   PR2
                CLR     C               ; 显示起始地址减显示域宽度
                MOV     A,SADL
                SUBB    A,#PARA1        ; (依实际而定)
                MOV     SADL,A
                MOV     A,SADH
                SUBB    A,#00H
                MOV     SADH,A
                LCALL   DELAY           ; 调延时子程序
                DJNZ    COUNT1,SCRD     ; 循环
                SJMP    $
;;		
          ; 延时子程序
        DELAY:  MOV     R3,#00H
                MOV     R4,#00H
        DELAY1: NOP
                DJNZ    R3,DELAY1
                DJNZ    R4,DELAY1
                RET

⌨️ 快捷键说明

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