0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

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

这几个月来,学了不少东西,菜鸟要学习也要略作总结,免得忘得太快。

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到了这里就亮起来了,显示模块就可以正常工作了。

提问者:胡政鹏测试_11 地点:- 浏览次数:2111 提问时间:06-21 11:35
我有更好的答案
提 交
4条回答
kgfhdfgx 06-29 08:49
留个脚印在这里。
xi9632 06-29 06:35
谢谢楼主的分享
晒肥城之乐 06-26 23:03
    我来学习的;
想再看钻石冰尘 06-27 01:27
你好,有没有关于DSP方面的程序
撰写答案
提 交
1 / 3
1 / 3