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

news/2025/2/13 22:04:34/

LCD12864液晶显示屏

屏幕介绍

① 可显示四行字符,每行可显示8个汉字或者16个数字和字母;
②可串行通信和并行通信;
③ 串口接口管脚信号
在这里插入图片描述

在这里插入图片描述

通信方法

(一)八位并行通信方法

在这里插入图片描述
在这里插入图片描述

(二)串行通信方法

在这里插入图片描述

用户指令集

一般常用的指令有:
扩充功能设定指令集(当需要自定义图案,可以把绘图模式打开)
清除显示指令(这个指令只能清除DDRAM里的数据,不能清除绘图模式GDRAM的数据)
显示状态指令(打开后才能显示数据)
进入点设定指令(具体操作看说明一般为0x06)

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

在这里插入图片描述
在这里插入图片描述

驱动程序

12864带字库驱动程序

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

#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),0SendByte(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;					//定义可变参数列表数据类型的变量argva_start(arg, format);			//从format开始,接收参数列表到arg变量vsprintf(String, format, arg);	//使用vsprintf打印格式化字符串和参数列表到字符数组中va_end(arg);					//结束变量argDisplay_Words(row,col,String);		//串口发送字符数组(字符串)
}
12864绘图模式驱动程序
#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),0SendByte(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}}}
}	

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



http://www.ppmy.cn/news/1362284.html

相关文章

前端项目打包体积分析与优化

一、安装依赖分析工具 npm install webpack-bundle-analyz 二、修改webpack.config.js文件 1、导入上面下载的包 2、在plugins里创建实例 三、启动打包命令 npm run build 会弹出如下界面&#xff1a; 四、优化 1、通过CDN导入react-dom文件 修改webpack.config.js文件里…

【软件设计模式之外观模式】

文章目录 前言一、什么是外观模式&#xff1f;1.定义和原理2.应用场景 二、外观模式的优缺点1.优点2.缺点 三、实际应用案例1.代码实现2.讨论 五、总结 前言 外观模式通过提供一个统一的高级接口&#xff0c;使得访问复杂子系统变得更简单。这种模式的核心在于&#xff0c;它为…

流浪动物救助平台:Java开发的实践与思考

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

github 笔记: fatal: Could not read from remote repository.

git clone 包时出现这两行报错 gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository.这意味着 SSH 认证失败了&#xff0c;通常是因为本地机器的 SSH 密钥未被 GitHub 账户识别/未正确设置。在终端中使用 ssh -T gitgithub.com 可以…

消息中间件篇之RabbitMQ-消息不丢失

一、生产者确认机制 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后&#xff0c;会返回一个结果给发送者&#xff0c;表示消息是否处理成功。 当消息没有到交换机就失败了&#xff0c;就会返回publish-confirm。当消息没有到达MQ时&…

2_怎么看原理图之协议类接口之UART笔记

通信双方先约定通信速率&#xff0c;如波特率115200 一开始时&#xff0c;2440这边维持高电平 1> 开始发送时&#xff0c;由2440将&#xff08;RxD0&#xff09;高电平拉低&#xff0c;并持续一个T的时间&#xff08;为了让PC机可以反应过来&#xff09;&#xff0c;T1/波…

常用软件下载地址

Git&#xff1a; Git - Downloading Package TortoiseGit&#xff1a; download.TortoiseGit.org – Index of /tgit/

ubuntu22 编译 SIBR 3dgs

1.clone 代码 git clone https://github.com/graphdeco-inria/gaussian-splatting.git --recursive 2.基础库文件安装 sudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3…