AI8051U驱动ST7796时遇到问题
void SPI_Init(void){
/**** 配置SPI的IO引脚模式 ****/
P1M0 |= 0xe0; //配置MOSI/MISO/SCLK引脚为推挽输出
P1M1 &= ~0xe0;
P1PU |= 0xe0; //允许准双向口内部上拉电阻
TFT_MOSI = 1; //引脚上拉
TFT_MISO = 1;
TFT_SCLK = 1;
/**** 配置SPI模式 ****/
SPI_S1 = 0x00; // 选择SPI1的引脚 00:P1+ 01:P2+ 10:P4+ 11:P3+
SPI_S0 = 0x00;
//控制寄存器
SSIG = 0X01; //控制寄存器 忽略SS引脚功能
SPEN = 0x01; //使能SPI
DORD = 0x00; //先发送高位MSB,若为1则先发送低位LSB
MSTR = 0x01; //设置为主机模式,单主单从模式。须根据SSIG进行不同设置
CPOL = 0x01; //时钟极性为高,即空闲时是高电平。极性相反时传输数据
CPHA = 0x01; //前沿驱动,后沿采样
//时钟配置
//系统默认启动内部高速HRC,CLKSEL = 0x00:配置为内部高速HRC -00-00-> MCLK -> HSIOCK -HSCLKDIV-> HSCLK -SPI_CLKDIV-> SPI
//同时,HSCLK是高速外设时钟源。当使用HSPI时在3V下最高频率为20MHz(同时调整PxSR寄存器为高速输出模式)
CLKSEL &= ~0x40; //选择MCLK为高速IO时钟源
HSCLKDIV = 0x01; //高速时钟1分频 -> 24M
SPI_CLKDIV = 0x01; //SPI输入时钟1分频,0-255 -> 24M
SPR1 = 0x01; //SCLK频率 = 24MHz/2 = 12MHz
SPR0 = 0x01;
//中断配置
ESPI = 0x00; //禁止SPI中断
SPSTAT = 0xc0; //清除中断标志位SPIF和写冲突标志位WCOL
UART1_printf("开启LCD的SPI\n");
}
u8 SPI_WriteByte(u8 Byte)
{
SPDAT = Byte;
while(!SPIF); //等待接收完一个byte
SPSTAT = 0xc0; //清SPIF/WCOL标志
return (SPDAT);
} SPI的配置有问题吗?
void LCD_WR_REG(u8 dat)
{
LCD_CS=0;
LCD_RS=0;
SPI_WriteByte(dat);
LCD_CS=1;
}
void LCD_WR_DATA(u8 dat)
{
LCD_CS=0;
LCD_RS=1;
SPI_WriteByte(dat);
LCD_CS=1;
}
void LCD_Clear(u16 Color)
{
unsigned int i,m;
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);
LCD_CS=0;
LCD_RS=1;
for(i=0;i<lcddev.height;i++)
{
for(m=0;m<lcddev.width;m++)
{
SPI_WriteByte(Color>>8);
SPI_WriteByte(Color);
}
}
LCD_CS=1;
}
void LCD_IO_Init(void)
{
P1M0 |= 0x13; //BL/RS/CS推挽输出
P1M1 &= ~0x13;
P4M0 |= 0x80; //RST推挽输出
P4M1 &= ~0x80;
P1PU |= 0x13; //启用上拉电阻
P4PU |= 0x80;
LCD_CS=1;
LCD_BL=1;
LCD_RS=1;
LCD_RST=1;
}
void LCD_RESET(void)
{
LCD_RST=0;
delay_ms(100);
LCD_RST=1;
delay_ms(50);
}
void LCD_Init(void)
{
SPI_Init(); //硬件SPI初始化
LCD_IO_Init(); //LCD IO初始化
LCD_RESET(); //LCD 复位
/**** ST7796S IPS初始化 ****/
LCD_WR_REG(0x11);
delay_ms(120);
LCD_WR_REG(0x36); // Memory Data Access Control MY,MX~~
LCD_WR_DATA(0x48);
LCD_WR_REG(0x3A);
LCD_WR_DATA(0x55); //LCD_WR_DATA(0x66);
LCD_WR_REG(0xF0); // Command Set Control
LCD_WR_DATA(0xC3);
LCD_WR_REG(0xF0);
LCD_WR_DATA(0x96);
LCD_WR_REG(0xB4);
LCD_WR_DATA(0x01);
LCD_WR_REG(0xB7);
LCD_WR_DATA(0xC6);
//LCD_WR_REG(0xB9);
//LCD_WR_DATA(0x02);
//LCD_WR_DATA(0xE0);
LCD_WR_REG(0xC0);
LCD_WR_DATA(0x80);
LCD_WR_DATA(0x45);
LCD_WR_REG(0xC1);
LCD_WR_DATA(0x13); //18//00
LCD_WR_REG(0xC2);
LCD_WR_DATA(0xA7);
LCD_WR_REG(0xC5);
LCD_WR_DATA(0x0A);
LCD_WR_REG(0xE8);
LCD_WR_DATA(0x40);
LCD_WR_DATA(0x8A);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x29);
LCD_WR_DATA(0x19);
LCD_WR_DATA(0xA5);
LCD_WR_DATA(0x33);
LCD_WR_REG(0xE0);
LCD_WR_DATA(0xD0);
LCD_WR_DATA(0x08);
LCD_WR_DATA(0x0F);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x33);
LCD_WR_DATA(0x30);
LCD_WR_DATA(0x33);
LCD_WR_DATA(0x47);
LCD_WR_DATA(0x17);
LCD_WR_DATA(0x13);
LCD_WR_DATA(0x13);
LCD_WR_DATA(0x2B);
LCD_WR_DATA(0x31);
LCD_WR_REG(0xE1);
LCD_WR_DATA(0xD0);
LCD_WR_DATA(0x0A);
LCD_WR_DATA(0x11);
LCD_WR_DATA(0x0B);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x2F);
LCD_WR_DATA(0x33);
LCD_WR_DATA(0x47);
LCD_WR_DATA(0x38);
LCD_WR_DATA(0x15);
LCD_WR_DATA(0x16);
LCD_WR_DATA(0x2C);
LCD_WR_DATA(0x32);
LCD_WR_REG(0xF0);
LCD_WR_DATA(0x3C);
LCD_WR_REG(0xF0);
LCD_WR_DATA(0x69);
delay_ms(120);
LCD_WR_REG(0x20);
LCD_WR_REG(0x29);
LCD_direction(0);//设置LCD显示方向
LCD_Clear(RED);//清全屏白色
LCD_BL=1;
UART1_printf("开启LCD\n");
}
这是LCD的驱动配置
源代码
谁有这个屏,寄2块给我们,我们来帮忙测试下
或者告诉我们在哪买,我们买了来测试下
看了半天也没有看见你遇到什么问题? zhang32568 发表于 2024-11-27 22:32
看了半天也没有看见你遇到什么问题?
屏幕只能够被BL点亮,代码里 LCD_Clear(RED);正常应该全名红色,实际上就是白色,仅仅BL点亮。 神农鼎 发表于 2024-11-27 22:24
谁有这个屏,寄2块给我们,我们来帮忙测试下
或者告诉我们在哪买,我们买了来测试下
...
【淘宝】7天无理由退货 http://e.tb.cn/h.T2R5afDtLEPwTUA?tk=lvYx3G80RAy HU9196 「3.5寸4寸TFT液晶显示屏GT911电阻电容触摸SPI串口8位16位ST7796」
点击链接直接打开 或者 淘宝搜索直接打开
(或者可以买去测试完了再无理由退货?{:5_298:})
页:
[1]