LCD 12864B V2.0的使用

2023-05-16

内置ST7920控制器和中文字库的LCD12864的使用

前言

大家好,我是小灬贱。今天我给大家带来LCD12864的使用方法以及我的一些经验。
文章里面如有不妥之处或者表达不清晰的地方还请各位多多指教。可以在文下评论或者私信我。

软件环境

1.系统:Windows 10
2.单片机:Atmega16
3.软件环境:Atmel studio 7.0

头文件

#define F_CPU 8000000//告诉它晶振是8Mhz
#include <avr/io.h>//端口头文件
#include<util/delay.h>//延时头文件
#include <avr/pgmspace.h>//flash操作的头文件

首先我们先来了解屏幕的那么多个引脚分别是干什么的

12864引脚
到这里可能很多人都会有一个问题:一脚究竟是哪个脚?
好,问题不大,我这就告诉你
12864引脚实物
好,知道引脚对应的是什么功能那我们就继续了解他的控制指令

基本指令表(RE=0)

12864基本指令

扩充指令表(RE=1)

12864扩展指令

指令详解

12864指令详解
知道这些指令会让屏幕发什么变化还不够,最重要的就是MCU跟LCD的通信方式和通信要求;
什么是通信呢? 可以理解为MCU跟LCD之间语言(就像我跟你之间有个"普通话"),只有共同的通信方式才能传达我想传达的指令;不然就会可能出现"对牛弹琴"这种无奈又可笑的尴尬;

并行时序图

并行时序
通过以上时序图,我们可以得知LCD的并行是一个跟6800一样的的通信方式
这个12864的并行通信可以分为两种

  • 使用8位数据线外加三根控制线的标准6800通信
  • 使用4位数据线外加三根控制线的半6800通信

下面是并行8位数据线的驱动代码

void LCD_WriteOneByte(unsigned char data,unsigned char cmd) //写一个字节(data,(1数据0指令))
{
	//使用8位数据通信模式,8位数据用的是PB口,对应12864的D0~D7(12864的数据I/O)
	RW_0;	//RW=0;设置写入模式(对应12864的RW)
	if (cmd) RS_1;//高数据 低指令(对应12864的RS)
	else RS_0;
	EN_1;//使能拉高(对应12864的EN)
	PORTB = data;//给数据到I/O
	_delay_us(10);//等电平稳定
	EN_0;//使能拉低,数据送出完毕
	_delay_us(100);//等12864接收完毕
}
void LCD_Init()
{
	///文字显示模式初始化代码
	LCD_WriteOneByte(0x30,0);_delay_ms(40);
	LCD_WriteOneByte(0x30,0);_delay_ms(40);//设置8位数据总线,执行基本指令集
	LCD_WriteOneByte(0x0c,0);_delay_ms(40);//开显示,关光标,关光标闪烁	
	LCD_WriteOneByte(0x02,0);_delay_ms(40);//游标移动到起始位置
	LCD_WriteOneByte(0x01,0);_delay_ms(40);//清屏
	/*//绘图模式
	LCD_WriteOneByte(0x30,0);_delay_ms(20);
	LCD_WriteOneByte(0x30,0);_delay_ms(20);//设置8位数据总线,执行基本指令集
	LCD_WriteOneByte(0x01,0);_delay_ms(10);//清屏
	LCD_WriteOneByte(0x0c,0);_delay_ms(10);//开显示,关光标,关光标闪烁
	LCD_WriteOneByte(0x01,0);_delay_ms(10);//清屏
	LCD_WriteOneByte(0x36,0);_delay_ms(20);//开绘图
	_delay_ms(10);
	*/
}

下面是并行4位数据线的驱动代码

void LCD_WriteOneByte(unsigned char data,unsigned char cmd) //写一个字节(data,(1数据0指令))
{
	//使用4位数据通信模式,4位数据用的是PB口的高四位(PB4~PB7)
	//注意:使用4线通信时功能设定指令为0x20
	//对应12864的D4~D7(12864的4位数据输入口)
	RW_0;//RW=0;设置写入模式(对应12864的RW)
	if (cmd) RS_1;//高数据 低指令(对应12864的RS)
	else RS_0;
	EN_1;//使能拉高(对应12864的EN)
	//PORTB &= 0xf0;//数据口清零
	PORTB = data; //先送高四位数据
	_delay_us(10);//等电平稳定
	EN_0;
	_delay_us(100);//等12864接收完
	EN_1;//使能再次拉高
	//PORTB &= 0xf0;//数据口清零
	PORTB = (data << 4);//再给低四位数据
	_delay_us(10);//等电平稳定
	EN_0;//使能拉低,数据送出完毕
	_delay_us(100);//等12864接收完毕

}
void LCD_Init()
{
	///文字显示模式初始化代码
	LCD_WriteOneByte(0x20,0);_delay_ms(40);
	LCD_WriteOneByte(0x20,0);_delay_ms(40);//设置8位数据总线,执行基本指令集
	LCD_WriteOneByte(0x0c,0);_delay_ms(40);//开显示,关光标,关光标闪烁	
	LCD_WriteOneByte(0x02,0);_delay_ms(40);//游标移动到起始位置
	LCD_WriteOneByte(0x01,0);_delay_ms(40);//清屏
	/*//绘图模式
	LCD_WriteOneByte(0x20,0);_delay_ms(20);
	LCD_WriteOneByte(0x20,0);_delay_ms(20);//设置8位数据总线,执行基本指令集
	LCD_WriteOneByte(0x01,0);_delay_ms(10);//清屏
	LCD_WriteOneByte(0x0c,0);_delay_ms(10);//开显示,关光标,关光标闪烁
	LCD_WriteOneByte(0x01,0);_delay_ms(10);//清屏
	LCD_WriteOneByte(0x26,0);_delay_ms(20);//开绘图
	_delay_ms(10);
	*/
}

串行时序图

串行时序
这个串行通信是一个类似3线SPI的通信方式;
他这个串行通信对应的是一个控制字节和一个用户数据(指令)字节;
首先把控制字(第一字节)写入到LCD(告诉LCD我接下来要干什么)
然后把用户数据(指令)分成两个字节写入到LCD,时序的第二字节的高四位是用户数据的高4位,低四为必须为零;第三个字节的高四位是用户数据的低4位,低四位必须为零;

void SID(unsigned char x)
{
	if (x) PORTC |= 0x02;//如果x大于等于1,那么I/O输出高;
	else PORTC &= ~0x02;//否则输出低
}
void LCD_writeOneByte(unsigned char data,unsigned char cmd)//写一个字节(data,(控制字))
{
	//SPI通信的控制字:写指令0xf8;//写数据0xfa;//读状态0xfc;//读数据0xfe
	//使用SPI数据通信模式,初始化跟8线并口一样,CS对应12864的RS,SID对应R/W,CLK对应E;
	CLK_0;//CLK下拉
	CS_1;//CS拉高,串行通信开始
	for(unsigned char i=0;i<8;i++)//先告诉12864我需要干什么(把控制字串入)
	{
		CLK_0;
		SID(cmd & (1 << (7-i)));//从数据高位开始逐位写入
		CLK_1;
	}
	for(unsigned char i=0;i<8;i++)//然后串入数据的高位,低四位补零
	{
		CLK_0;
		SID((data & 0xf0) & (1 << (7-i)));//把数据的低四位强制变成0,然后在逐位写入
		CLK_1;
	}
	for(unsigned char i=0;i<8;i++)//然后把数据的低位移到高位再串入,低四位补零
	{
		CLK_0;
		SID(((data<<4) & 0xf0) & (1 << (7-i)));//把数据低位移到高位然后在把移位后的数据的低
		CLK_1;									//四位强制变成0,然后在逐位写入	
	}
	CS_0;//CS拉低,串行通信结束
}
void LCD_Init()
{
	///文字显示模式初始化代码
	LCD_WriteOneByte(0x30,0xf8);_delay_ms(40);
	LCD_WriteOneByte(0x30,0xf8);_delay_ms(40);//设置8位数据总线,执行基本指令集
	LCD_WriteOneByte(0x0c,0xf8);_delay_ms(40);//开显示,关光标,关光标闪烁	
	LCD_WriteOneByte(0x02,0xf8);_delay_ms(40);//游标移动到起始位置
	LCD_WriteOneByte(0x01,0xf8);_delay_ms(40);//清屏
	/*//绘图模式
	LCD_WriteOneByte(0x30,0xf8);_delay_ms(20);
	LCD_WriteOneByte(0x30,0xf8);_delay_ms(20);//设置8位数据总线,执行基本指令集
	LCD_WriteOneByte(0x01,0xf8);_delay_ms(10);//清屏
	LCD_WriteOneByte(0x0c,0xf8);_delay_ms(10);//开显示,关光标,关光标闪烁
	LCD_WriteOneByte(0x01,0xf8);_delay_ms(10);//清屏
	LCD_WriteOneByte(0x26,0xf8);_delay_ms(20);//开绘图
	_delay_ms(10);
	*/
}

以上是三个通信方式的驱动代码和初始化。
注意:使用8线或者4线并口通信时,12864的PSB要接到高电平;使用3线串口时PSB接低电平;
好啦,准备的差不多啦.PS(这里又有一个不怕死的12864,嘿嘿.肘子,给它上一课(2333))
在这里插入图片描述

void LCD_Writehanzi(unsigned char x,unsigned char y,unsigned char *data)//写汉字、字符(列,行,数据)
{
	switch(y)//定位第几行第几列开始写汉字
	{
		case 1 : LCD_writeOneByte(0x80+x,0);break;
		case 2 : LCD_writeOneByte(0x90+x,0);break;
		case 3 : LCD_writeOneByte(0x88+x,0);break;
		case 4 : LCD_writeOneByte(0x98+x,0);break;
	}
	while(*data!='\0')LCD_writeOneByte(*data++,1);//写入汉字
}
int main(void)
{
	DDRB = 0XFF;
	PORTB = 0X00;
	DDRC = 0XFF;
	PORTC = 0X00;//端口初始化
	_delay_ms(100);
    LCD_Init();//液晶初始化
    while (1) 
    {
		LCD_writehanzi(0,2,"祖国母亲70");//定位第0列,第2行开始显示
		LCD_writehanzi(1,3,"周年快乐!!");//定位第1列,第3行开始显示
    }
}

汉字素材
然后显示图片。
在这里插入图片描述

void LCD_Drawing(unsigned char *data)//绘图
{
	for(unsigned char i=0;i<32;i++)//先写入上半屏
	{
		LCD_writeOneByte(0x80+i,0);//上板屏有32行
		LCD_writeOneByte(0x80,0);//第几列开始
		for (unsigned char q=0;q<16;q++)
		{
			LCD_writeOneByte(pgm_read_byte(&*data++),1);//这里用到了取Flash的一个字节的函数
		}
	}	
	for(unsigned char i=0;i<32;i++)//然后写下半屏
	{
		LCD_writeOneByte(0x80+i,0);//下半屏有32行
		LCD_writeOneByte(0x88,0);//从第几列开始
		for (unsigned char q=0;q<16;q++)
		{
			LCD_writeOneByte(pgm_read_byte(&*data++),1);//这里用到了取Flash的一个字节的函数
		}
	}
}
PROGMEM  const unsigned char QR[1024]={
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x67,0x60,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x60,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xE0,0x00,0x00,0x00,
	0x00,0x01,0xF7,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0xC0,0x00,0x00,0x00,
	0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,
	0x00,0x03,0xBE,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC6,0x00,0x00,0x00,0x00,
	0x00,0x03,0x08,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,
	0x00,0x03,0x80,0xE0,0x00,0x00,0x00,0x01,0x83,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,
	0x00,0x03,0x81,0xE0,0x00,0x00,0x00,0x01,0x83,0x00,0x1C,0x60,0x00,0x00,0x00,0x00,
	0x00,0x01,0xC3,0x80,0x00,0x1F,0xFE,0x01,0x87,0xF0,0x18,0xE0,0x00,0x00,0x00,0x00,
	0x00,0x00,0xE7,0x01,0x00,0x1F,0xFE,0x01,0x8F,0xF8,0x18,0x70,0x00,0x00,0x00,0x00,
	0x00,0x00,0xFF,0x0F,0x80,0x0C,0x06,0x01,0xC3,0x18,0x1F,0xFF,0x00,0x00,0x00,0x00,
	0x00,0x00,0x3E,0x1D,0x98,0x0C,0x06,0x07,0xE3,0x1F,0x1F,0xFF,0x00,0x00,0x00,0x00,
	0x00,0x00,0x1C,0x3F,0xFC,0x0C,0x06,0x0F,0x8F,0xFF,0x09,0x3A,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x3F,0xFC,0x0C,0x06,0x0D,0x9F,0xF8,0x03,0xBF,0x80,0x00,0x00,0x00,
	0x00,0x00,0x00,0x7F,0x80,0x0F,0xF6,0x0D,0x83,0x38,0x03,0xBB,0x80,0x00,0x00,0x00,
	0x00,0x00,0x00,0xE1,0x80,0x0F,0xF6,0x01,0x83,0x3C,0x03,0xB9,0xC0,0x00,0x00,0x00,
	0x00,0x00,0x01,0xE1,0xF8,0x0C,0x06,0x01,0x87,0x1E,0x03,0x79,0x80,0x00,0x00,0x00,
	0x00,0x00,0x01,0xDF,0xFC,0x0C,0x06,0x01,0x87,0x0E,0x00,0x70,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x1F,0xF8,0x0C,0x06,0x01,0x8E,0x06,0x00,0x70,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x03,0x80,0x0C,0x06,0x01,0x9C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x03,0x80,0x0F,0xFE,0x00,0x00,0x00,0x3B,0xC0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x03,0x80,0x0F,0xFE,0x00,0x00,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0xFF,0xFE,0x0C,0x00,0x00,0x00,0x00,0x7F,0x60,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x66,0x60,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0xE0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x03,0xFC,0x00,0xF9,0xE0,0x00,0x00,0x01,0x83,0x80,0x00,0x00,0x00,
	0x00,0x00,0x00,0x03,0xFF,0x83,0xE0,0xE0,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x07,0x9F,0xE7,0x80,0x70,0x00,0x00,0x3C,0x0F,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x0F,0x03,0xFF,0x00,0x70,0x00,0x00,0x7F,0xBF,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x0E,0x00,0xFC,0x00,0x70,0x00,0x00,0x73,0xFC,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x1E,0x00,0x38,0x00,0x70,0x00,0x00,0x7C,0xF9,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xE0,0x00,0x00,0x1F,0x7D,0xC0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x1C,0x00,0x00,0x01,0xE0,0x00,0x00,0x0F,0xDF,0xC0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x1E,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0xCF,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xFB,0xF8,0x00,0x00,0x00,
	0x00,0x00,0x00,0x07,0x80,0x00,0x07,0x80,0x00,0x00,0x01,0xFC,0x7C,0x00,0x00,0x00,
	0x00,0x00,0x00,0x03,0xC0,0x00,0x0F,0x00,0x00,0x00,0x07,0xBF,0x3E,0x00,0x00,0x00,
	0x00,0x00,0x00,0x01,0xF0,0x00,0x1E,0x00,0x00,0x00,0x0F,0xCF,0x0F,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0xF8,0x00,0x3C,0x00,0x00,0x00,0x0F,0xF7,0x07,0x80,0x00,0x00,
	0x00,0x00,0x00,0x00,0x7E,0x00,0x38,0x00,0x00,0x00,0x1C,0xFC,0x07,0xC0,0x00,0x00,
	0x00,0x00,0x00,0x00,0x1F,0x80,0x78,0x00,0x00,0x00,0x7C,0x7E,0x01,0xC0,0x00,0x00,
	0x00,0x00,0x00,0x00,0x07,0xC0,0xF0,0x00,0x00,0x00,0x7F,0x9E,0x01,0xC0,0x00,0x00,
	0x00,0x00,0x00,0x00,0x03,0xE1,0xE0,0x00,0x00,0x00,0x7F,0xCE,0x01,0xC0,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0xFB,0xC0,0x00,0x00,0x00,0x3B,0xF0,0x01,0xC0,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x18,0xF8,0x03,0xC0,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x0E,0x3C,0x03,0x80,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x03,0x9C,0x07,0x80,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0xC0,0x07,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00};//图像数据
int main(void)
{
	DDRB = 0XFF;
	PORTB = 0X00;
	DDRC = 0XFF;
	PORTC = 0X00;//端口初始化
    LCD_Init();//液晶初始化
    while (1) 
    {
		LCD_Drawing(QR);
    }
}

在这里插入图片描述

注意事项

注意!本文中的指令集有个别地方有按照我的理解稍加修改过!文末有原版资料

  • LCD_writeOneByte(x,y):这个子程序在并行通信方式时y=1是代表写入数据,y=0代表写入指令;在串行通信时按照资料给的控制字写入即可
  • 当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF 标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF 标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
  • “RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。
  • 文本显示RAM(DDRAM)
    文本显示RAM 提供8 个×4行的汉字空间,当写入文本显示RAM时,可以分别显示CGROM、HCGROM与CGRAM
    的字型;KM12864可以显示三种字型,分别是半宽的HCGROM 字型、自定义字符CGRAM字型及中文库CGROM
    字型。三种字型的选择,由在DDRAM中写入的编码选择,各种字型详细编码如下:
    显示半宽字型:将一位字节写入DDRAM 中,范围为02H-7FH 的编码。
    显示CGRAM字型:将两字节编码写入DDRAM中,总共有0000H,0002H,0004H,0006H四种编码
    显示中文字型:将两字节编码写入DDRAM ,范围为A1A0H-F7FFH(GB码)或A140H-D75FH(BIG5码)的编码。
  • 绘图RAM(GDRAM)
    绘图显示RAM 提供128×8个字节的记忆空间,在更改绘图RAM 时,先连续写入水平与垂直的坐标值,再写
    入两个字节的数据到绘图RAM,而地址计数器(AC)会自动加一;整个写入绘图RAM的步骤如下:
    1、开启绘图显示功能。
    2、先将水平坐标(X)写入绘图RAM地址,再将垂直坐标(Y)写入绘图RAM 地址;

总结

通过这次学习让我学会了什么
  • 通过这次学习我学会了怎么往Atmega16的flash里存放超过内存的常量和读取我存放进去的数据;
  • 通过这次学习,大概了解了SPI通信方式的时序;
  • 通过这次学习,进一步熟悉了6800通信;
  • 通过这次学习,更加深入的了解了数据类型;
在这次学习中遇到了很多问题
  • 比如数据类型中Signed char和char的区别:其区别在于Signed char是一个变量类型,而char是一个字符类型,所以在编译的时候因为这个的区别导致编译器警告"类型不同";这个问题也多亏马先生给我讲解;非常感谢!
  • 比如Switch语句中的case,在调试过程中遇到了Switch语句不起作用的情况,看了一下警告,提示case1以定义但未使用,然后发现原来case跟1之间必须要有一个空格,代表这个是分支1的意思.也是这个语句的一个标准吧.主要是还是因为C语言的各种语句不够熟练导致的这个错误.
  • 比如在使用4线通信时,启用不了绘图功能,原来是资料上的拓展指令的功能选择缺失了一个DL,所以一直以为是0x36是开启绘图,导致其用不了绘图,到后面叫马先生帮忙查看程序何处有问题,马先生找了一会发现4线的开启绘图要0x26…(写程序也不能完全相信资料,要根据上下文勇敢的去推测寄存器设定的其他可能);感谢马先生!
    当然这一篇文章还有程序等等还有很多我未发现的问题,希望看到的网友不惜赐教.感谢!

总结一下这个工程的思路

先了解12864的引脚
了解12864的通信协议
根据引脚和通信协议时序图编写驱动代码
根据自身要求编写需要的功能子程序

好啦,12864就讲到这里

资料附上https://download.csdn.net/download/qq_35227168/11830646

明天就是新中国成立70周年的日子.祝祖国母亲70周年生日快乐!

2019/09/30

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LCD 12864B V2.0的使用 的相关文章

  • 20190226-LCD_GUI

    LCD GUI 这里需要先剃度填色 xff0c 然后再显示汉字 xff0c 最后在显示符号和数字 xff0c 否则会被覆盖 xff0c 显示不出来汉字或者数字符号
  • LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)

    阴码 43 逐列 式 43 顺向 43 C51 格式 span class token keyword void span span class token function LCD ShowChar span span class tok
  • 1.14.ARM裸机第十四部分-LCD显示器

    第一部分 章节目录 1 14 1 LCD简介 1 14 2 LCD的接口技术 1 14 3 LCD如何显示图像1 1 14 4 LCD如何显示图像2 1 14 5 LCD的六个主要时序参数1 1 14 6 LCD的六个主要时序参数2 1 1
  • 设备树学习之(十二)LCD驱动

    开发板 xff1a tiny4412SDK 43 S702 43 4GB Flash 要移植的内核版本 xff1a Linux 4 4 0 xff08 支持device tree xff09 u boot版本 xff1a 友善之臂自带的 U
  • micropython 8266 驱动 12864G 液晶LCD屏幕

    1 xff0c 接线顺序 引脚定义 cs 61 Pin 4 片选 reset 61 Pin 5 复位 rs 61 Pin 16 数据 指令 1数据 0 指令 DC sda 61 Pin 13 数据信号 sck 61 Pin 14 时钟信号
  • 步进电机控制与LCD显示L297与L298

    步进电机控制与LCD显示L297与L298 上次介绍了PWM和L298结合的电机调速 xff01 接下来介绍L297与L298结合的例子 xff01 PWM电机调速 下面是L297的简介 xff1a L297是步进电机专用控制器 xff0c
  • STM32的中断体系和FSMC控制LCD-第3季第7部分视频课程-朱有鹏-专题视频课程

    STM32的中断体系和FSMC控制LCD 第3季第7部分视频课程 861人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第7个课程 xff0c 本课程详细讲解STM32的外部中断和FSMC模块 xff0c 这两个模块都
  • LCD液晶屏没有点亮,为什么会自动出现笔段、走线、乱码等现象?

    一般LCD段码液晶屏在不触碰的情况下 xff0c 是不会产生这种自动出现笔段 走线 乱码等现象 只有在物体或手碰到液晶屏的时候才会或多或少的出现这种问题 xff0c 而造成这种现象的是 静电 静电是一种处于静止状态的电荷 在干燥和多风的秋天
  • IMX6ULL + SPI LCD(驱动IC ILI9341)显示简单的QT界面

    1 硬件 xff1a 使用正点原子的IMX6ULL Linux开发板 开发板底板原理图版本 xff1a V2 1 核心板原理图版本 xff1a V1 6 LCD xff1a MSP2402 IC ILI9341 2 查找可用引脚 开发板上引
  • 使用FSMC驱动LCD以及数据线偏移的问题

    FSMC的理解 使用FSMC功能将8080接口的LCD当外部RAM来使用 xff08 数据传给LCD时没经过内部SRAM xff0c 所以一帧图片很大也可以直接传 xff09 xff0c 根据STM的地址分配图可以看出外部RAM的地址由0x
  • LVGL V8

    本文适用于LVGL V8版本 LVGL simulator vs2019 官方工程 lv sim visual studio 使用注意事项 1 将官方工程从github上下载下来 最好使用git 将整个工程clone下来 因为工程内部有依赖
  • MSP430 LCD控制器解释

    CC430F613x的LCD控制器最多能控制160段 The LCD B controller features are Display memory Automatic signal generation Configurable fra
  • linux LCD驱动实验

    文章目录 一 linux下LCD驱动解析 1 Framebuffer设备 2 LCD驱动解析 二 硬件原理图分析 三 LCD驱动程序编写 1 LCD 屏幕 IO 配置 2 LCD 屏幕参数节点信息修改 3 LCD 屏幕背光节点信息 四 运行
  • Linux下lt8911exb调试总结

    调试lt8911exb花了两天时间 总结下 ic功能介绍 mipi转eDP http cn lontiumsemi com UploadFiles pdf LT8911EXB Product Brief pdf github下有驱动源码 可
  • LCD 亮度相关(背光) 正负压相关

    LCD 亮度相关 背光 kernel msm 3 18 drivers video msm mdss mdss fb c 调用led classdev register 注册lcd backlight sys class leds lcd
  • STM32 基础系列教程 45 - FSMC_LCD_Touch

    前言 上一节我们完成了用 STM32F4的 FSMC接口来控制 TFTLCD的显示的操作 其实正点原子的探索者F4开发板带的屏幕支持触摸操作 笔者用的是4 3寸的电容触摸屏 本节我们继续实验 来完成基于STM32的触摸屏的实验 关于触摸屏的
  • 我所理解的DRM显示框架

    什么是DRM DRM全称是DirectRenderingManager 是linux主流的一种显示框架 支持多图层合成 为用户图层提供统一的API libdrm 来访问GPU 实现统一管理 它是为了解决多个程序对video card访问协同
  • 基于s5pv-210开发板 LCD驱动

    lcd硬件原理 利用液晶制成的显示器称为 LCD 依据驱动方式可分为静态驱动 简单矩阵驱动以及主动矩阵驱动 3 种 其中 简单矩阵型又可再细分扭转向列型 TN 和超扭转式向列型 STN 两种 而主动矩阵型则以薄膜式晶体管型 TFT 为主流
  • HT1621B液晶驱动(附电路图)

    最近做了一个项目用到了HT1621 电路图 datasheet code HT1621B datasheet include ht1621 h void ht1621 send high order data UCHAR data UCHA
  • Raspberry Pi上设置I2C LCD

    在本教程中 我将向您展示使用I2C设置LCD所需的一切 连接LCD I2C也被称为两线接口 因为它仅使用两根线来发送和接收数据 实际上 如果算上Vcc和地线 则是4线 但是电源始终可以来自其他来源 连接启用I2C的LCD 将LCD与I2C背

随机推荐