14单片机:LCD12864

文章目录

  • [1. 引言](#1. 引言)
  • [2. 基础概念](#2. 基础概念)
  • [3. 外观和显示](#3. 外观和显示)
    • [3.1 外观和引脚](#3.1 外观和引脚)
    • [3.2 点阵显示原理](#3.2 点阵显示原理)
  • [4. 指令(查询使用不要死记)](#4. 指令(查询使用不要死记))
  • [5. 编程](#5. 编程)
    • [5.1 文字信息显示](#5.1 文字信息显示)
      • [5.1 参考代码](#5.1 参考代码)
      • [5.2 运行效果](#5.2 运行效果)
    • [5.1 图像信息显示](#5.1 图像信息显示)
      • [5.1 参考代码](#5.1 参考代码)
      • [5.2 运行效果](#5.2 运行效果)
  • [6. 工具](#6. 工具)
    • [6.1PCtoLCD(取字模1) 使用方式](#6.1PCtoLCD(取字模1) 使用方式)
    • [6.1转码221(取字模2) 使用方式](#6.1转码221(取字模2) 使用方式)
  • [7. 总结](#7. 总结)

1. 引言

之前我们学了led灯(可以理解为一个点),然后后面学习了数码显示(可以理解我8条线组成的led灯组,能展示数字0~9和部分字母),上一次我们学习了LCD1602(可以理解为一个面,能展示数字和字母,有字库)。这次我们学习LCD12864(面更大,可展示全面的数字和字母,无字库)

2. 基础概念

点阵式液晶显示器LCD12864有两种:

  1. KS0108 为主控芯片,不带字库 ,显示的字符或图形是由不同的点阵组成,点阵的获得可以借助于取模软件
  2. 另外一种是ST7920为主控信息,带字符ASCII码和中文的点阵质控。

本文介绍的是KS0108为主控芯片的LCD12864的试用方法。

3. 外观和显示

3.1 外观和引脚

引脚功能:

引脚号 引脚符号 功能
第1脚 CS1 左半屏选择信号,低电平有效。
第2脚 CS2 右半屏选择信号,低电平有效。
第3脚 GND 电源地。
第4脚 VCC 电源正极。
第5脚 V0 对比度调整输入端。
第6脚 RS 数据/命令选择端,高电平选择数据寄存器,低电平选择命令寄存器。
第7脚 R/-W 读/写选择端,高电平读操作,低电平写操作。
第8脚 E 使能端当E端高电平时读取液晶模块的信息,当E端由高电平跳变成低电平时,液晶模块执行写操作。
第9~16脚 D0~D7 为8位双向数据线。
第17脚 RST 复位端,低电平复位,高电平正常工作。
第18脚 VOUT LCD驱动负压输出端。
第19脚 BLA 背光源正极。
第20脚 BLK 背光源负极。

重点:RS 、R/-W、E 这三个引脚控制读写,控制命令或数据

3.2 点阵显示原理

  • 两个控制模块,分别控制左半屏右半屏 ,每屏为64×64点阵。
  • 每屏纵向8点为一页,从上到下分成8页,页号0 ~ 7。横向64个点,分成64列,列号0~63。
  • 显示时以"页"为单位,每一页从0列到63列,一列8位,对应一个字节,上方为低位,下方为高位
  • 每屏总共8×64个字节,两屏总共2×8×64=1K个字节,对应内部的显示存储器。

字符或汉字转换成对应的点阵代码称为取模。取模可借助于取模软件,KS0108控制LCD12864的点阵显示方式在取模软件中称为列行式。对于8×16点阵的西文字符和16×16点阵的中文汉字,在LCD12864中实际占用2个"页";操作时一般先写上面一页,再写下面一页,每一页从0列写到7(或者15)列,这样就完成一个字符(或者汉字)的显示。

字符"A" 和"杨"的点阵代码,取模方式选择列行式,数据格式采用C51格式。

c 复制代码
 //A(0) 杨(1)

{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",0*/

{0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0x42,0xE2,0x52,0x4A,0xC6,0x42,0x40,0xC0,0x00
 0x04,0x03,0x00,0xFF,0x00,0x23,0x10,0x8C,0x43,0x20,0x18,0x47,0x80,0x40,0x3F,0x00},/*"杨",1*/

4. 指令(查询使用不要死记)

KS0108控制器 LCD12864 指令集 (图形点阵)

序号 指令功能 指令码 (二进制) 说明
1 显示开关 0000 1111 1 D 控制整体显示的开/关。D=1为开显示(0x3F),D=0为关显示(0x3E)。不影响DDRAM中的数据。
2 设置显示起始行 11XX XXXX 设置显示屏顶部对应的DDRAM行地址,取值范围0~63。例如0xC0表示从第0行开始显示。可用于实现屏幕滚动效果。
3 设置页地址 10111 XXX 设置当前操作的页地址(X地址),取值范围0~7,对应显示屏的8个页(每页8行)。基础指令码为0xB8,加页号即可(如第2页为0xBA)。
4 设置列地址 01XX XXXX 设置当前操作的列地址(Y地址),取值范围0~63。基础指令码为0x40,加列偏移即可。每次读写数据后,列地址会自动加1。
5 读状态字 0 1 BF 0 ON/OFF RST 0 0 0 0 读取控制器内部状态。BF=1表示忙,此时不能进行除读状态外的其他操作;ON/OFF表示显示状态;RST表示复位状态。
6 写显示数据 1 0 D7 ... D0 将8位显示数据写入当前页地址和列地址所指向的DDRAM单元。写入后列地址自动加1。
7 读显示数据 1 1 D7 ... D0 从当前页地址和列地址所指向的DDRAM单元读出8位数据。读取后列地址自动加1。注意:进行有效读操作前,需先进行一次空读操作。

5. 编程

5.1 文字信息显示

【例】使用LCD12864的第一行显示自己名字,第二行显示自己的学号,第三行显示电话号码,第四行显示班级,要求:居中对齐,用C51编写相应程序。在Proteus中完成设计与仿真。

5.1 参考代码

c 复制代码
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

# define lcdrow 0xc0
# define lcdpage 0xb8
# define lcdcolumn 0x40
# define c_page_max 0x08
# define c_column_max 0x40

# define bus P0

sbit rst = P2^0;
sbit e = P2^1;
sbit rw = P2^2;
sbit rs = P2^3;
sbit cs1 = P2^4;
sbit cs2 = P2^5;

void delayms(uint);
void delayus10(void);
void select(uchar);
void send_cmd(uchar);
void send_data(uchar);
void clear_screen(void);
void initial(void);
void display_zf(uchar,uchar,uchar,uchar);
void dispaly_hz(uchar,uchar,uchar,uchar);

uchar code table_zf[]={
 //2(0) 4(1) 0(2) 6(3) 0(4) 1(5) 6(6) 1(7) 8(8) 6(9) 8(10) 3(11)

0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",0*/
0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",1*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",2*/
0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",3*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",4*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",5*/
0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",6*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",7*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/
0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",9*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",10*/
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",11*/
// 1(0) 5(1) 0(2) 2(3) 3(4) 6(5) 0(6) 8(7) 9(8) 1(9) 9(10)

0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",12*/
0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",13*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",14*/
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,/*"*",15*/
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"*",16*/
0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"*",17*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"*",18*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",19*/
0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",20*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",21*/
0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",22*/

// 2(0) 4(1) 0(2) X(3)
0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",23*/
0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",24*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",25*/
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",26*/

0x10,0x60,0x02,0x8C,0x00,0x08,0xF9,0x4E,//0xC8,0x20,0x58,0x4F,0x48,0xC8,0x08,0x00,
0x04,0x04,0x7E,0x81,0x40,0x30,0x0F,0x40,//0x7F,0x00,0x44,0x84,0x7F,0x04,0x04,0x00,/*"游(左边)",27*/

0xC8,0x20,0x58,0x4F,0x48,0xC8,0x08,0x00,0x7F,0x00,0x44,0x84,0x7F,0x04,0x04,0x00,/*"游(右边)",28*/

0x10,0x10,0x90,0x90,0x90,0x90,0x90,0x10,//0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x00,
0x00,0x20,0x60,0x20,0x3F,0x10,0x10,0x10,//0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00/*"式(左边)",29*/
//0x10,0x10,0x90,0x90,0x90,0x90,0x90,0x10,
0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x00,
//0x00,0x20,0x60,0x20,0x3F,0x10,0x10,0x10,
0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00/*"式(右边)",30*/

};

uchar code table_hz[]={
0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00,
0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00,/*"星",0*/
0x10,0x60,0x02,0x8C,0x00,0x08,0xF9,0x4E,0xC8,0x20,0x58,0x4F,0x48,0xC8,0x08,0x00,
0x04,0x04,0x7E,0x81,0x40,0x30,0x0F,0x40,0x7F,0x00,0x44,0x84,0x7F,0x04,0x04,0x00,/*"游",1*/
0x00,0x3E,0x22,0xE2,0x22,0x3E,0x00,0x10,0x88,0x57,0x24,0x54,0x8C,0x00,0x00,0x00,
0x40,0x7E,0x40,0x3F,0x22,0x22,0x00,0x01,0xFE,0x42,0x42,0x42,0xFE,0x01,0x01,0x00,/*"路",2*/
0x80,0x80,0xEE,0x88,0x88,0x88,0xE8,0x8F,0x08,0x88,0x78,0x48,0x4E,0x40,0xC0,0x00,
0x00,0x00,0x7F,0x24,0x24,0x24,0x7F,0x00,0x81,0x40,0x30,0x0F,0x30,0x41,0x80,0x00,/*"嵌",3*/
0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00,/*"入",4*/
0x10,0x10,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x00,
0x00,0x20,0x60,0x20,0x3F,0x10,0x10,0x10,0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00/*"式",5*/
};

void delayus10(void)
{
	uchar i =5;
	while(--i);
}
void delayms(uint j)
{
	uchar i = 250;
	for(;j>0;j--)
	{
		while(--i);
		i = 249;
		while(--i);
		i = 250;
	}
}

void select(uchar cs)
{
	if(cs==0){cs1=0;cs2=0;}
	else if(cs==1){cs1=0;cs2=1;}
	else{cs1=1;cs2=0;}
}

void send_cmd(uchar cmd)
{
	rs=0;rw=0;bus=cmd;delayus10();e=0;e=1;e=0;
}
void send_data(uchar dat)
{
	rs=1;rw=0;bus=dat;delayus10();e=0;e=1;e=0;
}

void clear_screen(void)
{
	uchar c_page,c_column;
	select(0);
	for(c_page=0;c_page<c_page_max;c_page++)
	{
		send_cmd(c_page+lcdpage);
		send_cmd(lcdcolumn);
		for(c_column=0;c_column<c_column_max;c_column++)
		{
			send_data(0x00);
		}
	}
}

void initial(void)
{
	rst=0;delayms(10);rst=1;
	select(0);
	clear_screen();
	send_cmd(lcdrow);
	send_cmd(lcdcolumn);
	send_cmd(lcdpage);
	send_cmd(0x3f);
}

void display_zf(uchar c_page,uchar c_column,uchar num,uchar offset)
{
	uchar c1,c2,c3;
	for(c1=0;c1<num;c1++)
	{
		for(c2=0;c2<2;c2++)
		{
			for(c3=0;c3<8;c3++)
			{
				send_cmd(lcdpage+c_page+c2);
				send_cmd(lcdcolumn+c_column+c1*8+c3);
				send_data(table_zf[(c1+offset)*16+c2*8+c3]);
				//delayms(100);
			}
		}
	}
}
void display_zf2(uchar c_page,uchar c_column,uchar num,uchar offset,uchar LR)
{
	uchar c1,c2,c3;
	for(c1=0;c1<num;c1++)
	{
		for(c2=0;c2<2;c2++)
		{
			for(c3=0;c3<4;c3++)
			{
				send_cmd(lcdpage+c_page+c2);
				send_cmd(lcdcolumn+c_column+c1*8+c3);
				send_data(table_zf[(c1+offset)*16+c2*8+c3+LR*4]);
				//delayms(100);
			}
		}
	}
}

void display_hz(uchar c_page,uchar c_column,uchar num,uchar offset)
{
	uchar c1,c2,c3;
	for(c1=0;c1<num;c1++)
	{
		for(c2=0;c2<2;c2++)
		{
			for(c3=0;c3<16;c3++)
			{
				send_cmd(lcdpage+c_page+c2);
				send_cmd(lcdcolumn+c_column+c1*16+c3);
				send_data(table_hz[(c1+offset)*32+c2*16+c3]);
				//delayms(100);
			}
		}
	}
}

void main()
{
	initial();
	select(1);

	display_hz(0,40,1,0);
	display_zf(0,56,1,27);
	display_zf(2,16,6,0);
	display_zf(4,20,5,12);
	display_zf2(4,60,1,17,0);
	display_hz(6,24,2,3);
	display_zf(6,56,1,29);
	select(2);
	display_zf(0,0,1,28);
	display_hz(0,8,1,2);
	display_zf(2,0,6,6);
	display_zf2(4,0,1,17,1);
	display_zf(4,4,5,18);
	display_zf(6,0,1,30);
	display_zf(6,8,4,23);

	while(1);
}

5.2 运行效果

5.1 图像信息显示

【例】使用LCD12864显示自己的签名,要求显示128*64像素,用C51编写相应程序。在Proteus中完成设计与仿真。

5.1 参考代码

c 复制代码
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

# define lcdrow 0xc0
# define lcdpage 0xb8
# define lcdcolumn 0x40
# define c_page_max 0x08
# define c_column_max 0x40

# define bus P0

sbit rst = P2^0;
sbit e = P2^1;
sbit rw = P2^2;
sbit rs = P2^3;
sbit cs1 = P2^4;
sbit cs2 = P2^5;

void delayms(uint);
void delayus10(void);
void select(uchar);
void send_cmd(uchar);
void send_data(uchar);
void clear_screen(void);
void initial(void);
void display_zf(uchar,uchar,uchar,uchar);
void dispaly_hz(uchar,uchar,uchar,uchar);


uchar code table_tu[]={
/*--  调入了一幅图像:C:\Users\86150\Desktop\星游路.bmp  --*/
/*--  宽度x高度=128x64  --*/
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,
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,
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,
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,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0xC0,0x60,0x60,0x20,0x20,0x60,0x60,0x60,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xC0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x60,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,
0xD0,0xF8,0xF0,0x60,0xE0,0xF0,0x10,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,0x00,0x00,0x00,0x00,0x04,0x1C,0xF8,0x7F,0x61,
0xF0,0x98,0xD8,0xB8,0x80,0x00,0xF8,0x1E,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x0C,0x98,0xF8,0x70,0x00,0x20,0x20,
0x30,0x31,0x31,0xFF,0xFF,0xBA,0x98,0x88,0x80,0x80,0x80,0xC0,0x78,0x3C,0x0F,0x47,
0x76,0x36,0x36,0xB6,0xF6,0x76,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x06,0x0E,0xF8,0xF1,0xE0,0xF0,0xF0,0x78,0x3F,0x05,0x04,0x04,0x0E,0x0E,
0x8F,0xCF,0x78,0x38,0x1F,0x1F,0x30,0x30,0x30,0x60,0x60,0xE0,0xC0,0xC0,0xC0,0x80,
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,0x30,0x30,0xE0,0x00,0x00,0x03,
0x83,0x89,0x8D,0xF9,0xE1,0xC3,0xC3,0xC1,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x8D,0xEC,0x38,0x10,0x80,0xF0,0x08,
0x00,0x00,0xF8,0x3F,0x03,0x01,0x01,0x01,0x83,0xFF,0x07,0x00,0x80,0xC0,0xC0,0x60,
0x60,0x60,0x6F,0xFF,0xF0,0x60,0x60,0x60,0x60,0xE0,0xC0,0xE0,0xE0,0x20,0x00,0x00,
0x00,0x20,0x60,0xC0,0x00,0x00,0x00,0x63,0xFF,0xFC,0xAE,0xEE,0x76,0x38,0x1C,0x0E,
0x11,0xF0,0x98,0x04,0x04,0x06,0x06,0x06,0x06,0xCE,0xFC,0x00,0x00,0x01,0x01,0x01,
0x03,0x06,0x06,0x0C,0x0C,0x0C,0x18,0x18,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x1C,0x0F,0x01,0x01,0x31,
0x59,0xC9,0xC8,0xFF,0xBF,0x3C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x38,0xE0,0xC0,0xF8,0x0F,0x80,0xE0,
0x78,0x1E,0x07,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x0F,0x11,0x01,0x20,0x00,0x40,
0x80,0x80,0x80,0x83,0x8F,0xFC,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0xC0,0xFF,0x78,0x30,0x18,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0x3F,0x20,0x00,0x80,0x80,0x80,0x80,0xFF,0xFF,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,0x01,0x60,0x30,0x30,0x30,0x10,0x10,0x1C,0x1A,0x0B,
0x09,0x0D,0x0D,0x0F,0x0F,0x0C,0x0C,0x06,0x06,0x06,0x06,0x06,0x0E,0x0E,0x0C,0x0C,
0x0C,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x06,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,
0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x01,0x01,0x03,0x03,0x03,0x03,0x07,0x03,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,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,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,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,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,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,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,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,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};



void delayus10(void)
{
	uchar i =5;
	while(--i);
}
void delayms(uint j)
{
	uchar i = 250;
	for(;j>0;j--)
	{
		while(--i);
		i = 249;
		while(--i);
		i = 250;
	}
}

void select(uchar cs)
{
	if(cs==0){cs1=0;cs2=0;}
	else if(cs==1){cs1=0;cs2=1;}
	else{cs1=1;cs2=0;}
}

void send_cmd(uchar cmd)
{
	rs=0;rw=0;bus=cmd;delayus10();e=0;e=1;e=0;
}
void send_data(uchar dat)
{
	rs=1;rw=0;bus=dat;delayus10();e=0;e=1;e=0;
}

void clear_screen(void)
{
	uchar c_page,c_column;
	select(0);
	for(c_page=0;c_page<c_page_max;c_page++)
	{
		send_cmd(c_page+lcdpage);
		send_cmd(lcdcolumn);
		for(c_column=0;c_column<c_column_max;c_column++)
		{
			send_data(0x00);
		}
	}
}

void initial(void)
{
	rst=0;delayms(10);rst=1;
	select(0);
	clear_screen();
	send_cmd(lcdrow);
	send_cmd(lcdcolumn);
	send_cmd(lcdpage);
	send_cmd(0x3f);
}
void display_tu()
{
	uint i,j;
	send_cmd(lcdpage);
	send_cmd(lcdcolumn);
	for(i=0;i<8;i++)
	{	
		for(j=0;j<128;j++)
		{
			if(j<64)
			{
				select(1);
				send_cmd(lcdpage+i);
				send_cmd(lcdcolumn+j);
				send_data(table_tu[i*128+j]);delayms(10);
			}else
			{
				select(2);
				send_cmd(lcdpage+i);
				send_cmd(lcdcolumn+j-64);
				send_data(table_tu[i*128+j]);delayms(10);
			}
		}
	}
}



void main()
{
	initial();
	display_tu();

	while(1);
}

5.2 运行效果

6. 工具

6.1PCtoLCD(取字模1) 使用方式

  1. 下载后是一个zip文件,对zip文件进行解压得到解压文件
  2. 双击执行文件
  3. 打开取模软件后,输入需要取模的文字,例如'星游路' ,点击'生成字模'(默认是A51模式,即汇编语言模式)
  4. 修改模式,点击'选项',选择C51格式,点击确定,重新点击生成字模(就得到了C51格式的字模)

6.1转码221(取字模2) 使用方式

字模2更多的是当成图片来取点阵图。我们就以手写'星游路'为例。

  1. 在白纸上写下你要取模的图形。
  2. 使用电脑自带的画图工具,进行大小调整。(1. 截取要调整的文字,2,点击调整大小。3,目标是调整128*64 。先给水128.垂直暂不调整)
  3. 拖拽画板到128 *64
  4. 文件另存为单色图
  1. 点击确定
  1. 得到单色图(也可以是网上的卡通图片转单色图)
  1. 双击取模软件
  1. 点击'新建图像', 输入 128 和64 。
  1. 上传单色图
  1. 生成字模

7. 总结

通过本文的学习,你已经掌握了 LCD12864 从硬件接线、显示原理到软件编程的完整流程。

希望本文能帮助你顺利入门 LCD12864 的开发,欢迎在评论区交流遇到的问题与心得。

相关推荐
兴通物联科技1 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
国科安芯4 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
天空'之城6 小时前
单片机基础核心知识点汇总(十七)
单片机·嵌入式硬件
我不管我就要叫小猪7 小时前
STM32——SPI
stm32·单片机·嵌入式硬件
Ryan.F8 小时前
电容(capacitance)
单片机·嵌入式硬件
夜月yeyue8 小时前
SOME/IP 服务模型
linux·服务器·单片机·安全·车载系统
夜月yeyue8 小时前
SOME/IP-SD 服务发现故障
网络·单片机·网络协议·tcp/ip·安全·服务发现
LCG元9 小时前
【实战】STM32 从零实现 Modbus RTU 从站:寄存器映射、CRC 校验与串口中断解析
stm32·单片机·嵌入式硬件
尼喃9 小时前
PW1555平芯微代理商,DFN3X3-10封装耐受30V浪涌非持续工作
嵌入式硬件