咚咚咚————【封装驱动】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;//初始化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接口来自动与屏幕通信,还需继续学习

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值