咚咚咚————【封装驱动】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;//初始化GPIOD
GPIO_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;//初始化GPIOE
GPIO_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 command2
lcdwritecmd(0xff01); lcdwritedata(0x09); //enable access command2
lcdwritecmd(0xff02); lcdwritedata(0x01); //enable access command2
lcdwritecmd(0xff80); lcdwritedata(0x80); //enable access command2
lcdwritecmd(0xff81); lcdwritedata(0x09); //enable access command2
lcdwritecmd(0xff03); lcdwritedata(0x01); //
lcdwritecmd(0xc5b1); lcdwritedata(0xA9); //power control
lcdwritecmd(0xc591); lcdwritedata(0x0F); //power control
lcdwritecmd(0xc0B4); lcdwritedata(0x50);
//panel driving mode : column inversion
// gamma
lcdwritecmd(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 setting
lcdwritecmd(0xc181); lcdwritedata(0x66); //osc=65HZ
lcdwritecmd(0xc1a1); lcdwritedata(0x08);
lcdwritecmd(0xc592); lcdwritedata(0x01); //power control
lcdwritecmd(0xc595); lcdwritedata(0x34); //power control
lcdwritecmd(0xd800); lcdwritedata(0x79); //GVDD / NGVDD setting
lcdwritecmd(0xd801); lcdwritedata(0x79); //GVDD / NGVDD setting
lcdwritecmd(0xc594); lcdwritedata(0x33); //power control
lcdwritecmd(0xc0a3); lcdwritedata(0x1B); //panel timing setting
lcdwritecmd(0xc582); lcdwritedata(0x83); //power control
lcdwritecmd(0xc481); lcdwritedata(0x83); //source driver setting
lcdwritecmd(0xc1a1); lcdwritedata(0x0E);
lcdwritecmd(0xb3a6); lcdwritedata(0x20);
lcdwritecmd(0xb3a7); lcdwritedata(0x01);
lcdwritecmd(0xce80); lcdwritedata(0x85); // GOA VST
lcdwritecmd(0xce81); lcdwritedata(0x01); // GOA VST
lcdwritecmd(0xce82); lcdwritedata(0x00); // GOA VST
lcdwritecmd(0xce83); lcdwritedata(0x84); // GOA VST
lcdwritecmd(0xce84); lcdwritedata(0x01); // GOA VST
lcdwritecmd(0xce85); lcdwritedata(0x00); // GOA VST
lcdwritecmd(0xcea0); lcdwritedata(0x18); // GOA CLK
lcdwritecmd(0xcea1); lcdwritedata(0x04); // GOA CLK
lcdwritecmd(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 CLK
lcdwritecmd(0xcea7); lcdwritedata(0x18); // GOA CLK
lcdwritecmd(0xcea8); lcdwritedata(0x03); // GOA CLK
lcdwritecmd(0xcea9); lcdwritedata(0x03); // GOA CLK
lcdwritecmd(0xceaa); lcdwritedata(0x3a); // GOA CLK
lcdwritecmd(0xceab); lcdwritedata(0x00); // GOA CLK
lcdwritecmd(0xceac); lcdwritedata(0x00); // GOA CLK
lcdwritecmd(0xcead); lcdwritedata(0x00); // GOA CLK
lcdwritecmd(0xceb0); lcdwritedata(0x18); // GOA CLK
lcdwritecmd(0xceb1); lcdwritedata(0x02); // GOA CLK
lcdwritecmd(0xceb2); lcdwritedata(0x03); // GOA CLK
lcdwritecmd(0xceb3); lcdwritedata(0x3b); // GOA CLK
lcdwritecmd(0xceb4); lcdwritedata(0x00); // GOA CLK
lcdwritecmd(0xceb5); lcdwritedata(0x00); // GOA CLK
lcdwritecmd(0xceb6); lcdwritedata(0x00); // GOA CLK
lcdwritecmd(0xceb7); lcdwritedata(0x18); // GOA CLK
lcdwritecmd(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 CLK
lcdwritecmd(0xcfc0); lcdwritedata(0x01); // GOA ECLK
lcdwritecmd(0xcfc1); lcdwritedata(0x01); // GOA ECLK
lcdwritecmd(0xcfc2); lcdwritedata(0x20); // GOA ECLK
lcdwritecmd(0xcfc3); lcdwritedata(0x20); // GOA ECLK
lcdwritecmd(0xcfc4); lcdwritedata(0x00); // GOA ECLK
lcdwritecmd(0xcfc5); lcdwritedata(0x00); // GOA ECLK
lcdwritecmd(0xcfc6); lcdwritedata(0x01); // GOA other options
lcdwritecmd(0xcfc7); lcdwritedata(0x00);
// GOA signal toggle option setting
lcdwritecmd(0xcfc8); lcdwritedata(0x00); //GOA signal toggle option setting
lcdwritecmd(0xcfc9); lcdwritedata(0x00);
//GOA signal toggle option setting
lcdwritecmd(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接口来自动与屏幕通信,还需继续学习