OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10749|回复: 7

求3.5寸320*480控制芯片ILI9486L的驱动程序

[复制链接]

7

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
523
金钱
523
注册时间
2015-4-25
在线时间
158 小时
发表于 2015-5-19 08:59:16 | 显示全部楼层 |阅读模式
5金钱
最近在调3.5寸ILI9486L控制芯片的程序,现在可以刷屏显示颜色,但是刷屏的时候有时会有部分区域花屏,显示黑色的条纹,有没有调试好的ILI9486L的程序,希望借鉴一下。附上我的程序:
//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(vu16 regval)
{   
*(__IO u16 *)(Bank1_LCD_REG)=regval;//写入要写的寄存器序号  
}
//写LCD数据
//data:要写入的值
void LCD_WR_DATA(vu16 data)
{  
*(__IO u16 *)(Bank1_LCD_RAM)=data;  
}
//读LCD数据
//返回值:读到的值
u16 LCD_RD_DATA(void)
{
return *(__IO u16 *)(Bank1_LCD_RAM);  
}   
//写寄存器
//LCD_Reg:寄存器地址
//LCD_RegValue:要写入的数据
void LCD_WriteReg(vu16 LCD_Reg, vu16 LCD_RegValue)
{
*(__IO u16 *)(Bank1_LCD_REG) = LCD_Reg; //写入要写的寄存器序号  
*(__IO u16 *)(Bank1_LCD_RAM) = LCD_RegValue;//写入数据      
}   

//开始写GRAM
void LCD_WriteRAM_Prepare(void)
{
  *(__IO u16 *)(Bank1_LCD_REG)=0x002C;  
}  

//设置光标位置
//Xpos:横坐标
//Ypos:纵坐标
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{  
LCD_WR_REG(0X2A); 
LCD_WR_DATA(Xpos>>8); 
LCD_WR_DATA(Xpos&0XFF);  
LCD_WR_REG(0X2B); 
LCD_WR_DATA(Ypos>>8); 
LCD_WR_DATA(Ypos&0XFF);  


//画点
//x,y:坐标
//color:此点的颜色
void LCD_PutPixel(u16 x,u16 y,u16 color)
{
LCD_SetCursor(x,y);//设置光标位置 
*(__IO u16 *)(Bank1_LCD_REG)=0x002C;//开始写入GRAM
*(__IO u16 *)(Bank1_LCD_RAM)=color; 


//读取个某点的颜色值  
//x,y:坐标
//返回值:此点的颜色
u16 LCD_ReadPoint(u16 x,u16 y)
{
  u16 color; 
LCD_SetCursor(x,y);    
LCD_WR_REG(0X2E);     //发送读GRAM指令
  LCD_RD_DATA();        //无效数据  
  color=*(__IO u16 *)(Bank1_LCD_RAM);  //实际坐标颜色  
  return color;
}

void TFTLCD_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; 
FSMC_NORSRAMTimingInitTypeDef  writeTiming;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能PD,PE,PF,PG时钟  
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟  
//PG6->LCD_BL
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PG6 推挽输出,控制背光
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化 //PG6 推挽输出,控制背光
GPIO_SetBits(GPIOG,GPIO_Pin_6);
//启用fsmc复用功能 复用上拉模式

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_14 //D0
|GPIO_Pin_15 //D1
|GPIO_Pin_0 //D2
|GPIO_Pin_1 //D3
|GPIO_Pin_8 //D13
|GPIO_Pin_9 //D14
|GPIO_Pin_10;//D15
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//复用模式
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHz翻转速度
GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7 //D4
|GPIO_Pin_8 //D5
|GPIO_Pin_9 //D6
|GPIO_Pin_10 //D7
|GPIO_Pin_11 //D8
|GPIO_Pin_12 //D9
|GPIO_Pin_13 //D10
|GPIO_Pin_14 //D11
|GPIO_Pin_15;//D12
GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5; //WR
GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12; //RD
GPIO_Init(GPIOF,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5//RS
|GPIO_Pin_12;//CS
GPIO_Init(GPIOG,&GPIO_InitStructure);

GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);//D2
  GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);//D3
  GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);//D13 
  GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);//D14
  GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);//D15
  GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);//D0
  GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//D1
 
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);//D4
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);//D5
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);//D6
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);//D7
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);//D8
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);//D9
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);//D10
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);//D11
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);//D12
 
  GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);//WR 
  GPIO_PinAFConfig(GPIOF,GPIO_PinSource12,GPIO_AF_FSMC);//RD
GPIO_PinAFConfig(GPIOG,GPIO_PinSource5,GPIO_AF_FSMC);//RS
GPIO_PinAFConfig(GPIOG,GPIO_PinSource12,GPIO_AF_FSMC);//CS

readWriteTiming.FSMC_AddressSetupTime = 0XF; //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*16=96ns
  readWriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到
  readWriteTiming.FSMC_DataSetupTime = 60; //数据保存时间为60个HCLK =6*60=360ns
  readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
  readWriteTiming.FSMC_CLKDivision = 0x00;
  readWriteTiming.FSMC_DataLatency = 0x00;
  readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A 
    
writeTiming.FSMC_AddressSetupTime =9;      //地址建立时间(ADDSET)为9个HCLK =54ns 
  writeTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(A
  writeTiming.FSMC_DataSetupTime = 8; //数据保存时间为6ns*9个HCLK=54ns
  writeTiming.FSMC_BusTurnAroundDuration = 0x00;
  writeTiming.FSMC_CLKDivision = 0x00;
  writeTiming.FSMC_DataLatency = 0x00;
  writeTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A 

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
  FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //  存储器写使能
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

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

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

delay_ms(50); // delay 50 ms
LCD_WriteReg(0x36, 0x68); // memory access control MY=0, MX=1, MV=1, BGR=1
LCD_WriteReg(0x3A,0x55);  //Interface Pixel Format  ( DPI[3:0] - DBI[2:0] )    16 bit/pixel, CPU interface format
// DM, RM = 0
LCD_WriteReg(0xB0,0x00);  //Interface Mode Control (SDA_EN 000 VSPL HSPL DPL EPL )ARM--DPL: PCLK polarity set (??data fetched at the rising time, //??data fetched at the falling time)SET DPL=1
LCD_WR_REG(0xB6); //Display Function Control
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x42);
LCD_WR_DATA(0x3B); 
LCD_WriteReg(0xB4,0x00); //(000 ZINV 00 DINV[1:0]) Z-INV  DINV 
LCD_WR_REG(0xB1); // frame rate = 50Hz, Horizontal line period = 17clk (what does this mean??)
LCD_WR_DATA(0x80);
LCD_WR_DATA(0x11); 
LCD_WriteReg(0xB7, 0x07); // extra

// Power settings
LCD_WR_REG(0xC1); //(0100 0 BT[2:0]) (0000 0 VC[2:0])
LCD_WR_DATA(0x41);
LCD_WR_DATA(0x00); 
LCD_WR_REG(0xC5);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x53); 
LCD_WR_DATA(0x00);
LCD_WriteReg(0xC2, 0x33); //extra
LCD_WriteReg(0x35, 0x00); // enable tearing effect line
//Gamma Setting_10323
LCD_WR_REG(0xE0);
LCD_WR_DATA(0x0F);
LCD_WR_DATA(0x1B);
LCD_WR_DATA(0x18);
LCD_WR_DATA(0x0B);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x47);
LCD_WR_DATA(0x94);
LCD_WR_DATA(0x35);
LCD_WR_DATA(0x0A);
LCD_WR_DATA(0x13);
LCD_WR_DATA(0x05);
LCD_WR_DATA(0x08);
LCD_WR_DATA(0x03);
LCD_WR_DATA(0x00);

//Gamma Setting_10323
LCD_WR_REG(0xE1);
LCD_WR_DATA(0x0F);
LCD_WR_DATA(0x3A);
LCD_WR_DATA(0x37);
LCD_WR_DATA(0x0B);

LCD_WR_DATA(0x0C);
LCD_WR_DATA(0x05);
LCD_WR_DATA(0x4A);
LCD_WR_DATA(0x24);

LCD_WR_DATA(0x39);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x10);
LCD_WR_DATA(0x04);

LCD_WR_DATA(0x27);
LCD_WR_DATA(0x25);
LCD_WR_DATA(0x00);

LCD_WR_REG(0x11);
delay_ms(120);
LCD_WR_REG(0x29);
LCD_WR_REG(0x002C);   //开始写数据
LCD_Clear(RED); 

}

//清屏函数
//color:要清屏的填充色
void LCD_Clear(u16 color)
{
u32 index=0;      
LCD_SetCursor(0x00,0x00); //设置光标位置 
LCD_WriteRAM_Prepare();     //开始写入GRAM  
for(index=0;index<153600;index++)
{
*(__IO u16 *)(Bank1_LCD_RAM)=color;
}
}  
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-19 23:04:30 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2021-11-19
在线时间
0 小时
发表于 2016-12-25 21:36:51 | 显示全部楼层
楼主,请问您有STC51驱动的320*240ILI9486L的程序吗?
回复

使用道具 举报

7

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
523
金钱
523
注册时间
2015-4-25
在线时间
158 小时
 楼主| 发表于 2016-12-26 09:10:38 | 显示全部楼层
SingleChip101 发表于 2016-12-25 21:36
楼主,请问您有STC51驱动的320*240ILI9486L的程序吗?

不好意思,没有
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-9-11
在线时间
21 小时
发表于 2017-9-25 09:18:46 | 显示全部楼层
楼主,有没有480*320 ILI9486通信模块程序吗
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-7-2
在线时间
2 小时
发表于 2017-11-8 21:46:48 | 显示全部楼层
可以分享一下您的程序吗?谢谢,我的邮箱415778488@qq.com
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2018-8-5
在线时间
6 小时
发表于 2018-8-5 23:37:51 | 显示全部楼层
学习下~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
发表于 2018-8-14 09:09:31 | 显示全部楼层
楼主问题解决了吗?  我发现就改为NE1正常  NE4不正常
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 09:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表