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

📄 lcd_19264_main.lst

📁 LCM19264的测试程序,用于PIC单片机,已经测试通过 可写汉字和英文字符,支持画点
💻 LST
📖 第 1 页 / 共 5 页
字号:
....................     }/*上半个字符输出结束*/  
0B88:  INCF   x61,F
0B8A:  GOTO   0B0C
....................   
.................... 	col=x;   /*列对齐*/  
0B8E:  MOVFF  5D,05
.................... 	row=y+1; /*指向下半个字符行*/  
0B92:  MOVLW  01
0B94:  ADDWF  5E,W
0B96:  MOVWF  06
.................... /****************下半个字符输出****************/  
....................     for(i=0;i<widthw;i++)  
0B98:  CLRF   x61
0B9A:  MOVF   x60,W
0B9C:  SUBWF  x61,W
0B9E:  BTFSC  FD8.0
0BA0:  GOTO   0C22
....................       { if(widthw==8) cbyte=Ezk[xi];  //从8X16点阵字符中取英文点阵码;  
0BA4:  MOVF   x60,W
0BA6:  SUBLW  08
0BA8:  BTFSS  FD8.2
0BAA:  GOTO   0BD0
0BAE:  MOVFF  63,03
0BB2:  MOVF   x62,W
0BB4:  MOVFF  FF2,66
0BB8:  BCF    FF2.7
0BBA:  MOVFF  63,FF7
0BBE:  CALL   0276
0BC2:  BTFSC  x66.7
0BC4:  BSF    FF2.7
0BC6:  MOVWF  01
0BC8:  MOVFF  01,07
....................         else cbyte=Hzk[xi];           //从16X16点阵字符中取汉字点阵码;  
0BCC:  GOTO   0BEE
0BD0:  MOVFF  63,03
0BD4:  MOVF   x62,W
0BD6:  MOVFF  FF2,66
0BDA:  BCF    FF2.7
0BDC:  MOVFF  63,FF7
0BE0:  CALL   0004
0BE4:  BTFSC  x66.7
0BE6:  BSF    FF2.7
0BE8:  MOVWF  01
0BEA:  MOVFF  01,07
....................         Wrdata(cbyte);  //将数据X的值,写入到坐标为(col,row)的存储单元;  
0BEE:  MOVFF  07,66
0BF2:  CALL   0A0C
....................   
....................         xi++;   //修改"字符点阵码"的偏移量,为取下一个字节做准备;  
0BF6:  INCF   x62,F
0BF8:  BTFSC  FD8.2
0BFA:  INCF   x63,F
.................... 		col++;  //修改DDRAM的列地址,为指向下一个DDRAM地址单元做准备;  
0BFC:  INCF   05,F
....................         if(col==LCMLIMIT){col=0;row+=2;}; //如果列越界,则换行,因为每个字符占2页,所以row要加2;  
0BFE:  MOVF   05,W
0C00:  SUBLW  C0
0C02:  BTFSS  FD8.2
0C04:  GOTO   0C0E
0C08:  CLRF   05
0C0A:  MOVLW  02
0C0C:  ADDWF  06,F
....................         if(row>7) row=1; //如果行越界,则返回首行;  
0C0E:  MOVF   06,W
0C10:  SUBLW  07
0C12:  BTFSC  FD8.0
0C14:  GOTO   0C1C
0C18:  MOVLW  01
0C1A:  MOVWF  06
....................       }/*下半个字符输出结束*/  
0C1C:  INCF   x61,F
0C1E:  GOTO   0B9A
....................   
....................     row=y; //恢复DDRAM的行地址,为写"下一个字符"做准备;  
0C22:  MOVFF  5E,06
.................... }/*整个字符输出结束*/  
0C26:  RETLW  00
....................   
.................... /****************************************/  
.................... /*	一个字串的输出			*/  
.................... /****************************************/  
.................... //输入参数:(x,y)分别为DDRAM的列地址和行地址,x只能取8的倍数值,y只能取2的倍数值;  
.................... //输入参数:array表示数组,即待显示的汉字内码或ASCII内码;  
.................... //输入参数:i,表示数组array[]中,待显示的内码有i个;  
.................... void Putstr(int x,int y,int *array,int i)  
.................... { int j,wordx;  
....................   for(j=0;j<i;j++)  
0C28:  CLRF   5A
0C2A:  MOVF   59,W
0C2C:  SUBWF  5A,W
0C2E:  BTFSC  FD8.0
0C30:  GOTO   0C9E
....................     { wordx=array[j]; //取区码和位码,第1字节为区码,第2字节为位码;  
0C34:  CLRF   03
0C36:  MOVF   5A,W
0C38:  ADDWF  57,W
0C3A:  MOVWF  FE9
0C3C:  MOVF   58,W
0C3E:  ADDWFC 03,W
0C40:  MOVWF  FEA
0C42:  MOVF   FEF,W
0C44:  MOVWF  5B
....................       delay_ms(2);    //延时2ms;  
0C46:  MOVLW  02
0C48:  MOVWF  5C
0C4A:  CALL   0878
....................       if(wordx>=0x80) Putedot(x,y,wordx&0x7f,16); //区码小于0x80的为ASCII码字符;  
0C4E:  MOVF   5B,W
0C50:  SUBLW  7F
0C52:  BTFSC  FD8.0
0C54:  GOTO   0C76
0C58:  MOVF   5B,W
0C5A:  ANDLW  7F
0C5C:  MOVWF  5C
0C5E:  MOVFF  55,5D
0C62:  MOVFF  56,5E
0C66:  MOVFF  5C,5F
0C6A:  MOVLW  10
0C6C:  MOVWF  x60
0C6E:  CALL   0AE0
....................       else Putedot(x,y,wordx-0x20,8);             //因为ascii码表是从0x20开始的,所以wordx-0x20  
0C72:  GOTO   0C90
0C76:  MOVLW  20
0C78:  SUBWF  5B,W
0C7A:  MOVWF  5C
0C7C:  MOVFF  55,5D
0C80:  MOVFF  56,5E
0C84:  MOVFF  5C,5F
0C88:  MOVLW  08
0C8A:  MOVWF  x60
0C8C:  CALL   0AE0
....................       x=col; //更新(x,y)坐标;  
0C90:  MOVFF  05,55
....................       y=row;  
0C94:  MOVFF  06,56
.................... 	}  
0C98:  INCF   5A,F
0C9A:  GOTO   0C2A
.................... }  
0C9E:  RETLW  00
....................   
.................... /****************************************/  
.................... /*	画点				*/  
.................... /****************************************/  
.................... //函数功能:在DDRAM中,位于(col,row)处的点单元点亮;  
.................... //输入参数:col为DDRAM的列地址,row为DDRAM的行号,同DDRAM的页地址是有差别的;  
.................... void point(void)  
.................... { int x1,y1,y;  
....................   x1=col;    //将DDRAM的列地址col保存到暂态变量x1,为恢复列地址做准备;  
....................   y1=row;    //DDRAM的行号row保存到暂态变量y1,为恢复DDRAM的行号做准备;  
....................   row=y1>>3; //将DDRAM的行号y1除以8,就得到页地址,保存到row中;  
....................   Rddata();  //从LCM中读取地址为(col,row)处的内容,结果保存在cPbyte中;  
....................   y=y1&0x07; //求y1在页地址(y1/8)中,位于第几位;  
....................   Wrdata(cbyte|1<<y); //在DDRAM地址(x1,y1/8)处,将其单元的第y位设置为1显示,并点亮该点;  
....................   col=x1;    //恢复DDRAM的列地址;  
....................   row=y1;    //恢复DDRAM的行号;  
.................... }  
....................   
.................... //   UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件  
.................... //和8×16的ASCII码点阵文件,以二进制格式存储。在文件HZK16中,按汉  
.................... //字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32  
.................... //个字节,每个区为94个汉字。在文件ASC16中按ASCII码从小到大依次存  
.................... //有8×16的ASCII码点阵,每个ASCII码占用16个字节。  
.................... //   在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个  
.................... //字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始  
.................... //(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位  
.................... //码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减  
.................... //去0A0AH就得该汉字的区位码,每个有94个汉字。  
.................... /*  
....................    UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件  
.................... 和8×16的ASCII码点阵文件,以二进制格式存储。在文件HZK16中,按汉  
.................... 字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32  
.................... 个字节,每个区为94个汉字。在文件ASC16中按ASCII码从小到大依次存  
.................... 有8×16的ASCII码点阵,每个ASCII码占用16个字节。  
....................    在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个  
.................... 字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始  
.................... (小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位  
.................... 码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减  
.................... 去0A0AH就得该汉字的区位码。  
....................    例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,  
.................... “BF”表示位码。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位  
.................... 码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于  
.................... 第23区的第31个字的位置,相当于在文件HZK16中的位置为:  
.................... 第32×[(23-1) ×94+(31-1)]=67136以后的32个字节为“房”的显示点阵。  
....................    HZK16.BIN是16X16点阵的ASCII码;  
....................    下面是个“房”字(地址67136=0x10640):  
.................... 00010640  02 00 01 08 3F FC 20 08 3F F8 21 00 20 84 3F FE  ....?? .??!. .??  
.................... 00010650  22 00 22 10 23 F8 22 10 44 10 44 10 88 A0 10 40  ".".#.".D.D....@  
.................... 0x0200  0000001000000000  
.................... 0x0108  0000000100001000  
.................... 0x3ffc  0011111111111100  
.................... 0x2008  0010000000001000  
.................... 0x3ff8  0011111111111000  
.................... 0x2100  0010000100000000  
.................... 0x2084  0010000010000100  
.................... 0x3ffe  0011111111111110  
.................... 0x2200  0010001000000000  
.................... 0x2210  0010001000010000  
.................... 0x23f8  0010001111111000  
.................... 0x2210  0010001000010000  
.................... 0x4410  0100010000010000  
.................... 0x4410  0100010000010000  
.................... 0x88a0  1000100010100000  
.................... 0x1040  0001000001000000  
.................... ASC16.BIN是8X16点阵的ASCII码;  
.................... ASC16的第55行为:'7',(地址55=0x037)点阵代码如下:  
.................... 00000370  00 00 FE C6 06 06 0C 18 30 30 30 30 00 00 00 00  ........0000....  
.................... 0x00  00000000  
.................... 0x00  00000000  
.................... 0xfe  11111110  
.................... 0xc6  11000110  
.................... 0x06  00000110  
.................... 0x06  00000110  
.................... 0x0c  00001100  
.................... 0x18  00011000  
.................... 0x30  00110000  
.................... 0x30  00110000  
.................... 0x30  00110000  
.................... 0x30  00110000  
.................... 0x00  00000000  
.................... 0x00  00000000  
.................... 0x00  00000000  
.................... 0x00  00000000  
.................... */  
....................   
.................... //LCD19264的命令:  
.................... //1 显示开关控制命令:  
.................... // R/W D/I     DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0  
.................... //  0   0       0   0   1   1   1   1   1   D  
.................... // D=1,命令打开LCD显示;D=0,命令关闭LCD显示;  
....................   
.................... //2 显示起始行设置命令:  
.................... // R/W D/I     DB7 DB6  DB5  DB4  DB3  DB2  DB1  DB0  
.................... //  0   0       1   1   A5   A4   A3   A2   A1   A0  
.................... //0xc0+z,其中0<=z<=63,设置DDRAM的第z行作为显示的第1行;  
.................... //当z=62时,则显示起始行与DDRAM的对应关系如下:  
.................... //DDRAM地址为0xc0+62表示为显示的第1行,DDRAM地址为0xc0+63表示为显示的第2行;  
.................... //DDRAM地址为0xc0+0表示为显示的第3行,DDRAM地址为0xc0+1表示为显示的第4行;  
.................... //DDRAM地址为0xc0+31表示为显示的第28行,DDRAM地址为0xc0+32表示为显示的第29行;  
....................   
.................... //3 页地址设置命令:  
.................... // R/W D/I     DB7 DB6 DB5 DB4 DB3  DB2  DB1  DB0  
.................... //  0   0       1   0   1   1   1   A2   A1   A0  
.................... //0xb8+x,其中0<=x<=7;  
.................... //所谓"页地址"就是DDRAM的行地址,8行为1页,本模块共有64行,即8页;  
.................... //4 设置Y地址命令:  
.................... // R/W D/I     DB7 DB6 DB5 DB4 DB3  DB2  DB1  DB0  
.................... //  0   0       0   1  A5  A4  A3   A2   A1   A0  
.................... //0x40+y,其中0<=y<63;  
.................... //DDRAM地址表:  
.................... //       CS1=1(当模块为19264A01时,CS1=0)| CS2=1(当模块为19264A01时,CS2=0)| CS3=1(当模块为19264A01时,CS3=0)  
.................... // Y=  | 0 1 2 3 4 5 6 7 8 ......62 63  | 0 1 2 3 4 5 6 7 8 ......62 63  | 0 1 2 3 4 5 6 7 8 ......62 63  |行号  
.................... // ____|________________________________|________________________________|________________________________|____  
.................... // X=0 | DB0 DB0 DB0 DB0 ...DB0 DB0 DB0 | DB0 DB0 DB0 DB0 ...DB0 DB0 DB0 | DB0 DB0 DB0 DB0 ...DB0 DB0 DB0 | 0  
.................... //     | DB1 DB1 DB1 DB1 ...DB1 DB1 DB1 | DB1 DB1 DB1 DB1 ...DB1 DB1 DB1 | DB1 DB1 DB1 DB1 ...DB1 DB1 DB1 | 1  
.................... //     | DB2 DB2 DB2 DB2 ...DB2 DB2 DB2 | DB2 DB2 DB2 DB2 ...DB2 DB2 DB2 | DB2 DB2 DB2 DB2 ...DB2 DB2 DB2 | 2   
...............

⌨️ 快捷键说明

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