找回密码
 立即注册
搜索
热搜: 电子 行业
查看: 3085|回复: 0
打印 上一主题 下一主题

[控制电器/开关] 基于STM32 奋斗开发板的 SSD1963 LCD驱动总结

[复制链接]

12

主题

13

帖子

94

茶券

实习生

Rank: 1

专家分
82
跳转到指定楼层
楼主
发表于 2-27 22:54: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 ff
         
   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到了这里就亮起来了,显示模块就可以正常工作了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|百州电子网论坛

GMT+8, 12-22 21:16 , Processed in 1.086650 second(s), 19 queries .

中国百州电子网(2014-2015) 版权所有        Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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