玩转12864液晶(1)--显示字符
12864液晶汉字显示

程序:#include<A T89X52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define LCD_databus P0sbit RS=P2^2; /*复位信号*/sbit RW=P2^1; /*读/写选择*/sbit EN=P2^0; /*读/写使能*/sbit CS1=P2^4; /*片选1*/sbit CS2=P2^3; /*片选2*/void delay(int x) /*延时程序*/{while(x--);}void Read_busy() /*状态检查,LCD是否忙*/{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;LCD_databus=value;EN=1;_nop_();_nop_();EN=0;}void write_LCD_data(uchar value) /* 根据时序图写程序*/ {Read_busy();RS=1;RW=0;LCD_databus=value;EN=1;_nop_();_nop_();EN=0;}void Set_page(uchar page) /* 选择页,页地址起始0xb8*/ {page=0xb8|page;write_LCD_command(page);}void Set_line(uchar startline) /* 选择行,页地址起始0xc0*/ {startline=0xc0|startline;write_LCD_command(startline);}void Set_column(uchar column) /* 选择列,页地址起始0x3f*/ {column=column&0x3f;column=0x40|column;write_LCD_command(column);}void Setonoff(uchar onoff){onoff=0x3e|onoff;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++){Set_page(i);Set_column(0);for(j=0;j<64;j++){write_LCD_data(0x00);}}}void initLCD() /* 液晶初始化*/{Read_busy();SelectScreen(0);Setonoff(0);SelectScreen(0);Setonoff(1);SelectScreen(0);ClearScreen(0);Set_line(0);}void Display(uchar ss,uchar page,uchar column,uchar *p) /* 显示*/{uchar i;SelectScreen(ss);Set_page(page);Set_column(column);for(i=0;i<16;i++){write_LCD_data(p[i]);}Set_page(page+1);Set_column(column);for(i=0;i<16;i++){write_LCD_data(p[i+16]);}}unsigned char code chong[]={/*-- 文字: 重--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x08,0x0A,0xEA,0xAA,0xAA,0xAA,0xFE,0xAA,0xAA,0xA9,0xF9,0x29,0x0C,0x08,0x00, 0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,0x4A,0x4A,0x4A,0x4B,0x48,0x60,0x40,0x00};unsigned char code qing[]={/*-- 文字: 庆--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0x45,0xFE,0x44,0x44,0x44,0x66,0x44,0x00,0x00,0x40,0x20,0x9F,0x80,0x40,0x20,0x18,0x06,0x01,0x06,0x18,0x20,0x40,0xC0,0x40,0x00};unsigned char code wen[]={/*-- 文字: 文--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x08,0x08,0x18,0x68,0x88,0x09,0x0E,0x08,0x08,0xC8,0x38,0x08,0x0C,0x08,0x00,0x80,0x80,0x40,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x10,0x20,0x40,0xC0,0x40,0x00};unsigned char code li[]={/*-- 文字:理--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x44,0x44,0xFC,0x46,0x44,0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0xFF,0x02,0x00,0x00,0x10,0 x30,0x1F,0x08,0x48,0x48,0x44,0x44,0x44,0x7F,0x44,0x46,0x44,0x60,0x40,0x00};unsigned char code xue[]={/*-- 文字: 学--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,0x04,0x 04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00};unsigned char code yuan[]={/*-- 文字: 院--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x22,0x5A,0x96,0x0C,0x24,0x24,0x25,0x26,0x24,0x34,0xA4,0x14,0x0C,0x00,0x00, 0xFF,0x04,0x08,0x87,0x81,0x41,0x31,0x0F,0x01,0x3F,0x41,0x41,0x41,0x70,0x00};unsigned char code dian[]={/*-- 文字: 电--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/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};unsigned char code zi[]={/*-- 文字: 子--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,0x00,0 x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};unsigned char code qi[]={/*-- 文字: 气--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00};unsigned char code gong[]={/*-- 文字: 工--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x 20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00};unsigned char code cheng[]={/*-- 文字: 程--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E,0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0 x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00};unsigned char code yu[]={/*-- 文字: 与--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xCC,0x88,0x00,0x00,0x08,0 x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x4C,0x88,0x40,0x3F,0x00,0x00,0x00};unsigned char code zhi[]={/*-- 文字: 自--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x20,0x10,0x08,0xFC,0x8A,0x89,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0xFF,0x00,0x00,0x00,0x 00};unsigned char code dong[]={/*-- 文字: 动--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x24,0x24,0xE4,0x26,0x34,0x20,0x10,0x10,0xFF,0x10,0x10,0x10,0xF8,0x10,0x00,0x08,0x1C,0x0B,0x08,0x08,0x8A,0x4C,0x30,0x0C,0x03,0x40,0x80,0x40,0x3F,0x00, 0x00};unsigned char code hua[]={/*-- 文字: 化--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x40,0x20,0xF8,0x07,0x00,0x00,0x00,0xFF,0x40,0x20,0x10,0x18,0x00,0x00,0x00,0x00,0x 00,0x00,0xFF,0x00,0x04,0x02,0x01,0x3F,0x40,0x40,0x40,0x40,0x40,0x70,0x00};unsigned char code hu[]={/*-- 文字: 胡--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0x10,0x10,0xFF,0x10,0x90,0x18,0x10,0xFE,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x 00,0x7F,0x21,0x21,0x21,0x7F,0x81,0x40,0x3F,0x02,0x42,0x82,0x7F,0x00,0x00};unsigned char code jie[]={/*-- 文字: 杰--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x08,0x08,0x88,0x48,0x28,0x18,0xFF,0x18,0x28,0x48,0x88,0x08,0x0C,0x08,0x00,0x02,0x 82,0x71,0x00,0x00,0x10,0x60,0x07,0x10,0x60,0x00,0x10,0x21,0xC3,0x01,0x00};unsigned char code ling[]={/*-- 文字: 0 --*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xE0,0xF0,0x18,0x0C,0x04,0x04,0x04,0x0C,0x18,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,0x20,0x20,0x20,0x30,0x18,0x0F,0x07,0x00,0x00};unsigned char code jiu[]={/*-- 文字: 9 --*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x04,0x0D,0x19,0x12,0x19,0x0F,0x07,0x00,0x00,0x00,0x00};unsigned char code yi[]={/*-- 文字: 1 --*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF8,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00};unsigned char code ban[]={/*-- 文字: 班--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x84,0x84,0xFC,0x84,0x06,0xF4,0x00,0xFF,0x00,0x84,0x84,0xFC,0x84,0x86,0x84,0x00,0x20,0 x60,0x3F,0x10,0x92,0x41,0x38,0x07,0x40,0x40,0x40,0x7F,0x40,0x60,0x40,0x00};unsigned char code dan[]={/*-- 文字: 单--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xFC,0x08,0x00,0x00,0x10, 0x10,0x17,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x18,0x10,0x00};unsigned char code pian[]={/*-- 文字: 片--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x80,0x 40,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};unsigned char code ji[]={/*-- 文字: 机--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,0x00,0x00,0x04,0x03,0x00,0xFF,0x80,0x41,0x20,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x70,0x00};unsigned char code zuo[]={/*-- 文字: 作--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x40,0x20,0xF8,0x87,0x40,0x30,0x0F,0xF8,0x88,0x88,0xC8,0x88,0x0C,0x08,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x0C,0x08,0x00,0x00};unsigned char code ye[]={/*-- 文字: 业--*//*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x10,0x60,0x80,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xC0,0x30,0x00,0x00,0x40, 0x40,0x40,0x47,0x40,0x7F,0x40,0x40,0x40,0x7F,0x44,0x43,0x40,0x60,0x40,0x00};void main(){initLCD();ClearScreen(0);Set_line(0);Display(1,0,1*16,chong);Display(1,0,2*16,qing);Display(1,0,3*16,wen);Display(2,0,0*16,li);Display(2,0,1*16,xue); Display(2,0,2*16,yuan); Display(1,2,0*16,dian); Display(1,2,1*16,zi); Display(1,2,2*16,dian); Display(1,2,3*16,qi); Display(2,2,0*16,gong); Display(2,2,1*16,cheng); Display(2,2,2*16,xue); Display(2,2,3*16,yuan); Display(1,4,0*16,dian); Display(1,4,1*16,qi); Display(1,4,2*16,gong); Display(1,4,3*16,cheng); Display(2,4,0*16,yu); Display(2,4,1*16,zhi); Display(2,4,2*16,dong); Display(2,4,3*16,hua); Display(1,6,3*16,hu); Display(2,6,0*16,jie); delay(50000);initLCD();ClearScreen(0);Set_line(0);Display(1,2,1*16,dan); Display(1,2,2*16,pian); Display(1,2,3*16,ji); Display(2,2,0*16,zuo); Display(2,2,1*16,ye); Display(1,4,1*16,ling); Display(1,4,2*16,jiu); Display(1,4,3*16,dian); Display(2,4,0*16,qi); Display(2,4,1*16,yi); Display(2,4,2*16,ban); delay(50000);}取字软件:PCTOLCD2002。
12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法
一、液晶显示原理
1.液晶材料的性质
液晶是介于固体和液体之间的一种物质状态。
它具有流动性和定向性,通过控制电场可以改变其流动性。
液晶分子呈现出各种不同的排列方式,
包括向列排列、向行排列、扭曲排列等。
2.电场的作用
当液晶材料处于电场作用下时,液晶分子会发生定向排列。
电场的存
在导致液晶分子的定向,形成一定的直流电场效应。
通过改变电场的强度
和方向,可以改变液晶分子的排列状态。
3.光的传输
液晶分子的定向排列对入射光的传播具有影响。
根据液晶分子的不同
排列状态,可以选择性地传递或阻挡入射光。
通过控制电场的强度和方向,可以调节液晶分子的排列状态,从而改变光的传输效果。
4.显示原理
二、液晶显示的使用方法
1.连接电源
2.初始化
在液晶屏开始显示之前,需要进行初始化设置。
通过向液晶屏发送命令,配置液晶屏的各种参数,如显示模式、显示偏移量、对比度等。
3.显示图像
初始化完成后,可以通过向液晶屏发送数据以显示图像。
可以通过控制每个像素点的液晶分子排列状态,从而显示出对应的图像。
可以通过编写程序或者使用液晶屏驱动库来控制显示内容。
4.其他控制
除了显示图像外,液晶显示屏还具有其他一些控制功能。
例如,可以通过发送命令来设置光标位置、清除屏幕内容、切换显示区域等。
总结:。
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标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
AMPIRE12864液晶屏显示汉字

{
write_d(0x00);//选择全部清屏
}
}
}
/*
LCD显示汉字字库函数
*/
void lcd_display_hanzi(uchar screen,uchar page,uchar lie,uint mun)
{//screen:选择屏幕参数,page:选择页参数0-3,lie列参数0-3,mun:显示第几个汉字的参数
0x01,0x01,0x00,0x00,0xFF,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0xFF,0x00,0x00,0x00,
/*--文字:襄--*/
/*--宋体12;此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0xA2,0xAE,0xAA,0xFA,0xAE,0xA3,0xA2,0xFE,0xAA,0xAA,0xAE,0x22,0x02,0x00,
lcd_display_hanzi(1,0,3,7);//LCD显示汉字
lcd_display_hanzi(2,1,0,8);//LCD显示汉字
lcd_display_hanzi(2,1,1,9);//LCD显示汉字
lcd_display_hanzi(2,1,2,10);//LCD显示汉字
lcd_display_hanzi(2,1,3,11);//LCD显示汉字
while(1);
}
在protues中的仿真原理图,
真实情况下的仿真效果
0x10,0x30,0x18,0x08,0x04,0x7F,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,
12864LCD液晶显示原理及使用方法

12864L CD液晶显示原理及使用方法液晶简介液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为L CD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。
点阵式图形液晶显示屏是LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864L CD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。
分为两种,带字库的和不带字库的。
不带字库的L CD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。
带字库的LCD提供字库字模,但是只能显示GB2312的宋体。
各有优缺点,根据不同应用场景灵活选择。
其液晶模块原理图如下所示。
12864L CD点阵图形液晶模块原理框图下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864L CD 的引脚说明管脚号管脚名称LEVER 管脚功能描述1GND 0 电源地2VCC+5.0V 电源电压3VLCD- 液晶显示器驱动电压4RS (D/I)H/LD/I=“H”,表示DB7∽DB0 为显示数据D/I=“L”,表示DB7∽DB0 为显示指令数据5R/WH/LR/W=“H”,E=“H”数据被读到D B7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6EN H/LR/W=“L”,E 信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0 H/L 数据线8DB1 H/L数据线9DB2 H/L 数据线10DB3H/L 数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/L H:选择芯片(右半屏)信号16CS2H/L H:选择芯片(左半屏)信号17RETH/L复位信号,低电平复位18VEE -10VLCD驱动负电压19LED+- LED 背光板电源20LED-- LED 背光板电源12864L CD点阵图形液晶模块应用连接电路液晶驱动设置在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。
12864中文图形点阵液晶显示模块使用说明书

72us
读出 RAM
的值
1 1 D7
D6
D5
D4
D3
D2
D1
D0
从 内 部 RAM 读 取 数 据 (DDRAM/CGRAM/GDRAM)
72us
指令表 2:(RE=1:扩充指令集)
指令
指令码
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
说明
执行 时间 (540K HZ)
功能:设定 CGRAM 地址到地址计数器(AC),需确定扩充指令中 SR=0(卷动地址或 RAM 地址选择)
地址
设定 CGRAM 地址到地址计数器(AC)
1 AC5 AC4 AC3 AC2 AC1 AC0 需确定扩充指令中 SR=0(卷动地址或 72us RAM 地址选择)
设定 DDRAM 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 设定 DDRAM 地址到地址计数器(AC) 72us
I/O
DB5
I/O
DB6
I/O
DB7
I/O
PSB
I
NC
-
/RST
I
VEE
-
LED+
-
LED-
-
说明
电源地
逻辑电源正(+5V)
LCD 对比度调节电压
并行模式时选择数据或指令
H: 数据 L: 指令
串行模式时选择模块与否
H: 选择 L: 不选择
并行模式时控制读写
H: 读
L: 写
串行模式时输入数据
并行模式时使能端
L
L
L
H
DL
X
RE
X
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标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
12864点阵液晶显示器指令

10、写显示数据
CODE:R/WD/IDB7 DB6 DB5DB4DB3 DB2 DB1DB0
L
H
D7
D6
D5
D4
D3
D2
D1
D0
功能:写数据到DD RAM,DD RAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。D7-D0位数据为1表示显示,数据为0表示不显示。写数据到DD RAM前,要先执行“设置页地址”及“设置列地址”命令。
备注:ST7920控制器的128×64点阵液晶其实原理上等同256×32点阵,第三行对应的DDRAM地址紧接第一行;第四行对应的DDRAM地址紧接第二行。用户在使用行反白功能时,如果第一行反白,第三行必然反白。第二行反白,第四行必然反白。这是正常现象。
9、状态检测忙标志位(StatusBusy 1<<7)
基本指令
1、清除显示(DispClear0x01)
CODE:RSR/WDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
L
L
L
L
L
L
L
L
L
H
功能:将DDRAM填满“20H”(空格)代码,并且设定DDRAM的地址计数器(AC)为
00H;更新设置进入设定点将I/D设为1,游标右移AC加1。
2、地址归0(HOME0x20)
绘图RAM(GDRAM)
绘图显示RAM提供64×32个位元组的记忆空间,最多可以控制256×64点的二维绘图缓冲空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个8位元的资料到绘图RAM,
而地址计数器(AC)会自动加一;在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
v_Lcd12864CheckBusy_f() ;
SET_DATA
SET_WRITE
CLR_EN
io_LCD12864_DATAPORT = byData ;
_nop_();
_nop_();
SET_EN
_nop_();
_nop_();
CLR_EN
SET_READ
SET_INC
}
void v_DelayMs_f( unsigned int nDelay ) //延时
}
void v_Lcd12864SetAddress_f( unsigned char x, y ) //地址转换
{
unsigned char byAddress ;
switch( y )
{
case 0 : byAddress = 0x80 + x ;
b 0x90 + x ;
{
unsigned int i ;
for( ; nDelay > 0 ; nDelay-- )
{
for( i = 125 ; i > 0 ; i-- ) ;
}
}
void v_Lcd12864Init_f( void ) //初始化
{
v_Lcd12864SendCmd_f( 0x30 ) ; //基本指令集
下一章节内容将学习如何在LCD12864液晶屏上画图。尽请期待^_^
本文来自:电子工程师之家
T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C)
关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。
我们先来了解一下它的并行连接情况。
下面是电路连接图
从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。
v_Lcd12864PutString_f( 2,1, "欢迎光临") ;
v_Lcd12864PutString_f( 0,2, "*LCD12864ST7920*") ;
v_Lcd12864PutString_f( 0,3, "★○◇◆※☆■△") ;
while( 1 ) ;
}
怎么样,你弄出来了吗,很简单吧~~
#define SET_READ io_LCD12864_RW = 1 ;
#define SET_WRITE io_LCD12864_RW = 0 ;
#define SET_EN io_LCD12864_EN = 1 ;
#define CLR_EN io_LCD12864_EN = 0 ;
void v_Lcd12864CheckBusy_f( void ) //忙检测函数
{
v_Lcd12864CheckBusy_f() ;
SET_INC
SET_WRITE
CLR_EN
io_LCD12864_DATAPORT = byCmd ;
_nop_();
_nop_();
SET_EN
_nop_();
_nop_();
CLR_EN
SET_READ
SET_INC
}
void v_Lcd12864SendData_f( unsigned char byData ) //发送数据
break ;
case 2 : byAddress = 0x88 + x ;
break ;
case 3 : byAddress = 0x98 + x ;
break ;
default :
break ;
}
v_Lcd12864SendCmd_f( byAddress ) ;
}
void v_Lcd12864PutString_f( unsigned char x, unsigned char y, unsigned char *pData )
有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。
这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。
下面让我们根据这些编写出它的驱动程序吧。
我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x01 ) ; //清屏
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x06 ) ; //光标右移
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x0c ) ; //开显示
{
v_Lcd12864SetAddress_f( x, y ) ;
while( *pData != '\0' )
{
v_Lcd12864SendData_f( *pData++ ) ;
}
}
void main( void )
{
v_Lcd12864Init_f() ;
v_Lcd12864PutString_f( 0,0, "电子工程师之家") ;
实际显示效果图片如下:
程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。
[p][/p]
#include "reg52.h"
#include "intrins.h"
sbit io_LCD12864_RS = P1^0 ;
通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。
看看并行模式下的写时序图:
根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。
读时序图如下:
根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。
{
unsigned int nTimeOut = 0 ;
SET_INC
SET_READ
CLR_EN
SET_EN
while( ( io_LCD12864_DATAPORT & 0x80 ) && ( ++nTimeOut != 0 ) ) ;
CLR_EN
SET_INC
SET_READ
}
void v_Lcd12864SendCmd_f( unsigned char byCmd ) //发送命令
在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108
sbit io_LCD12864_RW = P1^1 ;
sbit io_LCD12864_EN = P1^2 ;
#define io_LCD12864_DATAPORT P0
#define SET_DATA io_LCD12864_RS = 1 ;
#define SET_INC io_LCD12864_RS = 0 ;