|
|
本帖最后由 hackwangchao 于 2025-9-27 22:06 编辑
闲的无聊翻出多少年前的普中51开发板,所有的都能驱动起来就是这款彩屏没有程序不能驱动,从网上找了普中的程序还是不行,各位大神看看是哪里的问题。
以下是找到的代码
#include <reg52.h>
#include"LCD_driver.h"
uint colors[]=
{0xf800,0x07e0,0x001f,0xffe0,0x0000,0x07ff,0xf81f,0xffff }; //颜色数据
void LCD_Init(void)
{
LCD_REST=1;
delayms(50);
LCD_REST=0;
delayms(50);
LCD_REST=1;
delayms(5);
LCD_CS =0; //打开片选使能
/********************** 以下初始化代码 每个命令下带有不同数量的参数**************************/
LCD_Write_COM(0XF0); //参考S6D04H0驱动IC手册.pdf 文档的 220页 //LCD_Write_COM函数 发送命令 LCD_Write_Para函数 传递该命令下的参数
LCD_Write_Para(0X5A);
LCD_Write_Para(0X5A);
//APON CONTROL
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
//SLEEP OUT
LCD_Write_COM(0X11); //参考S6D04H0驱动IC手册.pdf 文档的 165页
delayms(10);
//POWER CONTROL VC = "0111"
LCD_Write_COM(0XF4); //参考S6D04H0驱动IC手册.pdf 文档的 228页
LCD_Write_Para(0X07);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X21);
LCD_Write_Para(0X47);
LCD_Write_Para(0X01);
LCD_Write_Para(0X02);
LCD_Write_Para(0X3F);
LCD_Write_Para(0X66);
LCD_Write_Para(0X05);
//POWER CONTROL VC = "0111"
LCD_Write_COM(0XF4); //参考S6D04H0驱动IC手册.pdf 文档的 228页 带有20个参数
LCD_Write_Para(0X07);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X21);
LCD_Write_Para(0X47);
LCD_Write_Para(0X04);
LCD_Write_Para(0X02);
LCD_Write_Para(0X2A);
LCD_Write_Para(0X7d);
LCD_Write_Para(0X05);
LCD_Write_COM(0XF2); //参考S6D04H0驱动IC手册.pdf 文档的 221页
LCD_Write_Para(0X28);
LCD_Write_Para(0X60);
LCD_Write_Para(0X03);
LCD_Write_Para(0X04);
LCD_Write_Para(0X04);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X15);
LCD_Write_Para(0X48);
LCD_Write_Para(0X00);
LCD_Write_Para(0X07);
LCD_Write_Para(0X01);
LCD_Write_COM(0XF5); //参考S6D04H0驱动IC手册.pdf 文档的 235页
LCD_Write_Para(0X00);
LCD_Write_Para(0X1d);
LCD_Write_Para(0X4f);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X06);
//POWER CONTROL
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X03);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
delayms(5);
//POWER CONTROL
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X0F);
LCD_Write_Para(0X09);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
delayms(5);
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X0F);
LCD_Write_Para(0X01);
delayms(10);
//POWER CONTROL
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X1F);
delayms(20);
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X3F);
delayms(10);
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X3F);
LCD_Write_Para(0X03);
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0X7F);
delayms(30);
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0XFF);
/*LCD_Write_COM(0XFD);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X10);
LCD_Write_Para(0X14);
LCD_Write_Para(0X12);
LCD_Write_Para(0X00); */
delayms(20);
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X00);
LCD_Write_Para(0XFF);
LCD_Write_Para(0X1F);
LCD_Write_Para(0X00);
LCD_Write_Para(0X02);
delayms(20);
LCD_Write_COM(0XF3); //参考S6D04H0驱动IC手册.pdf 文档的 227页
LCD_Write_Para(0X01);
LCD_Write_COM(0XF0);
LCD_Write_Para(0Xa5);
LCD_Write_Para(0Xa5);
LCD_Write_COM(0X36); //参考S6D04H0驱动IC手册.pdf 文档的 189页
LCD_Write_Para(0X48);
LCD_Write_COM(0X3a); //参考S6D04H0驱动IC手册.pdf 文档的 195页
LCD_Write_Para(0X55); //16bit (66 18bit)
//gamma
//red
/* LCD_Write_COM(0Xf9);
LCD_Write_Para(0X04);
LCD_Write_COM(0XFA);
LCD_Write_Para(0x0a);
LCD_Write_Para(0x08);
LCD_Write_Para(0X18);
LCD_Write_Para(0X1d);
LCD_Write_Para(0X1e);
LCD_Write_Para(0X20);
LCD_Write_Para(0X15);
LCD_Write_Para(0X3E);
LCD_Write_Para(0X2e);
LCD_Write_Para(0X1c);
LCD_Write_Para(0X0a);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_COM(0XFB);
LCD_Write_Para(0x00);
LCD_Write_Para(0x00);
LCD_Write_Para(0X1F);
LCD_Write_Para(0X1d);
LCD_Write_Para(0X1e);
LCD_Write_Para(0X20);
LCD_Write_Para(0X15);
LCD_Write_Para(0X3E);
LCD_Write_Para(0X2f);
LCD_Write_Para(0X1c);
LCD_Write_Para(0X0a);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
//green
/* LCD_Write_COM(0XF9);
LCD_Write_Para(0X02);
LCD_Write_COM(0XFA);
LCD_Write_Para(0x0a);
LCD_Write_Para(0x08);
LCD_Write_Para(0X1f);
LCD_Write_Para(0X1d);
LCD_Write_Para(0X1e);
LCD_Write_Para(0X20);
LCD_Write_Para(0X15);
LCD_Write_Para(0X3E);
LCD_Write_Para(0X2e);
LCD_Write_Para(0X1c);
LCD_Write_Para(0X0a);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_COM(0XFB);
LCD_Write_Para(0x00);
LCD_Write_Para(0x00);
LCD_Write_Para(0X1F);
LCD_Write_Para(0X1d);
LCD_Write_Para(0X1e);
LCD_Write_Para(0X20);
LCD_Write_Para(0X15);
LCD_Write_Para(0X3E);
LCD_Write_Para(0X2f);
LCD_Write_Para(0X1c);
LCD_Write_Para(0X0a);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_COM(0XF9);
LCD_Write_Para(0X01);
//blue
LCD_Write_COM(0XFA);
LCD_Write_Para(0x0a);
LCD_Write_Para(0x08);
LCD_Write_Para(0X1f);
LCD_Write_Para(0X1d);
LCD_Write_Para(0X1e);
LCD_Write_Para(0X20);
LCD_Write_Para(0X15);
LCD_Write_Para(0X3E);
LCD_Write_Para(0X2e);
LCD_Write_Para(0X1c);
LCD_Write_Para(0X0a);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
/* LCD_Write_COM(0XFB);
LCD_Write_Para(0x00);
LCD_Write_Para(0x00);
LCD_Write_Para(0X1F);
LCD_Write_Para(0X1d);
LCD_Write_Para(0X1e);
LCD_Write_Para(0X20);
LCD_Write_Para(0X15);
LCD_Write_Para(0X3E);
LCD_Write_Para(0X2f);
LCD_Write_Para(0X1c);
LCD_Write_Para(0X0a);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00);
LCD_Write_Para(0X00); */
delayms(120);
LCD_Write_COM(0x29); //显示打开 //参考S6D04H0驱动IC手册.pdf 文档的 173页
LCD_Write_COM(0x2c); //写数据到RAM中 //参考S6D04H0驱动IC手册.pdf 文档的 270页
LCD_CS =1; //关闭使能
}
void LCD_Write_COM(char VL) //发送命令
{
LCD_RS=0;
LCD_DataPortL=VL; //低位P0口
LCD_WR=0;
LCD_WR=1;
}
void LCD_Write_Para(char VL) //发送数据
{
LCD_RS=1;
LCD_DataPortL=VL; //低位P0口
LCD_WR=0;
LCD_WR=1;
}
void delayms(int count) // /* X1ms */
{
int i,j;
for(i=0;i<count;i++)
for(j=0;j<100;j++);
}
void LCD_Writ_Bus(char VH,char VL) //并行数据写入函数
{
LCD_DataPortH=VH; //高位P1口
LCD_DataPortL=VL; //低位P0口
LCD_WR=0;
LCD_WR=1;
}
void LCD_Write_DATA(char VH,char VL) //发送数据
{
LCD_RS=1;
LCD_Writ_Bus(VH,VL);
}
void Pant(char VH,char VL)
{
int i,j;
LCD_CS =0; //打开片选使能
Address_set(0,0,239,319);
for(i=0;i<320;i++)
{
for (j=0;j<240;j++)
{
LCD_Write_DATA(VH,VL);
}
}
LCD_CS =1; //关闭片选使能
}
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
LCD_Write_COM(0X2A); //设置X坐标地址 //参考S6D04H0驱动IC手册.pdf 文档的 174页
LCD_Write_Para(x1>>8); //开始X
LCD_Write_Para(x1); //开始X
LCD_Write_Para(x2>>8); //结束X
LCD_Write_Para(x2); //结束X
LCD_Write_COM(0X2B); //设置Y坐标地址 //参考S6D04H0驱动IC手册.pdf 文档的 176页
LCD_Write_Para(y1>>8); //开始Y
LCD_Write_Para(y1); //开始Y
LCD_Write_Para(y2>>8); //结束Y
LCD_Write_Para(y2); //结束Y
//LCD_Write_COM(0x13);
LCD_Write_COM(0x29); //显示打开 //参考S6D04H0驱动IC手册.pdf 文档的 173页
LCD_Write_COM(0x2c); //写数据到RAM中 //参考S6D04H0驱动IC手册.pdf 文档的 270页
}
/**********************************************************
水平彩条显示子函数
**********************************************************/
void LCD_color_H()
{
uint num;
uchar n;
Address_set(0, 0, 239,319);
for(n=0;n<8;n++)
{
for(num=40*240;num>0;num--)
{
LCD_Write_DATA(colors[n]>>8,colors[n]);
}
}
}
/**********************************************************
垂直彩条显示子函数
**********************************************************/
void LCD_color_V()
{
uint num;
uchar n,x1,x2;
x1 = 0;
x2 = 30;
for(n=0;n<8;n++)
{
Address_set(x1, 0, x2-1,319);
x1 = x2;
x2 = x2+30;
for(num=30*320;num>0;num--)
{
LCD_Write_DATA(colors[n]>>8,colors[n]);
}
}
}
#include<reg52.h>
#include"LCD_driver.h"
main()
{
LCD_Init(); //TFT初始化
Pant(colors[2]>>8 , colors[2]); //蓝色
LCD_CS =0; //打开片选使能
LCD_color_H(); //8色彩条水平显示
delayms(500);
LCD_color_V(); //8色彩条垂直显示
delayms(500);
LCD_CS =1; //关闭片选使能
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|