常用显示屏学习——LCD12864(含高级驱动程序)

LCD12864液晶显示屏

屏幕介绍

① 可显示四行字符,每行可显示8个汉字或者16个数字和字母;

②可串行通信和并行通信;

③ 串口接口管脚信号

通信方法

(一)八位并行通信方法


(二)串行通信方法

用户指令集

一般常用的指令有:

扩充功能设定指令集(当需要自定义图案,可以把绘图模式打开)

清除显示指令(这个指令只能清除DDRAM里的数据,不能清除绘图模式GDRAM的数据)

显示状态指令(打开后才能显示数据)

进入点设定指令(具体操作看说明一般为0x06)

注意:在切换指令集写入数据时,会导致闪屏现象,因此不要在程序中频繁的切换指令集


驱动程序

12864带字库驱动程序

LcdWrods_Printf()类似prinf使用方法,用起来超级方便!

c 复制代码
#include <stdio.h>
#include <stdarg.h>
#define WRITE_CMD	0xF8//写命令  
#define WRITE_DAT	0xFA//写数据
void SendByte(uint8_t byte)
{
     uint8_t i; 
	  for(i = 0;i < 8;i++)
    {
			if((byte << i) & 0x80)  //0x80(1000 0000)  只会保留最高位
			{
				SID = 1;           // 引脚输出高电平,代表发送1
			}
			else
			{
				SID = 0;         // 引脚输出低电平,代表发送0
			}
		/*或		
			SID =	(Dbyte << i) & 0x80;	
			上面那样为了方便理解
		*/
			SCLK = 0;   //时钟线置低  允许SID变化
			Delay_us(5); //延时使数据写入
			SCLK = 1;    //拉高时钟,让从机读SID
		}   
}
void Lcd_WriteData(uint8_t Dat )
{
     Delay_ms(1);     
     SendByte(WRITE_DAT);            //11111,RW(0),RS(1),0
     SendByte(0xf0&Dat);      //高四位
     SendByte(Dat<<4);   //低四位(先执行<<)
}
int fputc(int ch, FILE *f)
{
	Lcd_WriteData(ch);			//将printf的底层重定向到自己的发送字节函数
	return ch;
}

void Display_Words(uint8_t x,uint8_t y,char *str)
{ 
	Lcd_WriteCmd(LCD_addr[x][y]); //写初始光标位置
	while(*str>0)
    { 
      Lcd_WriteData(*str);    //写数据
      str++;     
    }
}

void LcdWrods_Printf(int row, int col, char *format, ...) 
{
	char String[100];				//定义字符数组
	va_list arg;					//定义可变参数列表数据类型的变量arg
	va_start(arg, format);			//从format开始,接收参数列表到arg变量
	vsprintf(String, format, arg);	//使用vsprintf打印格式化字符串和参数列表到字符数组中
	va_end(arg);					//结束变量arg
	Display_Words(row,col,String);		//串口发送字符数组(字符串)
}
12864绘图模式驱动程序
c 复制代码
#define WRITE_CMD	0xF8//写命令  
#define WRITE_DAT	0xFA//写数据
void Lcd_WriteCmd(uint8_t Cmd )
{
     Delay_ms(1);     //由于我们没有写LCD正忙的检测,所以直接延时1ms,使每次写入数据或指令间隔大于1ms 便可不用写忙状态检测
     SendByte(WRITE_CMD);            //11111,RW(0),RS(0),0   
     SendByte(0xf0&Cmd);      //高四位
     SendByte(Cmd<<4);   //低四位(先执行<<)
}
void Lcd_WriteData(uint8_t Dat )
{
     Delay_ms(1);     
     SendByte(WRITE_DAT);            //11111,RW(0),RS(1),0
     SendByte(0xf0&Dat);      //高四位
     SendByte(Dat<<4);   //低四位(先执行<<)
}
void LCD_Display_Picture(const uint8_t *img,uint8_t num)
{
	uint8_t x,y,i;
	for(i = 0; i < 1; i++)   //上下屏写入
	{
		for(y=0;y<32;y++)   //垂直Y写32次
		{  
			for(x=0;x<1;x++)   //横向X写1次
			{
				Lcd_WriteCmd(0x80 + y);		//行地址
				Lcd_WriteCmd(0x80+num + x+i);		//列地址
				Lcd_WriteData(*img ++);		//写高位字节数据 D15-D8   
				Lcd_WriteData(*img ++);		//写低位字节数据 D7-D0
			}
		}
	}
}	

创作不易,麻烦点赞收藏+关注,感谢各位亲们!!!!


相关推荐
易知嵌入式小菜鸡32 分钟前
CCS-MSPM0G3507-3-基础篇-PWM输出
stm32·单片机·嵌入式硬件
Wy. Lsy3 小时前
Kotlin基础学习记录
开发语言·学习·kotlin
The_Killer.3 小时前
格密码--数学基础--06对偶空间与对偶格
学习·线性代数·密码学
悟空胆好小4 小时前
分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
网络·人工智能·科技·嵌入式硬件
Meraki.Zhang5 小时前
【STM32实践篇】:最小系统组成
stm32·单片机·嵌入式硬件·最小系统
彤银浦5 小时前
Web学习笔记3
前端·笔记·学习·html5
之歆5 小时前
Python-魔术方法-创建、初始化与销毁-hash-bool-可视化-运算符重载-容器和大小-可调用对象-上下文管理-反射-描述器-二分-学习笔记
笔记·python·学习
优乐美香芋味好喝5 小时前
2025年7月11日学习笔记&一周归纳——模式识别与机器学习
笔记·学习·机器学习
Do vis8246 小时前
STM32第二十一天定时器TIM
stm32·单片机·嵌入式硬件
声网7 小时前
对话 AI 陪伴新宠 Tolan 创始人:拒绝「恋爱脑」,「非人」陪伴更受欢迎?丨 Voice Agent 学习笔记
人工智能·笔记·学习