当前位置: 首页 > article >正文

初学stm32 --- IO口模拟8080驱动LCD屏

显示器分类

 LCD简介

Liquid Crystal Display,即液晶显示器,由:玻璃基板、背光、驱动IC等组成。全彩LCD,是一种全彩显示屏(RGB565RGB888),可以显示各种颜色

 

LCD接口分类 

 MCU屏接口由于自带SRAM,驱动简单,大部分单片机都能驱动!

ILI9341芯片

ILI9341芯片支持多种通信接口。MCU接口(8/9/16/18位)、3/4 线SPI接口、RGB接口(6/16/18位)。LCD模组接口由厂家设计的决定

 三基色原理

无法通过其他颜色混合得到的颜色,称之为:基本色通过三基色混合,可以得到自然界中绝大部分颜色!

电脑一般用32位来表示一个颜色(ARGB888):

 单片机一般用16/24位表示一个颜色(RGB565/RGB888):

        RGB565:

         RGB888:

 LCD驱动原理

LCD屏(MCU接口)驱动的核心是:驱动LCD驱动芯片

LCD驱动基本知识:

18080时序,LCD驱动芯片一般使用8080时序控制,实现数据写入/读取

2,初始化序列(数组),屏厂提供,用于初始化特定屏幕,不同屏幕厂家不完全相同

3,画点函数、读点函数(非必需),基于这两个函数可以实现各种绘图功能!

LCD驱动的一般过程

1. 8080底层操作函数:        写数据、写命令、读数据

2. 初始化LCD:        主要是发送初始化序列/数组

3. 实现画点函数:        有了画点函数,就可以实现各种操作函数了!

 4.实现读点函数:        用于读取屏幕颜色,一般上GUI了才用,可不用!

 8080时序简介

        并口总线时序,常用于MCU屏驱动IC的访问,由Intel提出,也叫英特尔总线

 

 8080写时序

        数据(RS=1/命令(RS=0)在WR的上升沿,写入LCD驱动ICRD保持高电平

         数据(RS=1/命令(RS=0)在RD的上升沿,读取到MCUWR保持高电平

 

 8080读写简化代码

写数据代码:

void lcd_wr_data(uint16_t data)
{
    	LCD_RS(1);		/* 操作数据 */
    	LCD_CS(0);		/* 选中 */
    	LCD_DATA_OUT(data);	/* 数据 */
    	LCD_WR(0);		/* WR低电平 */
    	LCD_WR(1);		/* WR高电平 */
    	LCD_CS(1);		/* 释放片选 */
}

读数据代码:

uint16_t  lcd_rd_data(void)
{
	uint16_t ram;  			/* 定义变量 */
 	LCD_RS(1);              /* 操作数据 */
    LCD_CS(0);			    /* 选中 */
    LCD_RD(0);			    /* RD低电平 */
   	ram = LCD_DATA_IN;    	/* 读取数据 */
    LCD_RD(1);			    /* RD高电平 */
    LCD_CS(1);			    /* 释放片选 */
	return ram;			/* 返回读数 */
}

LCD驱动芯片简介

用于控制LCD的各种显示功能和效果,整体功能较复杂。常见型号:ILI9341/ST7789

一般我们只需要:6条指令即可完成对LCD的基本使用(以9341为例)

 ID指令(0XD3

         读取LCD控制器型号,通过型号可以执行不同LCD初始化,以兼容不同LCD

 访问控制指令(0X36

实现GRAM读写方向控制,即:控制GRAM自增方向,从而控制显示方向

MX,MY,MV:共同控制GRAM自增方向(扫描方向)

BGR位:可以控制RGBBGR顺序

MXMYMV扫描方向控制关系

 X坐标设置指令(0X2A

列地址设置指令,一般用于设置X坐标

SC:起始坐标                        EC:结束坐标

设置关系:0SCEC239LCD像素宽度)

Y坐标设置指令(0X2B

页地址设置指令,一般用于设置Y坐标

 SP:起始坐标                EP:结束坐标

设置关系:0SPEP319LCD像素高度)

GRAM指令(0X2C

发送该指令后,数据线变成16位,可以开始写入GRAM数据,支持地址自增

每次写入1个像素点的颜色值(RGB565),地址自增方向由MX/MY/MV控制

无需重新设置坐标,可实现连续写入,大大提高写入速度。

GRAM指令(0X2E

发送该指令后,数据线变成16位,可以开始读取GRAM数据,支持地址自增

1个点的颜色,要读3

1,dummy        2,R1G1        3,B1R2

读颜色的简化代码:

uint16_t r, g, b;
r = lcd_rd_data();
g = lcd_rd_data();
b  = lcd_rd_data();
g = r & 0XFF;
return (((r >> 11) << 11) | ((g >> 2) << 5) | (b >> 11));

读点函数代码(精简)

uint16_t  lcd_rd_data(void)
{
	uint16_t ram;  		/* 定义变量 */
	DATA_IN_MODE();	/* 设置数据输入 */
 	LCD_RS(1);              	/* 操作数据 */
    	LCD_CS(0);			/* 选中 */
    	LCD_RD(0);		/* RD低电平 */
   	ram = LCD_DATA_IN;    	/* 读取数据 */
    	LCD_RD(1);		/* RD高电平 */
    	LCD_CS(1);			/* 释放片选 */
	DATA_OUT_MODE();	/* 设置数据输出 */
	return ram;		/* 返回读数 */
}
uint16_t  lcd_read_point (uint16_t x, uint16_t y)
{
	uint16_t r = 0, g = 0, b = 0;	/* 定义变量 */
	lcd_set_cursor(x, y);		/* 设置坐标 */
 	lcd_wr_regno(0X2E);		/* 发读点命令 */
 	r = lcd_rd_data();  		/* 假读 */
	r = lcd_rd_data();  		/* 读rg */
	b = lcd_rd_data(); 		/* 读b */
    	g = r & 0XFF;       			/* 得到g值 */
	return (((r >> 11) << 11) | ((g >> 2) << 5) | (b >> 11));
}

LCD基本驱动实现

目标:用最简单代码,点亮开发板LCD屏,实现任意位置画点和读点

 1,确定IO连接关系

LCD模块原理图、开发板液晶接口原理图

2,初始化IO

初始化连接LCD的各个IO

3,初始化FSMC外设 

可选,某些芯片是没有FSMC外设,MINI板是没有的

4,编写读写接口函数

lcd_wr_datalcd_wr_regnolcd_write_reglcd_rd_data

 5,编写LCD初始化函数

编写lcd_init函数,完成初始化序列配置,点亮背光等

 6,编写LCD画和读点函数

编写lcd_draw_point函数,实现LCD任意位置画点

硬件IO连接关系

LCD控制结构体简介

/* LCD重要参数集 */
typedef struct
{
    uint16_t 	width;     		/* LCD 宽度 */
    uint16_t 	height;    		/* LCD 高度 */
    uint16_t 	id;        		/* LCD ID */
    uint8_t 		dir;        /* 横屏还是竖屏控制:0,竖屏;1,横屏 */
    uint16_t 	wramcmd;   	/* 开始写gram指令 */
    uint16_t 	setxcmd;   	/* 设置x坐标指令 */
    uint16_t 	setycmd;  	/* 设置y坐标指令 */
} _lcd_dev;

ASCII字库制作(16*16

使用PCtoLCD2002.exe软件制作ASCII字库!

 


http://www.kler.cn/a/465206.html

相关文章:

  • Elasticsearch Serverless中的数据流自动分片深度解析
  • javaEE-文件操作和IO-文件
  • 047_小驰私房菜_Qcom 8系列,Jpeg GPU 旋转
  • 使用python调用翻译大模型实现本地翻译【exe客户端版】
  • OWASP ZAP之API 请求基础知识
  • 昆仑万维大数据面试题及参考答案
  • 1 数据库(终):数据库管理员(数据可的备份与、DCL_管理用户)
  • STLG_01_05_程序设计C语言 - 数据类型概念解析
  • QT:控件属性及常用控件(1)------核心控件及属性
  • FortiAl为擎重塑网络与安全运营未来
  • k8s基础(1)—Kubernetes-Pod
  • 如何在2025年创建一个网站:使用US Domain Center和WordPress的终极指南
  • 玉米中的元基因调控网络突出了功能上相关的调控相互作用。\functions.R
  • 今日自动化编辑部今日自动化杂志社2024年第19期部分目录
  • 物联网控制期末复习
  • 嵌入式驱动开发详解9(platform驱动)
  • 实践:事件循环
  • STM32入门教程(CAN通信篇)
  • (leetcode算法题)​122. 买卖股票的最佳时机 II​ 和 123. 买卖股票的最佳时机 III
  • PostgreSQL-01-入门篇-简介
  • Redis数据库——数据结构类型
  • 基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环
  • tiny RISCV项目学习
  • 系统设计——大文件传输方案设计
  • Springboot 下载附件
  • 靶场搭建问题(技巧)总结