咚咚咚————【封装驱动】3.97寸800*480高清IPS驱动封装otm8009显示IC

  • (一)效果展示
  • (二)源码分享
  • (三)需要改进的地方及不足

(使用阿波罗STM32F7开发板)

(一)效果展示

(二)源码分享

otm8009.h

/********************************************
主控芯片:STM32F767IGT6主频216Mhz
晶体频率:HSE=25Mhz  SYSCLK=216Mhz
模块型号:800*400分辨率IPS屏主控otm8009
通讯方式:16位并口通信
函数功能:声明IPS屏幕IO与数据
作者:苏夏雨
授权:未经作者允许,禁止转载
********************************************/
//定义模块头文件名称
#ifndef __otm8009_H
#define __otm8009_H
//声明需要使用的函数
void otm8009init(void);//模块初始化
void otm8009display(void);//刷新一次
void otm8009clear(unsigned int Color);//刷屏
//声明需要使用的数据
#define WHITE      0xFFFF//白色
#define BLACK      0x0000//黑色
#define BLUE       0x001F//蓝色
#define PURPLE     0XF81F//紫色
#define GBLUE            0X07FF//天蓝
#define RED        0xF800//红色
#define GREEN      0x07E0//绿色
#define CYAN       0x7FFF//青色
#define YELLOW     0xFFE0//黄色
#define BROWN        0XBC40//棕色
#define BRRED        0XFC07//棕红
#define GRAY         0X8430//灰色
//IMG2lcd设置参数:(16位真色彩、C语言数组、分辨率480*800、水平扫描、RGB565格式)
#endif

otm8009.c

/********************************************
主控芯片:STM32F767IGT6主频216Mhz
晶体频率:HSE=25Mhz  SYSCLK=216Mhz
模块型号:800*400分辨率IPS屏主控otm8009
通讯方式:16位并口通信
函数功能:IPS屏幕显示与初始化函数
作者:苏夏雨
授权:未经作者允许,禁止转载
********************************************/
#include "otm8009.h"
#include "stm32f7xx.h"
#include "stm32f7xx_hal.h"
void lcdwritecmd(unsigned int cmd)//向LCD屏幕发送16bit命令
{GPIOD->ODR=0x0000;GPIOE->ODR=0x0000;       GPIOD->ODR|=GPIO_PIN_4;if(cmd&0x0001){GPIOD->ODR|=GPIO_PIN_14;}if(cmd&0x0002){GPIOD->ODR|=GPIO_PIN_15;}if(cmd&0x0004){GPIOD->ODR|=GPIO_PIN_0;}if(cmd&0x0008){GPIOD->ODR|=GPIO_PIN_1;}if(cmd&0x0010){GPIOE->ODR|=GPIO_PIN_7;}if(cmd&0x0020){GPIOE->ODR|=GPIO_PIN_8;}if(cmd&0x0040){GPIOE->ODR|=GPIO_PIN_9;}if(cmd&0x0080){GPIOE->ODR|=GPIO_PIN_10;}if(cmd&0x0100){GPIOE->ODR|=GPIO_PIN_11;}if(cmd&0x0200){GPIOE->ODR|=GPIO_PIN_12;}if(cmd&0x0400){GPIOE->ODR|=GPIO_PIN_13;}if(cmd&0x0800){GPIOE->ODR|=GPIO_PIN_14;}if(cmd&0x1000){GPIOE->ODR|=GPIO_PIN_15;}if(cmd&0x2000){GPIOD->ODR|=GPIO_PIN_8;}if(cmd&0x4000){GPIOD->ODR|=GPIO_PIN_9;}if(cmd&0x8000){GPIOD->ODR|=GPIO_PIN_10;}GPIOD->ODR|=GPIO_PIN_5;GPIOD->ODR|=GPIO_PIN_7;
}
void lcdwritedata(unsigned int data)//向LCD屏幕发送16bit数据
{GPIOD->ODR=0x0000;GPIOE->ODR=0x0000;GPIOD->ODR|=GPIO_PIN_4;GPIOD->ODR|=GPIO_PIN_13;    if(data&0x0001){GPIOD->ODR|=GPIO_PIN_14;}if(data&0x0002){GPIOD->ODR|=GPIO_PIN_15;}if(data&0x0004){GPIOD->ODR|=GPIO_PIN_0;}if(data&0x0008){GPIOD->ODR|=GPIO_PIN_1;}if(data&0x0010){GPIOE->ODR|=GPIO_PIN_7;}if(data&0x0020){GPIOE->ODR|=GPIO_PIN_8;}if(data&0x0040){GPIOE->ODR|=GPIO_PIN_9;}if(data&0x0080){GPIOE->ODR|=GPIO_PIN_10;}if(data&0x0100){GPIOE->ODR|=GPIO_PIN_11;}if(data&0x0200){GPIOE->ODR|=GPIO_PIN_12;}if(data&0x0400){GPIOE->ODR|=GPIO_PIN_13;}if(data&0x0800){GPIOE->ODR|=GPIO_PIN_14;}if(data&0x1000){GPIOE->ODR|=GPIO_PIN_15;}if(data&0x2000){GPIOD->ODR|=GPIO_PIN_8;}if(data&0x4000){GPIOD->ODR|=GPIO_PIN_9;}if(data&0x8000){GPIOD->ODR|=GPIO_PIN_10;}GPIOD->ODR|=GPIO_PIN_5;GPIOD->ODR|=GPIO_PIN_7;
}
void otm8009init()//初始化lcd屏幕
{GPIO_InitTypeDef GPIO_InitStructure;//GPIO变量__HAL_RCC_GPIOD_CLK_ENABLE();//打开GPIOD时钟__HAL_RCC_GPIOE_CLK_ENABLE();//打开GPIOE时钟GPIO_InitStructure.Pin=GPIO_PIN_All;//初始化GPIODGPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStructure.Pull=GPIO_PULLUP;GPIO_InitStructure.Speed=GPIO_SPEED_HIGH;HAL_GPIO_Init(GPIOD,&GPIO_InitStructure);GPIO_InitStructure.Pin=GPIO_PIN_All;//初始化GPIOEGPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStructure.Pull=GPIO_PULLUP;GPIO_InitStructure.Speed=GPIO_SPEED_HIGH;HAL_GPIO_Init(GPIOE,&GPIO_InitStructure);//============ OTM8009A+HSD3.97 20140613 ===============================================//lcdwritecmd(0xff00);   lcdwritedata(0x80);       //enable access command2lcdwritecmd(0xff01);   lcdwritedata(0x09);      //enable access command2lcdwritecmd(0xff02);   lcdwritedata(0x01);      //enable access command2lcdwritecmd(0xff80);   lcdwritedata(0x80);      //enable access command2lcdwritecmd(0xff81);   lcdwritedata(0x09);      //enable access command2lcdwritecmd(0xff03);   lcdwritedata(0x01);      //lcdwritecmd(0xc5b1);   lcdwritedata(0xA9);        //power controllcdwritecmd(0xc591);   lcdwritedata(0x0F);               //power controllcdwritecmd(0xc0B4);   lcdwritedata(0x50);//panel driving mode : column inversion//  gammalcdwritecmd(0xE100);   lcdwritedata(0x00);lcdwritecmd(0xE101);   lcdwritedata(0x09);lcdwritecmd(0xE102);   lcdwritedata(0x0F);lcdwritecmd(0xE103);   lcdwritedata(0x0E);lcdwritecmd(0xE104);   lcdwritedata(0x07);lcdwritecmd(0xE105);   lcdwritedata(0x10);lcdwritecmd(0xE106);   lcdwritedata(0x0B);lcdwritecmd(0xE107);   lcdwritedata(0x0A);lcdwritecmd(0xE108);   lcdwritedata(0x04);lcdwritecmd(0xE109);   lcdwritedata(0x07);lcdwritecmd(0xE10A);   lcdwritedata(0x0B);lcdwritecmd(0xE10B);   lcdwritedata(0x08);lcdwritecmd(0xE10C);   lcdwritedata(0x0F);lcdwritecmd(0xE10D);   lcdwritedata(0x10);lcdwritecmd(0xE10E);   lcdwritedata(0x0A);lcdwritecmd(0xE10F);   lcdwritedata(0x01);   lcdwritecmd(0xE200);   lcdwritedata(0x00);lcdwritecmd(0xE201);   lcdwritedata(0x09);lcdwritecmd(0xE202);   lcdwritedata(0x0F);lcdwritecmd(0xE203);   lcdwritedata(0x0E);lcdwritecmd(0xE204);   lcdwritedata(0x07);lcdwritecmd(0xE205);   lcdwritedata(0x10);lcdwritecmd(0xE206);   lcdwritedata(0x0B);lcdwritecmd(0xE207);   lcdwritedata(0x0A);lcdwritecmd(0xE208);   lcdwritedata(0x04);lcdwritecmd(0xE209);   lcdwritedata(0x07);lcdwritecmd(0xE20A);   lcdwritedata(0x0B);lcdwritecmd(0xE20B);   lcdwritedata(0x08);lcdwritecmd(0xE20C);   lcdwritedata(0x0F);lcdwritecmd(0xE20D);   lcdwritedata(0x10);lcdwritecmd(0xE20E);   lcdwritedata(0x0A);lcdwritecmd(0xE20F);   lcdwritedata(0x01);    lcdwritecmd(0xD900);   lcdwritedata(0x4E);      //vcom settinglcdwritecmd(0xc181);   lcdwritedata(0x66);        //osc=65HZlcdwritecmd(0xc1a1);   lcdwritedata(0x08);       lcdwritecmd(0xc592);   lcdwritedata(0x01);      //power controllcdwritecmd(0xc595);   lcdwritedata(0x34);       //power controllcdwritecmd(0xd800);   lcdwritedata(0x79);       //GVDD / NGVDD settinglcdwritecmd(0xd801);   lcdwritedata(0x79);        //GVDD / NGVDD settinglcdwritecmd(0xc594);   lcdwritedata(0x33);        //power controllcdwritecmd(0xc0a3);   lcdwritedata(0x1B);       //panel timing settinglcdwritecmd(0xc582);   lcdwritedata(0x83);        //power controllcdwritecmd(0xc481);   lcdwritedata(0x83);       //source driver settinglcdwritecmd(0xc1a1);   lcdwritedata(0x0E);lcdwritecmd(0xb3a6);   lcdwritedata(0x20);lcdwritecmd(0xb3a7);   lcdwritedata(0x01);lcdwritecmd(0xce80);   lcdwritedata(0x85);     // GOA VSTlcdwritecmd(0xce81);   lcdwritedata(0x01);    // GOA VSTlcdwritecmd(0xce82);   lcdwritedata(0x00);        // GOA VST  lcdwritecmd(0xce83);   lcdwritedata(0x84);      // GOA VSTlcdwritecmd(0xce84);   lcdwritedata(0x01);        // GOA VSTlcdwritecmd(0xce85);   lcdwritedata(0x00);        // GOA VSTlcdwritecmd(0xcea0);   lcdwritedata(0x18);        // GOA CLKlcdwritecmd(0xcea1);   lcdwritedata(0x04);        // GOA CLKlcdwritecmd(0xcea2);   lcdwritedata(0x03);        // GOA CLK lcdwritecmd(0xcea3);   lcdwritedata(0x39);       // GOA CLK lcdwritecmd(0xcea4);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xcea5);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xcea6);   lcdwritedata(0x00);       // GOA CLKlcdwritecmd(0xcea7);   lcdwritedata(0x18);        // GOA CLK lcdwritecmd(0xcea8);   lcdwritedata(0x03);       // GOA CLKlcdwritecmd(0xcea9);   lcdwritedata(0x03);        // GOA CLK lcdwritecmd(0xceaa);   lcdwritedata(0x3a);       // GOA CLKlcdwritecmd(0xceab);   lcdwritedata(0x00);        // GOA CLK lcdwritecmd(0xceac);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xcead);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xceb0);   lcdwritedata(0x18);       // GOA CLKlcdwritecmd(0xceb1);   lcdwritedata(0x02);        // GOA CLK lcdwritecmd(0xceb2);   lcdwritedata(0x03);       // GOA CLKlcdwritecmd(0xceb3);   lcdwritedata(0x3b);        // GOA CLK lcdwritecmd(0xceb4);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xceb5);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xceb6);   lcdwritedata(0x00);       // GOA CLKlcdwritecmd(0xceb7);   lcdwritedata(0x18);        // GOA CLKlcdwritecmd(0xceb8);   lcdwritedata(0x01);        // GOA CLK lcdwritecmd(0xceb9);   lcdwritedata(0x03);       // GOA CLK lcdwritecmd(0xceba);   lcdwritedata(0x3c);       // GOA CLK lcdwritecmd(0xcebb);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xcebc);   lcdwritedata(0x00);       // GOA CLK lcdwritecmd(0xcebd);   lcdwritedata(0x00);       // GOA CLKlcdwritecmd(0xcfc0);   lcdwritedata(0x01);        // GOA ECLK lcdwritecmd(0xcfc1);   lcdwritedata(0x01);      // GOA ECLKlcdwritecmd(0xcfc2);   lcdwritedata(0x20);       // GOA ECLKlcdwritecmd(0xcfc3);   lcdwritedata(0x20);       // GOA ECLKlcdwritecmd(0xcfc4);   lcdwritedata(0x00);       // GOA ECLKlcdwritecmd(0xcfc5);   lcdwritedata(0x00);       // GOA ECLKlcdwritecmd(0xcfc6);   lcdwritedata(0x01);       // GOA other optionslcdwritecmd(0xcfc7);   lcdwritedata(0x00); // GOA signal toggle option settinglcdwritecmd(0xcfc8);   lcdwritedata(0x00);        //GOA signal toggle option settinglcdwritecmd(0xcfc9);   lcdwritedata(0x00); //GOA signal toggle option settinglcdwritecmd(0xcfd0);   lcdwritedata(0x00);lcdwritecmd(0xcb80);   lcdwritedata(0x00);lcdwritecmd(0xcb81);   lcdwritedata(0x00);lcdwritecmd(0xcb82);   lcdwritedata(0x00);lcdwritecmd(0xcb83);   lcdwritedata(0x00);lcdwritecmd(0xcb84);   lcdwritedata(0x00);lcdwritecmd(0xcb85);   lcdwritedata(0x00);lcdwritecmd(0xcb86);   lcdwritedata(0x00);lcdwritecmd(0xcb87);   lcdwritedata(0x00);lcdwritecmd(0xcb88);   lcdwritedata(0x00);lcdwritecmd(0xcb89);   lcdwritedata(0x00);lcdwritecmd(0xcb90);   lcdwritedata(0x00);lcdwritecmd(0xcb91);   lcdwritedata(0x00);lcdwritecmd(0xcb92);   lcdwritedata(0x00);lcdwritecmd(0xcb93);   lcdwritedata(0x00);lcdwritecmd(0xcb94);   lcdwritedata(0x00);lcdwritecmd(0xcb95);   lcdwritedata(0x00);lcdwritecmd(0xcb96);   lcdwritedata(0x00);lcdwritecmd(0xcb97);   lcdwritedata(0x00);lcdwritecmd(0xcb98);   lcdwritedata(0x00);lcdwritecmd(0xcb99);   lcdwritedata(0x00);lcdwritecmd(0xcb9a);   lcdwritedata(0x00);lcdwritecmd(0xcb9b);   lcdwritedata(0x00);lcdwritecmd(0xcb9c);   lcdwritedata(0x00);lcdwritecmd(0xcb9d);   lcdwritedata(0x00);lcdwritecmd(0xcb9e);   lcdwritedata(0x00);lcdwritecmd(0xcba0);   lcdwritedata(0x00);lcdwritecmd(0xcba1);   lcdwritedata(0x00);lcdwritecmd(0xcba2);   lcdwritedata(0x00);lcdwritecmd(0xcba3);   lcdwritedata(0x00);lcdwritecmd(0xcba4);   lcdwritedata(0x00);lcdwritecmd(0xcba5);   lcdwritedata(0x00);lcdwritecmd(0xcba6);   lcdwritedata(0x00);lcdwritecmd(0xcba7);   lcdwritedata(0x00);lcdwritecmd(0xcba8);   lcdwritedata(0x00);lcdwritecmd(0xcba9);   lcdwritedata(0x00);lcdwritecmd(0xcbaa);   lcdwritedata(0x00);lcdwritecmd(0xcbab);   lcdwritedata(0x00);lcdwritecmd(0xcbac);   lcdwritedata(0x00);lcdwritecmd(0xcbad);   lcdwritedata(0x00);lcdwritecmd(0xcbae);   lcdwritedata(0x00);lcdwritecmd(0xcbb0);   lcdwritedata(0x00);lcdwritecmd(0xcbb1);   lcdwritedata(0x00);lcdwritecmd(0xcbb2);   lcdwritedata(0x00);lcdwritecmd(0xcbb3);   lcdwritedata(0x00);lcdwritecmd(0xcbb4);   lcdwritedata(0x00);lcdwritecmd(0xcbb5);   lcdwritedata(0x00);lcdwritecmd(0xcbb6);   lcdwritedata(0x00);lcdwritecmd(0xcbb7);   lcdwritedata(0x00);lcdwritecmd(0xcbb8);   lcdwritedata(0x00);lcdwritecmd(0xcbb9);   lcdwritedata(0x00);lcdwritecmd(0xcbc0);   lcdwritedata(0x00);lcdwritecmd(0xcbc1);   lcdwritedata(0x04);lcdwritecmd(0xcbc2);   lcdwritedata(0x04);lcdwritecmd(0xcbc3);   lcdwritedata(0x04);lcdwritecmd(0xcbc4);   lcdwritedata(0x04);lcdwritecmd(0xcbc5);   lcdwritedata(0x04);lcdwritecmd(0xcbc6);   lcdwritedata(0x00);lcdwritecmd(0xcbc7);   lcdwritedata(0x00);lcdwritecmd(0xcbc8);   lcdwritedata(0x00);lcdwritecmd(0xcbc9);   lcdwritedata(0x00);lcdwritecmd(0xcbca);   lcdwritedata(0x00);lcdwritecmd(0xcbcb);   lcdwritedata(0x00);lcdwritecmd(0xcbcc);   lcdwritedata(0x00);lcdwritecmd(0xcbcd);   lcdwritedata(0x00);lcdwritecmd(0xcbce);   lcdwritedata(0x00);lcdwritecmd(0xcbd0);   lcdwritedata(0x00);lcdwritecmd(0xcbd1);   lcdwritedata(0x00);lcdwritecmd(0xcbd2);   lcdwritedata(0x00);lcdwritecmd(0xcbd3);   lcdwritedata(0x00);lcdwritecmd(0xcbd4);   lcdwritedata(0x00);lcdwritecmd(0xcbd5);   lcdwritedata(0x00);lcdwritecmd(0xcbd6);   lcdwritedata(0x04);lcdwritecmd(0xcbd7);   lcdwritedata(0x04);lcdwritecmd(0xcbd8);   lcdwritedata(0x04);lcdwritecmd(0xcbd9);   lcdwritedata(0x04);lcdwritecmd(0xcbda);   lcdwritedata(0x04);lcdwritecmd(0xcbdb);   lcdwritedata(0x00);lcdwritecmd(0xcbdc);   lcdwritedata(0x00);lcdwritecmd(0xcbdd);   lcdwritedata(0x00);lcdwritecmd(0xcbde);   lcdwritedata(0x00);lcdwritecmd(0xcbe0);   lcdwritedata(0x00);lcdwritecmd(0xcbe1);   lcdwritedata(0x00);lcdwritecmd(0xcbe2);   lcdwritedata(0x00);lcdwritecmd(0xcbe3);   lcdwritedata(0x00);lcdwritecmd(0xcbe4);   lcdwritedata(0x00);lcdwritecmd(0xcbe5);   lcdwritedata(0x00);lcdwritecmd(0xcbe6);   lcdwritedata(0x00);lcdwritecmd(0xcbe7);   lcdwritedata(0x00);lcdwritecmd(0xcbe8);   lcdwritedata(0x00);lcdwritecmd(0xcbe9);   lcdwritedata(0x00);lcdwritecmd(0xcbf0);   lcdwritedata(0xFF);lcdwritecmd(0xcbf1);   lcdwritedata(0xFF);lcdwritecmd(0xcbf2);   lcdwritedata(0xFF);lcdwritecmd(0xcbf3);   lcdwritedata(0xFF);lcdwritecmd(0xcbf4);   lcdwritedata(0xFF);lcdwritecmd(0xcbf5);   lcdwritedata(0xFF);lcdwritecmd(0xcbf6);   lcdwritedata(0xFF);lcdwritecmd(0xcbf7);   lcdwritedata(0xFF);lcdwritecmd(0xcbf8);   lcdwritedata(0xFF);lcdwritecmd(0xcbf9);   lcdwritedata(0xFF);lcdwritecmd(0xcc80);   lcdwritedata(0x00);lcdwritecmd(0xcc81);   lcdwritedata(0x26);lcdwritecmd(0xcc82);   lcdwritedata(0x09);lcdwritecmd(0xcc83);   lcdwritedata(0x0B);lcdwritecmd(0xcc84);   lcdwritedata(0x01);lcdwritecmd(0xcc85);   lcdwritedata(0x25);lcdwritecmd(0xcc86);   lcdwritedata(0x00);lcdwritecmd(0xcc87);   lcdwritedata(0x00);lcdwritecmd(0xcc88);   lcdwritedata(0x00);lcdwritecmd(0xcc89);   lcdwritedata(0x00);lcdwritecmd(0xcc90);   lcdwritedata(0x00);lcdwritecmd(0xcc91);   lcdwritedata(0x00);lcdwritecmd(0xcc92);   lcdwritedata(0x00);lcdwritecmd(0xcc93);   lcdwritedata(0x00);lcdwritecmd(0xcc94);   lcdwritedata(0x00);lcdwritecmd(0xcc95);   lcdwritedata(0x00);lcdwritecmd(0xcc96);   lcdwritedata(0x00);lcdwritecmd(0xcc97);   lcdwritedata(0x00);lcdwritecmd(0xcc98);   lcdwritedata(0x00);lcdwritecmd(0xcc99);   lcdwritedata(0x00);lcdwritecmd(0xcc9a);   lcdwritedata(0x00);lcdwritecmd(0xcc9b);   lcdwritedata(0x26);lcdwritecmd(0xcc9c);   lcdwritedata(0x0A);lcdwritecmd(0xcc9d);   lcdwritedata(0x0C);lcdwritecmd(0xcc9e);   lcdwritedata(0x02);lcdwritecmd(0xcca0);   lcdwritedata(0x25);lcdwritecmd(0xcca1);   lcdwritedata(0x00);lcdwritecmd(0xcca2);   lcdwritedata(0x00);lcdwritecmd(0xcca3);   lcdwritedata(0x00);lcdwritecmd(0xcca4);   lcdwritedata(0x00);lcdwritecmd(0xcca5);   lcdwritedata(0x00);lcdwritecmd(0xcca6);   lcdwritedata(0x00);lcdwritecmd(0xcca7);   lcdwritedata(0x00);lcdwritecmd(0xcca8);   lcdwritedata(0x00);lcdwritecmd(0xcca9);   lcdwritedata(0x00);lcdwritecmd(0xccaa);   lcdwritedata(0x00);lcdwritecmd(0xccab);   lcdwritedata(0x00);lcdwritecmd(0xccac);   lcdwritedata(0x00);lcdwritecmd(0xccad);   lcdwritedata(0x00);lcdwritecmd(0xccae);   lcdwritedata(0x00);lcdwritecmd(0xccb0);   lcdwritedata(0x00);lcdwritecmd(0xccb1);   lcdwritedata(0x25);lcdwritecmd(0xccb2);   lcdwritedata(0x0C);lcdwritecmd(0xccb3);   lcdwritedata(0x0A);lcdwritecmd(0xccb4);   lcdwritedata(0x02);lcdwritecmd(0xccb5);   lcdwritedata(0x26);lcdwritecmd(0xccb6);   lcdwritedata(0x00);lcdwritecmd(0xccb7);   lcdwritedata(0x00);lcdwritecmd(0xccb8);   lcdwritedata(0x00);lcdwritecmd(0xccb9);   lcdwritedata(0x00);lcdwritecmd(0xccc0);   lcdwritedata(0x00);lcdwritecmd(0xccc1);   lcdwritedata(0x00);lcdwritecmd(0xccc2);   lcdwritedata(0x00);lcdwritecmd(0xccc3);   lcdwritedata(0x00);lcdwritecmd(0xccc4);   lcdwritedata(0x00);lcdwritecmd(0xccc5);   lcdwritedata(0x00);lcdwritecmd(0xccc6);   lcdwritedata(0x00);lcdwritecmd(0xccc7);   lcdwritedata(0x00);lcdwritecmd(0xccc8);   lcdwritedata(0x00);lcdwritecmd(0xccc9);   lcdwritedata(0x00);lcdwritecmd(0xccca);   lcdwritedata(0x00);lcdwritecmd(0xcccb);   lcdwritedata(0x25);lcdwritecmd(0xcccc);   lcdwritedata(0x0B);lcdwritecmd(0xcccd);   lcdwritedata(0x09);lcdwritecmd(0xccce);   lcdwritedata(0x01);lcdwritecmd(0xccd0);   lcdwritedata(0x26);lcdwritecmd(0xccd1);   lcdwritedata(0x00);lcdwritecmd(0xccd2);   lcdwritedata(0x00);lcdwritecmd(0xccd3);   lcdwritedata(0x00);lcdwritecmd(0xccd4);   lcdwritedata(0x00);lcdwritecmd(0xccd5);   lcdwritedata(0x00);lcdwritecmd(0xccd6);   lcdwritedata(0x00);lcdwritecmd(0xccd7);   lcdwritedata(0x00);lcdwritecmd(0xccd8);   lcdwritedata(0x00);lcdwritecmd(0xccd9);   lcdwritedata(0x00);lcdwritecmd(0xccda);   lcdwritedata(0x00);lcdwritecmd(0xccdb);   lcdwritedata(0x00);lcdwritecmd(0xccdc);   lcdwritedata(0x00);lcdwritecmd(0xccdd);   lcdwritedata(0x00);lcdwritecmd(0xccde);   lcdwritedata(0x00);lcdwritecmd(0x3A00);   lcdwritedata(0x55);lcdwritecmd(0x1100);lcdwritecmd(0x2900);lcdwritecmd(0x2C00);lcdwritecmd(0x2A00);  lcdwritedata(0x00);lcdwritecmd(0x2A01);  lcdwritedata(0x00);lcdwritecmd(0x2A02);  lcdwritedata(0x01);lcdwritecmd(0x2A03);  lcdwritedata(0xe0);lcdwritecmd(0x2B00);  lcdwritedata(0x00);lcdwritecmd(0x2B01);  lcdwritedata(0x00);lcdwritecmd(0x2B02);  lcdwritedata(0x03);lcdwritecmd(0x2B03);  lcdwritedata(0x20);
}
void LCD_SetWindows(unsigned int xStar,unsigned int  yStar,unsigned int  xEnd,unsigned int  yEnd)
{lcdwritecmd(0x2A00);   lcdwritedata(xStar>>8);lcdwritecmd(0x2A01);   lcdwritedata(xStar);lcdwritecmd(0x2A02);    lcdwritedata(xEnd>>8);lcdwritecmd(0x2A03);    lcdwritedata(xEnd); lcdwritecmd(0x2B00);    lcdwritedata(yStar>>8);lcdwritecmd(0x2B01);   lcdwritedata(yStar);lcdwritecmd(0x2B02);    lcdwritedata(yEnd>>8);lcdwritecmd(0x2B03);    lcdwritedata(yEnd);lcdwritecmd(0x2c00); //开始写入GRAM
}
void otm8009clear(unsigned int Color)
{   unsigned int i,j;      LCD_SetWindows(0,0,480-1,800-1);for(i=0;i<800;i++){for(j=0;j<480;j++)lcdwritedata(Color);   }
}

补充部分(otm8009中显示图片的代码)
需要注意gImage为存放图片数据的数组,可以把图片放在单片机Flash中或者SD卡,一边读取一边刷新屏幕。

void LCDdisplay()
{unsigned int lcd;unsigned long p=0;LCD_SetWindows(0,0,480-1,800-1);for(p=0;p<460800;p++)        //卖萌图片占460800个字节{lcd=gImage[p+1];//赋值高8位RGB数据lcd<<=8;              //RGB数据移位lcd|=gImage[p]; //赋值低8为RGB数据p++;lcdwritedata(lcd);  }for(p=0;p<153600;p++)    //剩下部分填充黑色{lcdwritedata(BLACK);}
}

(三)需要改进的地方及不足

程序改了很多次,使用HAL库来操作GPIO速度最快600KHZ,后面改成使用底层的位带操作速度提升至1.67MHZ,但是还是无法达到播放动画的帧数。
全屏刷图需要8004802(RGB565格式)= 768000字节
使用HAL库操作GPIO 耗时:768000/2/600KHZ = 0.64秒 一帧
使用底层位带操作GPIO 耗时:768000/2/1670KHZ = 0.23秒 一帧
而需要动画连贯至少需要24帧/秒 所以必需在0.04秒刷完一帧才能保证动画流畅
但是我现在还不会使用STM32中的FMC接口来自动与屏幕通信,还需继续学习

咚咚咚————【封装驱动】3.97寸800*480高清IPS驱动封装otm8009显示IC相关推荐

  1. ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条

    ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条 简介 像素(Pixel):像素是指由图像的小方格组成的,这些小方快都有一个明确的位置和被分配的色彩数值 ...

  2. ESP32 入门笔记08:1.54寸(240*240)彩色TFT 显示高清IPS LCD 屏幕 SPI接口

    目录 1.屏幕规格 2.原理图 3.程序实现 3.1引脚定义 3.2Adafruit_GFX / Arduino_ST7789版 3.3TFT_eSPI库版 3.3.1配置TFT_eSPI a.选择屏 ...

  3. STM32驱动3.97寸TFT液晶触摸屏模块

    目录 一.简介 二.使用前准备 三.程序烧录 四.测试现象 五.注意事项 原文链接:https://www.yourcee.com/newsinfo/2928958.html 一.简介 3.97 寸 ...

  4. STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口驱动示例

    STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口屏示例

  5. 高通音频驱动录音流程(二)

    高通音频驱动录音流程(二) 目录 高通音频驱动录音流程(二) Front End CPU的注册 Front End Codec注册 Front End PCM的注册 Front End CPU的注册 ...

  6. 高通msm-V4L2-Camera驱动浅析5-buffer

    ##系列文章 高通msm-V4L2-Camera驱动浅析1-初识 高通msm-V4L2-Camera驱动浅析2-框架详解 高通msm-V4L2-Camera驱动浅析3-session 上一篇文章讲到传 ...

  7. 高通msm-V4L2-Camera驱动浅析1-初识

    ##系列文章 ##系列文章 高通msm-V4L2-Camera驱动浅析1-初识 高通msm-V4L2-Camera驱动浅析2-框架详解 高通msm-V4L2-Camera驱动浅析3-session 前 ...

  8. 高通msm-V4L2-Camera驱动浅析2-框架详解

    ##系列文章 ##系列文章 高通msm-V4L2-Camera驱动浅析1-初识 高通msm-V4L2-Camera驱动浅析2-框架详解 高通msm-V4L2-Camera驱动浅析3-session 前 ...

  9. 高通音频驱动录音流程(三)

    高通音频驱动录音流程(三) 目录 高通音频驱动录音流程(三) Back End CPU的注册 Back End Codec注册 Back End PCM的注册 Back End CPU的注册 vend ...

  10. STM32F103ZET6通过SPI驱动2.4寸TFT彩屏

    2.4寸TFT情况如下(此屏幕不带触摸,也无触摸驱动程序,但是有底层) 接线情况如下 主要程序如下: main.c #include "delay.h" #include &quo ...

最新文章

  1. JSF和Struts的区别概述
  2. Python 懂车帝全系车型--参数分析
  3. JavaScript实现十种经典排序算法(js排序算法)
  4. java开发必背API
  5. Python Elasticsearch 插入数据
  6. python的模块文档_python查看模块文档
  7. @程序员,你该如何做职业规划才能不被“废”?
  8. 转: Syslog协议介绍
  9. Spark中sortByKey和sortBy对(key,value)数据分别 根据key和value排序
  10. opmanager监控linux,OpManager管理员指南.doc
  11. java 十六进制颜色代码_RGB颜色与16进制颜色的换算方法
  12. JavaNIO读取文件
  13. Android中调用文件管理器进行选择文件(记录)
  14. 2020邮储银行实习面试经验
  15. 安卓手机网易云视频,下载的文件位置:
  16. 40 个科研学术网站,赶紧来收藏一波!
  17. PostScript语言里的珠玑
  18. 【CF487E】Tourists
  19. kubernetes部署失败的原因
  20. 离散数学:判断任意一个关系是否为函数,若是函数,判定其是否为单射、满射或双射

热门文章

  1. c语言学生管理系统用户登录,c语言学生管理系统之用户登陆
  2. chrome支持的java版本下载_安装Chrome Java插件
  3. 国军标GJB150A霉菌试验详解
  4. Web基础(Java前端基础)
  5. Java学习笔记目录索引 (持续更新中)
  6. MySQL之四种SQL性能分析工具
  7. Xshell6和Xftp6 破解免安装版(亲测可用)
  8. 吴恩达机器学习课程资源(笔记、中英文字幕视频、课后作业,提供百度云镜像!)
  9. 【转】密码经济学: 区块链技术前景之路基
  10. qi无线充电协议_iOS 13.1封杀第三方无线快充:疑似苹果无线充电私有协议来了...