深入理解LCD之寄存器配置

  • 前言
    上篇介绍了LCD控制器的基本特性, 接下来谈一下寄存器的配置, lCD的寄存器配置主要涉及到的寄存器有
    1.引脚的配置
    2.LCDCON1->LCDCON5配置各种信号
    3.LCDSADDR1->LCDSADDR3 frameBuffer 地址之类的
    由于配置寄存器挺多的内容,所以结合初始化代码来理解寄存器的配置
  • 引脚的配置
    GPIO与LCD控制器共用了一些信号线,为了让LCD控制器能正常使用这些信号线,所以必须配置一下
    GPCUP   = 0xffffffff;   // 禁止内部上拉
    GPCCON  = 0xaaaaaaaa;   // GPIO管脚用于VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND 
    GPDUP   = 0xffffffff;   // 禁止内部上拉
    GPDCON  = 0xaaaaaaaa;   // GPIO管脚用于VD[23:8]
    GPBCON &= ~(GPB0_MSK);  // Power enable pin
    GPBCON |= GPB0_out;     //将GPB0设置为输出
    GPBDAT &= ~(1<<0);     // 输出0,关闭LCD背光(这个试一下就知道了)
  • tips: 上面代码要注意一点是,对于GPB0引脚的配置,GPB0从电路图中可以看出对应的是LCD的背光电路供电的引脚,说到这里就要说明一下,使LCD的供电电路一共有3个
    1.背光电路
    2.LCD内部电源接口
    3.LCD外部电源
    从原理图可以看出,背光电路连接的GPIO是GPB0, LCD内部电源GPG4(注意这里不用外部电源,用GPIO控制比较方便)
  • LCDCON1(设置LCD的类型,显示方式)
    这里写图片描述
    1.CLKVAL 即通过前一篇可知是配置VCLK时钟频率,一个VCLK产生一个像素点,所以根据datasheet(前篇文章得知) 1/tc的Typ.值为9,所以根据公式: 9 = 100 / (CLKVAL +1)*2,综合得出结果: CLKVAL = 4
    2.PNRMODE配置屏幕为TFT屏
    3.BPPMODE配置屏幕显示方式为16Bpp,至于具体的比如RGB565还是RGB555需要进一步配置寄存器
    4.ENVID: disable LCD控制器信号,让LCD控制器不要控制LCD屏幕,初期化时一般设置为disable
  • LCDCON2(配置垂直方向的时序参数)
    这里写图片描述
    看到上面这几个参数并不陌生,前文已经接近疯狂的讲解,这里不在赘述
    VBPD取值: 1
    LINEVAL取值: 271
    VFPD取值:1
    VSPW取值:9
  • LCDCON3(水平方向的时序参数)
    这里写图片描述
    HBPD:1
    HOZVAL:479
    HFPD:1
  • LCDCON4(水平方向的时序参数)
    HSPW= 40
  • LCDCON5(极性的初始化)
    上一篇文章中提到过,实际的HSYNC,VSYNC信号的有效电平是通过LCD的dataSheet来确定的,通过前文已经分析得出, HSYNC VSYNC两个信号都是低脉冲有效,所以要配置电平的反转
    这里写图片描述
    FRM565:LCDCON1中配置了16Bpp的显示方式,此处配置了具体的显示格式RGB565
    大白话就是前面配置了16位表示一个像素,此处配置了这16位那几位代表红,绿,蓝
    INVVLINE: HSYNC信号需要极性需要反转(默认是高电平有效–>2440手册上记载)
    INVVFRAME: VSYNC信号需要极性需要反转(默认是高电平有效–>2440手册上记载)
    BSWP:配置大小端的,说明颜色在内存中的存储方式,这个手册上有说明,此处不一定配置正确,如果实验有问题可以修改此参数
    PWREN:由于在上面我们提到过,LCD的电源可以是内接,可以是外接,2440内部电路中, GPG4与LCD的LCD_PWREN是共用的引脚,首先让GPG4成为LCD_PWREN,
    这里写图片描述
    然后让内部电源控制使能,即PWREN为1
    INVPWREN控制电源有效信号是否反转,这个试一下就可以
    最后我们打开LCD电源只需要
    1.LCDCON1中的ENVID位置1
    2.GPB0输出1打开背光电源
        LCDCON1 |= 1;         // ENVID ON
        GPBDAT |= (1<<0);           // Power on
  • 有人会问, 不是还需要打开LCD电源吗?其实在打开步骤1中,已经打开了LCD电源
    这里写图片描述
    上面关于手册有说明,即使能了PWREN后,这个LCD_PWREN电源信号就与ENVID绑定了,ENVID使能后(高电平), 会自动拉高LCD_PWREN引脚(GPG4),即默认电源信号为高电平有效,但是可能实际LCD_PWREN引脚为电平电源开启,所以提供了INVPWREN控制电源控制信号是否反转
    对于LCDSADDR1->LCDSADDR3寄存器的配置,比较简单,代码容易看懂, 到此,寄存器重要的配置讲解完毕,裸机部分也告一段落了
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103C8T6是一款基于ARM Cortex-M3内核的单片机,它具有强大的处理能力和丰富的外设接口,非常适合用于控制外设进行数据采集、显示等中小型应用场景中。 而LCD1602是一种常见的字符型液晶显示器,它通过四条线连接到单片机上进行驱动控制。 要实现对LCD1602的控制,我们需要对STM32F103C8T6的IO口进行配置,将其设置为输出模式,并按照LCD1602所需要的时序和数据格式进行数据传输,最终实现数据的显示。具体步骤如下: 1.首先,需要选择LCD1602的工作模式,即4位并行传输模式或8位并行传输模式。由于4位模式下所需的引脚数量更少,因此我们一般选择4位模式。 2.然后,需要将单片机的引脚与LCD1602的引脚进行对接。LCD1602的引脚包括RS、RW、EN、D0~D7等,其中RS(寄存器选择)、RW(读写选择)和EN(使能信号)用于控制LCD1602内部寄存器的读写和显示刷新,D0~D7则是数据传输引脚。 3.接下来,需要进行时序设计。在液晶驱动的时序设计中,需要注意以下几个方面:数据线和控制线各自的传输频率、RS引脚、RW引脚、EN引脚的置位时间等。 4.最后,需要进行程序开发。程序开发需要注意以下几个方面:GPIO引脚的配置、引脚模式的选择、数据传输的流程(以及控制的流程)、变量和函数的定义等。 总之,STM32F103C8T6四线驱动LCD1602显示需要从硬件和软件两个方面进行操作,需要对液晶模块的接口、时序、指令等有比较深入的了解,并且需要具备一定的编程基础,掌握单片机的编程思想。这是一个很好的学习和实践机会,通过尝试会有更深刻的体会和理解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值