蓝桥杯嵌入式LCD频初步讲解

ILI9325 LCD的使用

1. 基础信息

  • LCD驱动芯片: ILI9325
  • 蓝桥杯官方提供的LCD例程中有初始化函数和屏幕的显示函数.
  • stm32与ILI9325通信使用的是并行i8080通信.
  • 板子上只有HSE(8MHz),没有LSE!!!
  • 液晶显示屏工作原理
  • 配置代码参考

2. 芯片讲解

  • ILI9325芯片是一个262k颜色的液晶驱动芯片,分辨率位240RGBx320,即一个点由RGB三个点构成.有172,800bytes用来存储240RGBx320的图像数据.有4种接口用来显示图片.
  • 行驱动:gate-driver(G1-G320)打开关闭一行,列驱动:source-driver(S1-S720)1个点有3列,选择点的颜色.
  • 蓝桥杯官方的板子没有引出ILI9325的IM[3:0] SDI SDO ENABLE DOTCLK VSYNC HSYNC FMARK信号,板子直接固定使用的是16-bit,system interface,i80通信协议.

3. 蓝桥杯官方板

  1. 管脚描述
    • CS(PB9): 低电平有效
    • RS(PB8): 寄存器选择信号,0:写寄存器地址.1:写data.
    • WR/SCL(PB5): 0:使能写操作.SPI模式下:时钟同步信号SCL.
    • RD(PB10): 0使能读操作.
    • RESET: 直接接了stm32的复位信号.
  2. 通信
    • system interface,16-bit并行同信.
  3. 读写操作
    • 写寄存器操作写操作是序图
    void My_LCD_WriteReg(u16 Reg_addr,u16 Reg_data)
    {
        u32 PCOUT = GPIOC->ODR; LE = 0;//避免LCD对LED的影响.
        CS = 0; RS = 0; WR = 1; //Ready to write address 
        GPIOC->ODR = Reg_addr;  //Wrte reg address
        WR = 0; WR = 1;         //没有延时,说明在一个指令周期内,可以写完16-bit数据
        RS = 1;                 //Ready to write data
        GPIOC->ODR = Reg_data;
        WR = 0; WR = 1;
        RS = 1;                 //for next   
        
        CS = 1;                 //finish write
        GPIOC->ODR = PCOUT;     //复原LED管脚状态.
    } 
    
    • 读寄存器操作读操作时许图
    u16 My_LCD_ReadReg(u16 Reg_addr)
    {
       u16 Read_value = 0;
       u32 PCOUT = GPIOC->ODR; LE = 0;//避免LCD对LED的影响.
       CS = 0; RS = 0; WR = 1; //Ready to write address 
       GPIOC->ODR = Reg_addr;  //Wrte reg address
       WR = 0; WR = 1;         //没有延时,说明在一个指令周期内,可以写完16-bit数据
       GPIOC->CRL = 0x44444444;//set pin floating input
       GPIOC->CRH = 0x44444444;
       RD = 0;                 //Ready to read data
       Read_value = GPIOC->IDR;
       RD = 1;  
       GPIOC->CRL = 0x33333333;//set pin pp output
       GPIOC->CRH = 0x33333333;
    
       CS = 1;                 //finish write
       GPIOC->ODR = PCOUT;     //复原LED管脚状态.
         
       return Read_value;
    } 
    
  4. 读写GRAM
    • 写GRAM
     void LCD_WriteRAM(u16 RGB_Code)
     {
         u32 PCOUT = GPIOC->ODR;
         LE = 0;
    
         GPIOB->BRR = 0x0200;  
         GPIOB->BSRR = 0x0100; 
         GPIOB->BSRR = 0x0020; 
    
         GPIOC->ODR = RGB_Code;
         GPIOB->BRR = 0x0020;  
         GPIOB->BSRR = 0x0020; 
         GPIOB->BSRR = 0x0100; 
    
         GPIOB->BSRR = 0x0200; 
    
         GPIOC->ODR = PCOUT;
    }
    
    • 读GRAM
     u16 LCD_ReadRAM(void)
     {
         u16 temp;
         u32 PCOUT = GPIOC->ODR;         //½â¾öLCD¶ÔLEDµÆÓ°Ïì.
         LE = 0;
    
         GPIOB->BRR = 0x0200; 
         GPIOB->BRR = 0x0100; 
         GPIOB->BSRR = 0x0020; 
     
         GPIOC->ODR = R34;     
         GPIOB->BRR = 0x0020;  
         GPIOB->BSRR = 0x0020; 
         GPIOB->BSRR = 0x0100; 
     
         LCD_BusIn();
         GPIOB->BRR = 0x0400; 
         temp = GPIOC->IDR;  
         GPIOB->BSRR = 0x0400;
     
         LCD_BusOut();
         GPIOB->BSRR = 0x0200; 
     
          GPIOC->ODR = PCOUT;
         return temp;
     }
    

4. 官方液晶例程配置

  • 坐标原点:竖着放左上方.
  • R01h: 配置液晶点阵的驱动方向.SM=1(与GS结合设置扫描方向).SS=0(S1->S720).
  • R60h,R61h,R6Ah: (R60h)SCN[5:0]=0,NL[5:0]=0,GS=1.(R61h)NDL=0,VLE=0,REV=1,(R6Ah)VL[8:0]=0.行扫描控制,图片竖直滚动设置,灰度区电压控制.
    • SCN[5:0]: 选择gate-driver从哪一行开始扫描. 官方设置SCN=0,SM=0,GS=1:gate-driver从G320开始扫描,扫描方向G320->G1.
    • NL[5:0]:以8行为间隔设置驱动LCD的函数.NL[5:0]=0,LCD驱动行数8 lines.
    • NDL: 设置非显示区域电压的输出级别.
    • VLE: 1:使能图片垂直滚动
    • REV: 1:使能图像灰度翻转,即改变0x00000-0x3FFFF的source output的优先级.
    • VL[8:0]: 设置有多少行的图片垂直滚动.
  • R50h-R53h: 设置窗口图片显示的其实和结束地址.HSA[7:0]=0,HEA[7:0]=0,VSA[8:0]=0,VEA[8:0]=0窗口显示配置
  • R03h: BGR=1,I/D[1:0]=11,ORG=0,AM=0,TRI=0,DFM=0.设置数据进入GRAM模式.
    • AM+I/D[1:0]一起控制GRAM的更新方向,用于连续写入. AM:0 逐列扫描,1 逐行扫描.I/D:控制地址计数器递增还是递减.

    • ORG: 当ORG=1时根据I/D的值改变屏幕00000h的位置.ORG=0
      ORG=1

      ID=00ID=01ID=10ID=11
      逐行R->L,D->UL->R,D->UR->L,U->DL->R,U->D
      逐列R->L,D->UL->R,D->UR->L,U->DL->R,U->D
    • BGR: BGR=1时以BGR的顺序写入GRAM.

    • TRI,DFM: 设置数据传送进RAM的模式.

  • R04h: RCV[1:0]=0,RCH[1:0]=0,RSZ[1:0]=0设置图片的缩放.例程设置无缩放.
  • R08h: FP[3:0]=2,BP[3:0]=7设置前肩,后肩的行数.
  • R09h: ISC[3:0]=0,PTG[1:0]=0,PTS[2:0]=0 设置非显示区域的扫描周期(减少LCD的损害)官方设置:灰度区步进行扫描.
  • R0Ah: FMARKOE=0帧同步信号的使能和周期控制.官方设置:不输出帧同步信号.
    R0Ch:RIM[1:0]=01,DM[1:0]=00,RM=0,ENC[2:0]=0设置接口模式.
  • R0Dh:FMP[8:0]=0设置FMARK输出位置.
  • {R21h,R20h}:设置光标的初始位置.

5. 标准库函数一些特殊类型定义

特殊类型定义

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值