📄 g19264.src
字号:
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 000H
DB 000H
DB 03FH
DB 000H
DB 000H
DB 03FH
DB 000H
DB 000H
DB 03FH
DB 000H
DB 000H
DB 080H
DB 000H
DB 080H
DB 080H
DB 080H
DB 000H
DB 000H
DB 000H
DB 03FH
DB 001H
DB 000H
DB 000H
DB 000H
DB 03FH
DB 000H
DB 000H
DB 000H
DB 080H
DB 080H
DB 080H
DB 000H
DB 000H
DB 000H
DB 00EH
DB 011H
DB 020H
DB 020H
DB 020H
DB 011H
DB 00EH
DB 000H
DB 000H
DB 080H
DB 000H
DB 080H
DB 080H
DB 080H
DB 000H
DB 000H
DB 000H
DB 0FFH
DB 011H
DB 020H
DB 020H
DB 020H
DB 01FH
DB 000H
DB 000H
DB 000H
DB 080H
DB 080H
DB 080H
DB 000H
DB 080H
DB 000H
DB 000H
DB 01FH
DB 020H
DB 020H
DB 020H
DB 011H
DB 0FFH
DB 000H
DB 000H
DB 000H
DB 080H
DB 000H
DB 000H
DB 080H
DB 080H
DB 000H
DB 000H
DB 000H
DB 03FH
DB 001H
DB 001H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 080H
DB 080H
DB 080H
DB 080H
DB 000H
DB 000H
DB 000H
DB 013H
DB 024H
DB 024H
DB 024H
DB 024H
DB 019H
DB 000H
DB 000H
DB 080H
DB 080H
DB 0E0H
DB 080H
DB 080H
DB 080H
DB 000H
DB 000H
DB 000H
DB 000H
DB 01FH
DB 020H
DB 020H
DB 020H
DB 000H
DB 000H
DB 080H
DB 000H
DB 000H
DB 000H
DB 000H
DB 080H
DB 000H
DB 000H
DB 01FH
DB 020H
DB 020H
DB 020H
DB 010H
DB 03FH
DB 000H
DB 080H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 080H
DB 000H
DB 000H
DB 007H
DB 018H
DB 020H
DB 018H
DB 007H
DB 000H
DB 000H
DB 080H
DB 000H
DB 000H
DB 080H
DB 000H
DB 000H
DB 080H
DB 000H
DB 00FH
DB 030H
DB 00EH
DB 001H
DB 00EH
DB 030H
DB 00FH
DB 000H
DB 080H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 080H
DB 000H
DB 020H
DB 011H
DB 00AH
DB 004H
DB 00AH
DB 011H
DB 020H
DB 000H
DB 080H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 080H
DB 000H
DB 000H
DB 087H
DB 098H
DB 060H
DB 018H
DB 007H
DB 000H
DB 000H
DB 000H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 000H
DB 000H
DB 030H
DB 028H
DB 024H
DB 022H
DB 021H
DB 020H
DB 000H
DB 000H
DB 000H
DB 000H
DB 080H
DB 07EH
DB 002H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 03FH
DB 020H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 0FFH
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 0FFH
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 002H
DB 07EH
DB 080H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 020H
DB 03FH
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 006H
DB 001H
DB 001H
DB 006H
DB 004H
DB 003H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
DB 000H
; /*写汉字液晶子程 液晶屏分为4行*12列汉字,全部使用模拟接口方式。
; /* TGLCMLIMIT64A接口程序(模拟方式)
; 液晶模块供应商:广州市盛宝电子有限公司 Tel:020-87592491 Fax:87541571
; Email: tinsharp@public.guangzhou.gd.cn
; ;***************************************************************************
; ;连线图:
; ;*LCM---89C52* *LCM---89C52* *LCM-------89C52* *LCM----------89C52* *
; ;*DB0---P0.0* *DB4---P0.4* *D/I-------P2.6* *CS1----------P2.4* *
; ;*DB1---P0.1* *DB5---P0.5* *R/W-------P2.7* *CS2----------P2.5* *
; ;*DB2---P0.2* *DB6---P0.6* *RST--------VCC* *CS3----------P3.2* *
; ;*DB3---P0.3* *DB7---P0.7* *E---------P2.3* *
; ;注:89C52的晶振频率为12MHz *
; ;***************************************************************************/
; //画线部分请参照avr的c程序。
; #pragma src /*生成ASM文件开关,必要时打开 */
; #include<reg52.h>
; #include<math.h>
; #include<INTRINS.H>
;
; #define Uchar unsigned char
;
; /***********液晶显示器接口引脚定义***************/
;
; #define LED P2_0
;
; sbit RST= P1^4;
; sbit Elcm= P1^2; //
; sbit CS1LCM= P1^3; //
; sbit CS2LCM= P1^5; //
; sbit CS3LCM= P1^6; /*这个连接只是做实验的临时接法。*/
; sbit Dilcm= P1^0; //
; sbit Rwlcm= P1^1; //
; sfr Datalcm= 0x80; //数据口
;
; /***********常用操作命令和参数定义***************/
; #define DISPON 0x3f /*显示on */
; #define DISPOFF 0x3e /*显示off */
; #define DISPFIRST 0xc0 /*显示起始行定义 */
; #define SETX 0x40 /*X定位设定指令(页) */
; #define SETY 0xb8 /*Y定位设定指令(列) */
; #define Lcdbusy 0x80 /*LCM忙判断位 */
;
; /**************显示分区边界位置*****************/
; #define MODL 0x00 /*左区 */
; #define MODM 0x40 /*左区和中区分界 */
; #define MODR 0x80 /*中区和右区分界 */
; #define LCMLIMIT 0xC0 /*显示区的右边界 */
;
; /****************全局变量定义*******************/
; Uchar col,row,cbyte; /*列x,行(页)y,输出数据 */
; bit xy; /*画线方向标志:1水平 */
;
; /*****************函数列表**********************/
; void Lcminit(void); /*液晶模块初始化 */
; void Delay(Uchar); /*延时,入口数为Ms */
; void lcdbusyL(void); /*busy判断、等待(左区) */
; void lcdbusyM(void); /*busy判断、等待(中区) */
; void lcdbusyR(void); /*busy判断、等待(右区) */
; void Putedot(Uchar); /*半角字符输出 */
; void Putcdot(Uchar); /*全角(汉字)输出 */
; void Wrdata(Uchar); /*数据输出给LCM */
; void Lcmcls( void ); /*LCM全屏幕清零(填充0) */
; void wtcom(void); /*公用busy等待 */
; void Locatexy(void); /*光标定位 */
; void WrcmdL(Uchar); /*左区命令输出 */
; void WrcmdM(Uchar); /*中区命令输出 */
; void WrcmdR(Uchar); /*右区命令输出 */
; void Putstr(Uchar *puts,Uchar i); /*中英文字符串输出 */
; void Rollscreen(Uchar x); /*屏幕向上滚动演示 */
; void Rddata(void); /* 从液晶片上读数据 */
; void Linehv(Uchar length); /*横(竖)方向画线 */
; void point(void); /*打点 */
; void Linexy(Uchar endx,Uchar endy);/*画线。任意方向的斜线,不支持垂直的或水平线 */
;
;
; /******************数组列表*********************/
; Uchar code Ezk[]; /*ASCII常规字符点阵码表 */
; Uchar code Hzk[]; /*自用汉字点阵码表 */
; Uchar code STR1[]; /*自定义字符串 */
; Uchar code STR2[]; //
; Uchar code STR3[]; //
; Uchar code STR4[]; //
;
;
; /********************************/
; /* 演示主程序 */
; /********************************/
; void main(void)
RSEG ?PR?main?G19264
main:
USING 0
; SOURCE LINE # 88
;
; { Uchar x;
; SOURCE LINE # 90
; RST=0; //LCD复位
; SOURCE LINE # 91
CLR RST
; Delay(30);
; SOURCE LINE # 92
MOV R7,#01EH
LCALL _Delay
; RST=1;
; SOURCE LINE # 93
SETB RST
;
; col=0; row=0; Delay(40); /*延时大约40Ms,等待外设准备好 */
; SOURCE LINE # 95
CLR A
MOV col,A
MOV row,A
MOV R7,#028H
LCALL _Delay
; Lcminit(); /*液晶模块初始化,包括全屏幕清屏*/
; SOURCE LINE # 96
LCALL Lcminit
;
; Putstr(STR2,24); /*第一行字符输出,24字节 */
; SOURCE LINE # 98
MOV R2,#HIGH (STR2)
MOV R1,#LOW (STR2)
LCALL L?0098
; col=0; row=2;
; SOURCE LINE # 99
CLR A
MOV col,A
MOV row,#02H
; Putstr(STR1,12); /*第二行字符输出,12字节 */
; SOURCE LINE # 100
MOV R3,#0FFH
MOV R2,#HIGH (STR1)
MOV R1,#LOW (STR1)
MOV R5,#0CH
LCALL _Putstr
; col=0; row=4;
; SOURCE LINE # 101
CLR A
MOV col,A
MOV row,#04H
; Putstr(STR3,24); /*第三行字符输出,24字节 */
; SOURCE LINE # 102
MOV R2,#HIGH (STR3)
MOV R1,#LOW (STR3)
LCALL L?0098
; col=0; row=6;
; SOURCE LINE # 103
CLR A
MOV col,A
MOV row,#06H
; Putstr(STR4,24); /*第四行字符输出,12字节 */
; SOURCE LINE # 104
MOV R3,#0FFH
MOV R2,#HIGH (STR4)
MOV R1,#LOW (STR4)
MOV R5,#018H
LCALL _Putstr
; x=0; col=0; row=0;
; SOURCE LINE # 105
CLR A
MOV x?040,A
MOV col,A
MOV row,A
; xy = 1; /*方向标志。定为水平方向 */
; SOURCE LINE # 106
; Linehv(192); /*画一条横线(0,0)-(191,0) */
; SOURCE LINE # 107
LCALL L?0099
; col=0;
; SOURCE LINE # 108
CLR A
MOV col,A
; row=15;
; SOURCE LINE # 109
MOV row,#0FH
; xy = 1;
; SOURCE LINE # 110
; Linehv(192); /*画一条横线(0,15)-(191,15) */
; SOURCE LINE # 111
LCALL L?0099
; col=0;
; SOURCE LINE # 112
CLR A
MOV col,A
; row=32;
; SOURCE LINE # 113
MOV row,#020H
; xy = 1;
; SOURCE LINE # 114
; Linehv(192); /*画一条横线(0,32)-(191,32) */
; SOURCE LINE # 115
LCALL L?0100
; col=0;
; SOURCE LINE # 116
CLR A
MOV col,A
; row=1;
; SOURCE LINE # 117
MOV row,#01H
; xy = 0; /*方向标志。定为垂直方向 */
; SOURCE LINE # 118
CLR xy
; Linehv(31); /*画一条竖线(0,1)-(0,31) */
; SOURCE LINE # 119
MOV R7,#01FH
LCALL _Linehv
; col=191;
; SOURCE LINE # 120
MOV col,#0BFH
; row=1;
; SOURCE LINE # 121
MOV row,#01H
; xy = 0;
; SOURCE LINE # 122
CLR xy
; Linehv(31); /*画一条竖线(191,1)-(191,31) */
; SOURCE LINE # 123
MOV R7,#01FH
LCALL _Linehv
; /* col=0; /*设定斜线的起点坐标 */
; // row=63;
; // Linexy(44,31); /*画一段斜线(0,63)-(44,31) */
; // col=44;
; // row=31;
; // Linexy(190,62); /*继续画斜线(44,31)-(191,63) */
; pp: while(1){
; SOURCE LINE # 130
?main?pp:
?C0002:
; Rollscreen(x); /*定位新的显示起始行 */
; SOURCE LINE # 131
MOV R7,x?040
LCALL _Rollscreen
; x++;x++;x++;
; SOURCE LINE # 132
INC x?040
INC x?040
INC x?040
; Delay(200); /*延时,控制滚动速度 */
; SOURCE LINE # 133
MOV R7,#0C8H
LCALL _Delay
; };
; SOURCE LINE # 134
SJMP ?C0002
; END OF main
; goto pp;
; }
;
;
; /************************************************/
; /*画线。任意方向的斜线,不支持垂直的或水平线 */
; /************************************************/
;
; void Linexy(Uchar endx,Uchar endy)
RSEG ?PR?_Linexy?G19264
_Linexy:
USING 0
; SOURCE LINE # 143
;---- Variable 'endy?142' assigned to Register 'R5' ----
;---- Variable 'endx?141' assigned to Register 'R7' ----
; {
; SOURCE LINE # 144
; register Uchar t;
; int xerr=0,yerr=0,delta_x,delta_y,distance;
; SOURCE LINE # 146
CLR A
MOV xerr?144,A
MOV xerr?144+01H,A
MOV yerr?145,A
MOV yerr?145+01H,A
; Uchar incx,incy;
;
; /* compute the distance in both directions */
; delta_x=endx-col;
; SOURCE LINE # 150
MOV A,col
MOV R3,A
CLR C
MOV A,R7
SUBB A,R3
MOV delta_x?146+01H,A
CLR A
SUBB A,#00H
MOV delta_x?146,A
; delta_y=endy-row;
; SOURCE LINE # 151
CLR C
MOV A,R5
SUBB A,row
MOV delta_y?147+01H,A
CLR A
SUBB A,#00H
MOV delta_y?147,A
;
; /* compute the direction of the increment ,
; an increment of "0" means either a vertical or horizontal lines */
;
; if(delta_x>0) incx=1;
; SOURCE LINE # 156
SETB C
MOV A,delta_x?146+01H
SUBB A,#00H
MOV A,delta_x?146
XRL A,#080H
SUBB A,#080H
JC ?C0005
MOV incx?149,#01H
SJMP ?C0006
?C0005:
; else if( delta_x==0 ) incx=0;
; SOURCE LINE # 157
MOV A,delta_x?146+01H
ORL A,delta_x?146
JNZ ?C0007
MOV incx?149,A
SJMP ?C0006
?C0007:
; else incx=-1;
; SOURCE LINE # 158
MOV incx?149,#0FFH
?C0006:
;
;
; if(delta_y>0) incy=1;
; SOURCE LINE # 161
SETB C
MOV A,delta_y?147+01H
SUBB A,#00H
MOV A,delta_y?147
XRL A,#080H
SUBB A,#080H
JC ?C0009
MOV incy?150,#01H
SJMP ?C0010
?C0009:
; else if( delta_y==0 ) incy=0;
; SOURCE LINE # 162
MOV A,delta_y?147+01H
ORL A,delta_y?147
JNZ ?C0011
MOV incy?150,A
SJMP ?C0010
?C0011:
; else incy=-1;
; SOURCE LINE # 163
MOV incy?150,#0FFH
?C0010:
;
; /* determine which distance is greater */
; delta_x = cabs( delta_x );
; SOURCE LINE # 166
MOV R7,delta_x?146+01H
LCALL _cabs
MOV A,R7
RLC A
SUBB A,ACC
MOV delta_x?146,A
MOV delta_x?146+01H,R7
; delta_y = cabs( delta_y );
; SOURCE LINE # 167
MOV R7,delta_y?147+01H
LCALL _cabs
MOV A,R7
RLC A
SUBB A,ACC
MOV delta_y?147,A
MOV delta_y?147+01H,R7
;
; if( delta_x > delta_y ) distance=delta_x;
; SOURCE LINE # 169
SETB C
MOV A,delta_x?146+01H
SUBB A,delta_y?147+01H
MOV A,delta_y?147
XRL A,#080H
MOV R0,A
MOV A,delta_x?146
XRL A,#080H
SUBB A,R0
JC ?C0013
MOV distance?148,delta_x?146
MOV distance?148+01H,delta_x?146+01H
SJMP ?C0014
?C0013:
; else distance=delta_y;
; SOURCE LINE # 170
MOV distance?148,delta_y?147
MOV distance?148+01H,delta_y?147+01H
?C0014:
;
; /* draw the line */
; for( t=0;t <= distance+1; t++ ) {
; SOURCE LINE # 173
CLR A
MOV t?143,A
?C0015:
MOV A,distance?148+01H
ADD A,#01H
MOV R7,A
CLR A
ADDC A,distance?148
MOV R6,A
SETB C
MOV A,t?143
SUBB A,R7
MOV A,R6
XRL A,#080H
MOV R0,A
MOV A,#080H
SUBB A,R0
JNC ?C0020
; point();
; SOURCE LINE # 174
LCALL point
; xerr += delta_x ;
; SOURCE LINE # 175
MOV A,delta_x?146+01H
ADD A,xerr?144+01H
MOV xerr?144+01H,A
MOV A,delta_x?146
ADDC A,xerr?144
MOV xerr?144,A
; yerr += delta_y ;
; SOURCE LINE # 176
MOV A,delta_y?147+01H
ADD A,yerr?145+01H
MOV yerr?145+01H,A
MOV A,delta_y?147
ADDC A,yerr?145
MOV yerr?145,A
; if( xerr > distance ) {
; SOURCE LINE # 177
SETB C
MOV A,xerr?144+01H
SUBB A,distance?148+01H
MOV A,distance?148
XRL A,#080H
MOV R0,A
MOV A,xerr?144
XRL A,#080H
SUBB A,R0
JC ?C0018
; xerr-=distance;
; SOURCE LINE # 178
MOV A,xerr?144+01H
SUBB A,distance?148+01H
MOV xerr?144+01H,A
MOV A,xerr?144
SUBB A,distance?148
MOV xerr?144,A
; col+=incx;
; SOURCE LINE # 179
MOV A,incx?149
ADD A,col
MOV col,A
; }
; SOURCE LINE # 180
?C0018:
; if( yerr > distance ) {
; SOURCE LINE # 181
SETB C
MOV A,yerr?145+01H
SUBB A,distance?148+01H
MOV A,distance?148
XRL A,#080H
MOV R0,A
MOV A,yerr?145
XRL A,#080H
SUBB A,R0
JC ?C0017
; yerr-=distance;
; SOURCE LINE # 182
MOV A,yerr?145+01H
SUBB A,distance?148+01H
MOV yerr?145+01H,A
MOV A,yerr?145
SUBB A,distance?148
MOV yerr?145,A
; row+=incy;
; SOURCE LINE # 183
MOV A,incy?150
ADD A,row
MOV row,A
; }
; SOURCE LINE # 184
;
; }
; SOURCE LINE # 186
?C0017:
INC t?143
SJMP ?C0015
; }
; SOURCE LINE # 187
?C0020:
RET
; END OF _Linexy
;
; /****************************************/
; /*画线。只提供X或Y方向的,不支持斜线 */
; /****************************************/
; void Linehv(Uchar length)
RSEG ?PR?_Linehv?G19264
L?0099:
USING 0
L?0100:
SETB xy
MOV R7,#0C0H
_Linehv:
USING 0
; SOURCE LINE # 192
MOV length?251,R7
; {
; SOURCE LINE # 193
; Uchar xs,ys;
; if (xy){ys = col;
; SOURCE LINE # 195
JNB xy,?C0021
MOV ys?253,col
; for (xs=0;xs<length;xs++){
; SOURCE LINE # 196
CLR A
MOV xs?252,A
?C0022:
MOV A,xs?252
CLR C
SUBB A,length?251
JNC ?C0029
; col = ys + xs;
; SOURCE LINE # 197
MOV A,ys?253
ADD A,xs?252
MOV col,A
; point();}
; SOURCE LINE # 198
LCALL point
INC xs?252
SJMP ?C0022
; }
; SOURCE LINE # 199
?C0021:
; else {xs = row;
; SOURCE LINE # 200
MOV xs?252,row
; for (ys=0;ys<length;ys++){
; SOURCE LINE # 201
CLR A
MOV ys?253,A
?C0026:
MOV A,ys?253
CLR C
SUBB A,length?251
JNC ?C0029
; row = xs + ys;
; SOURCE LINE # 202
MOV A,xs?252
ADD A,ys?253
MOV row,A
; point();}
; SOURCE LINE # 203
LCALL point
INC ys?253
SJMP ?C0026
; }
; SOURCE LINE # 204
; }
; SOURCE LINE # 205
?C0029:
RET
; END OF _Linehv
;
; /****************************************/
; /* 画点 */
; /****************************************/
;
; void point(void)
RSEG ?PR?point?G19264
point:
USING 0
; SOURCE LINE # 211
; {
; SOURCE LINE # 212
; Uchar x1,y1,x,y;
; x1=col; //列缓存
; SOURCE LINE # 214
MOV x1?354,col
; y1=row; //行缓存
; SOURCE LINE # 215
MOV y1?355,row
; row=y1>>3; /*取Y方向分页地址 */
; SOURCE LINE # 216
MOV A,y1?355
RRC A
RRC A
RRC A
ANL A,#01FH
MOV row,A
; Rddata(); //从液晶片上读数据,存于cbyte全局变量中
; SOURCE LINE # 217
LCALL Rddata
; y=y1&0x07; /*字节内位置计算 */
; SOURCE LINE # 218
MOV A,y1?355
ANL A,#07H
MOV R7,A
;---- Variable 'y?357' assigned to Register 'R7' ----
; x=0x01;
; SOURCE LINE # 219
;---- Variable 'x?356' assigned to Register 'R6' ----
MOV R6,#01H
; x=x<<y; /*移入所画点 */
; SOURCE LINE # 220
MOV A,R6
MOV R0,AR7
INC R0
SJMP ?C0092
?C0091:
CLR C
RLC A
?C0092:
DJNZ R0,?C0091
MOV R6,A
; Wrdata(cbyte|x); /*画上屏幕 */
; SOURCE LINE # 221
ORL A,cbyte
MOV R7,A
LCALL _Wrdata
; col=x1; /*恢复xy坐标 */
; SOURCE LINE # 222
MOV col,x1?354
; row=y1;
; SOURCE LINE # 223
MOV row,y1?355
; }
; SOURCE LINE # 224
RET
; END OF point
;
; /****************************************/
; /* 屏幕滚动定位 */
; /****************************************/
; void Rollscreen(Uchar x)
RSEG ?PR?_Rollscreen?G19264
_Rollscreen:
USING 0
; SOURCE LINE # 229
;---- Variable 'x?458' assigned to Register 'R7' ----
; {
; SOURCE LINE # 230
; cbyte = DISPFIRST|x; /*定义显示起始行为x
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -