打印

基于STM32 奋斗开发板的 SSD1963 LCD驱动总结

[复制链接]
9114|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xzhihui|  楼主 | 2013-3-16 17:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xzhihui 于 2013-4-8 18:39 编辑

这几个月来,学了不少东西,菜鸟要学习也要略作总结,免得忘得太快。
4.3寸的480*272 TFT显示。
  TFT就是 薄膜场效应晶体管。液晶显示屏的一种。驱动芯片选用的是SSD1963,MCU是STM32103VET6。是在奋斗的V3板上实现的。
  关于LCD显示,不得不说下LCD的初始化,也算是液晶屏的驱动吧。修改自奋斗板上的例程。
  初始化分为几个步骤:
  首先,先上电复位一下,奋斗板是用E1脚来控制的,代码如下:
  GPIO_ResetBits(GPIOE, GPIO_Pin_1); //先置零
  Delay(0xAFFF);                        //延时(我的延时函数是没有循环的,所以时间不久几微秒就可以了,)                  
  GPIO_SetBits(GPIOE, GPIO_Pin_1 );//上电开启                          
  Delay(0xAFFF);                        //再来一次

  第二步,当然是PLL设置啦。代码如下:
  LCD_WR_REG(0x00E2);            //0XE2是设置PLL 的寄存器。
  LCD_WR_Data(0x002c);            //设置倍频数 M   0x2c for 8M
  LCD_WR_Data(0x0002);           //设置分频数 N
  LCD_WR_Data(0x0004);        //使能MN   PLL = INCLK*(M+1) / (N+1)  PLL 倍频到120M PLL=8*44/3=120M
  设置完之后,还有使能PLL作为LCD的时钟,别忘记了
  LCD_WR_REG(0x00E0);         //0XE0是PLL使能寄存器
  LCD_WR_Data(0x0001);          //先开启PLL
  Delay(0xAFFF);                  //略作延时
  LCD_WR_REG(0x00E0);         //还要一次
  LCD_WR_Data(0x0003);          // 使用 PLL作为时钟
  Delay(0xAFFF);                //嗯,这里需要休息一下
  LCD_WR_REG(0x0001);         // 软件复位

  第三步,设置PCLK,也就是像素时钟,很重要哦。
  LCD_WR_REG(0xE6);        //嗯,没错 0XE6是设置像素时钟的寄存器  
  LCD_WR_Data(0x01);       //我的屏幕是4.3寸,这个频率就可以了,如果屏幕比较大,有闪烁的话,可以再加大
  LCD_WR_Data(0x93);
  LCD_WR_Data(0xE0);       //忘记说了,寄存器指令都是8位传输的,这里的像素时钟需要3个字节来设置,高位在前

  第四步,设置LCD的显示模式,需要根据屏幕大小和LCD的电路控制方法相匹配,
  这个要自己去看data sheet 了,备注不方便详细描叙

  LCD_WR_REG(0x00B0);        //设置LCD显示模式及分辨率
  LCD_WR_Data(0x0018);        // 使能FRC 0X0018 18bit LCD控制
  LCD_WR_Data(0x0000);     //TFT模式
  LCD_WR_Data((HDP>>8)&0X00FF);  //Set HDP         水平大小
  LCD_WR_Data(HDP&0X00FF);             //双字节,高位在前
  LCD_WR_Data((VDP>>8)&0X00FF);  //Set VDP         垂直尺寸
  LCD_WR_Data(VDP&0X00FF);
  LCD_WR_Data(0x0000);                        //RGB顺序串行TFT接口

  LCD_WR_REG(0x00B4);        //设置  水平显示时间参数
  LCD_WR_Data((HT>>8)&0X00FF);  //Set HT 水平总周期
  LCD_WR_Data(HT&0X00FF);
  LCD_WR_Data((HPS>>8)&0X00FF);  //Set HPS 水平同步脉冲开始位
  LCD_WR_Data(HPS&0X00FF);
  LCD_WR_Data(HPW);                           //Set HPW 水平同步脉冲宽度
  LCD_WR_Data((LPS>>8)&0X00FF);  //Set LPS 显示开始位
  LCD_WR_Data(LPS&0X00FF);
  LCD_WR_Data(0x0000);         //TFT mode下,如此设置

  LCD_WR_REG(0x00B6);        //设置        垂直显示时间参数
  LCD_WR_Data((VT>>8)&0X00FF);   //Set VT 垂直总周期
  LCD_WR_Data(VT&0X00FF);
  LCD_WR_Data((VPS>>8)&0X00FF);  //Set VPS 垂直同步脉冲开始位
  LCD_WR_Data(VPS&0X00FF);
  LCD_WR_Data(VPW);                           //Set VPW垂直同步脉冲宽度
  LCD_WR_Data((FPS>>8)&0X00FF);  //Set FPS  显示开始位置
  LCD_WR_Data(FPS&0X00FF);
   
  LCD_WR_REG(0X0036);    //设置从主机读取指令顺序,可以省略,上电默认为0
  LCD_WR_Data(0X000);

  LCD_WR_REG(0x00F0); //pixel data interface  设置像素数据接口为16位
  LCD_WR_Data(0x003); //03为 565 的16位通讯。

  第五步,可选。设置图形后处理。

  LCD_WR_REG(0x0021);        //进入图形颜色翻转模式        
  LCD_WR_REG(0x00BC);//设置图像后处理
  LCD_WR_Data(0x0080);//对比度
  LCD_WR_Data(0x0080);//亮度
  LCD_WR_Data(0x0080);//饱和度值  //
  LCD_WR_Data(0x0001);//处理机允许

  最后一步,背光设置,也是屏幕亮起来的一步。
   
  在设置之前呢,要记得先清理屏幕。不然显示出来的就是以前残留在LCD的像素数据。
  TFT_CLEAR(0X00); //清屏函数,参数是颜色数值

  背光设置
  LCD_WR_REG(0x00BE); //set PWM控制
  LCD_WR_Data(0x0006);        //PWM频率 = PLL / (256* 0x06) /256        
  LCD_WR_Data(0x00ff); // PWM占空比设置
  LCD_WR_Data(0x09); //DBC 控制PWM 使能
  LCD_WR_Data(0xFF); //DBC手动亮度设置
  LCD_WR_Data(0x00); //DBC 最小亮度设置
  LCD_WR_Data(0x00); //Brightness prescaler :off
        
  LCD_WR_REG(0xD4); //设置每个等级的电源阀值
  //TH1 = display width * display height * 3 * 0.1 /16
  //480*272 * 3 * 0.1 /16 =990H
  LCD_WR_Data(0x00); //
  LCD_WR_Data(0x09); //
  LCD_WR_Data(0x90); //
  
  //TH2 = display width * display height * 3 * 0.25 /16
  //480*272 * 3 * 0.25 /16 =17E8H
  LCD_WR_Data(0x00); //
  LCD_WR_Data(0x17); //
  LCD_WR_Data(0xE8); //

  //TH3 = display width * display height * 3 * 0.6 /16
  //480*272 * 3 * 0.6 /16 =3960H
  LCD_WR_Data(0x00); //
  LCD_WR_Data(0x39); //
  LCD_WR_Data(0x60); //
                 
  LCD_WR_REG(0x00d0);//设置动态背光控制配置
  LCD_WR_Data(0x000d);         //使能

  LCD到了这里就亮起来了,显示模块就可以正常工作了。

相关帖子

沙发
xzhihui|  楼主 | 2013-3-16 17:19 | 只看该作者
留个脚印在这里。

使用特权

评论回复
板凳
明月小厨| | 2013-3-18 06:22 | 只看该作者
好大的脚印

使用特权

评论回复
地板
Regsen| | 2013-7-17 16:33 | 只看该作者
谢谢楼主的分享

使用特权

评论回复
5
西早念子| | 2013-8-12 11:39 | 只看该作者
顶,好帖

使用特权

评论回复
6
haitun1895| | 2013-8-12 14:30 | 只看该作者
    我来学习的;

使用特权

评论回复
7
stevenzhongan| | 2014-4-21 10:45 | 只看该作者
好贴

使用特权

评论回复
8
kongxiaoxiao| | 2015-3-18 20:13 | 只看该作者
你好,有没有关于DSP方面的程序

使用特权

评论回复
9
wsnsyy| | 2015-7-31 00:07 | 只看该作者
mark

使用特权

评论回复
10
msichina| | 2015-9-24 21:35 | 只看该作者
有没有兄弟帮忙干点私活,设计1963的7寸驱动板,报酬私聊,QQ:84473026,多谢!

使用特权

评论回复
11
无帝老三| | 2017-2-23 09:40 | 只看该作者
您好,请问一下,初始化完成后,怎么动态设置背光?是不是动态修改PWM占空比?有没有封装好动态修改的函数让菜鸟参考下?谢谢
在线等大神回复?

使用特权

评论回复
12
July123| | 2017-2-23 09:55 | 只看该作者
学习学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:独立,内敛,提升,品味。

18

主题

509

帖子

2

粉丝