历史上的今天
返回首页

历史上的今天

今天是:2024年11月26日(星期二)

正在发生

2021年11月26日 | ILI93xx屏幕坐标系及扫描方式配置(LCD学习笔记1)

2021-11-26 来源:eefocus

前言

博文基于STM32F103ZET6,MDK和3.5.0标准库开发

如有不足之处,多指教

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

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

R50h~R53h:水平垂直RAM地址位置;用来设定整个屏幕上的显示区域;

R50h(HSA[7:0]):水平起始地址寄存器;

R51h(HEA[7:0]):水平结束地址寄存器;

R52h(VSA[7:0]):垂直起始地址寄存器;

R53h(VEA[7:0]):垂直结束地址寄存器;


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

在这里插入图片描述

特点:


每个像素点对应的坐标是确定的,不会随竖屏/横屏模式的改变而改变,也不会随屏幕像素点扫描方式的改变而改变;

在程序的开始需要对以上四个寄存器进行配置,一般情况下都是全屏使用;当然后期如果需要更改显示区域大小,那就必须修改这四个寄存器的值了;比如开窗函数就是用来配置这四个寄存器;

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寄存器;

}


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

推荐阅读

史海拾趣

顺芯(Everest-semi)公司的发展小趣事

顺芯公司成立于XXXX年,初创时期面临着资金短缺、技术壁垒高和市场竞争激烈的挑战。然而,公司的创始人团队凭借对半导体行业的深刻理解和坚定信念,成功吸引了第一轮天使投资。他们夜以继日地研发产品,不断优化技术,终于在XXXX年成功推出了首款高性能的模拟芯片产品,获得了市场的初步认可。

High Voltage Power Solutions Inc公司的发展小趣事

在技术创新的同时,顺芯公司也注重市场拓展和品牌建立。公司积极参加国内外各类展会和论坛,与潜在客户和合作伙伴建立了广泛的联系。同时,顺芯公司还加强了与渠道商的合作,提高了产品的市场覆盖率。通过一系列的市场推广活动,顺芯公司的品牌知名度和美誉度逐渐提升。

EMS GmbH公司的发展小趣事

EMS GmbH公司自创立之初,就专注于汽车转换器注塑件(微动开关)的研发和生产。公司投入大量资源进行技术创新,逐步积累起了一系列核心专利技术。这些技术不仅涵盖了汽车转换器注塑件生产的所有关键技术,还获得了多个国际品质管理组织机构及主流整车厂的双重、三重认证。这些专利技术的积累,使EMS GmbH公司在汽车转换器注塑件领域确立了行业领先地位。

DEMMELPRODUCTS公司的发展小趣事

作为一家有远见的企业,DEMMELPRODUCTS公司始终关注环保和社会责任。公司积极推广绿色生产理念和技术,减少生产过程中的废弃物排放和能源消耗。同时,公司还积极参与社会公益活动,为社会做出了积极的贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。

明波通信(BWAVE)公司的发展小趣事

随着汽车产业的快速发展,车载电子系统成为了新的增长点。明波通信凭借在通信领域的深厚积累,迅速拓展车载电子系统业务。公司成功开发了车载导航、车载音响系统等项目,并与多家知名汽车厂商建立了合作关系。这一举措不仅为明波通信带来了新的增长点,也进一步巩固了其在电子行业的地位。

Curtis Instruments Inc公司的发展小趣事

随着全球市场的不断变化和竞争的加剧,Curtis不断加强全球布局和战略合作。公司与多家国际知名企业建立了长期合作关系,共同开发新产品、拓展新市场。此外,Curtis还积极参与国际展览和交流活动,展示公司的最新技术和产品成果,提高品牌知名度和影响力。这些全球布局和战略合作有助于Curtis更好地应对市场挑战、把握发展机遇。

问答坊 | AI 解惑

请问下这个笔记本电源里的贴片器件是什么?

帮一个网友问的,我也同学习之!希望大家给看看: 如图所示,相当于把电源输出端给短路,请教图中的贴片是什么器件,可以用什么元件代换,还有其他器件损坏吗? …

查看全部问答>

我写的一个USB驱动, 安装后提示, 设备无法启动,代码10 ,一般是什么原因?

我写的一个USB驱动, 安装后提示, 设备无法启动,代码10 ,一般是什么原因? 具体情况是MP3,不成功, 但优盘就可以成功! 请问大家这样的问题怎末解决?…

查看全部问答>

电源寿命解决

大功率的led灯具寿命瓶颈就是电源,现有的电源一般采用灌注导热胶导热及防水。因为导热胶的导热能力差,使电子元件产生的热量无法及时完全导出。通过测试,一般电源的表面温度为40摄氏度左右时,里面温度高达100多度。因此解决电源寿命的关键在于把 ...…

查看全部问答>

求热心高手的QQ群

强烈建议版主搞一个,这样既不用占用大家讨论技术的版面,也可以提高新手的学习效率。…

查看全部问答>

microblaze的FPU貌似开启了,但是计算浮点的时候还是溢出

起初我以为是log函数,没有包含在math。h头文件里面,但是我果断换了一个计算平方根的函数,照样程序溢出,(13.1的ise)。 查看microblaze的属性,发现FPU选择的是 extern,basic我也试过没用,一样溢出。 求大神指点…

查看全部问答>

求助一小段汇编

.include \"table.asm\"      .include \"macro.asm\"      .text isr      SENDR  R1,GPR_AX ;把0x20010000存入R1      LDR  R0,[R1] ...…

查看全部问答>

TFT的驱动问题!!!

求教一个问题,我在写彩屏液晶的程序的时候,有16为驱动的程序有8位驱动的程序。有时候都能用,但有时候会就不能用,求分析哈。 TFT彩屏IC:9320 or 9325 接口声明: #define DATAOUT(x) GPIOB->ODR=x; //数据输出 #define DATAOUTH(x) GPIOB-> ...…

查看全部问答>

智能用电监控、保护系统创意进度帖+自动控制操作演示视频(未带负载)

本帖最后由 ltbytyn 于 2014-1-4 22:40 编辑 $(\'flv_HAb\').innerHTML=(mobileplayer() ? \"\" : AC_FL_RunContent(\'width\', \'500\', \'height\', \'375\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src ...…

查看全部问答>

串口中断

如果软件调试进不了中断有什么可能,软件的基本配置已写好。…

查看全部问答>

【Atmel SAM R21创意大赛周计划】+ATSAMR21E的内部温度检测不可用?

本帖最后由 yang_alex 于 2015-3-1 06:19 编辑 在ATSAMR21E的外设学习中发现内部温度检测不可用。不知是我代码的问题还是芯片本身的问题,大家也测试一下看看。 我参考了ATMEL官方的ADC代码,内部电压检测正常。如下图: 项目里准备用来检测 ...…

查看全部问答>