资讯详情

蓝桥杯嵌入式LCD翻转显示


#前言 第十三届蓝桥杯已经结束,博主获得了嵌入式全国二等奖,排名超过50。我相信嵌入式全国比赛LCD很多人没有实现翻转部分,本文将详细描述LCD翻转显示代码


提示:以下是本文的文本内容,以下案例可供参考

一、修改寄存器法:

首先打开蓝桥杯提供的液晶控制器ILI9325.pdf”文件(文档链接将放置文章末尾) 在这里插入图片描述

如下图所示: LCD输出方向由SS和GS这两位控制 查看文档得知SS是R01h第八个寄存器 GS是R60h寄存器(对应十进制)R96)的第15位 **

首先找到R01h寄存器详细存器:

** 如下图所述, SS:选择源驱动输出的移位方向。

当SS = 0时,输出的移位方向从S1至S720(简单理解为输出方向从上到下)

当SS = 1时,输出的移位方向从S720至S1(简单理解为输出方向从下到上)

提示:蓝桥杯提供的液晶显示代码从上到下输出

因为蓝桥杯使用的显示屏型号是ILI9325或ILI也就是说,我们只需要对LCD在初始化函数中void REG_932X_Init(void)修改即可

第一步是修改垂直显示方向R01h实现

原代码(从上到下)

LCD_WriteReg(R1  , 0x0000); // set SS and SM bit //0x0100 

修改R1寄存器SS1(自下而上)

LCD_WriteReg(R1  , 0x0100); // set SS and SM bit //0x0100 

附效果图: 实现了自下而上的显示

**

然后,找到R60h寄存器详细存器:

** SCN[5:0] :ILI9325允许设置SCN[5:0]指定门驱动器开始扫描的门线。 注:SCN[5:0] 不做修改,这六位的功能是,行显示的开始位置在哪里,默认为00h时,要么为G1,要么为G320 NL[4:0]不修改。如果您感兴趣,可以详细阅读文档 GS:在SCN[4:0]和NL在确定的范围内,设置门控驱动器的扫描方向。

通过设置GS = 1.可以逆转GS = 确定方向。

当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)寄存器GS1(从右到左)

LCD_WriteReg(R96 , 0xA700); // Gate Scan Line 0xA700 

附效果图: 即实现了LCD翻转

修改后的初始化函数:

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

标签: 06l1r80ft贴片电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司