html5show()函数怎么写,TFTLCD显示实验_STM32F1开发指南_第十八章

//初始化LCD

//注:改初始化函数能够初始化各类ILI93XX液晶,可是其余函数是基于ILI9320的!!!

//在其余型号的驱动芯片上没有测试!

void LCD_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

FSMC_NORSRAMInitTypeDef FSMC_NSInitStructure;

FSMC_NORSRAMTimingInitTypeDef readWriteTiming;

FSMC_NORSRAMTimingInitTypeDef writeTiming;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); //使能 FSMC 时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|

RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG|

RCC_APB2Periph_AFIO, ENABLE); // ①使能GPIO 以及AFIO 复用功能时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PB0 推挽输出 背光

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure); //②初始化 PB0

//PORTD 复用推挽输出

GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|

GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure); //②初始化 PORTD

//PORTE 复用推挽输出

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|

GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE, &GPIO_InitStructure); //②初始化 PORTE

//PORTG12 复用推挽输出 A0

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12; //PORTD

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12; //PORTD 复用推挽输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOG, &GPIO_InitStructure); //②初始化 PORTG

readWriteTiming.FSMC_AddressSetupTime = 0x01; //地址创建时间 2 个 HCLK 1

readWriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间模式 A 未用到

readWriteTiming.FSMC_DataSetupTime = 0x0f; // 数据保存时间为 16 个 HCLK

readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;

readWriteTiming.FSMC_CLKDivision = 0x00;

readWriteTiming.FSMC_DataLatency = 0x00;

readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式 A

writeTiming.FSMC_AddressSetupTime = 0x00; //地址创建时间为 1 个 HCLK

writeTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间( A

writeTiming.FSMC_DataSetupTime = 0x03; //数据保存时间为 4 个 HCLK

writeTiming.FSMC_BusTurnAroundDuration = 0x00;

writeTiming.FSMC_CLKDivision = 0x00;

writeTiming.FSMC_DataLatency = 0x00;

writeTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式 A

FSMC_NSInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4; //这里咱们使用NE4,也就对应BTCR[6],[7]。

FSMC_NSInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //不复用数据地址

FSMC_NSInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; // SRAM

FSMC_NSInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; //存储器数据宽度为 16bit

FSMC_NSInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;

FSMC_NSInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;

FSMC_NSInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;

FSMC_NSInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;

FSMC_NSInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;

FSMC_NSInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //存储器写使能

FSMC_NSInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;

FSMC_NSInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable;

// 读写使用不一样的时序

FSMC_NSInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;

FSMC_NSInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;

FSMC_NSInitStructure.FSMC_WriteTimingStruct = &writeTiming; //写时序

FSMC_NORSRAMInit(&FSMC_NSInitStructure); //③初始化FSMC 配置

FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); //④使能BANK1

delay_ms(50); // delay 50 ms

lcddev.id = LCD_ReadReg(0x0000); //读ID(9320\9325\9328\4531\4535等IC)

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,尝试NT35110

{

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 != 0x5510) //也不是5510,尝试SSD1963

{

LCD_WR_REG(0xa1);

lcddev.id = LCD_RD_DATA();

lcddev.id = LCD_RD_DATA(); //读回0x57

lcddev.id <<= 8;

lcddev.id |= LCD_RD_DATA(); //读回0x61

if(lcddev.id == 0x5761)

lcddev.id == 0x1963; //SSD1963读回的ID是5761H,为方便区分,咱们强制设置为1963

}

}

}

}

}

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);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值