ILI93xx屏幕坐标系及扫描方式配置(LCD学习笔记1)

30 篇文章 11 订阅
10 篇文章 2 订阅

前言

  1. 博文基于STM32F103ZET6,MDK和3.5.0标准库开发
  2. 如有不足之处,多指教

屏幕坐标系(呵呵,我自己给取的名字)

在这里插入图片描述在这里插入图片描述在这里插入图片描述
R50h~R53h:水平垂直RAM地址位置;用来设定整个屏幕上的显示区域;
R50h(HSA[7:0]):水平起始地址寄存器;
R51h(HEA[7:0]):水平结束地址寄存器;
R52h(VSA[7:0]):垂直起始地址寄存器;
R53h(VEA[7:0]):垂直结束地址寄存器;

坐标系参数: 从上面的图片中和英文中可以了解,LCD屏幕上的每个像素点所对应GRAM显存单元是不能改变的,LCD屏幕默认为以人们习惯的竖屏方式的模板,以左上角点为坐标系原点,有方向为水平方向,下方向为垂直方向;如下图:
在这里插入图片描述
特点:

  1. 每个像素点对应的坐标是确定的,不会随竖屏/横屏模式的改变而改变,也不会随屏幕像素点扫描方式的改变而改变;
  2. 在程序的开始需要对以上四个寄存器进行配置,一般情况下都是全屏使用;当然后期如果需要更改显示区域大小,那就必须修改这四个寄存器的值了;比如开窗函数就是用来配置这四个寄存器;

8种扫描方式

8中扫描方式
在这里插入图片描述
配置用的寄存器
在这里插入图片描述
AM: GRAM更新方向控制位;可以理解为可以决定我们平时说的横屏还是竖屏;
0:地址水平更新扫描;(横屏模式)
1:地址垂直更新扫描;(竖屏模式)
当屏幕上所要打开的窗口被R50h~R53h寄存器配置结束后,GRAM范围根据I/D[1:0]和AM的配置更新扫描;
I/D: 地址计数器自增自减控制位;

值得注意的是: 上面截图中的扫描图片水平方向比垂直方向要宽,这很容易让人产生误解;

部分代码例程

/*lcd.h*/
/*屏幕扫描方向配置*/
typedef enum 
{
/*竖屏模式*/
	L2R_U2D = 0, //从左到右,从上到下
	L2R_D2U = 1, //从左到右,从下到上
	R2L_U2D = 2, //从右到左,从上到下
	R2L_D2U = 3, //从右到左,从下到上
/*横屏模式*/
	U2D_L2R = 4, //从上到下,从左到右
	U2D_R2L = 5, //从上到下,从右到左
	D2U_L2R = 6, //从下到上,从左到右
	D2U_R2L = 7, //从下到上,从右到左	 
}LCD_Scan_Direction;

/*lcd.c*/
//开窗(LCD全屏)
	LCD_WR_REG_Data(Horizontal_Address_Start_Position,0x0000);
	LCD_WR_REG_Data(Horizontal_Address_End_Position,0x00EF);
  	LCD_WR_REG_Data(Vertical_Address_Start_Position,0x0000);
	LCD_WR_REG_Data(Vertical_Address_End_Position,0x013F);

/*设置屏幕扫描方向*/
void LCD_Scan_Dir_Config(uint8_t Scan_Direction)
{
	uint16_t Reg_Value;
	switch(Scan_Direction)
		{
			case L2R_U2D://从左到右,从上到下
				Reg_Value|=(1<<5)|(1<<4)|(0<<3); 
				break;
			case L2R_D2U://从左到右,从下到上
				Reg_Value|=(0<<5)|(1<<4)|(0<<3); 
				break;
			case R2L_U2D://从右到左,从上到下
				Reg_Value|=(1<<5)|(0<<4)|(0<<3);
				break;
			case R2L_D2U://从右到左,从下到上
				Reg_Value|=(0<<5)|(0<<4)|(0<<3); 
				break;	 
			case U2D_L2R://从上到下,从左到右
				Reg_Value|=(1<<5)|(1<<4)|(1<<3); 
				break;
			case U2D_R2L://从上到下,从右到左
				Reg_Value|=(1<<5)|(0<<4)|(1<<3); 
				break;
			case D2U_L2R://从下到上,从左到右
				Reg_Value|=(0<<5)|(1<<4)|(1<<3); 
				break;
			case D2U_R2L://从下到上,从右到左
				Reg_Value|=(0<<5)|(0<<4)|(1<<3); 
				break;	 
		}

			Reg_Value |= 1<<12; 			//Entry_Mode寄存器中的AM和I/D[1:0]共同控制扫描方向
			LCD_WR_REG_Data(Entry_Mode,Reg_Value);	//写入ILI93xx寄存器;
		
}

注意: 每一种扫描方式的起始坐标都不同,这个一点在转换扫描方式的时候一定要注意,如果不注意会引起屏幕边缘显示错行或者缺失;

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ili9488lcd是一种液晶显示屏,要使用它需要在代码中进行配置。以下是ili9488lcd配置代码示例,供参考: ``` #include <Adafruit_ILI9488.h> //定义LCD屏幕的引脚连接 #define TFT_CS 10 #define TFT_RST 9 #define TFT_DC 8 #define TFT_MOSI 11 #define TFT_CLK 13 #define TFT_MISO 12 //创建ILI9488对象 Adafruit_ILI9488 tft = Adafruit_ILI9488(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); void setup() { //初始化ILI9488屏幕 tft.begin(); //设置屏幕的旋转方向 tft.setRotation(3); //清空屏幕 tft.fillScreen(ILI9488_BLACK); //设置字体和字体大小 tft.setTextSize(2); tft.setTextColor(ILI9488_WHITE); } void loop() { //在屏幕上显示文本 tft.setCursor(0, 0); tft.println("Hello, World!"); } ``` ### 回答2: ILI9488是一种常见的液晶显示控制器,它广泛应用于各种液晶显示设备中。ILI9488的配置代码可以用来初始化和设置该液晶显示控制器,以便正确地显示图形和文字。 配置代码通常包含以下内容: 1.引脚定义:配置ILI9488的各个引脚连接方式,例如数据线、复位线、片选线等,以便正确地与主控芯片连接。 2.寄存器设置:通过写入指定的寄存器,配置ILI9488的工作模式、显示模式、像素格式、扫描方向等参数。这些寄存器包括控制寄存器、显示寄存器、显示功能寄存器等。 3.时钟设置:配置ILI9488的时钟频率,以确保数据传输的稳定性和速度。 4.显示设置:设置ILI9488的显示窗口和像素点的颜色、亮度、对比度等参数,以便正确地显示图像和文字。 5.初始化设置:通过特定的序列和命令,对ILI9488进行初始化,包括芯片复位、电源设置、扫描设置等。 配置代码的编写需要参考ILI9488的数据手册,按照手册中的说明和要求进行配置。在编写配置代码时,需要了解ILI9488的工作原理和寄存器的作用,同时还需要根据具体应用需求进行相应的配置。编写配置代码后,可以通过主控芯片将其加载到ILI9488中,以实现相应的液晶显示效果。 总之,ILI9488的配置代码是用来初始化和设置ILI9488液晶显示控制器的一段代码,通过配置ILI9488的引脚、寄存器、时钟和显示等参数,可以实现正确地显示图形和文字。 ### 回答3: ili9488是一种常见的LCD控制器芯片,用于驱动大尺寸的彩色液晶显示屏。它支持多种配置选项,以下是ili9488 LCD配置代码示例: 首先,需要初始化ili9488控制器,可以通过如下代码进行配置: 1.设置ILI9488控制器的SPI接口的通信速度和模式 ```c SPI.setClockDivider(SPI_CLOCK_DIV4); // 设置SPI时钟分频 SPI.setDataMode(SPI_MODE0); // 设置SPI数据模式 ``` 2.配置ILI9488的控制引脚 ```c #define TFT_CS 10 // LCD芯片选通引脚 #define TFT_RST 9 // LCD复位引脚 #define TFT_DC 8 // LCD数据/命令选择引脚 pinMode(TFT_CS, OUTPUT); // 设置芯片选通引脚为输出模式 pinMode(TFT_RST, OUTPUT); // 设置复位引脚为输出模式 pinMode(TFT_DC, OUTPUT); // 设置数据/命令选择引脚为输出模式 ``` 3.初始化ILI9488控制器 ```c digitalWrite(TFT_CS, HIGH); // 选通LCD芯片 digitalWrite(TFT_RST, HIGH); // 恢复复位引脚高电平 delay(5); digitalWrite(TFT_RST, LOW); // 拉低复位引脚 delay(20); digitalWrite(TFT_RST, HIGH); // 恢复复位引脚高电平 delay(150); // 发送ILI9488的初始化指令和参数 sendCommand(0xEF); sendData(0x03); sendData(0x80); sendData(0x02); ... ``` 4.定义ILI9488控制器的命令、参数发送函数 ```c void sendCommand(uint8_t command) { digitalWrite(TFT_DC, LOW); // 设置为命令模式 digitalWrite(TFT_CS, LOW); // 选通LCD芯片 SPI.transfer(command); // 发送命令 digitalWrite(TFT_CS, HIGH); // 取消选通 } void sendData(uint8_t data) { digitalWrite(TFT_DC, HIGH); // 设置为数据模式 digitalWrite(TFT_CS, LOW); // 选通LCD芯片 SPI.transfer(data); // 发送数据 digitalWrite(TFT_CS, HIGH); // 取消选通 } ``` 以上代码示例为ili9488 LCD的基本配置,根据需要可以进一步进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值