64点阵液晶黑白屏模块19264G-925-PN说明书及ST7525驱动(64点阵液晶黑白屏模块19264G-925-PN说明书及ST7525驱动)
64点阵液晶黑白屏模块19264G-925-PN说明书及ST7525驱动(64点阵液晶黑白屏模块19264G-925-PN说明书及ST7525驱动)(7)采用 ST7525 带背光 有3.3V、5V版本可选。(6)接口简单:并行、串行、IIC 接口;(3)按照 8*16 点阵汉字来计算可显示 24 字*4 行;(4)按照 5*8 点阵汉字来计算可显示 32 字*8 行;(5)可软件调对比度、正显/反显转换、行列扫描方向可改(可旋转 180 度使用)。
开始做一个0.5至30V的可调电源 因淘到的成品机箱尺寸的原因 选择了这款屏。
晶联讯的屏
JLX19264G-925 图像型点阵液晶模块的特性(1)192*64 点阵单色图片,或其它小于 192*64 点阵的单色图片;
(2)可选用 16*16 点阵或其他点阵的图片来自编汉字,按照 16*16 点阵汉字来计算可显示 12 字*4 行;
(3)按照 8*16 点阵汉字来计算可显示 24 字*4 行;
(4)按照 5*8 点阵汉字来计算可显示 32 字*8 行;
(5)可软件调对比度、正显/反显转换、行列扫描方向可改(可旋转 180 度使用)。
(6)接口简单:并行、串行、IIC 接口;
(7)采用 ST7525 带背光 有3.3V、5V版本可选。
外形尺寸及接口引脚功能 模块的接口引脚功能: 电路框图 背光参数正常工作电流为:48~120mA(LED 灯数共 6 颗);
工作电压:3.0V、5.0V
指令功能:下表是“ST7525”IC 支持的指令:
CD:0:指令; 1:数据 W/R: 0:写; 1:读 D7~D0:有用的数据位; -:不必理会的
点阵与 DD RAM(显示数据存储器)地址的对应关系请留意页的定义:PAGE 与平时所讲的“页”并不是一个意思,在此表示 ” 8 个行就是一个“页”,一个 192*64 点阵的屏分为 8 个“页”,从第 0“页”到第 7“页”。
DB7--DB0 的排列方向:数据是从下向上排列的。最低位 D0 是在最上面,最高位 D7 是在最下面。 每一位(bit)数据对应一个点阵,通常“1”代表点亮该点阵,“0”代表关掉该点阵.如下图所示:
程序举例:液晶模块与 MCU(以 8051 系列单片机为例)接口图如下:
串行接口
程序
// JLX19264G-925-PN-S 驱动IC是ST7525 串行接口
#include <reg52.h>
#include <intrins.h>
#include <Chinese_code.h>
sbit CS1=P0^5; /*对应LCD的CS引脚*/
sbit reset=P0^7; /*对应LCD的RST引脚*/
sbit rs=P0^6; /*对应LCD的RS引脚*/
sbit sclk=P2^2; //对应LCD的SCK(D0)
sbit sid=P2^3; //对应LCD的SDA(D1)
sbit key=P2^0;
#define DataBus P1
void delay_us(int i);
void delay(int i);
//写指令到LCD模块
void transfer_command(int data1)
{
char i;
cs1=0;
rs=0;
for(i=0;i<8;i )
{
sclk=0;
if(data1&0x80) sid=1;
else sid=0;
sclk=1;
data1=data1<<=1;
}
cs1=1;
}
//写数据到LCD模块
void transfer_data(int data1)
{
char i;
cs1=0;
rs=1;
for(i=0;i<8;i )
{
sclk=0;
if(data1&0x80) sid=1;
else sid=0;
sclk=1;
data1=data1<<=1;
}
cs1=1;
}
//延时1
void delay(int i)
{
int j k;
for(j=0;j<i;j )
for(k=0;k<110;k );
}
void waitkey()
{
repeat:
if(key==1)goto repeat;
else delay(2500);
}
//LCD模块初始化
void initial_lcd()
{
reset=0; //低电平复位
delay(100);
reset=1; //复位完毕
delay(200);
transfer_command(0xe2); //软复位
delay(200);
transfer_command(0x2f); //打开内部升压
delay(200);
transfer_command(0xa0); //
transfer_command(0x81); //微调对比度
transfer_command(0x79); //微调对比度的值,可设置范围0x00~0xFF
transfer_command(0xeb); //1/9偏压比(bias)
transfer_command(0xc4); //行列扫描顺序:从上到下
transfer_command(0xaf); //开显示
}
void lcd_address(uchar page uchar column)
{
column=column-1; //我们平常所说的第1列,在LCD驱动IC里是第0列。所以在这里减去1.
page=page-1;
transfer_command(0xb0 page); //设置页地址。每页是8行。一个画面的64行被分成8个页。我们平常所说的第1页,在LCD驱动IC里是第0页,所以在这里减去1
transfer_command(((column>>4)&0x0f) 0x10); //设置列地址的高4位
transfer_command(column&0x0f); //设置列地址的低4位
}
//全屏清屏
void clear_screen()
{
unsigned char i j;
for(i=0;i<8;i )
{
lcd_address(1 i 1);
for(j=0;j<192;j )
{
transfer_data(0x00);
}
}
}
void display_graphic_192x64(uchar *dp)
{
uchar i j;
for(i=0;i<8;i )
{
lcd_address(i 1 1);
for(j=0;j<192;j )
{
transfer_data(*dp);
dp ;
}
}
}
//==================display a piture of 128*64 dots================
void full_display(uchar data_left uchar data_right)
{
int i j;
for(i=0;i<8;i )
{
lcd_address(i 1 1);
for(j=0;j<96;j )
{
transfer_data(data_left);
transfer_data(data_right);
}
}
}
//显示32x32点阵图像、汉字、生僻字或32x32点阵的其他图标
void display_graphic_32x32(uchar page uchar column uchar *dp)
{
uchar i j;
for(j=0;j<4;j )
{
lcd_address(page j column);
for (i=0;i<32;i )
{
transfer_data(*dp); //写数据到LCD 每写完一个8位的数据后列地址自动加1
dp ;
}
}
}
//显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标
void display_graphic_16x16(uchar page uchar column uchar *dp)
{
uchar i j;
for(j=0;j<2;j )
{
lcd_address(page j column);
for (i=0;i<16;i )
{
transfer_data(*dp); //写数据到LCD 每写完一个8位的数据后列地址自动加1
dp ;
}
}
}
//写入一组16x16点阵的汉字字符串(字符串表格中需含有此字)
//括号里的参数:(页,列,汉字字符串)
void display_string_16x16(uchar page uchar column uchar reverse uchar *text)
{
uchar i j k data1;
uint address;
j = 0;
while(text[j] != '\0')
{
i=0;
address=1;
while(Chinese_text_16x16[i]> 0x7e )
{
if(Chinese_text_16x16[i] == text[j])
{
if(Chinese_text_16x16[i 1] == text[j 1])
{
address = i*16;
break;
}
}
i =2;
}
if(column>191)
{
column =0;
page =2;
}
if(address !=1)
{
for(k=0;k<2;k )
{
lcd_address(page k column);
for(i=0;i<16;i )
{
if(reverse==1) data1=~Chinese_code_16x16[address];
else data1=Chinese_code_16x16[address];
transfer_data(data1);
address ;
}
}
j =2;
}
else
{
for(k=0;k<2;k )
{
lcd_address(page k column);
for(i=0;i<16;i )
{
if(reverse==0) transfer_data(0x00);
else transfer_data(0xff);
}
}
j ;
}
column =16;
}
}
//显示8x16点阵图像、ASCII 或8x16点阵的自造字符、其他图标
void display_graphic_8x16(uchar page uchar column uchar *dp)
{
uchar i j;
for(j=0;j<2;j )
{
lcd_address(page j column);
for (i=0;i<8;i )
{
transfer_data(*dp); //写数据到LCD 每写完一个8位的数据后列地址自动加1
dp ;
}
}
}
//显示8x16的点阵的字符串,括号里的参数分别为(页 列,字符串指针)
void display_string_8x16_2(uchar page uchar column uchar reverse uchar *text)
{
uchar data1;
uint i=0 j k n;
while(text[i]>0x00)
{
if((text[i]>=0x20)&&(text[i]<=0x7e))
{
j=text[i]-0x20;
for(n=0;n<2;n )
{
lcd_address(page n column);
for(k=0;k<8;k )
{
if(reverse==1) data1=~ascii_table_8x16[j][k 8*n];
else data1=ascii_table_8x16[j][k 8*n];
transfer_data(data1);
}
if(reverse==0) transfer_data(0x00);
else transfer_data(0xff);
}
i ;
column =8;
}
else
i ;
if(column>127)
{
column=0;
page =2;
}
}
}
void display_string_8x16(uint page uint column uchar *text)
{
uint i=0 j k n;
while(text[i]>0x00)
{
if((text[i]>=0x20)&&(text[i]<=0x7e))
{
j=text[i]-0x20;
for(n=0;n<2;n )
{
lcd_address(page n column);
for(k=0;k<8;k )
{
transfer_data(ascii_table_8x16[j][k 8*n]);//显示5x7的ASCII字到LCD上,y为页地址,x为列地址,最后为数据
}
}
i ;
column =8;
}
else
i ;
}
}
//显示一串5x8点阵的字符串
//括号里的参数分别为(页,列,是否反显,数据指针)
void display_string_5x8(uint page uint column uchar reverse uchar *text)
{
uchar i=0 j k data1;
while(text[i]>0x00)
{
if((text[i]>=0x20)&&(text[i]<=0x7e))
{
j=text[i]-0x20;
lcd_address(page column);
for(k=0;k<5;k )
{
if(reverse==1) data1=~ascii_table_5x8[j][k];
else data1=ascii_table_5x8[j][k];
transfer_data(data1);
}
if(reverse==1) transfer_data(0xff);
else transfer_data(0x00);
i ;
column =6;
}
else
i ;
}
}
void display_string_5x8_1(uint page uint column uchar *text)
{
uint i=0 j k;
while(text[i]>0x00)
{
if((text[i]>=0x20)&&(text[i]<0x7e))
{
j=text[i]-0x20;
lcd_address(page column);
for(k=0;k<5;k )
{
transfer_data(ascii_table_5x8[j][k]);//显示5x7的ASCII字到LCD上,y为页地址,x为列地址,最后为数据
}
i ;
column =6;
}
else
i ;
}
}
void main(void)
{
while(1)
{
initial_lcd();
clear_screen(); //clear all dots
display_graphic_192x64(bmp2);
waitkey();
clear_screen(); //clear all dots
display_graphic_192x64(bmp1);
waitkey();
clear_screen(); //clear all dots
display_graphic_192x64(bmp3);
waitkey();
clear_screen(); //clear all dots
display_graphic_192x64(bmp6);
waitkey();
clear_screen(); //clear all dots
display_graphic_192x64(bmp5);
waitkey();
clear_screen();
display_string_5x8(1 1 1 " MENU "); //显示5x8点阵的字符串,括号里的参数分别为(页,列,是否反显,数据指针)
display_string_5x8(3 1 0 " Select>>>>");
display_string_5x8(3 100 1 "1.Graphic ");
display_string_5x8(4 100 0 "2.Chinese " );
display_string_5x8(5 100 0 "3.Movie ");
display_string_5x8(6 100 0 "4.Contrast ");
display_string_5x8(7 100 0 "5.Mirror ");
display_string_5x8(8 1 1 " PRE USER DEL NEW ");
display_string_5x8(8 59 0 " ");
display_string_5x8(8 94 0 " ");
display_string_5x8(8 97 48 0 " ");
waitkey();
clear_screen();
display_string_8x16_2(1 1 1 "--");
display_string_16x16(1 17 1 "→粉尘测试 ");
display_string_16x16(3 33 0 "一般测试");
display_string_16x16(5 33 0 "校准模式");
display_string_16x16(7 33 0 "充电模式 ↓");
waitkey();
clear_screen();
display_graphic_32x32(1 49 cheng1); //在第1页,第49列显示单个汉字"成"
display_graphic_32x32(1 89 gon); //在第1页,第49列显示单个汉字"成"
display_graphic_16x16(6 1 zhuang1); //在第5页,第1列显示单个汉字"状"
display_graphic_16x16(6 (1 16) tai1); //在第5页,第17列显示单个汉字"态"
// display_graphic_8x16(6 (1 16*2) mao_hao); //在第5页,第25列显示单个字符":"
display_graphic_16x16(6 (1 16*2 8) shi1); //在第5页,第41列显示单个汉字"使"
display_graphic_16x16(6 (1 16*3 8) yong1); //在第5页,第49列显示单个汉字"用"
display_graphic_8x16(6 (89) num0); //在第5页,第89列显示单个数字"0"
display_graphic_8x16(6 (89 8*1) num0); //在第5页,第97列显示单个数字"0"
display_graphic_8x16(6 (89 8*2) mao_hao); //在第5页,第105列显示单个字符":"
display_graphic_8x16(6 (89 8*3) num0); //在第5页,第113列显示单个数字"0"
display_graphic_8x16(6 (89 8*4) num0); //在第5页,第121列显示单个数字"0"
waitkey();
clear_screen(); //clear all dots
display_string_8x16(1 1 "(<\"0123456abt~`!@#$%^\">)");//在第1页,第1列显示字符串
display_string_8x16(3 1 "{[(<\" '&*|\\@#_- =' \">)]}");//在第*页,第*列显示字符串
display_string_5x8_1(5 1 "[!#$%&'()* -./0123456789:;<=>?]");
display_string_5x8_1(6 1 "[ABCDEFGHIJKLMNOPQRSTUVWXYZabcd]");
display_string_5x8_1(7 1 "(abcdefghijklmnopqrstuvwxyzabcd)");
display_string_5x8_1(8 1 "{[(<\" '&*|\\@abcde012#_- =' \">)]}");
waitkey();
full_display(0xff 0xff);
waitkey();
full_display(0x55 0xaa);
waitkey();
full_display(0xaa 0x55);
waitkey();
full_display(0xff 0x00);
waitkey();
full_display(0x00 0xff);
waitkey();
}
}
并行接口
并行程序与串行只是接口定义、写数据和命令不一样,其它都一样
并行程序:
#include <reg52.h>
#include <intrins.h>
sbit cs1=P3^2; //对应 LCD 的 CS
sbit reset=P3^1; //对应 LCD 的 RST
sbit rs=P3^0; //对应 LCD 的 RS
sbit e=P3^5; //对应 LCD 的 RD(E)
sbit wr=P3^4; //对应 LCD 的 WR
sbit key=P2^0; /*按键接口,P2.0 口与 GND 之间接一个按键*/
//写指令到 LCD 模块
void transfer_command(int data1)
{
cs1=0;
rs=0;
wr=0;
e=0;
P1=data1;
e=1;
e=0;
P1=0x00;
cs1=1;
}
//写数据到 LCD 模块
void transfer_data(int data1)
{
cs1=0;
rs=1;
wr=0;
e=0;
P1=data1;
e=1;
e=0;
P1=0x00;
cs1=1;
}
图 10.IIC 接口
IIC 程序与串、并行接口定义、写数据和命令不一样,取模代码是一样的
IIC 程序:
// 液晶演示程序 JLX19264G-925,IIC 接口!
// 驱动 IC 是:ST7525
#include <reg52.h>
#include <intrins.h>
sbit reset=P3^2; //对应 LCD 的 RST
sbit scl=P3^1; //对应 LCD 的 SCK(D0)
sbit sda=P3^0; //对应 LCD 的 SDA(D1)
sbit key=P2^0;
void delay_us(int i);
void delay(int i);
//延时 1
void delay(int i)
{
int j k;
for(j=0;j<i;j )
for(k=0;k<110;k );
}
//延时 2
void delay_us(int i)
{
int j k;
for(j=0;j<i;j )
for(k=0;k<10;k );
}
void waitkey()
{
repeat:
if(key==1)goto repeat;
else delay(400);
}
void transfer(int data1)
{
int i;
for(i=0;i<8;i )
{
scl=0;
if(data1&0x80) sda=1;
else sda=0;
scl=1;
scl=0;
data1=data1<<1;
}
sda=0;
scl=1;
scl=0;
}
void start_flag()
{
scl=1; /*START FLAG*/
sda=1; /*START FLAG*/
sda=0; /*START FLAG*/
}
void stop_flag()
{
scl=1; /*STOP FLAG*/
sda=0; /*STOP FLAG*/
sda=1; /*STOP FLAG*/
}
//写命令到液晶显示模块
void transfer_command(uchar com)
{
start_flag();
transfer(0x7c);
transfer(com);
stop_flag();
}
字库文件Chinese_code.h部分内容:
文件很长不方便全部列出 可自己按相同格式补齐