📄 tg19264.asm
字号:
;********************************************************************************
;* 文件名:TG19264.ASM
;* 功 能:TG19264液晶模块驱动程序
;* 作 者:SZN
;* 日 期:2005.07.10
;* 备 注:
;*********************************************************************************
;LCM 型号: TG19264A (192*64)
;LCM 接口: 1:GND 2:VCC 3:V0 4.RS 5:RW 6:E 7--14:DB0-DB7
; 15:CS1 16:RST 17:CS2 18:CS3 19:Vee 20:LED+
;***************************************************************************
;---端口地址定义----------------
CMD_BLK1 EQU 0x18
CMD_BLK2 EQU 0x14
CMD_BLK3 EQU 0x0C
CMD_READ EQU 0x02
CMD_WRITE EQU 0x00
CMD_DATA EQU 0x01
CMD_CMD EQU 0x00
BLK1_WR_CMD EQU (CMD_BLK1|CMD_WRITE|CMD_CMD)
BLK2_WR_CMD EQU (CMD_BLK2|CMD_WRITE|CMD_CMD)
BLK3_WR_CMD EQU (CMD_BLK3|CMD_WRITE|CMD_CMD)
BLK1_WR_DATA EQU (CMD_BLK1|CMD_WRITE|CMD_DATA)
BLK2_WR_DATA EQU (CMD_BLK2|CMD_WRITE|CMD_DATA)
BLK3_WR_DATA EQU (CMD_BLK3|CMD_WRITE|CMD_DATA)
;---全局变量定义----------------
XPOS EQU 30H ;X坐标
YPOS EQU 31H ;Y坐标
;---常量定义----------------
PD1 EQU 40H ;每一个分区宽64点(液晶片分区参数)
ORG 0000H
LJMP MAIN
ORG 0040H
MAIN: MOV SP,#60H
K1:
LCALL LCDRESET ;LCD复位
MOV R7,#0 ;XPOS
MOV R5,#0 ;YPOS
MOV DPTR,#STRING1 ; uchar *p = *string1;
MOV R3,DPH
MOV R4,DPL
LCALL _PUTSTR ;显示STRING1
MOV R7,#250
LCALL _DelayXms
MOV R7,#250
LCALL _DelayXms ;DELAY 500ms
MOV R7,#0 ;XPOS
MOV R5,#2 ;YPOS
MOV DPTR,#STRING2 ; uchar *p = *string2;
MOV R3,DPH
MOV R4,DPL
LCALL _PUTSTR ;显示STRING2
MOV R7,#250
LCALL _DelayXms
MOV R7,#250
LCALL _DelayXms ;DELAY 500ms
MOV R7,#0
LCALL _LCDFILL ;清屏
MOV R7,#250
LCALL _DelayXms
MOV R7,#250
LCALL _DelayXms ;DELAY 500ms
MOV R6,#0
MOV R7,#0
MOV R4,#30H
MOV R5,#03H
MOV DPTR,#TUDOT2 ;#TUKDOT
MOV R2,DPH
MOV R3,DPL
LCALL _DispIcon32 ;显示半圆
MOV R7,#250
LCALL _DelayXms
MOV R7,#250
LCALL _DelayXms
MOV R7,#250
LCALL _DelayXms
MOV R7,#250 ;DELAY 1s
LCALL _DelayXms
AJMP K1;$ ; while(1);
$INCLUDE(HZK16.ASM) ;16*16汉字点阵字库
;--------------------------------外部接口函数--------------------------------
;
; 说明:考虑和C51的兼容性,更改入口参数为标准A51形式
;
; 函数原型:
; void LCDRESET(void); //LCM系统复位子程序
; void LCDFILL(uchar); //LCD全屏填充程序
; void PUTSTR(uchar x, uchar y, uchar *str); //16*16字符点阵输出
; void DispIcon32(uint xy, uint lw, uchar *str); //图标点阵输出
;
;****************************************************************
;功能:LCM系统复位子程序
;标号: (1)ASM: LCDRESET (2) C : LCDRESET(void)
;入口参数:无
;出口参数:无
;堆栈需求:>5 字节
;影响资源:XPOS, YPOS
;****************************************************************
LCDRESET:
PUSH ACC
MOV A,R7
PUSH ACC
MOV A,#3EH ;关LCD显示
CALL LCDWC1
CALL LCDWC2
CALL LCDWC3
MOV A,#3FH ;打开LCD显示
CALL LCDWC1
CALL LCDWC2
CALL LCDWC3
MOV A,#0C0H ;设首址
CALL LCDWC1
CALL LCDWC2
CALL LCDWC3
MOV R7,#00H
LCALL _LCDFILL ; void lcdfill( uchar a );
POP ACC
MOV R7,A
POP ACC
RET
;****************************************************************
;功能:全屏填充程序
;标号: (1)ASM: _LCDFILL (2) C : LCDFILL(uchar)
;入口参数:(1)ASM: R7
;出口参数:无
;堆栈需求:4 字节
;影响资源:XPOS, YPOS
;****************************************************************
_LCDFILL: ;LCD整屏显示R7的内容
PUSH ACC
MOV YPOS,#0
LFL_PB: MOV XPOS,#0
LFL_PA: MOV A,R7
CALL LCDWRITE ;定位并写数据
CALL CUSORNEXT
MOV A,XPOS
JNZ LFL_PA
MOV A,YPOS
JNZ LFL_PB
POP ACC
RET
;********************************************************************
;功能:字符数据输出子程序
;标号: (1)ASM: _PUTSTR (2) C : PUTSTR(uchar,uchar,uchar*)
;入口参数:(1)ASM: R7, R5, (R3,R4)
;出口参数:无
;子程序调用:无
;堆栈需求:4 字节
;影响资源:XPOS,YPOS
;********************************************************************
_PUTSTR:
PUSH DPL ;内部使用DPTR, A, B, R7
PUSH DPH
PUSH ACC
PUSH B
MOV A,R7
PUSH ACC ;SAVE
MOV XPOS,R7
MOV YPOS,R5
MOV DPH,R3
MOV DPL,R4
PUTSTR:
; CALL DELAY ;用于显示演示速度
CALL GETSTRCHAR ;取字符串中的字符码
PUSH DPL
PUSH DPH
JNC PSR_LAX ;显示结束
JNB B.7,PSR_LBY ;编码<128,英文
;CHINESE: ;汉字输出16*16=8*16 + 8*16
CALL HZKPOS ;点阵码偏移量换算
CALL PUTCWDOT ;16*16点阵输出
JMP PSR_LBX
PSR_LBY:
;ENGLISH: ;英文(数字)半角字符输出
CALL EZKPOS ;点阵码偏移量换算
CALL PUTCHARDOT ;8*16点阵输出
PSR_LBX:
POP DPH
POP DPL
JMP PUTSTR ;继续下一位
PSR_LAX:POP DPH
POP DPL
POP ACC ;RECOVER
MOV R7,A
POP B
POP ACC
POP DPH
POP DPL
RET
;********************************************************************
;功能:图标点阵输出子程序
;标号: (1)ASM: _DispIcon32 (2)C: DispIcon32(uint xy,uint lw,uchar *str)
;入口参数:(1)ASM: (R6,R7), (R4,R5), (R2,R3)
; (2)C: xy--坐标, lw--图片长宽, str--数据
;出口参数:无
;子程序调用:无
;堆栈需求:4 字节
;影响资源:XPOS,YPOS
;********************************************************************
_DispIcon32:
PUSH DPL ;内部使用DPTR, A, B, R7
PUSH DPH
PUSH ACC
PUSH B
MOV A,R7
PUSH ACC ;SAVE
MOV XPOS,R6
MOV YPOS,R7
MOV DPH,R2
MOV DPL,R3
MOV B,R5 ;WIDTH
PCW_PA1:MOV A,R4
MOV R7,A ;LENGTH
PCW_PA2: ;上半个字符
CLR A
MOVC A,@A+DPTR ;获取点阵码
CALL LCDWRITE ;写入LCM(上半个字部分)
INC XPOS ;X坐标加1
INC DPTR ;指向下一个点阵码
DJNZ R7,PCW_PA2
DEC B
MOV A,B
JZ ICON_END
INC YPOS
MOV XPOS,R6 ;
AJMP PCW_PA1
ICON_END:
POP ACC ;RECOVER
MOV R7,A
POP B
POP ACC
POP DPH
POP DPL
RET
;--------------------------------内部调用函数--------------------------------
;****************************************************************
;获取字串内字符编码,C=0显示结束,字符串以0FFH结尾作为结束标志
;以两字节组成一个字符:前一字节表示是全角(>=80H)还是半角(<80H)
; 后一字节字符点阵表内偏移量"内码"
;****************************************************************
GETSTRCHAR: ;IN: DPTR
GSC_PA:
CLR A
MOVC A,@A+DPTR ;先读取字头
INC DPTR
MOV B,A
INC A
CLR C ;置程序出口标志(表示已经结束)
JZ GSC_LAX ;如果是结束码(0ffh+1=00h)
CLR A
MOVC A,@A+DPTR ;真正读取"内码"
INC DPTR
SETB C ;编码有效
GSC_LAX:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -