咚咚咚————【封装驱动】3.97寸800*480高清IPS驱动封装otm8009显示IC
咚咚咚————【封装驱动】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相关推荐
- ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条
ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条 简介 像素(Pixel):像素是指由图像的小方格组成的,这些小方快都有一个明确的位置和被分配的色彩数值 ...
- 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.选择屏 ...
- STM32驱动3.97寸TFT液晶触摸屏模块
目录 一.简介 二.使用前准备 三.程序烧录 四.测试现象 五.注意事项 原文链接:https://www.yourcee.com/newsinfo/2928958.html 一.简介 3.97 寸 ...
- STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口驱动示例
STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口屏示例
- 高通音频驱动录音流程(二)
高通音频驱动录音流程(二) 目录 高通音频驱动录音流程(二) Front End CPU的注册 Front End Codec注册 Front End PCM的注册 Front End CPU的注册 ...
- 高通msm-V4L2-Camera驱动浅析5-buffer
##系列文章 高通msm-V4L2-Camera驱动浅析1-初识 高通msm-V4L2-Camera驱动浅析2-框架详解 高通msm-V4L2-Camera驱动浅析3-session 上一篇文章讲到传 ...
- 高通msm-V4L2-Camera驱动浅析1-初识
##系列文章 ##系列文章 高通msm-V4L2-Camera驱动浅析1-初识 高通msm-V4L2-Camera驱动浅析2-框架详解 高通msm-V4L2-Camera驱动浅析3-session 前 ...
- 高通msm-V4L2-Camera驱动浅析2-框架详解
##系列文章 ##系列文章 高通msm-V4L2-Camera驱动浅析1-初识 高通msm-V4L2-Camera驱动浅析2-框架详解 高通msm-V4L2-Camera驱动浅析3-session 前 ...
- 高通音频驱动录音流程(三)
高通音频驱动录音流程(三) 目录 高通音频驱动录音流程(三) Back End CPU的注册 Back End Codec注册 Back End PCM的注册 Back End CPU的注册 vend ...
- STM32F103ZET6通过SPI驱动2.4寸TFT彩屏
2.4寸TFT情况如下(此屏幕不带触摸,也无触摸驱动程序,但是有底层) 接线情况如下 主要程序如下: main.c #include "delay.h" #include &quo ...
最新文章
- JSF和Struts的区别概述
- Python 懂车帝全系车型--参数分析
- JavaScript实现十种经典排序算法(js排序算法)
- java开发必背API
- Python Elasticsearch 插入数据
- python的模块文档_python查看模块文档
- @程序员,你该如何做职业规划才能不被“废”?
- 转: Syslog协议介绍
- Spark中sortByKey和sortBy对(key,value)数据分别 根据key和value排序
- opmanager监控linux,OpManager管理员指南.doc
- java 十六进制颜色代码_RGB颜色与16进制颜色的换算方法
- JavaNIO读取文件
- Android中调用文件管理器进行选择文件(记录)
- 2020邮储银行实习面试经验
- 安卓手机网易云视频,下载的文件位置:
- 40 个科研学术网站,赶紧来收藏一波!
- PostScript语言里的珠玑
- 【CF487E】Tourists
- kubernetes部署失败的原因
- 离散数学:判断任意一个关系是否为函数,若是函数,判定其是否为单射、满射或双射
热门文章
- c语言学生管理系统用户登录,c语言学生管理系统之用户登陆
- chrome支持的java版本下载_安装Chrome Java插件
- 国军标GJB150A霉菌试验详解
- Web基础(Java前端基础)
- Java学习笔记目录索引 (持续更新中)
- MySQL之四种SQL性能分析工具
- Xshell6和Xftp6 破解免安装版(亲测可用)
- 吴恩达机器学习课程资源(笔记、中英文字幕视频、课后作业,提供百度云镜像!)
- 【转】密码经济学: 区块链技术前景之路基
- qi无线充电协议_iOS 13.1封杀第三方无线快充:疑似苹果无线充电私有协议来了...