LCD12864液晶显示原理+电路图+程序

合集下载

实验三 LCD12864液晶显示

实验三  LCD12864液晶显示

实验三 LCD12864液晶显示参赛序号实验题目LCD12864液晶显示实验成组员左虎博杨颂王志鹏指导教师赵勇报告日期2014年7月16日-2014年7月18日摘要:本设计以超低功耗MSP430单片机为微控制器,以4位/8位并行,2线或3线串行多种接口方式的LCD12864为输出显示器。

通过对MSP430单片机进行编程,在LCD12864上显示8×4行16×16点阵的汉字。

关键字:MSP430 LCD12864目录一.方案论证 (4)液晶显示器的论证与选择 (4)二.LCD12864的工作原理 (4)1.引脚功能说明 (4)LCD12864采用20接口,各引脚接口说明如表3所示: (4)2. 指令说明 (5)三.实验框图和电路图 (7)1. 系统框图 (7)2. 电路原理图 (7)四.实验程序设计 (7)五.系统测试 (11)1. 测试方案 (11)2. 测试结果 (11)3. 测试分析与结论 (12)一.方案论证液晶显示器的论证与选择方案一:采用带中文字库的LCD12864。

LCD12864具有4 位/8 位并行、2 线或3 线串行多种接口方式,可以显示8×4 行16×16 点阵的汉字。

也可完成图形显示。

低电压低功耗是其一显著特点。

方案二:采用LCD1602。

LCD1602显示内容为16X2,即可以显示两行,每行16个字符液晶模块,只能显示字符和数字。

通过论证可知LCD12864显示内容多,功能多,低电压低功耗,因此选用方案一。

二.LCD12864的工作原理1.引脚功能说明LCD12864采用20接口,各引脚接口说明如表1所示:表1 引脚说明表管脚号管脚名称电平管脚功能描述1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整4 RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5 R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线表1 引脚说明表注释1:如在实际应用中仅使用串口通讯模式,可将PSB 接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

12864液晶程序和原理图

12864液晶程序和原理图
{0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00},/*"院",9*/
{
setpos(line,colum);//显示第i列上面8个点
write_dat(*(add+i));
setpos(line+1,colum++);//显示第i列下面8个点,然后列加1
write_dat(*(add+16+i));
delay(1000);//延时,达到汉字从左到右扫描显示的效果
}
}
{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*"工",12*/
void write_com(uchar);//写指令
void write_dat(uchar);//写数据
void setpos(uchar,uchar); //设置显示的起始位置
void main()
{
init();
for(i=0;i<6;i++)
{
if(i<3)
{
select(0);

LCD12864显示程序

LCD12864显示程序

本例程为【2 】经由过程用AT89C52芯片操作LCD12864显示的程序,应用的晶振为12M./**********************************************************程序解释:LCD12864显示主程序程序调试员:莫剑辉调试时光:2010-6-7**********************************************************/#include<reg52.h>#include"12864.c"void main(){Ini_Lcd(); //液晶初始化子程序Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序while(1);}这里我们经由过程挪用下面的头文件就可以了,如许的做法便利我们今后要用到LCD12864的程序的挪用./**********************************************************程序解释:LCD12864显示头文件程序调试员:莫剑辉调试时光:2010-6-7**********************************************************///#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define DATA P2 //数据输出端0~7sbit RS=P0^0; //LCD12864 RS端sbit RW=P0^1; //LCD12864 RW端sbit E =P0^2; //LCD12864 E 端sbit PSB =P0^3;/********************************************* 延时子程序*********************************************/ void Delay_1ms(uint x){uint j,i;for(j=0;j<x;j++){for(i=0;i<120;i++); //延时X乘以120}}/********************************************* LCD12864液晶测忙子程序(读状况)*********************************************/ void Busy(){uchar busy;do{E = 0; //0为封闭使能端,1为打开使能端RS = 0; //1为指令,0为数据RW = 1; //1为读,0为写Delay_1ms(20); //延时20乘以120时光E = 1; //0为封闭使能端,1为打开使能端busy=P1; //读取P2状况Delay_1ms(20); //延时20乘以120时光E = 0; //0为封闭使能端,1为打开使能端}while(busy&0x80); //断定BUSY位是否工作:1为内部在工作,0为正常状况}/*********************************************LCD12864液晶数据写入子程序*********************************************/void Write_Data(uchar k){Busy(); //测忙E =1;//0为封闭使能端,1为打开使能端RS=1;//1为指令,0为数据RW=0;//1为读,0为写DATA=k;//输入数据K到DATADelay_1ms(20);//延时20乘以120时光E =0; //0为封闭使能端,1为打开使能端Delay_1ms(20); //延时20乘以120时光}/*********************************************LCD12864液晶敕令写入子程序*********************************************/void Write_Cmd(uchar cmd){Busy(); //测忙E=1;//0为封闭使能端,1为打开使能端RS=0; //1为指令,0为数据RW=0;//1为读,0为写DATA=cmd; //输入敕令cmd到DATADelay_1ms(20);//延时20乘以120时光E=0;//0为封闭使能端,1为打开使能端Delay_1ms(20);//延时20乘以120时光}/*********************************************LCD12864液晶数据显示子程序*********************************************/void Disp(uchar y,uchar x,uchar i,uchar *z){uchar Address;if(y==1){Address=0x80+x;} //Y断定第几行,X断定第几列,0x80为液晶行初始地址if(y==2){Address=0x90+x;}if(y==3){Address=0x88+x;}if(y==4){Address=0x98+x;}Write_Cmd(Address); //写入地址敕令到LCD12864while(i) //写入显示数据的大小{Write_Data(*(z++)); //写入显示数据到LCD12864i--;}}/********************************************* LCD12864液晶初始化子程序*********************************************/ void Ini_Lcd(void){PSB=1;Delay_1ms(20);Write_Cmd(0x30); //根本指令集Delay_1ms(20);Write_Cmd(0x02); // 地址归位Delay_1ms(20);Write_Cmd(0x0c); //整体显示打开,游标封闭Delay_1ms(20);Write_Cmd(0x06); //游标右移Delay_1ms(20);Write_Cmd(0x80); //设定显示的肇端地址Delay_1ms(20);Write_Cmd(0x01); //消除显示}。

单片机学习项目 (18) LCD12864的原理与应用

单片机学习项目 (18) LCD12864的原理与应用

单片机学习项目项目18-LCD12864的原理与应用一:电路原理图液晶12864和单片机的连接电路见图图6-2-3所示,其中12864的数据端D0~D7分别接单片机的P0口,需加上啦电阻;/WR接P24,/RD接P2.3,/CE接P2.2,/CD接P2.1,/RST接P2.0;12864的第4脚接多圈电位器,用来调节12864显示的对比度。

二:12864液晶显示器驱动程序12864的驱动程序中主要有系统配置预处理、基本操作函数和应用操作函数,基本操作函数有:向12864中写一个一字节数据,写一个一字节命令,写一个数据一个命令,写两个数据两个命令和12864基本设置函数、清屏函数以及延时函数,由于写过程中采用了延时,所以程序中省去了读状态操作;应用操作包含的函数有显示字符、显示汉字、显示图形等函数,因此12864中包含了字库和图形的文件。

基本操作类函数和应用操作类函数是12864的基本程序,保存在f12864.c文件中,所使用的字库、图形文件实例分别存放在ziku.c和tuxing.c中。

#include<reg51.h>#include<f12864.c>/*主函数*/void main(void){ucharsec,min = 30,hour = 12;F12864_init();F12864_clear();dispay_tuxing();delay(50000);delay(50000);delay(50000);delay(50000);F12864_clear();display_hanzi(2,0,0,6);display_hanzi(2,1,6,12);display_string(0,4,"----------------");display_string(2,5,"HelloWorld!");display_string(0,6,"0123456789ABCDEF");delay(50000);delay(50000);delay(50000);delay(50000);F12864_clear();while(1){display_hanzi(0,0,12,14);display_num(4,1,hour);display_num(7,1,min);display_num(10,1,sec);sec++;display_string(6,1,":");display_string(9,1,":");delay(50000);display_string(6,1,"");display_string(9,1," ");delay(50000);if(sec>= 60){sec= 0;min++;}if(min>= 60){min= 0;hour++;}if(hour>= 24)hour =0;}}(1)基本操作/*预处理*/#include<reg51.h>#include<ziku.c>#include<tuxing.c>#define uchar unsigned char#define uint unsigned intuchar num[] ="0123456789";sbit rest = P2^0; //复位信号,低电平有效sbit _cd = P2^1; //命令和数据控制口(高为命令,低为数据)sbit _ce = P2^2; //片选信号,低电平有效sbit _rd = P2^3; //读信号,低电平有效sbit _wr = P2^4; //写信号,低电平有效/*延迟函数*/void delay(uint i){while(i--);}/*写命令*/void write_commond(uchar com){_ce = 0;_cd = 1; //高电平,写指令_rd = 1;P0 = com;_wr = 0; _nop_();_wr = 1;_ce = 1;_cd = 0;}/*对写一个数据*/void write_date(uchar dat){_ce = 0;_cd = 0; //低电平,写指令_rd = 1;P0 = dat;_wr = 0;_nop_();_wr= 1;_ce = 1;_cd= 1;}/*写一个指令和一个数据*/void write_dc(uchar com,uchar dat){write_date(dat); //先写数据write_commond(com); //后写指令}/*写一个指令和两个数据*/voidwrite_ddc(uchar com,uchar dat1,uchar dat2){write_date(dat1); //先写数据write_date(dat2); //先写数据write_commond(com); //后写指令}/*LCD12864初始化函数*/voidf12864_init(void){rest = 0;delay(300);rest = 1;write_ddc(0x40,0x00,0x00); //设置文本显示区首地址0x0000write_ddc(0x41,128 / 8,0x00); //设置文本显示区宽度8点阵write_ddc(0x42,0x00,0x08); //设置图形显示区首地址0x0800write_ddc(0x43,128 / 8,0x00); //设置图形显示区宽度write_commond(0x81); //显示方式设置,文本与图形异或显示write_commond(0x9e); //显示开关设置,文本开,图形开,光标闪烁关}/*清屏函数*/void f12864_clear(void){unsigned int i;write_ddc(0x24,0x00,0x00); //置地址指针为从零开始write_commond(0xb0); //自动写for(i = 0;i <128 * 64 ;i++) write_date(0x00); //清一屏write_commond(0xb2); // 自动写结束write_ddc(0x24,0x00,0x00); //重置地址指针}(2) 应用操作/*显示一个ASCII码函数*/void write_char(uchar x,uchary,uchar Charbyte){uint adress;adress = 16 * y + x; //文本显示write_ddc(0x24,(uchar)(adress),(uchar)(adress >> 8)); //地址指针位置write_dc(0xC4,Charbyte - 32); //数据一次读写方式,查字符rom}/*显示字符串函数,8*8点阵,x:左右字符间隔,y:上下字符间隔*/void display_string(ucharx,uchar y,uchar *p){while(*p != 0){write_char(x,y,*p);x++;p++;if(x > 15 ) //自动换行 128*64 //共16行0~15{x= 0;y++;}}}/*显示1个汉字,x:左右点阵间距(8点阵倍数),y:上下点阵间距(16点阵倍数)*/void write_hanzi(ucharx,uchar y,uchar z){unsigned int address;uchar m,n = 0;address = 16 * 16 * y + x + 0x0800; //显示图形for(m = 0;m < 16;m++)//1个汉字占上下16行{write_ddc(0x24,(uchar)(address),(uchar)(address>>8));write_dc(0xc0,ziku[z][n++]);write_dc(0xc0,ziku[z][n++]);//一个汉字横向取模为两个字节address =address + 16; //换行}}/*显示多个汉字,x:左右点阵间距(8点阵倍数),y:上下点阵间距(16点阵倍数),从第i个汉字开始显示,显示j- i个*/void display_hanzi(ucharx,uchar y,uchar i,uchar j){for(i;i < j;i++){write_hanzi(x,y,i);x = x + 2;}}/*显示两位数字,每一个8*8点阵,x:左右字符间隔,y:上下字符间隔*/void display_num(ucharx,uchar y,uchar i){uint adress;adress = 16 * y + x; //文本显示,每行16字符write_ddc(0x24,(uchar)(adress),(uchar)(adress >> 8)); //地址指针位置write_dc(0xc0,num[i / 10] -32);write_dc(0xc0,num[i % 10] - 32); //写两个数字}/*显示128*64图形*/void dispay_tuxing(void){uchar i,j;uint address,x;address = 0x0800; //首地址,图形显示for(i = 0;i < 64;i++)//64行{write_ddc(0x24,(uchar)(address),(uchar)(address>>8));for(j =0;j < 16;j++)//每行16字节{write_dc(0xc0,tuxing[x]);x++;}address =address + 16;//换行}}uchar code ziku[][32] ={/*-- 文字: 好 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,/*-- 文字: 人 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x01,0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x80,0x04,0x40,0x08,0x60,0x08,0x30,0x10,0x18,0x20,0x0E,0x40,0x04,0x00,0x00, /*-- 文字: 一 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 生 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x80,0x10,0xC0,0x10,0x80,0x10,0x88,0x1F,0xFC,0x20,0x80,0x20,0x80,0x40,0x88, 0x9F,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x84,0x7F,0xFE,0x00,0x00, /*-- 文字: 平 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x7F,0xFC,0x01,0x00,0x21,0x10,0x11,0x18,0x09,0x10,0x0D,0x20,0x09,0x40,0x01,0x00, 0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, /*-- 文字: 安 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x02,0x00,0x01,0x00,0x3F,0xFE,0x20,0x04,0x44,0x08,0x06,0x00,0x04,0x00,0xFF,0xFE, 0x08,0x20,0x08,0x20,0x08,0x40,0x06,0x80,0x01,0x00,0x06,0xC0,0x18,0x38,0xE0,0x10, /*-- 文字: 祝 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x00,0x11,0xF8,0x11,0x08,0xFD,0x08,0x05,0x08,0x09,0x08,0x11,0x08,0x39,0xF8, 0x54,0x90,0x94,0x90,0x10,0x90,0x10,0x90,0x11,0x12,0x11,0x12,0x12,0x12,0x14,0x0E, /*-- 文字: 您 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x00,0x09,0x00,0x11,0xFE,0x12,0x04,0x34,0x40,0x32,0x50,0x52,0x48,0x94,0x44, 0x11,0x44,0x10,0x80,0x00,0x00,0x29,0x04,0x28,0x92,0x68,0x12,0x07,0xF0,0x00,0x00, /*-- 文字: 一 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 帆 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x00,0x11,0xF0,0x11,0x10,0x7D,0x10,0x55,0x10,0x55,0x10,0x55,0x90,0x55,0x50, 0x55,0x70,0x55,0x50,0x5D,0x10,0x11,0x12,0x11,0x12,0x12,0x12,0x12,0x0E,0x14,0x00, /*-- 文字: 风 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x1F,0xF8,0x10,0x08,0x10,0x48,0x14,0x68,0x12,0x48,0x11,0x48,0x10,0x88, 0x10,0x88,0x11,0x48,0x12,0x6A,0x24,0x2A,0x28,0x26,0x40,0x06,0x80,0x02,0x00,0x00, /*-- 文字: 顺 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x45,0xFE,0x54,0x20,0x54,0x40,0x55,0xFC,0x55,0x04,0x55,0x04,0x55,0x24, 0x55,0x24,0x55,0x24,0x55,0x24,0x54,0x20,0x44,0x50,0x84,0x8C,0x05,0x04,0x00,0x00, /*-- 文字: 时 --*//*-- 楷体_GB23129; 此字体下对应的点阵为:宽x高=12x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xCE,0xFF,0xAE,0xFF,0xAE,0x1F,0xA0,0xFF,0x8E,0xFF,0xA A,0xFF,0x8A,0xFF,0xAE,0xFF,0xFC,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*-- 文字: 间 --*//*-- 楷体_GB23129; 此字体下对应的点阵为:宽x高=12x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/0xFF,0xFF,0xFF,0xFF,0xDE,0x7F,0xE9,0xBF,0xBF,0xBF,0xA1,0xBF,0xAD,0xBF,0xA1,0xBF, 0xAD,0xBF,0xA1,0xBF,0xBF,0xBF,0xBE,0xBF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, };。

lcd12864程序流程图

lcd12864程序流程图

lcd12864 程序流程图
我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602 之外,还有一种液晶屏用的比较多。

相信接触过单片机的朋友都知道了,那就是12864 液晶。

顾名思义,12864 表示其横向可以显示128 个点,纵向可以显示64 个点。

我们常用的12864 液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 、T6963,ST7920 等等。

在这里我们以ST7920 为主控芯片的12864 液晶屏来学习如何去驱动它。

(液晶屏采用金鹏的OCMJ4X8C)。

lcd12864 液晶说明:
我们先来了解一下它的并行连接情况。

下面是电路连接图:
上面的图可以看出,液晶模块和单片机的连接除了P0 口的8 位并行数据线之外,还有RS,RW,E 等几根线。

其中R/S 是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E 是使能线(串行模式下为时钟线)。

通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。

看看并行模式下的写时序图:。

LCD12864液晶显示原理电路图程序

LCD12864液晶显示原理电路图程序

LCD12864系列点阵型液晶显示模块使用说明书一、OCM12864液晶显示模块概述1.OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6条控制线及电源线。

采用KS0107控制IC。

2.外观尺寸:113×65×11mm(ocm12864-1), 93×70×10mm(ocm12864-2)78×70×10mm(ocm12864-3),3.视域尺寸:73.4×38.8mm(ocm12864-1) 70.7×38mm(ocm12864-2),64×44mm(ocm12864-3)4.重量:大约g补充说明:外观尺寸可根据用户的要求进展适度调整。

二、最大工作X围1、逻辑工作电压(Vcc):4.5~5.5V2、电源地(GND):0V3、LCD驱动电压(Vee):0~-10V4、输入电压:Vee~Vdd5、工作温度(Ta):0~55℃(常温) / -20~70℃〔宽温〕6、保存温度(Tstg):-10~65℃三、电气特性(测试条件Ta=25,Vdd=5.0+/-0.25V)1、输入高电平(Vih):3.5Vmin2、输入低电平(Vil):0.55Vmax3、输出高电平(Voh):3.75VminH H D7 D6 D5 D4 D3 D2 D1 D0功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。

从DD RAM读数据前要先执行“设置页地址〞及“设置列地址〞命令。

六、接口时序1.写操作时序时序11.读操作时序时序2时序参数表:名称符号最小值典型值最大值单位E周期时间Tcyc 1000 nsE高电平宽度Pweh 450 nsE低电平宽度Pwel 450 nsX=7Line60 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB4 Line61 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB5 Line62 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB6 Line631/0 1/0 1/0 1/0…………1/0 1/0 1/0 DB7八、测试硬件电路九、读写模块程序举例● 写指令子程序〔INST 〕 SETB E CLR D _I CLR R _W MOV P1, A CLR E RET● 写数据子程序〔DATA 〕 SETB E SETB D_I CLR R _W MOV P1, A CLR E RET● 写一页显示RAM 数据〔假设指令子程序为INST ,数据子程序为DATA 〕VEE ’V0第三脚VEE 第18脚可调10K〔三极管内置〕MOV A, #0B8HLCALL INST ;置页地址为0页MOV A, #40HLCALL INST ;置列地址为0列MOV R2,#40HMOV R1,#00HMOV DPTR,#ADDRLOOP:MOV A, R1MOVC A, A+DPTRLCALL DATAINC R1DJNZ R2, LOOP带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

HDG12864L-3电路图及程序

HDG12864L-3电路图及程序

程序:#include<reg51.h>#include<intrins.h>#define LCD P1sbit A=P3^2;sbit RW=P3^1;sbit E=P3^0;unsigned char codebao[]={0x80,0x40,0x20,0xD8,0x4F,0x4A,0x48,0x48,0x48,0xC8,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x0 0,0x3F,0x42,0x42,0x42,0x42,0x42,0x43,0x48,0x50,0x4F,0x40,0x70,0x00,};unsigned char codegang[]={0x40,0x30,0xEF,0x24,0x24,0x24,0x04,0xFE,0x12,0x22,0xC2,0x22,0x1A,0x02,0xFE,0x00,0x01,0x01,0x 7F,0x21,0x11,0x01,0x00,0xFF,0x04,0x03,0x00,0x01,0x46,0x80,0x7F,0x00,};unsigned char codeji[]={0x00,0x10,0x08,0xFC,0x57,0x54,0x54,0x54,0xFD,0x56,0x54,0x54,0x54,0x00,0x00,0x00,0x00,0x44,0x44,0 x25,0x25,0x15,0x0D,0xFF,0x05,0x0D,0x15,0x25,0x65,0x25,0x04,0x00,};unsigned char codetuan[]={0x00,0xFE,0x02,0x12,0x12,0x12,0x92,0x72,0xFE,0x12,0x12,0x12,0x02,0xFE,0x00,0x00,0x00,0xFF,0x4 8,0x44,0x42,0x41,0x50,0x60,0x5F,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,};unsigned char codewan[]={0x00,0x02,0x02,0x02,0x02,0x82,0x7E,0x22,0x22,0x22,0x22,0xF2,0x22,0x02,0x02,0x00,0x00,0x40,0x20 ,0x10,0x0C,0x03,0x00,0x00,0x20,0x60,0x20,0x1F,0x00,0x00,0x00,0x00,};unsigned char codeteng[]={0x00,0xFE,0x12,0x12,0xFE,0x29,0xAE,0xEA,0xB8,0xAF,0xA8,0x6C,0xAB,0xAA,0x20,0x00,0xC0,0x3 F,0x41,0x81,0x7F,0x01,0x10,0x17,0x14,0x14,0x57,0x84,0x7C,0x03,0x01,0x00,};unsigned char codegong[]={0x00,0x00,0x80,0x40,0x30,0x0E,0x84,0x00,0x00,0x0E,0x10,0x60,0xC0,0x80,0x80,0x00,0x00,0x01,0x2 0,0x70,0x28,0x24,0x23,0x31,0x10,0x10,0x14,0x78,0x30,0x01,0x00,0x00,};unsigned char codesi[]={0x00,0x10,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x1F,0 x04,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,0x20,0x40,0x3F,0x00,0x00,};unsigned char codewu[]={0x00,0x00,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x00,0x00,0x00,0x84,0x84,0 x44,0x44,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x64,0xC4,0x44,0x04,0x00,};unsigned char codedi[]={0x40,0x41,0xCE,0x04,0x00,0xF0,0x90,0x90,0x90,0xFF,0x90,0x90,0x90,0xF0,0x00,0x00,0x40,0x20,0x1F,0 x20,0x40,0x5F,0x48,0x48,0x48,0x4F,0x48,0x48,0x48,0x5F,0x40,0x00,};void mdelay(int delay){ int i;for(;delay>0;delay--){for(i=0;i<80;i++) //1ms延时{;}}}void busytest(){A=0;RW=1;P1=0x00;E=1;while(P1&0x08);E=0;}void writevalue(value){busytest();A=0;RW=0;LCD=value;_nop_();_nop_();E=1;_nop_();_nop_();E=0;}void writedata(data1){busytest();A=1;RW=0;_nop_();_nop_();LCD=data1;E=1;_nop_();_nop_();E=0;mdelay(20);}void display(int a,int b,char *c){int n;for(n=0;n<=15;n++){writevalue(a); //列(页)设置_nop_();_nop_();_nop_();writevalue(b); //行设置高四位_nop_();_nop_();_nop_();writevalue(0x00+n); //行设置低四位_nop_();_nop_();_nop_();writedata(c[n]);mdelay(20);writevalue(a+1); //列(页)设置_nop_();_nop_();_nop_();writevalue(b); //行设置高四位_nop_();_nop_();_nop_();writevalue(0x00+n); //行设置低四位_nop_();_nop_();_nop_();writedata(c[n+16]);mdelay(20);}}main(){writevalue(0xaf); //显示开writevalue(0xa1); //正显示while(1){display(0xB1,0x10,bao);display(0xB1,0x11,gang);display(0xB1,0x12,ji);display(0xB1,0x13,tuan);display(0xB1,0x14,wan);display(0xB1,0x15,teng);display(0xB1,0x16,gong);display(0xB1,0x17,si);display(0xB5,0x13,wu);display(0xB5,0x14,di);}}HDG12864L-3语句说明:(1):显示器开关 1 0 1 0 1 1 1 0(1) 0为关1为开,使用前必须用次命令开启12864(2):设置开始行 0 1 * * * * * * * 为开始行地址,共64行可设置,是竖直方向的,无特殊情况可以不用。

9--12864液晶显示原理+电路图+程序

9--12864液晶显示原理+电路图+程序

带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

基本特性:l低电源电压(VDD:+3.0--+5.5V)l显示分辨率:128×64点l内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)l内置128个16×8点阵字符l2MHZ时钟频率l显示方式:STN、半透、正显l驱动方式:1/32DUTY,1/5BIASl视角方向:6点l背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 l通讯方式:串行、并口可选l内置DC-DC转换电路,无需外加负压l无需片选信号,简化软件设计l工作温度:0℃-+55℃,存储温度:-20℃-+60℃模块接口说明*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

2.2并行接口管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC 3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5R/W(SID)H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线是用于模块屏幕显示开和关的控制。

LCD12864原理与应用(源程序+原理图+proteus仿真)

LCD12864原理与应用(源程序+原理图+proteus仿真)

LCD12864原理与应用1、LCD12864简介:LCD12864分为两种,带字库的和不带字库的,不带字库的液晶显示汉字的时候可以选择自己喜欢的字体。

而带字库的液晶,只能显示GB2312字体,当然也可以显示其他的字体,不过是用图片的形式显示。

下面介绍不带字库的LCD12864,以Proteus中的AMPIRE128×64为例,如下图所示,它的液晶驱动器为KS0108。

引脚符号状态引脚名称#功能CS1,CS2输入芯片片选端,都是低电平有效CS1=0开左屏幕,CS1=1关左屏幕CS2=0开右屏幕,CS2=1关右屏幕RS输入。

数据/命令选择信号RS=1为数据操作,RS=0为写指令或读状态RW输入读写选择信号R/W=1为读选通,R/W=0为写选通E/输入读写使能信号在E下降沿,数据被锁存(写)入液晶,在E高电平期间,数据被读出DB0—DB7三态数据总线数据或指令的传送通道。

RST 输入复位信号,低电平时复位复位时,关闭液晶显示,使显示起始行为0,可以跟单片机的复位引脚RST相连,也可以直接接VCC,使之不起作用V0#液晶显示器驱动电压-Vout-10V LCD驱动负电压分为左右两个屏幕显示,总共为128*64个点(即有128×64个点)。

这就是为什么AMPIRE128*64有CS1和CS2两个片选端的原因。

此液晶有8页,一页有8行点阵点,左右各64列,共128列。

如下图所示:2、LCD12864中的几条重要指令】(一)行(line)设置命令:由此可见显示的起始行地址为0XC0,共64行,有规律地改变起始行号,可以实现滚屏效果。

(二)页(page)设置指令:起始页地址为0XB8,因为液晶有64行点,分为8页,每页就有8行点。

(三)列(column)地址设置指令!每块驱动器的列地址都是从0X40到0X7F,共64列,所以此液晶共有128列点。

(四)读状态指令!3、用LCD12864显示汉字(一)由于这块液晶不带字库,我们就要自己编写字库,编写字库所用的字模提取软件为Zimo21(软件下载地址,LCD1602显示自定义字符的时候也是用它。

12864液晶原理及程序电路图

12864液晶原理及程序电路图

12864液晶原理+程序+ 照片+电路图一;12864(带字库汉字显示演示程序);*************************************************************************** ;* sxj1974@ (51c51 test web) *;* Create by :石学军 更多例程请登陆网站 *;***************************************************************************RS EQU P2.0RW EQU P2.1E EQU P2.2PSB EQU P2.3RST EQU P2.5;-----------------------------------------------LCD_X EQU 30HLCD_Y EQU 31HCOUNT EQU 32HCOUNT1 EQU 33HCOUNT2 EQU 34HCOUNT3 EQU 35H;----------------------------------------------- LCD_DATA EQU 36HLCD_DATA1 EQU 37HLCD_DATA2 EQU 38HSTORE EQU 39H;----------------------------------------------- ORG 0000HLJMP MAINORG 0100H;----------------------------------------------- MAIN:MOV SP,#5FHCLR RST ;复位LCALL DELAY4SETB RSTNOPSETB PSB ;通讯方式为8位数据并口;********************初始化********************** LGS0: MOV A,#34H ;34H--扩充指令操作LCALL SEND_IMOV A,#30H ;30H--基本指令操作LCALL SEND_IMOV A,#01H ;清除显示LCALL SEND_IMOV A,#06H ;指定在资料写入或读取时,光标的移动方向LCALL SEND_I ;DDRAM 的地址计数器(AC)加1MOV A,#0CH ;开显示,关光标,不闪烁LCALL SEND_I;=============================================== TU_PLAY1:MOV DPTR,#TU_TAB1 ;显示图形LCALL PHO_DISPLCALL DELAY3;================================================= ;;显示汉字和字符;加入80ms的延时,使你能够看清楚显示的过程;根据汉字显示坐标分段写入(顺序写入);================================================= HAN_WR2:LCALL CLEAR_PHAN_WR2A:MOV DPTR,#TAB1A ;显示汉字和字符MOV COUNT,#10H ;地址计数器设为16。

LCD12864的原理分析以及使用方法(含代码分析)

LCD12864的原理分析以及使用方法(含代码分析)

LCD12864液晶显示模块的使用与分析(函代码分析)一、LCD12864功能应用LCD12864液晶显示模块能显示中文汉字、数字、字符,能显示数字与字符的个数为64个(4行,每行16个数字或字符),能显示汉字的个数为32个(4行,每行8个汉字)。

其内置了8192个中文汉字(16*16的点阵)、128个字符(8*16点阵)、以及64*256 点阵显示RAM(GDRAM)。

图1外观尺寸图图2外观尺寸图图3 LCD12864读操作时序图4 LCD12864写操作时序二、LCD12864主要技术参数(1)工作电压:3.3V-5.5V,模块最佳电压为5V。

(2)可以在显示界面显示数字、字母和中文汉字。

(3)与外部单片机的通信方式有并行或串行两种通信方式,这里主要介绍并行通信方式。

(4)显示内容:128 列× 64 行(5)显示颜色:黄绿/蓝屏/灰屏(6)LCD 类型:STN(7)与MCU 接口:8 位或4 位并行/3 位串行(8)配置LED 背光(9)多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等三、LCD12864液晶显示的电路用法分析图5 LCD12864电路连接图图6 LCD12864电路连接图LCD12864模块主要用来显示所要的界面信息或数据,所以要求能显示汉字,字符和数字,而LCD12864满足系统要求的显示功能。

LCD12864在显示字母和数字时,是4*16的显示字符模块,即可以显示4行,每行可以显示16个字母或数字;在显示汉字时,是4*8的汉字显示模块,即可以显示4行,每行可以显示8个汉字。

下面进行介绍的是并行通信的显示方式。

按照电路原理图跟单片机最小系统进行连线,如图6所示。

LCD12864共有20个引脚,其引脚具体功能如表1所示,由表可得LCD12864引脚组成为8位数据传输端口(DB0-DB7);两个电源引脚(VCC,GND);两个电源背光引脚(BLK,BLA),控制LCD的背景亮度;一个VO引脚,外接一个上拉电阻(控制LCD12864的字符对比度,让字符更加的清晰可见);RST复位引脚,低电平有效,此处直接接高电平;第16、17位空引脚,不用管;剩下的RS,RW,EN 和PSB四个引脚则跟LCD12864的写入息息相关,通过PSB可以控制LCD12864跟单片机的通信方式,输入高电平,则LCD12864跟单片机的通信模式为并行通信,低电平则为串行通信。

lcd12864液晶屏原理图

lcd12864液晶屏原理图

lcd12864 液晶屏原理图液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。

以往的测控仪器的显示部分大都采用LED 式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。

而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。

液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。

以往的测控仪器的显示部分大都采用LED 式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。

而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。

lcd12864 带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128&TImes;64,内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符集。

利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8&TImes;4 行16&TImes;16 点阵的汉字。

也可完成图形显示。

低电压低功耗是其又一显着特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

LCD12864(串口)显示程序

LCD12864(串口)显示程序

LCD12864(串口)显示程序#ifndef jh_f330#define jh_f330#include#endiftypedef unsigned char uint8;typedef unsigned int uint16;/*************端口配置**************/sbit LCD_CS = P0^4; //片选信号,低电平有效sbit LCD_RST = P0^3; //复位信号,低电平有效sbit LCD_A0 = P0^2; //数据、指令选择,H:数据、L:指令sbit LCD_DAT = P1^0; //串行输入数据引脚sbit LCD_CLK = P1^1; //串行时钟输入引脚uint8 code word1[]={0x04,0x44,0x84,0x04,0xE4,0x1F,0x84,0x44,0xA4,0x3F,0xA4,0x A4,0x64,0x06,0x04,0x00,0x20,0x10,0x09,0x04,0xFF,0x04,0x04,0x14,0x26,0x05,0x84,0xFF,0x04,0x06,0x04,0x00 };/**********预定义数据*********/#define LCD_X 128-1 //屏幕的X轴的物理宽度#define LCD_Y 64-1 //屏幕的Y轴的物理宽度/***********LCD指令集***************///LCD开关命令#define LCD_ON() Wr_Com(0xaf)#define LCD_OFF() Wr_Com(0xae)//设置显示起始行#define LCD_START_LINE 0x40 //起始行地址为,0x40+(0-63)//页地址设置#define LCD_Page 0xb0 //页地址为:0xb0+(0-8)//列地址设置#define LCD_Ad_H 0x10 //列高四位地址:0x10+()#define LCD_Ad_L 0x00 //列低四位地址:0x00+()//行列地址方向设置#define ADC_Norm() Wr_Com(0xa0);#define ADC_Reve() Wr_Com(0xa1);#define Com_Norm() Wr_Com(0xc0);#define Com_Reve() Wr_Com(0xc8);void Init_f330(){/*****内部振荡器配置******/OSCICL=OSCICL+4; //设置系统时钟为24MHZ,ΔT=(0.005*ΔOSCICL)/fbase // OSCICL=OSCICL+22; //设置系统时钟为22.1184MHZ// OSCICL=OSCICL+45; //设置系统时钟为20MHZ //15MHZ--24.5MHZ/********设置分频*********/// OSCICN|=0x00; //设置时钟为八分频,OSCIN复位值为1100000//00:8分频,01:4分频,10:2分频,11:不分频// OSCICN|=0x01; //设置系统时钟4分频// OSCICN|=0x02; //设置系统时钟2分频OSCICN|=0x03; //设置系统时钟不分频// RSTSRC=0x04;// OSCLCN = 0x82; // 设置内部L-F振荡器为40kHZ// CLKSEL = 0x02; // 内部低频振荡器while(OSCLCN&0x40 == 0); // 等待振荡器频率稳定/*****设置看门狗*****/PCA0MD &=~0x40; // 禁止看门狗定时器EA=1;/*****端口初始化******/P0MDIN = 0xff; //复位值为11111111P1MDIN = 0xff; //1为数字输入,0为模拟输入P0MDOUT = 0xff; //复位值为11111111P1MDOUT = 0xff; //1为推挽输出,0为漏极输出XBR0 = 0x00; // 交叉开关使能XBR1 = 0x40; //交叉开关允许,T0接到引脚//XBR1 = 0x48; // ECI连到端口引脚//XBR1 |= 0x08; // PCA0 外部计数输入使能}/***************************************功能:LCD串行写入数据程序**输入:8位数据**输出:无************************************/ void Wr_Dat(uint8 dat) {uint8 Num;LCD_CS = 0; //选通芯片LCD_A0 = 1; //写数据for(Num=0;Num<8;Num++){if((dat&0x80) == 0) LCD_DAT = 0;else LCD_DAT = 1;dat = dat << 1;LCD_CLK = 0;LCD_CLK = 1;}LCD_CS = 1;}/***************************************函数名称:Wr_Com()**功能:LCD串行写入命令程序**输入:8位数据**输出:无************************************/ void Wr_Com(uint8 com) {uint8 Num;LCD_CS = 0; //选通芯片LCD_A0 = 0; //写入命令for(Num=0;Num<8;Num++){if((com&0x80) == 0) LCD_DAT = 0;else LCD_DAT = 1;com = com << 1;LCD_CLK = 0;LCD_CLK = 1;}LCD_CS = 1;}/***************************************功能:LCD全屏显示数据程序**输入:8位数据**输出:无************************************/void LCD_Fill(uint8 dat){uint8 page;uint8 colume;for(page=0;page<8;page++)Wr_Com(LCD_Page+page);Wr_Com(LCD_Ad_H);Wr_Com(LCD_Ad_L);for(colume=0;colume<lcd_x;colume++)< p="">Wr_Dat(dat);}}/***************************************函数名称:LCD_Clear()**功能:LCD清屏程序(全屏填充0x00)**输入:8位数据**输出:无************************************/void LCD_Clear(){LCD_Fill(0x00);}/******************************************************* ** 函数名称: LCD12864_Init** 功能: LCD1286初始化程序** 输入: 无TimeDelay ** 输出: 无********************************************************/ void TimeDelay(int Time){int i;while(Time > 0){for(i = 0;i < 8000;i++){Time --;}}void LCD_Init(void){LCD_RST=0;TimeDelay(200);LCD_RST=1;TimeDelay(200);ADC_Norm();Com_Reve();Wr_Com(0xa2);Wr_Com(0x2c); //vc onTimeDelay(200);Wr_Com(0x2e); //vr onTimeDelay(200);Wr_Com(0x2f); //internal booster,follower,divided onWr_Com(0x24); //set rb/ra=5.29Wr_Com(0x81); //set reference voltage selectWr_Com(0x1d);LCD_ON();Wr_Com(LCD_START_LINE);}/************************************************************** *********函数名称:LCD_Word()**功能:输入单个汉字(16x16符号)**输入:页地址,列地址、字符数组**输出:无*************************************************************** ********/ void LCD_Word(unsigned char row,unsigned char colume,unsigned char *pword){unsigned char page= row;unsigned char col_high=colume>>4;unsigned char col_low =colume&0x0f;unsigned char i;Wr_Com(LCD_Page+page);Wr_Com(LCD_Ad_H+col_high);Wr_Com(LCD_Ad_L+col_low);for(i=0;i<16;i++){Wr_Dat(*(pword+i));}Wr_Com(LCD_Page+page+1);Wr_Com(LCD_Ad_H+col_high);Wr_Com(LCD_Ad_L+col_low);for(i=0;i<16;i++){Wr_Dat(*(pword+16+i));}main(){Init_f330();LCD_Init();LCD_Clear();LCD_Word(1,1,word1);while(1);}</lcd_x;colume++)<>。

12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法液晶简介液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。

点阵式图形液晶显示屏是 LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。

12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。

分为两种,带字库的和不带字库的。

不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。

带字库的LCD提供字库字模,但是只能显示GB2312的宋体。

各有优缺点,根据不同应用场景灵活选择。

其液晶模块原理图如下所示。

12864LCD点阵图形液晶模块原理框图下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。

如下表所示:12864LCD 的引脚说明管脚号管脚名称LEVER 管脚功能描述1GND 0 电源地2VCC+5.0V 电源电压3VLCD - 液晶显示器驱动电压4RS (D/I) H/LD/I=“H”,表示DB7∽DB0 为显示数据D/I=“L”,表示DB7∽DB0 为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR 或DR 6EN H/L R/W=“L”,E 信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM 数据读到DB7∽DB0 7DB0 H/L 数据线8DB1 H/L数据线9DB2 H/L 数据线10DB3 H/L 数据线11DB4 H/L数据线12DB5 H/L数据线13DB6 H/L数据线14DB7 H/L数据线15CS1 H/L H:选择芯片(右半屏)信号16CS2 H/L H:选择芯片(左半屏)信号17RET H/L复位信号,低电平复位18VEE -10VLCD 驱动负电压19LED+ - LED 背光板电源20LED- - LED 背光板电源12864LCD点阵图形液晶模块应用连接电路液晶驱动设置在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。

12864液晶程序+仿真图

12864液晶程序+仿真图

/**********************************************************12864是由两块64*64的液晶屏组成的。

当中页是通过自己去定义的。

**********************************************************/#include"reg51.h"#define uchar unsigned char#define uint unsigned intsbit lcdrst=P3^0;sbit cs2=P3^5;sbit cs1=P3^4;sbit e=P3^2;sbit rw=P3^3;sbit rs=P3^1;/************************************************代码:字模生成可以在取模软件生成。

方法是阴码列行式逆向************************************************/uchar code qin[]={0x04,0x04,0xC4,0x5F,0x54,0xF4,0x54,0x5F,0xC4,0x14,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,0x80,0x95,0x95,0x95,0x7F,0x55,0x55,0x95,0x60,0x1C,0x03,0x20,0x60,0x3F,0x00};// 勤uchar code mian[]={0x00,0xF0,0x2C,0x27,0xE4,0x34,0x2C,0xE4,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x40,0x21,0x11,0x0F,0x01,0x3F,0x41,0x49,0x44,0x43,0x40,0x44,0x48,0x47,0x70,0x00};//勉uchar code li[]={0x44,0x44,0xFC,0x44,0x44,0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x10,0x10,0x0F,0x08,0x48,0x40,0x45,0x44,0x44,0x7F,0x44,0x44,0x44,0x45,0x40,0x00};//理uchar code gong[]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00 }; //工uchar code xue[]={0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00};//学uchar code yuan[]={0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00};//院uchar code dian[]={0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};//电uchar code zi[]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00};//子uchar code cheng[]={0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00};//程uchar code tong[]={0x40,0x41,0xC6,0x00,0x00,0xF2,0x52,0x52,0x56,0xFA,0x5A,0x56,0xF2,0x00,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x5F,0x42,0x42,0x42,0x5F,0x4A,0x52,0x4F,0x40,0x40,0x00};//通uchar code xin[]={0x80,0x40,0x30,0xFC,0x07,0x0A,0xA8,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00};//信uchar codeban[]={0x42,0x42,0xFE,0x42,0x42,0xE0,0x00,0xFF,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x00,0x10,0x10,0x0F,0x88,0x49,0x20,0x18,0x07,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00};//班uchar code ling[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};//0uchar code ba[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};//8uchar code yi[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};//1uchar code kongge[]={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};//不显示任何内容uchar code kong[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //不显示任何内容uchar code huo[]={0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x02,0x40,0x20,0x18,0x10,0x00,0x00,0x00,0x00,0x80,0x41,0x20,0x10,0x0C,0x03,0x00,0x03,0x04,0x18,0x30,0x60,0x20,0x00,0x00};//火uchar code yun[]={0x40,0x40,0x44,0x44,0x44,0x44,0xC4,0xC4,0x44,0x44,0x46,0x46,0x64,0x60,0x40,0x00,0x00,0x20,0x70,0x38,0x2C,0x27,0x23,0x31,0x10,0x12,0x14,0x18,0x70,0x20,0x00,0x00};//云uchar code xie[]={0x00,0x22,0x3E,0x22,0x22,0xA2,0xFE,0x22,0x00,0xFE,0x02,0x22,0x5A,0x86,0x02,0x00,0x10,0x10,0x08,0x04,0x23,0x40,0x3F,0x00,0x00,0xFF,0x00,0x04,0x08,0x08,0x07,0x00};//邪uchar code shen[]={0x08,0x08,0x89,0xCE,0xA8,0x18,0x00,0xF8,0x48,0x48,0xFF,0x48,0x48,0xF8,0x00,0x00,0x02,0x01,0x00,0xFF,0x00,0x03,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00};//神/*************************************************延时函数**************************************************/void delay(uchar z){uchar i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}/********************************************检查状态*********************************************/void checkbusy(){uchar dat;rs=0; //数据\指令选择rw=1; //允许读do{P2=0x00; //清零P2口delay(5);e=1;dat=P2; //读P2口e=0;dat>>=7; //仅当第7位为0时才可操作(判别busy信号) }while(!(dat==0x00));}/*************************************写命令***********************************/void write_com(uchar com){checkbusy(); //检查是否忙rs=0; //写命令rw=0;P2=com;e=1;e=0;}/*************************************写数据***********************************/void write_data(uchar date){checkbusy(); //检查是否忙rs=1; //写数据rw=0;P2=date;e=1;e=0;}/*************************************显示汉字***********************************/void hanzi(uchar ye,uchar lie,uchar *daima){uchar i,j;for(i=0;i<2;i++){write_com(0xb8+ye+i); // ye页与ye+1页write_com(0x40+lie); //确定初始行for(j=0;j<16;j++){write_data(daima[i*16+j]); //写数据(汉字)}}}/*************************************显示数字***********************************/void shuzi(uchar ye,uchar lie,uchar *daima){uchar i,j;for(i=0;i<2;i++){write_com(0xb8+ye+i); // ye页与ye+1页write_com(0x40+lie); //确定初始行for(j=0;j<8;j++){write_data(daima[i*8+j]); //写数据(数字)}}}/***************************************清屏***************************************/void clearlcd(){uchar i,j;cs1=0; //清全屏有cs1=0 cs2=0 与无cs1=0 cs2=0 效果不同cs2=0;for(i=0;i<8;i++)write_com(0xb8+i);write_com(0x40);for(j=0;j<64;j++)write_data(0x00);}}/**************************************** 初始化LCD****************************************/ void init(){write_com(0x3e); //关显示delay(1);write_com(0x3f); //开显示write_com(0xc0); //行初始地址write_com(0xb8); //页初始地址write_com(0x40); //列初始地址}/**************************************** 显示数据****************************************/ void display()cs1=0; //左半屏cs1=0 cs2=1cs2=1;hanzi(0,0,qin);hanzi(0,16,mian);hanzi(0,32,li);hanzi(0,48,gong);cs1=1; //右半屏cs1=1 cs2=0cs2=0;hanzi(0,0,xue);hanzi(0,16,yuan);//hanzi(0,32,kongge); // 如果清屏时加上cs1=0 cs2=0则可以不用,否则要加上//hanzi(0,48,kongge);cs1=0;cs2=1;hanzi(2,0,dian);hanzi(2,16,zi);hanzi(2,32,gong);hanzi(2,48,cheng);cs1=1;cs2=0;hanzi(2,0,xue);hanzi(2,16,yuan);//hanzi(2,32,kongge);//hanzi(2,48,kongge); cs1=0;cs2=1;shuzi(4,0,ling); shuzi(4,8,ba);hanzi(4,16,tong); hanzi(4,32,xin); hanzi(4,48,gong);cs1=1;cs2=0;hanzi(4,0,cheng); shuzi(4,16,yi);hanzi(4,24,ban);//hanzi(4,40,kongge); shuzi(4,56,kong);cs1=0;cs2=1;hanzi(6,0,huo); hanzi(6,16,yun); hanzi(6,32,xie); hanzi(6,48,shen);cs1=1;cs2=0;//hanzi(6,0,kongge);//hanzi(6,16,kongge);//hanzi(6,32,kongge);//hanzi(6,48,kongge);}/**************************************** 主函数****************************************/ void main(){init();clearlcd();while(1){display();}}。

电子小设计液晶显示屏幕元器件基础知识LCD12864点阵型液晶介绍

电子小设计液晶显示屏幕元器件基础知识LCD12864点阵型液晶介绍

电子小设计液晶显示屏幕元器件基础知识LCD12864点阵型液晶介绍LCD12864点阵型液晶简介:12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4个(16×16点阵)汉字。

LCD12864点阵型液晶实物LCD12864 引脚介绍:管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD 5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏)信号16 CS2 H/L H:选择芯片(左半屏)信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED - LED背光板电源20 LED- - LED背光板电源LCD12864液晶屏幕原理图:LCD12864液晶屏幕原理图LCD12864液晶屏幕驱动程序://12864液晶操作口sbit rs = P1^0;sbit rw = P1^1;sbit en = P1^2;/*******12864驱动程序************///===========液晶写指令========== void writecommand(uchar command){checkbusy();rs=0;rw=0;en=1;P0=command; //液晶数据线P0en=0;}//============液晶写数据============ void writedata(uchar date){checkbusy();rs=1;rw=0;en=1;P0=date;en=0;}//=========液晶设置==========void lcdset(void){writecommand(0x30); //基本指令集writecommand(0x01); //清屏,DDRAM的地址归零writecommand(0x02); //地址归位writecommand(0x0c); //显示开,光标关,反白关writecommand(0x06); //DDRAM地址加1}//=========设置光标===========void cursor(uchar y,uchar x){uchar command = 0x80;writecommand(0x0f);//开光标闪烁if( y == 2)y = 3;else if(y == 3)y = 2;command |= (y-1) << 3;command = (x-1);writecommand(command);}//========字符显示=======void display(uchar y, uchar x, uchar *p){switch (y){case 1:writecommand(0x7f x); break; //液晶第一行case 2:writecommand(0x8f x); break; //0x90 (x-1) case 3:writecommand(0x87 x);break;case 4:writecommand(0x97 x);break;default:break;}while(*p)writedata(*p );}//=========显示数字=======void displayNumber(uchar y,uchar x,uchar number) {switch (number){//引号内数字为中文全角输入占据一个汉字位置case 0:display(y,x,'0');break;case 1:display(y,x,'1');break;case 2:display(y,x,'2');break;case 3:display(y,x,'3');break;case 4:display(y,x,'4');break;case 5:display(y,x,'5');break;case 6:display(y,x,'6');break;case 7:display(y,x,'7');break;case 8:display(y,x,'8');break;case 9:display(y,x,'9');break;default:break;}}void displaytime0(void) //静态数据{display(1, 2, '智能作息系统');display(2, 3, '年');display(2, 6, '月');display(3, 1, '星期');display(3, 8, '℃');display(4, 3, '-'); //全角输入display(4, 6, '-');}/*******12864主程序调用************/lcdset();delay(1000);lcdset(); //调用两次可以解决上电后液晶不能自动复位问题/*显示版本信息*/display(1,3,'welcome!');display(2,2,'智能作息系统');display(3,3,'版本1.0');display(4,1,'制作人: 马云');writecommand(0x01); //清屏LCD12864液晶屏幕显示效果:LCD12864液晶屏幕显示效果。

12864液晶屏幕使用说明及程序

12864液晶屏幕使用说明及程序

12864使用说明一、串/并接口1.1 串口接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。

1.2 并行接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。

二、模块主要硬件构成说明控制器接口信号说明:2.1、RS,R/W的配合选择决定控制界面的4种模式:2.2、E信号●忙标志BFBF 标志提供内部工作情况.BF=1 表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0 时, 模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF 读到DB7 总线,从而检验模块之工作状态.●字型产生ROM(CGROM)字型产生ROM(CGROM)提供8192 个此触发器是用于模块屏幕显示开和关的控制。

DFF=1 为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0 为关显示(DISPLAY OFF)。

DFF 的状态是指令DISPLAY ON/OFF 和RST 信号控制的。

●显示数据RAM(DDRAM)模块内部显示数据 RAM 提供 64×2 个位元组的空间,最多可控制 4 行 16 字(64 个字)的中文字型显示,当写入显示数据 RAM 时,可分别显示 CGROM 与CGRAM 的字型;此模块可显示三种字型,分别是半角英、数字型(16*8)、CGRAM 字型及 CGROM 的中文字型。

三种字型的选择,由在 DDRAM 中写入的编码选择,在0000H—0006H 的编码中(其代码分别是 0000、0002、0004、0006 共 4 个)将选择 CGRAM 的自定义字型,02H—7FH 的编码中将选择半角英数字的字型,至于A1 以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。

LCD12864显示程序(汇编语言)

LCD12864显示程序(汇编语言)

;实验目的:熟悉12864LCD的使用;12864LCD带中文字库;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“5”,公司传真“6”;硬件设置:;关断所有拨码开关。

#include<p16f877a.inc>;__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择#DEFINE RW PORTA,4 ;读/写选择#DEFINE E PORTA,3 ;使能信号#DEFINE PSB PORTA,2 ;并口/串口选择(H/L)#DEFINE RST PORTA,0 ;复位信号;-----------------------------------------------LCD_X EQU 30H ;页地址LCD_Y EQU 31H ;Y地址COUNT EQU 32H ;循环计数用COUNT1 EQU 33H ;循环计数用COUNT2 EQU 34H ;循环计数用POINT EQU 35H ;查表偏移地址POINT1 EQU 36H ;查表偏移地址POINT2 EQU 37H ;查表偏移地址TEMP EQU 38H ;临时寄存器TEMP1 EQU 39H ;临时寄存器;-----------------------------------------------ORG 0000H ;复位地址NOP ;ICD需要的空指令GOTO MAIN ;跳转到主程序;**********************主程序************************MAINBANKSEL TRISACLRF TRISA ;A口输出CLRF TRISD ;D口输出BANKSEL ADCON1MOVLW 06HMOVWF ADCON1 ;A口全为数字口CLRF STATUSBCF RST ;复位LCDCALL DELAY ;延时一段时间BSF RST ;清除复位信号NOPBSF PSB ;并口通讯;**************************初始化**********************MOVLW 30H ;基本指令操作CALL SEND_IMOVLW 01H ;清除显示CALL SEND_IMOVLW 06H ;指定在写入或读取时,光标的移动方向 CALL SEND_IMOVLW 0CH ;开显示,关光标,不闪烁CALL SEND_I;***********************显示汉字************************HAN_WR2CALL CLEAR_P ;清屏HAN_WR2A ;“深圳乾龙盛电子”MOVLW LOW(TAB1A)MOVWF POINTMOVLW HIGH(TAB1A)MOVWF POINT1 ;获取表格的首地址MOVLW 0eH ;数数据字节个数(7个汉字共14字节) MOVWF COUNTMOVLW 81H ;页地址CALL SEND_ICALL QUSHUHAN_WR2B ;“。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DB7X=8DB0∫ PAGE7DB74、设置列地址CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L H 列地址(0~63)功能: DD RAM 的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DD RAM进行读写操作后,Y 地址自动加一。

5、状态检测CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0H L BF L ON/OFF RST L L L L功能:读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。

BF=H:内部正在执行操作;BF=L:空闲状态。

RST=H:正处于复位初始化状态;RST=L:正常状态。

ON/OFF=H:表示显示关闭;ON/OFF=L:表示显示开。

6、写显示数据CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L H D7 D6 D5 D4 D3 D2 D1 D0功能:写数据到DD RAM,DD RAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。

D7-D0位数据为1表示显示,数据为0表示不显示。

写数据到DD RAM前,要先执行“设置页地址”及“设置列地址”命令。

7、读显示数据CODE:RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0H H D7 D6 D5 D4 D3 D2 D1 D0功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。

从DD RAM读数据前要先执行“设置页地址”及“设置列地址”命令。

六、接口时序1.写操作时序时序11.读操作时序时序2时序参数表:名称符号最小值典型值最大值单位E周期时间Tcyc1000nsE高电平宽度Pweh450 nsE低电平宽度Pwel450 nsE上升时间Tr 25 nsE下降时间Tf 25 ns九、读写模块程序举例● 写指令子程序(INST ) SETB E CLR D_I CLR R_W MOV P1, A CLR E RET● 写数据子程序(DATA ) SETB E SETB D_I CLR R_W MOV P1, A CLR E RET● 写一页显示RAM 数据(假设指令子程序为INST ,数据子程序为DATA ) MOV A , #0B8H LCALL INST ;置页地址为0页 MOV A , #40H LCALL INST ;置列地址为0列 MOV R2, #40H MOV R1, #00H MOV DPTR ,#ADDR LOOP :MOV A , R1 MOVC A , @A+DPTR LCALL DATA INC R1VEE ’V0第三脚VEE 第18脚可调10K(三极管内置)DJNZ R2, LOOP带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

基本特性:l 低电源电压(VDD:+3.0--+5.5V)l 显示分辨率:128×64点l 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)l 内置 128个16×8点阵字符l 2MHZ时钟频率l 显示方式:STN、半透、正显l 驱动方式:1/32DUTY,1/5BIASl 视角方向:6点l 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 l 通讯方式:串行、并口可选l 内置DC-DC转换电路,无需外加负压l 无需片选信号,简化软件设计l 工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

2.2并行接口管脚号管脚名称电平管脚功能描述1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线8 DB1 H/L 三态数据线控制。

DFF=1为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。

DFF 的状态是指令DISPLAY ON/OFF和RST信号控制的。

●显示数据RAM (DDRAM)模块内部显示数据RAM提供64×2个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H—0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。

●字型产生RAM(CGRAM)字型产生RAM提供图象定义(造字)功能, 可以提供四组16×16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。

●地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6——DB0中。

应用说明用带中文字库的128X64显示模块时应注意以下几点:①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。

②显示ASCII字符过程与显示中文字符过程相同。

不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。

③当字符编码为2字节时,应先写入高位字节,再写入低位字节。

④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。

如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。

指令执行的时间请参考指令表中的指令执行时间说明。

⑤“RE”为基本指令集与扩充指令集的选择控制位。

当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。

用51单片机应用于12864液晶显示程序(带字库汉字显示演示程序,可用于本站XL系列实验仪);12864(带字库汉字显示演示程序;*************************************************************************** ;* (51c51 test web) *;* Create by :石学军更多例程请登陆网站*;***************************************************************************RS EQU P2.0RW EQU P2.1E EQU P2.2PSB EQU P2.3RST EQU P2.5;-----------------------------------------------LCD_X EQU 30HLCD_Y EQU 31HCOUNT EQU 32HCOUNT1 EQU 33HCOUNT2 EQU 34HCOUNT3 EQU 35H;-----------------------------------------------LCD_DATA EQU 36HLCD_DATA1 EQU 37HLCD_DATA2 EQU 38HSTORE EQU 39H;-----------------------------------------------ORG 0000HLJMP MAINORG 0100H;-----------------------------------------------MAIN:MOV SP,#5FHCLR RST ;复位LCALL DELAY4SETB RSTNOPSETB PSB ;通讯方式为8位数据并口;********************初始化**********************LGS0:MOV A,#34H ;34H--扩充指令操作LCALL SEND_IMOV A,#30H ;30H--基本指令操作LCALL SEND_IMOV A,#01H ;清除显示LCALL SEND_IMOV A,#06H ;指定在资料写入或读取时,光标的移动方向LCALL SEND_I ;DDRAM 的地址计数器(AC)加1MOV A,#0CH ;开显示,关光标,不闪烁LCALL SEND_I;=============================================== TU_PLAY1:MOV DPTR,#TU_TAB1 ;显示图形LCALL PHO_DISPLCALL DELAY3;================================================= ;;显示汉字和字符;加入80ms的延时,使你能够看清楚显示的过程;根据汉字显示坐标分段写入(顺序写入);================================================= HAN_WR2:LCALL CLEAR_PHAN_WR2A:MOV DPTR,#TAB1A ;显示汉字和字符MOV COUNT,#10H ;地址计数器设为16。

相关文档
最新文档