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)。

ST7920控制器的lcd12864驱动程序头文件+6页+0[1].1M

ST7920控制器的lcd12864驱动程序头文件+6页+0[1].1M

P4=0x01;
}
/***************************************************************** (6)函数名称:ReadData12864() 读当前地址的DDRAM数据 *****************************************************************/ uchar ReadData12864(void) {
/***************************************************************
(5)函数名称:WriteData12864(uchar lcd_data)写数据
入口参数:lcd_data
返回参数:无
****************************************************************/
for(y=0;y<=31;y++) //注意:st7920用于lcd12864时,分上下两区,lcd_y依次从0到31,lcd_x从0到15
{
for(x=0;x<=7;x++)
{
GdramOff();
WriteCmd12864(0x80+y);
WriteCmd12864(0x80+x+i);
WriteData12864(0x00);
//接线说明
#define LCD_DATA
P5 //8 bit数据线 EN=P4^2 ,RW=P4^1 ,RS=P4^0
//初始化指令 #define CLEAR_LCD //#define AC_INIT //#define CURSE_ADD 体不动) #define FUN_MODE #define DISPLAY_ON #define DISPLAY_OFF //#define CURSE_DIR //#define SET_CG_AC //#define SET_DD_AC

12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

这个程序写得很好,自己也是看的别人写的很好的程序,但是它代码不够完整,注释不详细,经过自己的修改加以完善。

另外我发现很多的测试代码都没有附上测试代码效果图,在本人的代码下面有自己拍的效果图,填补不足之处。

自己在找资料的过程中花掉很多的财富值,如果大家看得起该代码请评五分加以下载,在下感激不尽!/*******************************************程序名称:12864液晶经典驱动程序(带中文字库)功能:12864测试程序修改作者:王程修改时间:2014年2月5日23:22:32********************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned int// P0 为数据口sbit LCD_RS=P2^0; //数据、命令选择端口sbit LCD_RW=P2^1; //液晶读写控制sbit LCD_EN=P2^2; //液晶使能控制sbit PSB = P2^4; //模式选择1为并行0为串行sbit RES = P2^5;//复位端口低电平复位,上电之前进行复位,为了稳定!unsigned char code DAT[] = "我爱我家"; //测试显示的汉字,下面的A为测试显示的英文/*******************************************函数名称:Delay_1ms (晶振为12M)功能:延时约1ms的时间参数:无返回值:无********************************************/void delay_1ms(uint x){uint i,j;for(j = 0;j < x;j++)for(i=0;i<110;i++);}/*******************************************函数名称:write_cmd功能:向液晶中写控制命令参数:cmd--控制命令返回值:无********************************************/void write_cmd(uchar cmd){uchar lcdtemp = 0;LCD_RS=0;LCD_RW=1;do //经典判忙方式,精简{LCD_EN=1;delay_1ms(2);lcdtemp = P0;LCD_EN=0;}while(lcdtemp & 0x80);LCD_RW=0;P0 = cmd;LCD_EN=1;delay_1ms(5);LCD_EN=0;}/*******************************************函数名称:write_data功能:向液晶中写显示数据参数:dat--显示数据返回值:无********************************************/ void write_data(uchar dat){uchar lcdtemp = 0;LCD_RS=0;LCD_RW=1;do //经典判忙方式{LCD_EN=1;delay_1ms(2);lcdtemp = P0;LCD_EN=0;}while(lcdtemp & 0x80);LCD_RS=1;LCD_RW=0;P0 = dat;LCD_EN=1;delay_1ms(5);LCD_EN=0;}/*******************************************函数名称:lcd_int功能:初始化液晶模块参数:无返回值:无********************************************/void lcd_int(void){delay_1ms(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式delay_1ms(1); //延时RES=0; //复位delay_1ms(1); //延时RES=1; //复位置高delay_1ms(10);write_cmd(0x30); //基本指令集delay_1ms(5);write_cmd(0x30); //基本指令集delay_1ms(5);write_cmd(0x08); // 地址归位delay_1ms(5);write_cmd(0x10); //光标设置delay_1ms(5);write_cmd(0x0c); //整体显示打开,游标关闭delay_1ms(5);write_cmd(0x01); //清除显示delay_1ms(5);write_cmd(0x06); //游标右移delay_1ms(5);write_cmd(0x80); //设定显示的起始地址delay_1ms(5);}函数名称:main功能:测试1602初始化函数模块参数:无返回值:无********************************************/void main(){uchar i;char *a = DAT;//使用指针,指向字符串地址lcd_int();write_data('A'); //每个显示都是用的两个字节,必须写两次write_data(' ');//再写一次,不然乱显示(如果不加就再显示一个别的字母)for(i=0;i<8;i++){write_data(*a);//将地址当作数据传给12864a++;//一个汉字传送两次,因为一个汉字占用两个字节,两次传完}write_cmd(0x90);//一行显示八个汉字,第一行0x80-87,第二行0x90开始a = DAT;for(i=0;i<8;i++){write_data(*a);a++;}while(1); //停住,不然重复的初始化显示,作为测试用}/*******************************************代码测试效果图片两两张由于曝光度影响,拍了两张********************************************/。

stm32驱动lcd12864程序

stm32驱动lcd12864程序

stm32驱动lcd12864程序预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制#include "12864.h"#include "sys.h"#include "delay.h"#include "usart.h"void p_out(void) //把PB命令端口配置成输出{rs();wr();en();psb();}void wr_outite_cmd(u8 cmd) //写命令{p_out();data_out(); //把PB数据端口配置成输出rs_out=0;wr_out=0;en_out=0;GPIOB->ODR=((GPIOB->ODR&0X00FF)|(cmd<<8));delay_ms(10);en_out=1;delay_ms(10);en_out=0;}void wr_outite_data(u8 dat) //写数据{p_out();data_out();rs_out=1;wr_out=0;en_out=0;GPIOB->ODR=((GPIOB->ODR&0X00FF)|(dat<<8)); //把dat 给PB高八位delay_ms(10);en_out=1;delay_ms(10);en_out=0;}void LCDClear(void){wr_outite_cmd(0x01); //显示清屏delay_ms(5);wr_outite_cmd(0x34); // 显示光标移动设置delay_ms(5);wr_outite_cmd(0x30); // 显示开及光标设置delay_ms(5);}void locate_x_y(u8 x,u8 y)//指定显示坐标{u8 x2=0;x2=x;if(y<1) y=1;if(y>4) y=4;x&=0x0f;switch(y){case 1:x2|=0x80;break;case 2:x2|=0x90;break;case 3:x2|=0x88;break;case 4:x2|=0x98;break;}wr_outite_cmd(x2);delay_ms(10);}void lcd_init(void){wr_outite_cmd(0x30);delay_ms(10);wr_outite_cmd(0x01);delay_ms(10);wr_outite_cmd(0x06);delay_ms(10);wr_outite_cmd(0x0c);delay_ms(10);}void DisInt(u8 x,u8 y,int fnum) //显示整型变量的函数,最多显示16位的整数。

LCD12864液晶中文说明书

LCD12864液晶中文说明书
液晶显示模块技术手册
J12864中文/JGD12864中文/FY12864ZW
特色:(1)模组背部自带10K3*3硬封可调电位器,可以调到理想对比度
(2)LED背光极性可调,JP4为液晶背光正负反接处,此模组背光为4颗LED灯,非普通背光
(3)模组自带原装三星正品防静电电容,抗干扰性更强C6C7C8
C固定为0
第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)
四、用户指令集
1、指令表1:(RE=0:基本指令集)
指令
指令码
说明
执行时间
(540
KHZ)
RS
RW
DB7
DB6
DB5
DB4
(4)串并口可通过两种方式调节1PSB脚控制2JP2短路到+
为并口短路到-为串口
(5)自改3.3V可通过JP3调节,默认接+级为5V,接-为3.3V,C4C5加极性电容即可型号
为106A14FH4,背光电阻33欧改成3.3欧
+
一、液晶显示模块概述
12864中文汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
RAM
1
1
D7
D6
D5
D4
D3
D2
D1
D0
从内部RAM读取资料
(DDRAM/CGRAM/IRAM/G
72us
72us
读取忙碌标志
(BF)和地址
0
1
BF

LCD12864驱动程序(带字库的)

LCD12864驱动程序(带字库的)
/*void delayuS(uchar buf)
{
while(buf--);
}*/
/***********忙检测********************/
void Busy()
{
DataPort=0xFF;
RS=0;
RW=1;
while (1)
{
E =1;
if (P0^7==0) break;
}
E=0;
}
void main(void)
{
TMOD=0x01; ///选择定时器模式
TR0=1; //开中断,并允许T0中断
ET0=1;
EA=1; //总开关
Init_LCቤተ መጻሕፍቲ ባይዱ();
Clear_LCD();
while(1);
}
void t0(void) interrupt 1 using 0
{
//delay(100);
/*void Line_Num(uchar k)
{
//uint l;
if(k>=128&&k<=135)l=1;
if(k>135&&k<=143) l=3;
if(k>143&&k<=151) l=2;
if(k>151&&k<=159) l=4;
}*/
/*******************逐行显示***************************************/
void Write_Data(uchar Data)
{
Busy();
RS=1;
RW=0;

FPGA控制LCD12864

FPGA控制LCD12864
begin
state <= SETFUNCTION;
LCD_D <= 8'bzzzzzzzz;
end
SETFUNCTION:
begin
state <= SETFUNCTION2;
LCD_D <= 8'h30; // 8-bit 控制界面,基本指令集动作
坛子里有很多单片机驱动LCD12864的代码,但用FPGA来驱动的比较少。
今天做了FPGA驱动LCD12864的实验,把代码发上来,与大家分享。
PS:仿佛这样的任务不适合用FPGA来做。
代码如下:
module LCD12864(
input CLK, //系统时钟输入
end
CLEAR:
begin
state <= SETMODE;
LCD_D <= 8'h01;
end
SETMODE:
begin
state <= SETDDRAM;
LCD_D <= 8'h06; // 输入方式设置: 数据读写后,地址自动加1,画面不动
if(!RST_N)
LCD_RS <= 1'b0;
else if(state == WRITERAM)
LCD_RS <= 1'b1;
else
LCD_RS <= 1'b0;
end
// State Machine
always @(posedge CLK_LCD or negedge RST_N)
6'd7: data_disp = "o"; // 容

51单片机 12864液晶显示程序

51单片机 12864液晶显示程序

/*========================LCD12864液晶并行驱动程序==========================程序名称:12864液晶驱动程序(并行模式)================================================= ===========================*/#include <at89x52.h>#define uchar unsigned char#define uint unsigned intuchar t,p;/********************************引脚定义***********************************/#define RS P1_0 //RS=0为执行指令;RS=1为执行数据;#define RW P1_1 //读写#define E P1_2 //使能#define PSB P1_3 //低电平(串口驱动);高电平(并口驱动)#define RST P1_4 //LCD复位/********************************定义数组***********************************/uchar code title[] = {"LCD 并行接口测试"}; uchar code website[]={"qwertyuioopplkjh"}; uchar code dig[]={"0123456789"};uchar code dig2[]={0,1,2,3,':'}; ///*******************************相关子程序**********************************/void Init_lcd(); //初始化液晶void lcd_busy(); //忙标志查询void delay100us(); //100us延时程序void write(uchar x,uchar Data); //写单字节函数void Show(uchar address,uchar L,uchar STR1[]); void Show_dig(uchar address,uint number);/*******************************延时子程序**********************************/void delay100(int n){unsigned char i;while(n--)for(i=0;i<100;i++);}/*******************************LCD 忙标志查询******************************/void lcd_busy(void){uchar busy;P0=0xff;RS=0;RW=1;do{E=1;busy=P0;E=0;}while(busy>0x7f);}/*****************************写指令或数据**********************************/void write(uchar x,uchar Data){lcd_busy(); //忙查询if(x==0){RS=0;RW=0; //写单字节命令字}else if(x==1){RS=1;RW=0; //写单字节数据}E=1;P0=Data;E=0;P0=0xff;}/*******************************初始化LCD **********************************/void Init_lcd(void){delay100(20); //启动等待,等LCM讲入工作状态PSB=1; //并口驱动模式RST=0;delay100(4);RST=1; // 复位LCDwrite(0,0x30); //8 位介面,基本指令集write(0,0x0c); //显示打开,光标关,反白关write(0,0x01); //清屏,将DDRAM的地址计数器归零}/*******汉字和字符显示,参数入口:Show(地址,显示宽度,汉字数组)************/void Show(uchar address,uchar L,uchar STR1[]) {uchar i;write(0,address);for(i=0;i<L;i++)write(1,STR1[i]);}/************纯阿拉伯数字显示,参数入口:Show_dig (地址,数字)**************/void Show_dig(uchar address,uint number){uchar shi,ge;shi=number/10;ge=number%10;write(0,address);delay100(20);write(1,dig[shi]);delay100(20);write(1,dig[ge]);}/************************************主程序**********************************/void main(void){Init_lcd();TMOD=0X01;TH0=0xdc;TL0=0x00;ET0=1;TR0=1;EA=1;P3_6=0;delay100(30);Show(0x83,4,"梁浩"); //写数组里的容write(0,0x0d);delay100(30);Show(0x90,16,"电子科技协会会长"); delay100(30);Show(0x88,16,"TEL "); //写英文delay100(30);while(1){Show_dig(0x99,p); //写实时数组}}void exter() interrupt 1{TH0=0xdc;TL0=0x00;t++;if(t==20){t=0;p++;}if(p==60)p=0;}/***************************************end****** *****************************/。

12864LCD屏驱动程序

12864LCD屏驱动程序

#include<reg51.h>#include<intrins.h>#define S2 0x08#define S4 0x02#define S5 0x01#define S6 0x10#define S47 0x08#define S48 0x04#define S49 0x02#define S50 0x01#define S52 0x08#define S54 0x02/*------ 接口逻辑定义区-------------*/#define E P3_6#define RW P3_1#define EL P3_2#define CS1 P3_3 /* E1: IC1 片选端,E2:IC2 */#define CS2 P3_4#define RESET P3_5 /* RW=0,写数据;RW=1;读数据处理*/#define RS P3_0 /* RS = 1 ,指向数据;RSCS1 = 0 ,指向命令寄存器*/ #define TT 2uchar code Bet1[]="No Best";uchar code Bet2[]="only Better";static uchar H2=0x31; /* 时钟驱动数据缓冲区*/static uchar H1=0x30;static uchar M2=0x33;static uchar M1=0x30;uchar CLK=0;bit Flag=0; /* AM & PM */bit BL_FG=0; /* BackLight *//*------------------------- 延时子程序--------- */void delay(uint times){while(times)times--;}/* -------------------------忙音检测--------------*/void CheckBF(bit CS) /* cs=0,检查IC1 CS=1检查IC2 */ {bit temp;RS=0;RW=1;if(CS)CS2=1;else CS1=1;do {EL=1;temp=P1_7;EL=0;}while(temp);CS1=0; /* 总线释放,芯片处高阻状态*/CS2=0;}/*-----------写命令···寄存器------ -----------*/void Wcode(bit CC1,uchar dd1) /* 选择芯片、数据*/{CheckBF(CC1);RS=0;RW=0;if(CC1)CS2=1;else CS1=1;P1=dd1;EL=1;delay(TT);EL=0; /* 写入指令*/CS1=0; /* 总线释放,芯片处高阻状态*/CS2=0;}/* -------写显示数据·····to DDRAM --------*/void Wdata(bit CC2,uchar dd2){CheckBF(CC2);RS=1;RW=0;if(CC2)CS2=1;else CS1=1;P1=dd2;EL=1;delay(TT);EL=0; /* 数据写入RAM */CS1=0; /* 总线释放,芯片处高阻状态*/CS2=0;}/* ------------------------------显示一幅图片128 *64 ------------*/ void DisMap(uchar *Imp){uchar m;uchar n;for(n=0;n<=7;n++){Wcode(0,(0xb8+n)); /* Setting Page 0 -- 7*/Wcode(1,(0xb8+n));Wcode(0,0x40); /* 列=0 */Wcode(1,0x40);for(m=0;m<64;m++){ Wdata(0,(*Imp)); Imp++; }for(m=0;m<64;m++){ Wdata(1,(*Imp)); Imp++; }}}/*---------- 写指令------*/void Wcode2(uchar order){delay(TT);RS=0;RW=0;P1=order;E=1;_nop_();E=0; /* 启动写信号*/}/*################# 写数据############*/void Wdata2(uchar Data){delay(TT);RS=1;RW=0;P1=Data;E=1;_nop_();_nop_();E=0; /* 启动写信号*/}/* -----------------------中断Timer0 : 时钟显示驱动------------------ */void CLOCK0(){M1++;if(M1==0x3a){ M2++;M1=0x30; }if(M2==0x36){ H1++;M2=0x30; }if(H1==0x3a){ H2++;H1=0x30; }if((H2==0x31)&(H1==0x32)){ H2=0x30; H1=0x30; Flag=!Flag; }/* ------------ 根据以上时钟数据驱动显示时钟!*/Wcode2(0x38); /* RE 正常模式*/if(H2==0x30) { Wcode2(0xdc); Wdata2(0x20); } // H2else { Wcode2(0xdc); Wdata2(0x31); }Wcode2(0xdd);Wdata2(H1); // H1Wcode2(0xde);Wdata2(M2); // M2Wcode2(0xdf);Wdata2(M1); // M1Wcode2(0x3e); /* 扩展模式,图标闪闪发光!*/Wcode2(0x79);Wdata2(S50);{if(Flag) { Wcode2(0x79); Wdata2(S49); }else { Wcode2(0x79); Wdata2(S48); }}}/* -----------------------中断Timer0 : 背光源驱动------------------ */void BL() interrupt 1 using 1{CLK++;if(CLK==100){EA=0; /* 禁止再中断入*/ET0=0;TR0=0;BL_FG=!BL_FG;/* --------------- 允许继续中断计时--------*/if(BL_FG){ P3_7=1; CLK=20; }else { P3_7=0; CLK=60; }TH0=0;TL0=0;EA=1; /* 禁止再中断入*/ET0=1;TR0=1;}}/*================================================================ */ /*=============================== 显示主程序==========*//*================================================================ */void main(){uchar i;uchar *IP;/* --------- 初始化地区------------------------------------------*/RESET=0;delay(8000);RESET=1; /* 软件复位*/CS1=0; /* 总线释放,芯片处高阻状态*/CS2=0;RESET=0;delay(8000);RESET=1; /* 软件复位*/CS1=0; /* 总线释放,芯片处高阻状态*/CS2=0;/* ----------------------------OPEN BACKLIGHT----------- */TMOD=0x11; /* 定义Timer0 为16 位定时器*/TH0=0x0;TL0=0x0;ET0=1;EA=1;TR0=1; /* 开始中断计时*/CLK=0x0; /* 首次触发时钟显示*//*--------------以下是GS-C803301 字符首页测试区-----------------------*/ Wcode2(0x01);Wcode2(0x38); /* RE 正常模式*/Wcode2(0xc); /* Display On , Cursor Off */Wcode2(0x6); /* 设定输入模式++ */Wcode2(0xc4);Wdata2('G');Wcode2(0xcc);Wdata2('E');Wcode2(0xcd);Wdata2('N');Wcode2(0xce);Wdata2('D');Wcode2(0xcf);Wdata2('A'); // display " Genda ";IP=Bet1;Wcode2(0x80);for(;*IP!='\0';IP++)Wdata2(*IP); // No BestIP=Bet2;Wcode2(0x90);for(;*IP!='\0';IP++)Wdata2(*IP); // Only Better/* --------------------------------------------------- 128 *64 Area ---*/ Wcode(0,0xb8); /* 设置页面Page= 0 */Wcode(1,0xb8);Wcode(0,0xc0); /* 设置显示首行地址=00 ,(00 --63) */ Wcode(1,0xc0);Wcode(0,0x40); /* 设置x 轴地址= 00 ,(00-63) */ Wcode(1,0x40);Wcode(0,0x3f); /* 开屏显示*/Wcode(1,0x3f);DisMap(Map2); /* 显示图片*/Wcode2(0x3e); /*display ":" */Wcode2(0x7d);Wdata2(0xff);while(1){CLOCK0();Wcode2(0x70); Wdata2(0xc0|S2);delay(60000); delay(60000); /* 显示图标*/delay(60000); delay(60000); delay(60000); delay(60000);Wcode2(0x70); Wdata2(0);delay(60000);Wcode2(0x71); Wdata2(0xc0|S6); delay(60000); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000); delay(60000); delay(60000);Wcode2(0x71); Wdata2(0);delay(60000);Wcode2(0x70); Wdata2(0xc0|S4); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000);delay(60000);Wcode2(0x70); Wdata2(0);delay(60000);Wcode2(0x70); Wdata2(0xc0|S5); delay(60000); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000);delay(60000);Wcode2(0x70); Wdata2(0);delay(60000);Wcode2(0x7a); Wdata2(0xc0|S52); delay(60000); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000); delay(60000);Wcode2(0x7a); Wdata2(0); delay(60000);if(Flag){Wcode2(0x79); Wdata2(0xc3);}else{Wcode2(0x79); Wdata2(0xc5);}delay(60000); delay(60000);delay(60000); delay(60000);if(Flag) { Wcode2(0x79); Wdata2(2); }else { Wcode2(0x79); Wdata2(4); }Wcode2(0x7a); Wdata2(0xc0|S54); delay(60000); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000);delay(60000);delay(60000);Wcode2(0x7a); Wdata2(0);delay(60000);for(i=0;i<13;i++) /* 全部点亮图标*/{Wcode2(0x70+i);Wdata2(0x3f);}if(Flag) { Wcode2(0x79); Wdata2(0x2); }else { Wcode2(0x79); Wdata2(0x4); }for(i=0;i<35;i++)delay(60000);for(i=0;i<13;i++) /* 全部Clear 图标*/{Wcode2(0x70+i);Wdata2(0x0);}if(Flag) { Wcode2(0x79); Wdata2(0x2); }else { Wcode2(0x79); Wdata2(0x4); }delay(60000); delay(60000);delay(60000); delay(60000);delay(60000); delay(60000);}} /* ----------------------程序到此结束啦!!*/。

lcd12864c语言编程详解

lcd12864c语言编程详解

12864系列点阵型液晶显示模块使用说明书一、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补充说明:外观尺寸可根据用户的要求进行适度调整。

二、最大工作范围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.75Vmin4、输出低电平(Vol):1.0Vmax5、工作电流:2.0mAmax四、接口说明12864-3A接口说明表五、指令描述1、显示开/关设置CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2DB1 DB0功能:设置屏幕显示开/关。

DB0=H,开显示;DB0=L,关显示。

不影响显示RAM(DD RAM)中的内容。

2、设置显示起始行CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2DB1 DB0功能:执行该命令后,所设置的行将显示在屏幕的第一行。

LCD12864液晶显示器中文说明

LCD12864液晶显示器中文说明

一、液晶显示模块概述12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128列× 64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等二、外形尺寸1.外形尺寸图2.主要外形尺寸项目标准尺寸单位模块体积113.0×65.0×12.8mm定位尺寸105.0×55.0mm视域73.4×38.8 mm行列点阵数128×64dots点距离0.52×0.52 mm点大小0.48×0.48 mm二、模块引脚说明128X64 引脚说明引脚号引脚名称方向功能说明1 VSS - 模块的电源地2 VDD - 模块的电源正端3 V0 - LCD驱动电压输入端4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号5 R/W(SID) H/L 并行的读写选择信号;串行的数据口6 E(CLK) H/L 并行的使能信号;串行的同步时钟7 DB0 H/L 数据08 DB1 H/L 数据19 DB2 H/L 数据210 DB3 H/L 数据311 DB4 H/L 数据412 DB5 H/L 数据513 DB6 H/L 数据614 DB7 H/L 数据715 PSB H/L 并/串行接口选择:H-并行;L-串行16 NC 空脚17 /RET H/L 复位低电平有效18 NC 空脚19 LED_A - 背光源正极(LED+5V)20 LED_K - 背光源负极(LED-OV)逻辑工作电压(VDD):4.5~5.5V电源地(GND):0V工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)三、接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MPU写资料到模块MPU从模块读出资料2、串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制—格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)四、用户指令集指令指令码说明执行时间(540KHZ)RSRWDB7DB6DB5DB4DB3DB2DB1DB清除显示0 0 0 0 0 0 0 0 0 1将DDRAM填满“20H”,并且设定DDRAM的地址计数器(AC)到“00H”4.6ms地址归位0 0 0 0 0 0 0 0 1 X设定DDRAM的地址计数器(AC)到“00H”,并且将游标移到开头原点位置;这个指令并不改变DDRAM的内容4.6ms进入点设定0 0 0 0 0 0 0 1 I/D S指定在资料的读取与写入时,设定游标移动方向及指定显示的移位72us显示状态开/关0 0 0 0 0 0 1 D C BD=1:整体显示ONC=1:游标ONB=1:游标位置ON72us游标或显示移位控制0 0 0 0 0 1S/CR/LX X设定游标的移动与显示的移位控制位元;这个指令并不改变DDRAM的内容72us功能设定0 0 0 0 1 DL XREX XDL=1 (必须设为1)RE=1:扩充指令集动作72us备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。

J12864中文液晶使用说明

J12864中文液晶使用说明

J12864中文液晶使用说明
一、硬件连接
二、软件设置
1.安装液晶库文件
将液晶库文件拷贝到单片机的编程环境中,以便在程序中调用相关函数。

2.初始化液晶
在程序的初始化函数中,调用液晶库提供的初始化函数,以初始化液晶参数和相关引脚。

三、显示中文字符
然后,在程序中调用液晶库中的函数,以显示中文字符。

通常的调用方式为:
lcd_draw_chinese(x, y, "你好");
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
-"你好":待显示的中文字符
四、显示英文字符和数字
显示英文字符和数字与显示中文字符类似,只是液晶库提供了额外的函数用于显示英文字符和数字。

调用方式如下:
显示英文字符:
lcd_draw_english(x, y, "Hello");
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
- "Hello":待显示的英文字符
显示数字:
lcd_draw_number(x, y, number);
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
- number:待显示的数字
五、显示图形
六、注意事项
2.操纵液晶模块时应轻拿轻放,避免撞击或扭曲。

3.在使用中文液晶时,应注意控制芯片ST7920的工作电压和时序要求。

4.如果需要显示中文字符,首先要将中文字库文件转换成液晶可识别的格式。

5.当在程序中使用液晶库进行液晶控制时,需注意调用顺序和参数的正确性。

总结:。

LCD12864液晶驱动编程指南

LCD12864液晶驱动编程指南

LCD12864液晶驱动编程指南
1.连接硬件:
2.初始化液晶:
在开始使用液晶之前,需要进行初始化。

初始化过程包括设置液晶的
工作模式、显示模式和其他参数。

通过向液晶发送一系列的指令,可以完
成初始化过程。

3.编写驱动程序:
液晶驱动程序的主要目的是将需要显示的内容以及液晶的控制指令发
送给液晶屏。

根据液晶屏的通信方式,可以采用单片机的IO口直接控制
液晶屏,也可以通过SPI或I2C等接口芯片间接控制。

4.显示图形:
5.显示文本:
除了图形外,液晶还可以显示文本。

可以通过设置显示位置和发送需
要显示的文本来实现。

6.更新显示:
当需要更新液晶上的内容时,可以通过重新设置显示的内容和刷新液
晶来实现。

可以定时刷新液晶,或者通过检测外部事件来触发刷新。

7.扩展功能:
除了基本功能外,还可以实现一些扩展功能,如显示动画、滚动显示、倒计时等。

只需要根据需求编写相应的代码即可实现。

总结:
注意事项:
在编写驱动程序时,需要注意及时更新液晶上的内容,避免频繁刷新导致的卡顿现象。

同时,为了保证程序的可移植性,可以将液晶驱动程序与其他功能模块进行分离,便于代码的维护和移植。

LCD12864中文说明书

LCD12864中文说明书
模式时起作用 1 开图标.此指令在退出睡眠 0xad - 模式时起作用
1 1 1 0 0 0 选择升压倍数:
0
0
0
0 2 位数设置 00:2 倍,3 倍,4 倍
升压倍数 01:5 倍
1பைடு நூலகம்:6 倍。
0xf8
(23) 省电模式
00
(Power save)
(24) 测试(Test) 0
省电模式,此非一条指令, 是由“(10)显示全部点阵”、 “(20)静态图标显示 关”等 指令合成一个“省电功能”。 详细看 IC 规格书“POWER SAVE” 1 1 1 1 * * * * 内部测试用,千万别用!
电话:0755-29784961

3
晶联讯电子
液晶模块 JLX12864G-086F-PN 更新日期:2012-12-17
模块的接口引脚功能
引线号 1 2 3
符号 ROM_IN ROM_OUT ROM_SCK
4
ROM_CS
5
LEDA
6
VSS
7
VDD
8
SCLK
9
名称
符号
测试条件
标准值
最小 典型值 最大
工作电压
VDD
选 3.3V 的产品 2.4 3.3
3.6
选 5.0V 的产品 4.0 5.0
5.5
背光工作电压 VLED
2.9 3.0
3.1
输入高电平 VIH
-
2.2
VDD
输入低电平 VI0
-
-0.3
0.6
输出高电平 VOH
IOH = 0.2mA 2.4
-
输出低电平 VO0
0 0 0 0 列地址的低 4 位

LCD12864驱动函数

LCD12864驱动函数
LCD_E = 0;
}
//写指令
void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC) ReadStatusLCD(); //根据需要检测忙
LCD_RS = 0;
LCD_RW = 0;
WriteCommandLCD((0x80+i),1); //行地址,下半屏,即第三行地址0X88
WriteCommandLCD(0x30,1);
for(y=0;y<16;y++)
WriteDataLCD(DData[tmp+y]);//读取数据写入LCD
tmp+=16;
case 2:X2|=0X90;break;
case 3:X2|=0X88;break;
case 4:X2|=0X98;break;
}
WriteCommandLCD(X2, 1); //发送地址码
while (DData[ListLength]>=0x20) //若到达字串尾则退出
/*屏幕闪动 */void LCDFlash(void);
/*显示一个字符*/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
/*显示一串字符*/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
{
unsigned char ListLength,X2;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、显示图片
显示图片和显示汉字的原理是一样的, 只不过是大小的问题! 现在我们就以一张 128*64 分辨率的图片进行取模。 取模图片:
现在我们主要看一下显isplay_BMP(uchar a[][64])//显示图形的左边部分 { uchar i,j; for(j=0;j<8;j++) { SelectScreen(1); Set_page(j); Set_column(0); for(i=0;i<64;i++) //显示左屏 { write_LCD_data(a[2*j][i]);//每隔一行取一次数组中的数据 } SelectScreen(2); Set_page(j); Set_column(0); for(i=0;i<64;i++) //显示右屏 { write_LCD_data(a[2*j+1][i]);//每隔一行取一次数组中的数据 } } } 取出图片的数据是二维数组形式!注意,液晶是先显示左半屏,再显示右半屏, 但 是取数组中的元素是逐个往下取出的, 所以是对于一个半屏而言, 每隔一行取数组中的元素, 而隔去的那一行是另一个半屏要取的数据!这一点一定要注意。 还有一点要补充的就是,这个取模软件只能识别 BMP 和 ICO 格式的单色图片,如果我 们选择的图片不是 128*64 大小的话, 可以通过软件将其改成 128*64 大小的, 如果我们直接 用软件取模的话,显示的会是乱码,解决办法是我们可以通过 windows 自带的画图工具, 什么也不做修改,将大小设置好的图片另存为 BMP 单色文件就行了,然后再用取模软件取 模就 OK 了,=^_^ = !算了,给大家截个图
LCD_databusrite_LCD_command(column);//列位置 } void SetOnOff(uchar onoff) //显示开关 函数:0x3E 是关显示,0x3F 是开显示 { onoff=0x3e|onoff; //0011 111x,onoff 只能为 0 或者 1 write_LCD_command(onoff); } void SelectScreen(uchar screen) //选屏 { switch(screen) { case 0: CS1=0;CS2=0;break; //全屏 case 1: CS1=0;CS2=1;break;//左半屏 case 2: CS1=1;CS2=0;break;//右半屏 default:break; } } void ClearScreen(uchar screen) { uchar i,j; SelectScreen(screen); for(i=0;i<8;i++)//控制页数 0-7,共 8 页 { Set_page(i); Set_column(0); for(j=0;j<64;j++) //控制列数 0-63,共 64 列 { write_LCD_data(0x00); //写入 0,地址指针自加 1 } } } void InitLCD() { Read_busy(); SelectScreen(0); SetOnOff(0); //关显示 SelectScreen(0); SetOnOff(1); //开显示 SelectScreen(0); //LCD 的初始化 } void main() { InitLCD(); ClearScreen(0); Set_line(0); Display(1,0,2*16,huan);//欢 Display(1,0,3*16,ying);//迎 Display(2,0,0*16,fang);//访 Display(2,0,1*16,wen);//问 Display(1,2,0*16,da);//大 Display(1,2,1*16,hai);//海 Display(1,2,2*16,xiang);//橡 Display(1,2,3*16,shu);//树 Display(2,2,0*16,bai);//百 Display(2,2,1*16,du);//度 Display(2,2,2*16,kong);//空 Display(2,2,3*16,jian);//间 While(1); } //初始化 //清屏 //显示开始行 } //清屏 据输出 { write_LCD_data(p[i+16]); //汉字的下半部分 上半部分 } Set_page(page+1); //写下半页 Set_column(column); for(i=0;i<16;i++) //控制列 //控制 16 列的数 } void Display(uchar ss,uchar page,uchar column,uchar *p) { uchar i; SelectScreen(ss); Set_page(page); for(i=0;i<16;i++) 的数据输出 { write_LCD_data(p[i]); //汉字的 //写上半页 //控制 16 列 Set_column(column); //控制列 //显示汉字 ClearScreen(0);//清屏 Set_line(0); //开始行:0
再介绍一下其他的几个重要指令: 指令一、行设置命令 RW 0 RS 0 DB7 1 DB6 1 DB5 X DB4 X DB3 X DB2 X DB1 X DB0 X
由此可见其显示的其实行为 0xC0,有规律的改变起始行号,可以实现滚屏的效果 指令二、页(page)设置指令 RW 0 RS 0 DB7 1 DB6 0 DB5 1 DB4 1 DB3 1 DB2 X DB1 X DB0 X
ห้องสมุดไป่ตู้
LCD1
A M P IR E 1 2 8X64
引脚功能:
18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
-Vout RST DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 E R/W RS V0 VCC GND CS2 CS1
1
与带字库液晶不同,此块液晶中含有两个液晶驱动器,一块驱动器控制 64*64 个点, 左 右显示,这就是为什么 AMPIRE128*64 引脚有 CS1 和 CS2 的原因。学习液晶主要看的它的 指令系统,再次先说明一下“页”的概念,此液晶有 8 页,一页有 8 行。68/8=8;,我们可以通过改变页的地址的变化实现 LCD 滚屏的效果,大家可以试一下, 很简单! 如果单片机容量够的话,可以做个电子书,呵呵!显示汉字部分就介绍到这里,那么 显示汉字会了,显示一张图片就简单了!接下来介绍怎样显示图片!
� 无字库型 LCD12864
首先介绍下不带字库的 LCD12864 ,现就以 Proteus 中的 LCD12864 为例进行讲解, Proteus 中 AMPIRE128*64,如下图所示,该液晶驱动器为 KS0108,我在网上搜了好就都没 找到它的 datasheet,不过我们可以找到类似的芯片的手册,它的控制逻辑和 HD61202 是类 似的,我们可以网上下载它的 datasheeCS2 的屏幕选择说明 CS1 0 0 1 1 注:CS1 和 CS2 均为低电平有效 CS2 0 1 0 1 选屏 全屏 左半屏 右半屏 不选
一、显示汉字
由于这块液晶补带字库我们就要自己编写字库,编写字库的软件还是 Zimo21,LCD1602 显示自定义字符的时候用的也是它。 不过在取模之前我们要进行一些设定, 根据此液晶显示 显示的原理,设置如下:(若不是这样,取模的数据将不是我们想要的,将会出现乱码!)
起始页为 0xB8 显示的 RAM 共 64 行,分为 8 页,每页有 8 行,刚才在上面已经讲过。 指令三、列(Y address)地址设置指令 RW 0 RS 0 DB7 0 DB6 1 DB5 X DB4 X DB3 X DB2 X DB1 X DB0 X
第一列为 0x40 一直到 0x7F 共 64 列,因为此液晶有 128 列,所以有两块驱动芯片驱动。 指令四、读状态指令 RW 1 RS 0 DB7 Busy DB6 0 DB5
在此我选择楷体小四号字体,效果如下图所示:(小四号字体大小为 16码:
/****/echoas****** 程序:LCD12664 液晶显示原理 内容:显示汉字 学习板:Proteus 仿真图 液晶:AMPIRE128X64(无字库) 软件:keil uVision3 作者:大海橡树 整理日期:2010-12-02 ******/echoas****/ #include <AT89X52.h> #include <intrins.h> #include"ZK.h" //中文字库 #define uchar unsigned char #define uint unsigned int #define LCD_databus P0 //LCD8 位数据口 uchar num; sbit RS=P2^2; sbit RW=P2^1; sbit EN=P2^0; sbit CS1=P2^4; 控制左半屏 sbit CS2=P2^3; 控制右半屏 void delay(uint i) { while(--i); } void Read_busy()//读“忙”函数-----数据 线的最高位 DB71 则 busy { P0=0x00; RS=0; RW=1; EN=1; while(P0 & 0x80); EN=0; } void write_LCD_command(uchar value) { Read_busy();//每次读写都要忙判断 RS=0; RW=0; //选择命令 //读操作 值为 64 column= 0x40|column; //列的首地 void Set_column(uchar column) 显示的列 { column=column &0x3f; //列的最大 //设置 } void Set_line(uchar startline) //设置 显示的起始行 { startline=0xC0|startline; 行地址为 0xC0 write_LCD_command(startline); //设置 从哪行开始:共 0--63;一般从 0 行开始显示 //起始 } 0xB8 write_LCD_command(page); //片选 1 低电平有效, //RS 为 0 命令;1 数据 //RW 为 1--写;0--读 //使能端 //片选 1 低电平有效, void Set_page(uchar page)//设置“页” LCD12864 共 8 页,一页是 8 行点阵点 { page=0xb8|page; //页的首地址为 } 效数据 _nop_(); _nop_(); EN=0; void write_LCD_data(uchar value)//写数 据函数 { Read_busy(); RS=1; RW=0; LCD_databus=value; EN=1; //EN 由 1----0 锁存有 //选择数据 } EN=1; _nop_(); _nop_(); EN=0; //EN 由 1----0 锁存有效数据
相关文档
最新文档