#前言
提示:以下是本篇文章正文内容,下面案例可供参考
首先打开蓝桥杯提供的“液晶控制器ILI9325.pdf”文件(文档链接将放置文章末尾)
依据下图所示,得知:
LCD的输出方向由SS和GS这两位控制
查看文档得知SS是R01h寄存器的第8位
GS是R60h寄存器(对应十进制为R96)的第15位
**
当SS = 0时,输出的移位方向从S1至S720(简单理解为输出方向从上往下)
当SS = 1时,输出的移位方向从S720至S1(简单理解为输出方向从下往上)
由于蓝桥杯所用的显示屏型号为ILI9325或ILI9328,即我们只需对LCD初始化函数里的void REG_932X_Init(void)修改即可
第一步,修改垂直显示方向,通过修改R01h实现
原代码(从上往下)
LCD_WriteReg(R1 , 0x0000); // set SS and SM bit //0x0100
修改R1寄存器SS为1(从下往上)
LCD_WriteReg(R1 , 0x0100); // set SS and SM bit //0x0100
**
**
SCN[5:0] :ILI9325允许通过设置SCN[5:0]位来指定门驱动器开始扫描的门线。
注:SCN[5:0] 不做修改,这六位的功能为,行显示开始的位置在哪,默认为00h时,要么为G1,要么为G320
NL[4:0]也不做修改,有兴趣可详细阅读文档
GS:在SCN[4:0]和NL[4:0]确定的范围内,设置门控驱动器的扫描方向。扫描
通过设置GS = 1,可以反转由GS = 0确定的方向。
当GS = 0时,扫描方向为G1 ~ G320。(简单理解为从左往右)
当GS = 1时,扫描方向为G320到G1。(简单理解为从右往左)
由下图我们可清晰得知默认SM=0,GS=0,显示方向为从左往右
那么我们想使LCD从右往左显示即更改GS=1即可
原代码
LCD_WriteReg(R96 , 0x2700); // Gate Scan Line 0xA700
修改R60h(即R96)寄存器GS为1(从右往左)
LCD_WriteReg(R96 , 0xA700); // Gate Scan Line 0xA700
修改后的初始化函数:
void REG_932X_Init(void)
{
LCD_WriteReg(R227, 0x3008); // Set internal timing
LCD_WriteReg(R231, 0x0012); // Set internal timing
LCD_WriteReg(R239, 0x1231); // Set internal timing
LCD_WriteReg(R1 , 0x0100); // set SS and SM bit //0x0100
LCD_WriteReg(R2 , 0x0700); // set 1 line inversion
LCD_WriteReg(R3 , 0x1018); // set GRAM write direction and BGR=1.
LCD_WriteReg(R4 , 0x0000); // Resize register
LCD_WriteReg(R8 , 0x0207); // set the back porch and front porch
LCD_WriteReg(R9 , 0x0000); // set non-display area refresh cycle ISC[3:0]
LCD_WriteReg(R10 , 0x0000); // FMARK function
LCD_WriteReg(R12 , 0x0000); // RGB interface setting
LCD_WriteReg(R13 , 0x0000); // Frame marker Position
LCD_WriteReg(R15 , 0x0000); // RGB interface polarity
/**************Power On sequence ****************/
LCD_WriteReg(R16 , 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_WriteReg(R17 , 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
LCD_WriteReg(R18 , 0x0000); // VREG1OUT voltage
LCD_WriteReg(R19 , 0x0000); // VDV[4:0] for VCOM amplitude
Delay_LCD(1000); // Delay 200 MS , Dis-charge capacitor power voltage
LCD_WriteReg(R16 , 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_WriteReg(R17 , 0x0227); // R11H=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]
Delay_LCD(50); // Delay XXms
LCD_WriteReg(R18 , 0x001D); // External reference voltage= Vci;
Delay_LCD(50); // Delay XXms
LCD_WriteReg(R19 , 0x0800); // R13H=1D00 when R12H=009D;VDV[4:0] for VCOM amplitude
LCD_WriteReg(R41 , 0x0014); // R29H=0013 when R12H=009D;VCM[5:0] for VCOMH
LCD_WriteReg(R43 , 0x000B); // Frame Rate = 96Hz
Delay_LCD(50); // Delay XXms
LCD_WriteReg(R32 , 0x0000); // GRAM horizontal Address
LCD_WriteReg(R33 , 0x0000); // GRAM Vertical Address
/* ----------- Adjust the Gamma Curve ---------- */
LCD_WriteReg(R48 , 0x0007);
LCD_WriteReg(R49 , 0x0707);
LCD_WriteReg(R50 , 0x0006);
LCD_WriteReg(R53 , 0x0704);
LCD_WriteReg(R54 , 0x1F04);
LCD_WriteReg(R55 , 0x0004);
LCD_WriteReg(R56 , 0x0000);
LCD_WriteReg(R57 , 0x0706);
LCD_WriteReg(R60 , 0x0701);
LCD_WriteReg(R61 , 0x000F);
/* ------------------ Set GRAM area --------------- */
LCD_WriteReg(R80 , 0x0000); // Horizontal GRAM Start Address
LCD_WriteReg(R81 , 0x00EF); // Horizontal GRAM End Address
LCD_WriteReg(R82 , 0x0000); // Vertical GRAM Start Address
LCD_WriteReg(R83 , 0x013F); // Vertical GRAM Start Address
LCD_WriteReg(R96 , 0xA700); // Gate Scan Line 0xA700
LCD_WriteReg(R97 , 0x0001); // NDL,VLE, REV
LCD_WriteReg(R106, 0x0000); // set scrolling line
/* -------------- Partial Display Control --------- */
LCD_WriteReg(R128, 0x0000);
LCD_WriteReg(R129, 0x0000);
LCD_WriteReg(R130, 0x0000);
LCD_WriteReg(R131, 0x0000);
LCD_WriteReg(R132, 0x0000);
LCD_WriteReg(R133, 0x0000);
/* -------------- Panel Control ------------------- */
LCD_WriteReg(R144, 0x0010);
LCD_WriteReg(R146, 0x0000);
LCD_WriteReg(R147, 0x0003);
LCD_WriteReg(R149, 0x0110);
LCD_WriteReg(R151, 0x0000);
LCD_WriteReg(R152, 0x0000);
/* Set GRAM write direction and BGR = 1 */
/* I/D=01 (Horizontal : increment, Vertical : decrement) */
/* AM=1 (address is updated in vertical writing direction) */
LCD_WriteReg(R3 , 0x1018); //0x1018
LCD_WriteReg(R7 , 0x0173); // 262K color and display ON
}
源码:
链接:https://pan.baidu.com/s/1ugDtrXP4zU7xCpUxDzfoBg?pwd=1111
提取码:1111