OpenEdv-开源电子网

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

TFT LCD 液晶的初始化

[复制链接]

19

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2011-3-23
在线时间
5 小时
发表于 2011-3-30 10:47:15 | 显示全部楼层 |阅读模式

void LCD_DrawPoint(u16 x,u16 y)
{
 LCD_SetCursor(x,y);//设置光标位置
 LCD_WR_REG(R34);//开始写入GRAM
 LCD_WR_DATA(POINT_COLOR);
}  
//初始化lcd
//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
//在其他型号的驱动芯片上没有测试!
void LCD_Init(void)
{
  RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
  RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟

 RCC->APB2ENR|=1<<0;    //开启辅助时钟
 JTAG_Set(SWD_ENABLE);  //开启SWD
           
 //PORTC6~10复用推挽输出  
 GPIOC->CRH&=0XFFFFF000;
 GPIOC->CRH|=0X00000333;
 GPIOC->CRL&=0X00FFFFFF;
 GPIOC->CRL|=0X33000000; 
 GPIOC->ODR|=0X07C0;  
 //PORTB 推挽输出  
 GPIOB->CRH=0X33333333;
 GPIOB->CRL=0X33333333;  
 GPIOB->ODR=0XFFFF;
        
 delay_ms(50); // delay 50 ms
 LCD_WriteReg(0x0000,0x0001);
 delay_ms(50); // delay 50 ms
 DeviceCode = LCD_ReadReg(0x0000);  
 printf(" LCD ID:%x\n",DeviceCode); //打印LCD ID 
 if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325
 {
    LCD_WriteReg(0x00e7,0x0010);     
        LCD_WriteReg(0x0000,0x0001);//开启内部时钟 启动振荡时钟
        LCD_WriteReg(0x0001,0x0100); //从源驱动器选择输出的转变方向
  //when SS=1,输出转变方向是从S720-s1   
        LCD_WriteReg(0x0002,0x0700);//电源开启  设置行反转                 
  //LCD_WriteReg(0x0003,(1<<3)|(1<<4) );  //65K  RGB
  //DRIVE TABLE(寄存器 03H)
  //BIT3=AM BIT4:5=ID0:1
  //AM ID0 ID1   FUNCATION
  // 0  0   0    R->L D->U
  // 1  0   0    D->U R->L
  // 0  1   0    L->R D->U
  // 1  1   0    D->U L->R
  // 0  0   1    R->L U->D
  // 1  0   1    U->D R->L
  // 0  1   1    L->R U->D 正常就用这个.
  // 1  1   1    U->D L->R
        LCD_WriteReg(0x0003,(1<<12)|(3<<4)|(0<<3) );//65K   
        LCD_WriteReg(0x0004,0x0000); //重新调整控制寄存器大小(设置图片)                                 
        LCD_WriteReg(0x0008,0x0207); //设置正面背面的行号           
        LCD_WriteReg(0x0009,0x0000);   //显示控制三,显示区域,与非显示周期的扫描周期     
        LCD_WriteReg(0x000a,0x0000);//display setting        
        LCD_WriteReg(0x000c,0x0001);//display setting         
        LCD_WriteReg(0x000d,0x0000);//0f3c    设置帧标记的位置     
        LCD_WriteReg(0x000f,0x0000);  //RGB显示接口控制2
  //电源配置
        LCD_WriteReg(0x0010,0x0000);   //功率控制1
        LCD_WriteReg(0x0011,0x0007);   //功率控制2  参考电压1.0*Vci
        LCD_WriteReg(0x0012,0x0000);    //功率控制3                                                            
        LCD_WriteReg(0x0013,0x0000);    //功率控制4            
        delay_ms(50);
        LCD_WriteReg(0x0010,0x1590);  
        LCD_WriteReg(0x0011,0x0227);
        delay_ms(50);
        LCD_WriteReg(0x0012,0x009c);                 
        delay_ms(50);
        LCD_WriteReg(0x0013,0x1900);  
        LCD_WriteReg(0x0029,0x0023);   //电力控制7
        LCD_WriteReg(0x002b,0x000e);   //帧速率和色彩控制
        delay_ms(50);
        LCD_WriteReg(0x0020,0x0000);  //设置地址计算器初始化值                                                         
        LCD_WriteReg(0x0021,0x013f);          
  delay_ms(50);
  //伽马校正
        LCD_WriteReg(0x0030,0x0007);
        LCD_WriteReg(0x0031,0x0707);  
        LCD_WriteReg(0x0032,0x0006);
        LCD_WriteReg(0x0035,0x0704);
        LCD_WriteReg(0x0036,0x1f04);
        LCD_WriteReg(0x0037,0x0004);
        LCD_WriteReg(0x0038,0x0000);       
        LCD_WriteReg(0x0039,0x0706);    
        LCD_WriteReg(0x003c,0x0701);
        LCD_WriteReg(0x003d,0x000f);
        delay_ms(50);
        LCD_WriteReg(0x0050,0x0000); //水平GRAM起始位置
        LCD_WriteReg(0x0051,0x00ef); //水平GRAM终止位置                   
        LCD_WriteReg(0x0052,0x0000); //垂直GRAM起始位置                   
        LCD_WriteReg(0x0053,0x013f); //垂直GRAM终止位置 
       
        LCD_WriteReg(0x0060,0xa700);  //门扫描控制     
        LCD_WriteReg(0x0061,0x0001);
        LCD_WriteReg(0x006a,0x0000);
        LCD_WriteReg(0x0080,0x0000);   //局部影像1的显示位置
        LCD_WriteReg(0x0081,0x0000); //局部影像1的RAM开始
        LCD_WriteReg(0x0082,0x0000);
        LCD_WriteReg(0x0083,0x0000);
        LCD_WriteReg(0x0084,0x0000);
        LCD_WriteReg(0x0085,0x0000);
     
        LCD_WriteReg(0x0090,0x0010);    //平板接口控制1
        LCD_WriteReg(0x0092,0x0000); 
        LCD_WriteReg(0x0093,0x0003);
        LCD_WriteReg(0x0095,0x0110);
        LCD_WriteReg(0x0097,0x0000);       
        LCD_WriteReg(0x0098,0x0000); 
        //开启显示设置   
        LCD_WriteReg(0x0007,0x0133);  
        LCD_WriteReg(0x0020,0x0000);                                                           
        LCD_WriteReg(0x0021,0x013f);
 }
原子哥我把这个初始化函数查了下,但是感觉还是不知道为什么要这么写
想知道为什么要这么写,呵呵 相当的好奇

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2011-3-30 11:28:42 | 显示全部楼层
回复【楼主位】苹果:
-------------------------------
你可以用你自己的方式去写.不必好奇.
代码不是唯一的,合用,好用就行.

你觉得我为什么要这么写?先问问自己,如果要你做,你自己怎么写呢?你自己的写法,是否好用呢?
动手写一下吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2012-10-24
在线时间
0 小时
发表于 2012-11-10 16:08:57 | 显示全部楼层
能不能给我说说呀,我看了好久还是没弄懂呀。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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