12864带字库(ST7920控制器)液晶学习
12864液晶显示器(ST7920)显示程序(并口)

12864液晶显示器(ST7920)显示程序(并口) 附字模软件作者:纪小年16 七月2009 时间:下午10:25 and have 10 条评论前两天写了一个ST7920控制12864显示的串口程序,今天瞎逛的时候发现了这个超强悍的并口程序,转载一下。
来源:CnChina做了比较详细的注释,看不懂的可以问我。
下面的图片中12864所显示的logo就是我用这个程序得到的。
附程序:/******************************************************************** **********Copyright 2007All rights reserved.文件名: .c模块名称:st7920 并行方式驱动12864液晶驱动功能概要:st7920显示驱动取代版本:0.0.1修改人:pulan完成日期:2007.07.08升级说明:createCPU: stc89c58 主频:11.0592M液晶型号:128*64 生产厂家:驱动芯片:st7920********************************************************************* *********/#include#define uint unsigned int#define uchar unsigned char#define x1 0x80 //1000 0000#define x2 0x88 //1000 1000#define y 0x80 //1000 0000#define comm 0 //定义传送指令代码为0#define dat 1 //定义传送数据代码为1sbit RS = P2^0; //H=数据; L=指令;sbit RW = P2^1; //H=读操作; L=写操作;sbit E = P2^3; //使能端sbit PSB= P2^4; //H=并口; L=串口;sbit RST= P2^2; //复位信号低电平有效sbit busy=P0^7; //LCD忙信号void wr_lcd (uchar dat_comm,uchar content);void chk_busy (void);void delay (uint us);uchar code tab1[]={"本系列中文模块内""任意位置反白显示""置二级字库,可在""使用更方便更灵活"};uchar code tab31[]={"金鹏科技有限公司""Golden Palm TECH"};uchar code tab32[]={/*-- 调入了一幅图像:F:\梁\画图\HOCO12832.bmp --*//*-- 宽度x高度=128x32 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00 ,0x00,0x00,0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03 ,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F ,0xFF,0xC0,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C ,0x01,0xE0,0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF ,0xFC,0x60,0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE ,0x0F,0x30,0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF ,0xF1,0x90,0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF ,0xFC,0x90,0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF ,0xFC,0xD0,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF ,0xFE,0x50,0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF ,0xFE,0x90,0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF ,0xFE,0x80,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF ,0xFA,0x00,0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF ,0xFA,0x00,0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF ,0xBA,0x00,0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF ,0xB8,0x00,0x00,0xC1,0xC0,0x3F,0xFC,0x00,0x01,0x01,0xE0,0x40,0x00,0xFF,0xFF,0xDF ,0xB0,0x00,0x00,0x81,0xC0,0x3F,0xCE,0x00,0x00,0x81,0xE0,0x80,0x00,0x7F,0xFF,0xDF ,0xA0,0x00,0x00,0x81,0x80,0x1D,0xCF,0x00,0x00,0x41,0xE1,0x00,0x00,0x3F,0xFF,0x9B ,0x00,0x00,0x01,0x83,0x80,0x1F,0xC7,0x80,0x00,0x21,0xE2,0x00,0x00,0x1F,0xFD,0xB6 ,0x00,0x00,0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20 ,0x00,0x00,0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00 ,0x00,0x00,0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00 ,0x00,0x00,0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00 ,0x00,0x00,0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00 ,0x00,0x00,0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x77,0x76,0x47,0x54,0x80,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00};uchar code tab5[]={/*-- 调入了一幅图像:F:\梁\画图\COCK.bmp --*//*-- 宽度x高度=128x64 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x0F,0xFF,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x43,0x01,0x80,0x00,0x7F,0xFF,0xF0,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xFF,0x07,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0xFC,0x1E,0x00,0x1F,0xFF,0xFF,0xFF,0x80,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xBF,0xFF,0xFC,0x00,0x7F,0xFC,0x00,0x7F,0xC0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x00,0xFF,0xC0,0x00,0x0F,0xE0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFC,0x01,0xF0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xDF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0xF0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x38,0x00 ,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xF0,0x03,0xF8,0x38,0x00 ,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x3F,0xFF,0xFF,0xC0,0x7C,0x18,0x00 ,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xF0,0x00,0x3F,0xFF,0xFF,0xF8,0x1E,0x08,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x7F,0xFF,0xFF,0xFE,0x0F,0x08,0x00 ,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,0x87,0x08,0x00 ,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x83,0x88,0x00 ,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xC3,0x88,0x00 ,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00 ,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF1,0x88,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF3,0x08,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xF2,0x10,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xF0,0x20,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x7F,0x20,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x7F,0x20,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x7E,0x20,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x3E,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFF,0x3C,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFE,0x38,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x38,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x30,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x7C,0x20,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x1E,0x78,0x00,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x1E,0xF0,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xDA,0x3C,0xE0,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF2,0x30,0x80,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF1,0x20,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x40,0x04,0xD8,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x0F,0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00};/******************************************************************** *********************** 函数名称:init_lcd* 功能描述:初始化LCD********************************************************************* *********************/void init_lcd (void){RST = 1;PSB = 1;wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(comm,0x01); //0000 0001 清屏——将DDRAM填满"20H",并且设定DDRAM的地址计数器为"00H"wr_lcd(comm,0x06); //0000 0110 进入点设定——指定在数据的读取与写入时,设定游标的移动方向wr_lcd(comm,0x0c); //0000 1100 游标或显示移位控制——开显示,关游标}/******************************************************************** *********************** 函数名称:chn_disp* 功能描述:显示汉字或字符********************************************************************* *********************/void chn_disp(uchar code *chn){uchar i,j; //i为横坐标,j为纵坐标wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(comm,0x80); //1000 0000 设定DDRAM地址——0000000for(j=0;j<4;j++) //写四行数据{for(i=0;i<16;i++)wr_lcd(dat,chn[j*16+i]);}}/******************************************************************** *********************** 函数名称:chn_disp1* 功能描述:上半屏显示汉字或字符********************************************************************* *********************/void chn_disp1(uchar code *chn){uchar i,j;wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(comm,0x80); //1000 0000 设定第一行的DDRAM 地址——0x80j=0; //第一行for(i=0;i<16;i++)wr_lcd(dat,chn[j*16+i]);wr_lcd(comm,0x90); //1001 0000 设定第二行的DDRAM 地址——0x90j=1; //第二行for(i=0;i<16;i++)wr_lcd(dat,chn[j*16+i]);}/******************************************************************** *********************** 函数名称:img_disp* 功能描述:显示图形********************************************************************* *********************/void img_disp(uchar code *img){uchar i,j;for(j=0;j<32;j++) //绘制上半屏{for(i=0;i<8;i++){wr_lcd(comm,0x34); //0011 0100 扩充功能设定——8位数据扩充指令操作绘图开wr_lcd(comm,y+j); //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0wr_lcd(comm,x1+i); //1000 0xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(dat,img[j*16+i*2]);wr_lcd(dat,img[j*16+i*2+1]);}}for(j=32;j<64;j++) //绘制下半屏{for(i=0;i<8;i++){wr_lcd(comm,0x34); //0011 0100 扩充功能设定——8位数据扩充指令操作绘图开wr_lcd(comm,y+j-32); //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0wr_lcd(comm,x2+i); //1000 1xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(dat,img[j*16+i*2]);wr_lcd(dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36); //0011 0110 扩充功能设定——8位数据扩充指令操作绘图关}/******************************************************************** *********************** 函数名称:img_disp1* 功能描述:下半屏显示图形********************************************************************* *********************/void img_disp1(uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd(comm,0x34);wr_lcd(comm,y+j);wr_lcd(comm,x2+i);wr_lcd(comm,0x30);wr_lcd(dat,img[j*16+i*2]);wr_lcd(dat,img[j*16+i*2+1]);}}wr_lcd(comm,0x36);}/******************************************************************** *********************** 函数名称:lat_disp* 功能描述:显示点阵********************************************************************* *********************/void lat_disp(uchar data1,uchar data2){uchar i,j,k,x;x=x1; //1000 0000for(k=0;k<2;k++) //第一次循环x=1000 0000 第二次循环x=1000 1000{for(j=0;j<16;j++){for(i=0;i<8;i++){wr_lcd(comm,0x34); //0011 0100 扩充功能设定——8位数据扩充指令操作绘图开wr_lcd(comm,y+j*2);wr_lcd(comm,x+i);wr_lcd(comm,0x30);wr_lcd(dat,data1);wr_lcd(dat,data1);}for(i=0;i<8;i++){wr_lcd(comm,0x34);wr_lcd(comm,y+j*2+1);wr_lcd(comm,x+i);wr_lcd(comm,0x30);wr_lcd(dat,data2);wr_lcd(dat,data2);}}x=x2;}wr_lcd(comm,0x36);}/******************************************************************** *********************** 函数名称:con_disp* 功能描述:当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl ********************************************************************* *********************/void con_disp(uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl){uchar i,j;for(j=0;j< pre> 。
12864中文字库液晶模块使用说明书

12864中文字库液晶模块使用说明书第 1 页共16 页一、12864液晶显示模块概述1. 12864液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置国标GB2312码简体中文字库(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
可与CPU 直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。
具有多种功能:光标显示、画面移位、睡眠模式等。
2. 外观尺寸:93×70mm(4X8C), 84×44mm(2X8C),110×65mm(2x8 C _2), 116×39mm(2X10),180×65mm(4X16A)3. 视域尺寸:73×39mm(4X8C), 78×25mm(2x8 C _2), 70×20mm(2X8C),85×20mm(2X10), 132×39mm(4X16A),补充说明:外观尺寸可根据用户的要求进行适度调整。
二、模块引脚说明1)表—1:(128X32)、(160X32)模块引脚说明引脚名称 方向 说明 引脚名称方向 说明1 VSS - GND(0V) 11 DB4 I/O 数据42 VDD - Supply Voltage For Logic (+5v) 12 DB5 I/O 数据53 VO - Supply Voltage For LCD (悬空)13 DB6 I/O 数据64 RS(CS) H/L H: Data L: Instruction Code 14 DB7 I/O 数据75 R/W(STD) H/L H: Read L: Write15 PSB H/L 16032此脚为:RESET脚 6 E(SCLK) H,H/L Enable Signal7 DB0 I/O 数据0 16 /RST H/L 16032此脚为空8 DB1 I/O 数据1 17 LEDK - 16032此脚为A9 DB2 I/O 数据2 18 LEDA - 16032此脚为K10 DB3 I/O 数据3 注:以上K为负,A为正4)表—4:(256X64)引脚说明引脚名称 方向 说明引脚名称 方向 说明 1 FG - FRAME GROUND 11 DB0 I/O 数据0 2 VSS - GND(0V)12 DB1 I/O 数据1 3 VDD - Supply Voltage For Logic (+5v) 13 DB2 I/O 数据2 4 NC - 空脚14 DB3 I/O 数据3 5 R/W H/L H: Read L: Write 15 DB4 I/O 数据4 6 E1 H,H/L Enable Signal1 16 DB5 I/O 数据5 7 E2 H,H/L Enable Signal217 DB6 I/O 数据6 8 RS H/L H: Data L: Instruction Code 18 DB7 I/O 数据7 9 NC - 空脚19 NC - 空脚 10 /RST H/L Reset Signal 低电平有效 20 NC - 空脚注 K背光源负极(LED-OV)A背光源正极(LED+5V)三、12864液晶硬件接口1、逻辑工作电压(VDD):4.5~5.5V2、电源地(GND):0V3、LCD 驱动电压(V0):0~-10V4、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温) 保存温度(Tstg):-10~65℃(常温)5、电气特性见附图1 外部连接图(参考附图2)模块有并行和串行两种连接方法(时序如下): 1、8位并行连接时序图MPU 写资料到模块RSR/WEMPU从模块读出资料RSR/WE2、串行连接时序图CS C LS T3、AC电气特性(TA=25℃ VCC=5V)condition Min. Typ. Max. UnitSYMBOL Characteristics Testfrequency Rf=39KΩ480 540 600 KHz Fosc OSCTIME UNIT PARAMETER SYMBOL MESUREFOR WRITE MODE(WRITING DATA FROM MPU TO ST7920)System cycle time TC 13,000 nsAddress setup time TAS 1,500 nsAddress hold time TAH 1,500 nsData setup time TDSW 1,000 nsData hold time TH 20 nsEnable pulsewidth TPW 1,500 nsEnable rise/fall time TR,TF 25 nsFOR READ MODE(READING DATA FROM ST7920 TO MPU)System cycle time TC 13,000 nsAddress setup time TAS 1,500 nsAddress hold time TAH 1,500 nsData setup time TDDR 1,000 nsData hold time TH 20 ns Enable pulsewidth TPW 1,500 ns Enable rise/fall time TR,TF 25 ns四、用户指令集指令表—2:(RE=1:扩充指令集)指令码指令RS RW DB7 DB6 DB5DB4 DB3 DB2DB1DB0说明执行时间(540KHZ )待命模式 0 0 0 0 0 0 0 0 0 1将DDRAM 填满“20H ”,并且设定DDRAM 的地址计数器(AC )到“00H ” 72us卷动地址或IRAM 地址选择 0 0 0 0 0 0 0 0 1 SR SR=1:允许输入垂直卷动地址 SR=0:允许输入IRAM 地址72us反白选择 0 0 0 0 0 0 0 1 R1 R0选择4行中的任一行作反白显示,并可决定反白与否 72us 睡眠模式0 0 0 0 0 0 1 SL X XSL=1:脱离睡眠模式 SL=0:进入睡眠模式72us扩充功能设定0 0 0 0 1 1 X1REG 0RE=1:扩充指令集动作RE=0:基本指令集动作G=1 :绘图显示ONG=0 :绘图显示OFF72us设定IRAM地址或卷动地址0 0 0 1 AC5AC4 AC3 AC2AC1AC0SR=1:AC5—AC0为垂直卷动地址SR=0:AC3—AC0为ICON IRAM地址72us设定绘图RAM地址0 0 1 AC6 AC5AC4 AC3 AC2AC1AC0设定CGRAM地址到地址计数器(AC)72us备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
12864液晶的说明

液晶12864(KS0108主控)12864市面上比较流行的有两种,一种是以KS0108为主控芯片的,不带字库的,说白了就是只能靠打点才能显示出字符或图形的,当然要借助取模软件;另一种是以ST7920为主控芯片的,带ASCII码和中文字库。
至于两种的区别下一篇再讨论,这篇先讲述KS0108为主控芯片的12864的原理。
这是网上找的一个管脚图,当然不同品牌的可能略有差异,但是主要的还是一样的重点要讲一下CS1和CS2,KS0108控制的12864内部有两个控制器,分别控制左半屏和右半屏,如下图所示左半屏和右半屏操作时写的地址其实是一样的,那么只能通过片选CS1和CS2来选择哪半个屏了,如果两个都选通,则相当于两块64x64的液晶了,而且显示的内容是一样的,取模方式是纵向8点下高位。
好了,来说下原理,列的范围是0~63,我已经标出了,行是不能按位来写的,而是写“页”,一个页相当于8个点,也就是8位,即一个字符,高位在下面,那么页的范围是0~7,共8页,8页x8个点正好64个点。
这是我用取模软件截的一个“们”字,可以看出它是16x16大小的,实际上占用了两个“页”,16个列,而我们操作时先固定一个页,比如这个就先写上面那页,假设为n好了,从列0写到16,然后页n+1,再从列0写到16,这样一个“们”字就出来了,下面是其代码0x40,0x20,0xF8,0x07,0x00,0xF8,0x02,0x04, 0x08,0x04,0x04,0x04,0x04,0xF E,0x04,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F ,0x00,0x00,可见16x16的字符占了32个字节(上面n页16个字节加n+1页16个),那么如果一幅满幅的图片,就是128x64,占用128x8=1K个字节,可见还是非常占空间的。
12864讲解

辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理……芯片:YM12864R P-1 控制芯片:ST7920A 带中文字库初步小结:1、控制芯片不同,寄存器定义会不同2、显示方式有并行和串行,程序不同3、含字库芯片显示字符时不必对字符取模了4、对芯片的结构地址一定要理解清楚5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚8、显示图片时的二级单元(一级为八位数据写入单元)要清楚12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。
每个显示点对应一位二进制数,1表示亮,0表示灭。
存储这些点阵信息的RAM称为显示数据存储器。
要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。
图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。
由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。
左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。
显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。
512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。
每个存储单元存储8个液晶点的显示信息。
为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。
每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。
ST7920[1](字库)12864
12864](https://img.taocdn.com/s3/m/3b7b4f57f01dc281e53af0ac.png)
Sitronix
主要特色
z 電源操作範圍: - 2.7 to 5.5V z 提供8-位元4-位元及串列之MPU界面 z 64 x 16-位元 字元顯示RAM (DDRAM 最多 16 字元 x 4 行 , LCD顯示範圍為16字元 X 2行) z 64 x 256-位元 繪圖顯示RAM(GDRAM) z 2M-位元 ㆗文字型 ROM (CGROM) 總共提供 8192 個㆗文字型 (16x16 點陣) z 16K-位元 半寬字型 ROM (HCGROM) 總共提供 126 個符號字型 (16x8 點陣) z 64 x 16-位元 字型產生 RAM (CGRAM) z 15 x 16-位元 總共240點的 ICON RAM(IRAM) z 33-common x 64-segment (2 行顯示) 液晶顯示 驅動器 z 自動電源啟動復置(RESET)功能 z 提供外部復置觸發接腳(XRESET) z 配合外部 Segment 驅動器可以擴充顯示區域到達 16x2個㆗文字 z 內建振盪器由外部電阻調整
ST7920
㆗文字型點矩陣 LCD 控制/驅動器
Байду номын сангаас
z 低功率省電設計 Normal mode (450uA Typ VDD=5V) Standby mode (30uA Max VDD=5V) Sleep mode (3uA Max VDD=5V) z VLCD (V0~ Vss): 最大 7V z 繪圖及文字畫面混合顯示功能 z 提供多功能指令: - 畫面清除 (Display clear) - 游標歸位 (Return home) - 顯示打開/關閉 (Display on/off) - 游標顯示/隱藏 (Cursor on/off) - 顯示字元閃爍 (Display character blink) - 游標移位 (Cursor shift) - 顯示移位 (Display shift) - 垂直畫面旋轉 (Vertical line scroll) - 反白顯示 (By_line reverse display) - 睡眠模式 (Sleep mode) z 內建 Booster 升壓電路功能(2 倍壓) z 1/33 Duty
12864上打点及造字原理(st7920)

[转载].教你在12864上打点(基于ST7920控制器)基于ST7920控制的12864液晶用于字符显示很方便的,但它绘图时先要关闭显示,绘完后又要打开,速度会较慢,不如不带字库的,但也可用。
首先,绘图的基础其实就是画点。
ST7920提供了用于绘图的GDRAM(graph display RAM)。
共64×32 个字节的空间(由扩充指令设定绘图 RAM 地址),最多可以控制256×64点阵的二维绘图缓冲空间。
在它的Datasheet给出了GDRAM的坐标地址对照表:用坐标表示,就是这样:它的横坐标每一个地址都是16 位的。
共16个地址,256位。
很明显,它能控制256*64像素的液晶屏,而我们的只是128*64像素液晶屏,显然只用到它的一部分。
我刚开始以为它对应屏幕的绘图RAM是这样分布的(如红色部分):结果栽了大根头,后来终于弄明白,原来它对应屏幕的GDRAM是这样分布的:只要我们清楚了它的GDRAM和屏幕上像素点的映射(对应)关系,点亮对应的像素点就容易多了。
要点亮某一个像素点,就是将这个像素点在GDRAM中对应的位置1打点步骤---------给你x,y的坐标,要你点亮一个点,首先,我们要确定这个点是在上半屏还是下半屏,然后确定它是在那一行(纵坐标Y),再确定它是在哪一个字节的哪一个位(也就是确定它在那一列,即横坐标X),最后,将该位置1下面我们边写代码边讨论。
因为这里仅仅是讨论如何在12864上打点的,而不是给12864写一个驱动,所以对于基本的数据读写函数,我们不做讨论,这里假设已经有了如下基本函数:view sourceprint1void lcd_write_cmd(unsigned char);73 F0F 3F屏原因:带中文字库的LCD,使用图形模式时,应对所有GDRAM写0x00才算清屏,清屏命令是对使用自带字库显示时用的,对于画图不适用。
清屏程序:void LCD12864_DisplayCLR(){uchar i, j, k ;LCD12864_IfBusy();操作步骤:1>设置为扩充指令集;2>设置SR=O(设定CGRAM地址的前提),允许设定CGRAM地址;3>设置为基本指令集;4>循环执行以下操作写入16个字节数据(设定CGRAM的存储地址;写入自定义数据);5>设置DDRAM地址6>写入显示CGRAM显示码也就是说只有后六位是CGRAM的地址范围是00 0000(0x00)-11 1111(0x3F),整个字节也就是0x40-0x7F,这就是CGRAM地址的范围,在进行设置CGRAM字库的过程中,进行的有如下三句操作,也就是在设置CGRAM地址时是在SR=0有效时进行的,SR=0,也就表明是对CGRAM地址的设置,依此来区分是设置的DDRAM地址或CGRAM地址;LcdWcom(0x34); //再次设置为8位并行口,扩展指令集LcdWcom(0x02); //SR=0,允许设置CGRAM地址LcdWcom(0x30); //恢复设置为8位并行口,基本指令集你写入的数据编码分为三种:一种是一个字节的HCGROM,也就是字符;一种是两字节的CGROM,也就是内部的中文汉字字库;最后一种就是两字节的CGRAM,也就是你自己造的字库;具体的编码是这样的:如果你第一个字节写入DDRAM的内容在0x02-0x7F之间,那么就会认为你要写入的是HCGROM编码;如果你第一个字节写入DDRAM的内容不在0x02-0x7F之间,在0xA1之上的,那就认为是CGROM编码,接收第二个字节,然后组合在一块显示出汉字;如果你第一个字节写入DDRAM的内容不属于以上的范围那自然就是CGRAM编码了,接收第二个字节,然后组合在一块显示出自造的16*16的字符;另外还对CGRAM的编码有详细的规定,只能是0x0000,0x0002,0x0004,0x0006四种编码,对应的是CGRAM中你写入的0x40-0x7F范围的数据,0x40-0x7f正好是4个16*16(每个地址两个字节数据2*8)的数据。
ST7920控制器液晶模块使用手册说明书

________________________________________________________________________________________1清達光電技術有限公司TSINGTEK DISPLAY CO.,LTDLCD CONTROLLER & DRIVERST7920 OR EQUIVALENT公司地址:杭州市文三路569号康新花园A座703公司电话:0571-******** 85121742 85121304(f)(总公司)62000662 62366871(f)(北京分部)门市地址:杭州市登云路639号杭州电子市场2A095/K31 门市电话:0571-******** 89902095(f)网址:目录使用须知 3 第一章液晶模块汇总 6 第二章液晶模块的结构特点7 第三章液晶模块供电说明9 第四章液晶模块控制器介绍10 第五章液晶模块指令系统24 第六章液晶模块接口技术及测试程序31 第七章液晶模块调试经验41 附录一清达光电配套产品42 附录二清达光电维修服务规范42 附录三液晶模块内部字符集432________________________________________________________________________________________3使用须知十分感谢您购买我公司的产品,因为液晶模块属于精密器件,结构复杂、工艺精细,所以在使用前请您首先仔细阅读以下注意事项,以免给您造成不必要的损失。
您在使用过程中遇到困难时,请拨打我们的技术服务电话,我们将竭诚为您提供服务和帮助。
一、处理保护膜在装好的模块成品表面贴有一层保护膜,以防在装配时沾污显示屏表面,在整机装配结束前不得揭去,以免弄脏或划商显示屏表面。
二、加装衬垫在模块与前面板之间最好加装一块约0.1毫米左右的衬垫。
面板还应保持平整,以免在装配后产生扭曲,并可提高其抗振性能。
12864液晶屏学习使用手册

12864液晶屏学习手册1.液晶模组概览12864A-1汉字图形点阵液晶显示模块,可显示汉字和图形,内置8192个汉字(16X16点矩阵,16 * 8 = 128,16 * 4 = 64,一行,4行只能写8个汉字;),128个字符(8X16点矩阵)和64X256点矩阵显示RAM(GDRAM)。
主要技术参数和显示特性:电源:VDD 3.3V〜+5伏(内置升压电路,无负压);显示内容:128列X第64行(128分)显示颜色:黄绿色显示角度:直接看6:00LCD类型:STN与MCU的接口:8位或4位并行/ 3位串行配置LED背光多种软件功能:光标显示,屏幕移位,自定义字符,睡眠模式等2.尺寸1.尺寸2。
主要尺寸项目标准尺寸单元模子片身体产品113.0X65.0X12.8毫米2.模块引脚说明逻辑工作电压(VDD):4.5〜5.5V电源地(GND):0V穿孔温度(Ta):0〜60°C(常温)/ -20〜75°C(宽温度)三,接口定时模块有两种连接方式:并行和串行(时间如下):8位并行连接时序图MPU将数据写入模块MPU从模块读取数据2,串行连接时序图串行数据传输以三个字节完成:第一个字节:串口控制—格式11111ABCA是数据传输方向控制:H表示从LCD到MCU的数据,L表示从MCU到LCD的数据B是数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节:(并行)8位数据的高4位—格式DDDD0000第三个字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T =25℃VDD = 4.5V)备注:1,在模块接受指令之前,微处理器必须首先确认模块不忙,即读取高炉签到时间高炉需要0接受新说明之前;如果你不这样做’t在发送命令之前检查高炉商标,(通常在输入每日命令之前添加延迟)那么上一条指令和该指令之间必须有很长的延迟,也就是等待上一条命令的执行完成,有关命令的执行时间,请参阅命令表中的各个命令描述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在此指出,这一篇文章出至网络上zhaoshan413之手,感谢他的无私贡献,让大家轻松玩转带字库12864!~~[p=30, 2, left]之前说学完12864字库液晶后和大家交流一下心得,一直没有时间,今天整理一下发上来,希望对想学习的朋友能有点帮助…首先说明一点,本人也是初学者,自感水平不高,若有不足及不对之处,望情指正…以下以并行口传输为例,别的还不会,呵呵![/p][p=30, 2, left]先传一下ST7920的芯片说明书:[/p][p=30, 2, left]/bbs/redirect.php?tid=7676&goto=lastpo st#lastpost[/p][p=30, 2, left]ST7920(字库)12864.pdf(2010-12-01 10:46:58, Size: 1.65 MB, Downloads: 1689)[/p][p=30, 2, left]一、首先说一下关于驱动函数的书写,这些是液晶显示的基础一般包括四个函数:1、写命令函数;2、写数据函数;3、读状态函数;4、读数据函数;这四个函数并不是必须全部写的,具体要看你实现的功能,如果只是单纯的显示汉字和字符,写命令、写数据、读状态这三个函数就够了,如过你还需要进行一些绘图的操作,那读数据函数也必须书写。
另外关于读状态函数,其实也就是用于判忙操作,我看郭天祥的书里面是这样说的:原则上每次对控制器进行读写操作之前,都必须进行读写检测,由于单片机的操作速度慢于液晶控制器的反应速度,因此可不进行读写检测,或者只进行简短的延时即可。
因此,读状态函数也可以不写,只用简短的延时函数替换即可。
1、写操作的编写:首先看一下时序图[/p][p=30, 2, left]时序.JPG[/p][p=30, 2, left]由图可见操作很简单:1>RS=1(写数据操作);或者RS=0(写命令操作);2>RW=0;//指明为写操作3>E=1;4>DB=data;//data为你要写入的命令或数据值5>E=0;[/p][p=30, 2, left]以下是我的驱动函数,仅供参考:[/p][p=30, 2, left]CODE:/********************************液晶端口定义**************************/#define lcd_data P0 //数据口sbit RS = P2^4; //选择寄存器(并行) 0:指令寄存器1:数据寄存器;sbit RW = P2^5; //读写控制脚(并行) 0:写入 1:读出sbit E = P2^6; //读写数据启始脚(并行)sbit PSB = P2^1; //串并方式选择引脚,0为串行模式,1为8/4位数据口模式sbit RST = P2^3; //复位引脚//******************************************************* *//延时函数//******************************************************* *void delay(unsigned int k){unsigned int i;unsigned char j;for(i=0;i<k;i++){for(j=0;j<10;j++);}}//******************************************************* *//延时1ms函数//******************************************************* *void delay_ms(unsigned int k)//延时0.994us,晶振12M{unsigned int x,y;for(x=k;x>0;x--)for(y=121;y>0;y--);}//******************************************************* *//写命令函数//******************************************************* *void LcdWcom(unsigned char WCom){delay(1);RS=0; //指明操作对象为指令寄存器RW=0; //指明为写操作E=1;lcd_data=WCom; //将命令写入总线E=0;}//******************************************************* *//写数据函数//******************************************************* *void LcdWdata(unsigned char WData){delay(1);RS=1; //指明操作对象为数据寄存器RW=0; //指明为写操作E=1;lcd_data=WData; //将数据写入总线E=0;}[/p][p=30, 2, left]二、初始化操作[/p][p=30, 2, left]以8位并行操作为例,操作流程图如下:[/p][p=30, 2, left]初始化.JPG[/p][p=30, 2, left]初始化操作如下:[/p][p=30, 2, left]1>芯片上电;[/p][p=30, 2, left]2>延时40ms以上;[/p][p=30, 2, left]3>复位操作:RST出现一个上升沿(RST=1;RST=0;RST=1;);[/p][p=30, 2, left]4>功能设定;[/p][p=30, 2, left]5>延时100us以上;[/p][p=30, 2, left]6>再次进行功能设定;[/p][p=30, 2, left]7>延时37us;[/p][p=30, 2, left]8>显示开关控制;[/p][p=30, 2, left]9>延时100us 以上;[/p][p=30, 2, left]10>清除显示;[/p][p=30, 2, left]11>延时10ms以上;[/p][p=30, 2, left]12>进入点设置;[/p][p=30, 2, left]13>初始化结束;[/p][p=30, 2, left]这里我遇到了一个小问题,我的液晶按照这个顺序进行初始化结果不正确,无法显示,最后我把调整了一下就可以了,调整后的顺序为:清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声…[/p][p=30, 2, left]CODE://******************************************************* *//显示初始化函数//********************************************************void Display_Init(void){delay_ms(45); //延时45msPSB=1; //8位并行口//复位操作RST=1;delay(1);RST=0;delay(1);RST=1;delay(1);//功能设定LcdWcom(0x30); //设置为8位并行口,基本指令集delay(10);LcdWcom(0x30); //再次设置为8位并行口,基本指令集delay(5);// //显示开关控制// LcdWcom(0x0c); //游标显示关,正常显示,整体显示开// delay(10);//清除显示LcdWcom(0x01);delay_ms(12); //延时12ms//进入点设置LcdWcom(0x06); //设置为游标右移,DDRAM位地址加1,画面不移动delay(5);LcdWcom(0x0C); //开显示}[/p][p=30, 2, left]三、显示基本的字符和汉字[/p][p=30, 2, left]1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:[/p][p=30, 2, left]DDRAM位址.JPG[/p][p=30, 2, left]由于此液晶为128*64,即是横向128个点,竖向64个点,由于该液晶控制器支持的字符为8*16,汉字为16*16,因此只能显示四行,如果是汉字,为每行显示8个,如果是字符,每行显示16个。
[/p][p=30, 2, left]由上图设置DDRAM地址的指令可知,最高位为1,余下7位为地址值,因此就对应了为什么起始地址为80H的原因(即对应的写地址指令为1000 0000);因此如果你要设定显示的地址为第一行的第一个位置,只需要调用写指令函数,写入0x80即可。
[/p][p=30, 2, left]存在的问题:参考网上的程序及在试验过程中发现,实际能显示出来的地址分布式这样的[/p][p=30, 2, left]0x80 0x81 0x82 0x83 0x84 0x85 0x86 0x87 //第一行汉字位置0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 //第二行汉字位置0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f //第三行汉字位置0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f //第四行汉字位置[/p][p=30, 2, left]百思不得其解,尤其让人受不了的是居然是第一行和第三行地址接续,而不是第二行,有明白的高手给讲解一下…[/p][p=30, 2, left]设定DDRAM地址参考程序:[/p][p=30, 2, left]CODE://******************************************************* *//设置光标函数//参数说明:x为行号,y为列号//******************************************************* *void Set_Cursor(unsigned char x, unsigned char y){unsigned char i;switch(x)//确定行号{case 0x00: i=0x80; break;//第一行case 0x01: i=0x90; break;//第二行case 0x02: i=0x88; break;//第三行case 0x03: i=0x98; break;//第四行default : break;}i = y+i;//确定列号LcdWcom(i);//写地址}[/p][p=30, 2, left]2、显示字符[/p][p=30, 2, left]由数据手册可查看可以显示的字符及其显示码:[/p][p=30, 2, left]半宽字.JPG[/p][p=30, 2, left]因此,当你设置好所要显示的光标位置后,即可调用写数据函数,写入对应相应字符的显示码,比如要显示!就应该写入0x21。