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

📄 tg19264.asm

📁 有关单片机仿真软件的例子建议 结合例子
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	RET             ;OUT: B
;****************************************************************
;全角字符数据输出,16*16点阵
;****************************************************************
PUTCWDOT:               ;IN: DPTR
	PUSH	XPOS
	MOV	R7,#16
PCW_PA:				;上半个字符
	CLR	A
	MOVC	A,@A+DPTR	;获取点阵码
	CALL	LCDWRITE	;写入LCM(上半个字部分)
	INC	XPOS		;X坐标加1
	INC	DPTR		;指向下一个点阵码
	DJNZ	R7,PCW_PA
	INC	YPOS
	POP	XPOS
	MOV	R7,#16
PCW_PB:				;下半个字符
	CLR	A		;
	MOVC	A,@A+DPTR	;再取一个点阵码
	CALL	LCDWRITE	;输出
	INC	DPTR		;指向下一个点阵码
	INC	XPOS		;指向下一列
	DJNZ	R7,PCW_PB
	DEC	XPOS
	CALL	CUSORNEXT	;坐标指针自动移位计算(指向下一列)
	MOV	A,XPOS		;判断是否换行?
	JNZ	PCW_PC
	INC	YPOS
PCW_PC:	DEC	YPOS		;返回上半个字部分
	RET
;****************************************************************
;半角字符数据输出,8*16点阵
;****************************************************************
PUTCHARDOT:              ;IN: DPTR
	PUSH	XPOS
	MOV	R7,#8
PAC_PA:				;上半个字符
	CLR	A
	MOVC	A,@A+DPTR	;获取点阵码
	CALL	LCDWRITE	;写入LCM(上半个字部分)
	INC	DPTR		;指向下一个点阵码
	INC	XPOS
	DJNZ	R7,PAC_PA
	INC	YPOS
	POP	XPOS
	MOV	R7,#8
PAC_PB:				;下半个字符
	CLR	A		;
	MOVC	A,@A+DPTR	;再取一个点阵码
	CALL	LCDWRITE	;输出
	INC	DPTR		;指向下一个点阵码
	INC	XPOS
	DJNZ	R7,PAC_PB
	DEC	XPOS
	CALL	CUSORNEXT	;坐标指针自动移位计算(指向下一列)
	MOV	A,XPOS		;判断是否换行?
	JNZ	PAC_LA2
	INC	YPOS
PAC_LA2:
	DEC	YPOS		;返回上半个字部分
	RET
;****************************************************************
;  汉字库实际指针换算,结果置入DPTR
;****************************************************************
HZKPOS:                ;IN: A
	MOV	B,#32
	MUL	AB
	MOV	DPTR,#HZKDOT
	AJMP	ZKPOS
;****************************************************************
;  英文字母数字实际指针换算,结果置入DPTR
;****************************************************************
EZKPOS:                ;IN: A
	MOV	B,#16
	MUL	AB
	MOV	DPTR,#EZKDOT	;修改数据指针,指向所选字母
ZKPOS:	ADD	A,DPL
	MOV	DPL,A
	MOV	A,B
	ADDC	A,DPH
	MOV	DPH,A
	RET            ;OUT: DPTR

;****************************************************************
;按给定的XY坐标定位,并写数据子程序
;****************************************************************
LCDWRITE:                ;IN: A
    CALL    LCDPOS       	;坐标指针定位
    CALL    LCDWD        	;写数据
    RET

;****************************************************************
; 连续输出时的坐标指针换算,自动指向下一个可写入地址
;****************************************************************
CUSORNEXT:
    PUSH    ACC
	ANL	YPOS,#7
	INC	XPOS
	MOV	A,XPOS
	CJNE    A,#192,CNT_LAX
	MOV	XPOS,#0
	INC	YPOS
	MOV	A,YPOS
	ANL	A,#0F8H
	JZ	CNT_LAX
	MOV	YPOS,#0
CNT_LAX:
	POP     ACC
    RET
;****************************************************************
;一字节数据输出
;****************************************************************
LCDWD:                    ;IN: A
    PUSH    B
    PUSH    ACC
    MOV	B,A
	MOV	A,XPOS
	CJNE	A,#64,$+3
	JNC	LWD_LA1
	MOV	A,B
	CALL	LCDWD1
	JMP	LWD_LA3
LWD_LA1:CJNE	A,#128,$+3
	JNC	LWD_LA2
	MOV	A,B
	CALL	LCDWD2
	JMP	LWD_LA3
LWD_LA2:CJNE	A,#192,$+3
	JNC	LWD_LA3
	MOV	A,B
	CALL	LCDWD3
LWD_LA3:
    POP     ACC
    POP     B
	RET
;****************************************************************
; X,Y坐标定位处理
;****************************************************************
LCDPOS:
	PUSH	ACC
    PUSH    B
	MOV	A,YPOS		;取Y座标
	ANL	A,#7		;保留低三位
	ADD	A,#0B8H		;光标定位指令
	MOV	B,A		;暂存Y坐标
	CLR	C
	MOV	A,XPOS		;取X坐标值
	SUBB	A,#PD1		;左区边界
	JNC	LPS_LA1		;如果不在左区
	MOV	A,XPOS		;重新取X坐标值
	ANL	A,#3FH		;左边部分(CS1)
	ORL	A,#40H		;X方向定位指令
	CALL	LCDWC1		;X定位
	MOV	A,B		;Y定位
	CALL	LCDWC1
	JMP	LPS_LA3		;返回
LPS_LA1:CLR	C
	MOV	A,XPOS
    SUBB	A,#PD1          ;SUBB	A,#PD1*2        ;中间区右边界
    SUBB	A,#PD1
	JNC	LPS_LA2		;如果不在中间区
	MOV	A,XPOS
	ANL	A,#3FH		;中间部分(CS2)
	ORL	A,#40H		;X方向定位指令
	CALL	LCDWC2		;X定位
	MOV	A,B
	CALL	LCDWC2		;Y坐标定位
	JMP	LPS_LA3		;返回
LPS_LA2:CLR	C
	MOV	A,XPOS
	SUBB	A,#PD1          ;SUBB	A,#PD1*3	;右边区域边界
    SUBB	A,#PD1
    SUBB	A,#PD1
	JNC	LPS_LA3		;如果还出界则不予定位
	MOV	A,XPOS
	ANL	A,#3FH		;右边部分(CS3)
	ORL	A,#40H		;X方向定位指令
	CALL	LCDWC3
	MOV	A,B
	CALL	LCDWC3		;Y方向定位
LPS_LA3:
    POP     B
	POP	ACC
	RET


;--------------------------------底层操作子程序----------------------------------
; 修改人:SZN
; 修改日期:2005.07.10
;		  
;********************************************************************
;功能:控制命令输出子程序
;标号:    (1)ASM: LCDWC1, LCDWC2, LCDWC3
;入口参数:(1)ASM: A
;出口参数:无
;子程序调用:WAITIDLE1, WAITIDLE2, WAITIDLE3
;堆栈需求:4 字节
;影响资源:LCMCTRL
;********************************************************************
LCDWC1: PUSH    ACC	 
        PUSH    DPH
        PUSH    DPL
        MOV DPTR,#BLK1_WR_CMD
        SJMP    WCCOM
LCDWC2: PUSH    ACC	
        PUSH    DPH
        PUSH    DPL
        MOV DPTR,#BLK2_WR_CMD
        SJMP    WCCOM
LCDWC3:	PUSH    ACC	 
        PUSH    DPH
        PUSH    DPL
        MOV DPTR,#BLK3_WR_CMD
 WCCOM: 
        MOVX    @DPTR,A      ;E=1 D/I=0 R/W=0
        POP     DPL
        POP     DPH
        POP     ACC
       	RET

;****************************************************************
;数据写输出(分为左中右3个程序)
;****************************************************************
LCDWD1: PUSH    ACC               ;片1写数据子程序 
        PUSH    DPH
        PUSH    DPL
        MOV DPTR,#BLK1_WR_DATA
        SJMP    WDCOM
LCDWD2: PUSH    ACC               ;片2写数据子程序 
        PUSH    DPH
        PUSH    DPL
        MOV DPTR,#BLK2_WR_DATA
        SJMP    WDCOM
LCDWD3: PUSH    ACC               ;片3写数据子程序	
        PUSH    DPH
        PUSH    DPL
        MOV DPTR,#BLK3_WR_DATA
 WDCOM: 
        MOVX    @DPTR,A      ;E=1 D/I=0 R/W=0
        POP     DPL
        POP     DPH
        POP     ACC
       	RET

;********************************************************************
;功能:延时Xms子程序          /***IN:R7****(char)*************/
;标号:    (1)ASM: _DelayXms       (2) C : DelayXms(unsigned char)
;入口参数:(1)ASM: R7 (延时R7毫秒)
;出口参数:无
;子程序调用:无
;堆栈需求:4 字节
;影响资源:R7
;********************************************************************
_DelayXms:
       PUSH ACC
       PUSH B
DLYXMS:MOV A,#02H
AG0:   MOV B,#0C7H
AG1:   DJNZ B,AG1
       DEC A
       JNZ AG0
       DJNZ R7,DLYXMS
       POP B
       POP ACC
       RET

;********************************************************************
;功能:延时10us子程序
;标号:    (1)ASM: Delay10us       (2) C : Delay10us(void)
;入口参数:无
;出口参数:无
;子程序调用:无
;堆栈需求:2 字节
;影响资源:无
;********************************************************************
Delay10us:
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       RET

⌨️ 快捷键说明

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