单片机学习小组
直播中

贾桂林

8年用户 1592经验值
私信 关注

ILI9325 LCD怎么使用?

ILI9325 LCD怎么使用?

回帖(1)

李飞凤

2022-1-20 10:41:55
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. 蓝桥杯官方板


  • 管脚描述

    • CS(PB9): 低电平有效
    • RS(PB8): 寄存器选择信号,0:写寄存器地址.1:写data.
    • WR/SCL(PB5): 0:使能写操作.SPI模式下:时钟同步信号SCL.
    • RD(PB10): 0使能读操作.
    • RESET: 直接接了stm32的复位信号.

  • 通信

    • system interface,16-bit并行同信.

  • 读写操作
    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;}

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20


    • 读寄存器操作


    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14


    • 写寄存器操作

  • 读写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;} 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; }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26


    • 读GRAM


    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18


    • 写GRAM

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.行扫描控制,图片竖直滚动设置,灰度区电压控制.

    • NL[5:0]:以8行为间隔设置驱动LCD的函数.NL[5:0]=0,LCD驱动行数8 lines.
    • NDL: 设置非显示区域电压的输出级别.
    • VLE: 1:使能图片垂直滚动
    • REV: 1:使能图像灰度翻转,即改变0x00000-0x3FFFF的source output的优先级.
    • VL[8:0]: 设置有多少行的图片垂直滚动.
    • SCN[5:0]: 选择gate-driver从哪一行开始扫描. 官方设置SCN=0,SM=0,GS=1:gate-driver从G320开始扫描,扫描方向G320->G1.

  • 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的位置.


      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. 标准库函数一些特殊类型定义


举报

更多回帖

发帖
×
20
完善资料,
赚取积分