我开始制作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 <in;
#include <C;
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] != '