历史上的今天
今天是:2024年09月29日(星期日)
2018年09月29日 | STM32f4---TFTLCD显示实验代码(05)
2018-09-29 来源:eefocus
//不同的 LCD驱动器不同的初始化设置
if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)
//ID 不正确,新增 0X9300判断,因为9341 在未被复位的情况下会被读成9300
{
//尝试9341 ID 的读取
LCD_WR_REG(0XD3);
lcddev.id=LCD_RD_DATA(); //dummy read
lcddev.id=LCD_RD_DATA(); //读到 0X00
lcddev.id=LCD_RD_DATA(); //读取 93
lcddev.id<<=8;
lcddev.id|=LCD_RD_DATA(); //读取 41
if(lcddev.id!=0X9341) //非 9341,尝试是不是6804
{
LCD_WR_REG(0XBF);
lcddev.id=LCD_RD_DATA();//dummy read
lcddev.id=LCD_RD_DATA();//读回 0X01
lcddev.id=LCD_RD_DATA();//读回 0XD0
lcddev.id=LCD_RD_DATA();//这里读回 0X68
lcddev.id<<=8;
lcddev.id|=LCD_RD_DATA();//这里读回 0X04
if(lcddev.id!=0X6804) //也不是 6804,尝试看看是不是NT35310
{
LCD_WR_REG(0XD4);
lcddev.id=LCD_RD_DATA(); //dummy read
lcddev.id=LCD_RD_DATA(); //读回 0X01
lcddev.id=LCD_RD_DATA(); //读回 0X53
lcddev.id<<=8;
lcddev.id|=LCD_RD_DATA(); //这里读回0X10
if(lcddev.id!=0X5310) //也不是NT35310,尝试看看是不是NT35510
{
LCD_WR_REG(0XDA00);
lcddev.id=LCD_RD_DATA();//读回 0X00
LCD_WR_REG(0XDB00);
lcddev.id=LCD_RD_DATA();//读回 0X80
lcddev.id<<=8;
LCD_WR_REG(0XDC00);
lcddev.id|=LCD_RD_DATA();//读回 0X00
if(lcddev.id==0x8000)lcddev.id=0x5510;
//NT35510读回的 ID 是 8000H,为方便区分,我们强制设置为5510
}
}
}
}
if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)
{ //如果是这三个 IC,则设置WR时序为最快
//重新配置写时序控制寄存器的时序
FSMC_Bank1E->BWTR[6]&=~(0XF<<0); //地址建立时间(ADDSET)清零
FSMC_Bank1E->BWTR[6]&=~(0XF<<8); //数据保存时间清零
FSMC_Bank1E->BWTR[6]|=3<<0; //地址建立时间为3个HCLK =18ns
FSMC_Bank1E->BWTR[6]|=2<<8; //数据保存时间为6ns*3 个HCLK=18ns
}else if(lcddev.id==0X6804||lcddev.id==0XC505)//6804/C505速度上不去,得降低
{
//重新配置写时序控制寄存器的时序
FSMC_Bank1E->BWTR[6]&=~(0XF<<0); //地址建立时间(ADDSET)清零
FSMC_Bank1E->BWTR[6]&=~(0XF<<8); //数据保存时间清零
FSMC_Bank1E->BWTR[6]|=10<<0; //地址建立时间为10 个HCLK =60ns
FSMC_Bank1E->BWTR[6]|=12<<8; //数据保存时间为6ns*13个HCLK=78ns
}
printf(" LCD ID:%x\r\n",lcddev.id); //打印 LCD ID
if(lcddev.id==0X9341) //9341初始化
{
……//9341初始化代码
}else if(lcddev.id==0xXXXX) //其他 LCD 初始化代码
{
……//其他LCD 驱动 IC,初始化代码
}
LCD_Display_Dir(0); //默认为竖屏显示
LCD_LED=1; //点亮背光
LCD_Clear(WHITE);
}
从初始化代码可以看出,LCD 初始化步骤为~在代码中标注:
GPIO,FSMC 使能。
GPIO 初始化:GPIO_Init()函数。
设置引脚复用映射。
FSMC 初始化:FSMC_NORSRAMInit()函数。
FSMC 使能:FSMC_NORSRAMCmd()函数。
不同的 LCD 驱动器的初始化代码。
该函数先对 FSMC 相关 IO 进行初始化,然后是 FSMC 的初始化,这个我们在前面都有介绍,最后根据读到的 LCD ID,对不同的驱动器执行不同的初始化代码,从上面的代码可以看出,这个初始化函数可以针对十多款不同的驱动 IC执行初始化操作,这样大大提高了整个程序的通用性。大家在以后的学习中应该多使用这样的方式,以提高程序的通用性、兼容性。
史海拾趣
|
交流输出半桥式变压器开关电源(part1)开关电源原理与设计(连载34) 根据电磁感应定律可以对变压器初级线圈N1绕组回路列出方程: e1 = N1*dΦ/dt =Uab —— K1接通期间 (1-156) 上式中,e1为变压器初级线圈产生的电动势, Uab为电源加于变压器初级线圈N1绕组两端的电压,Uab =Ui/2 , dΦ/dt为变压器铁心中磁通的 ...… 查看全部问答> |
|
library ieee;--消抖动 延迟10msuse ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dou isport(s,clk1k:in std_logic; so:Put std_logic);end;architecture one of dou issignal cout4 :std_logic_vect ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 一、芯片简单描述: 1117是一个低压差电压调节器系列。其压差在1.2V输出,负载电流为800mA时为1.2V。它与国家半导体的工业标准器件LM1117有相同的管脚排列。1117有 ...… 查看全部问答> |




