LCD驱动芯片ST7789V
发布时间
阅读量:
阅读量
最近在调LCD显示屏,用到的驱动芯片是ST7789V。想了想初始化代码还是不放上来了,别的地方都有。由于节省成本,用的是三线,即CS,CLK,SDA。驱动芯片上可以看到,采用三线制的时候,一条命令由9位组成,最前面一位为数据/命令的位。但是硬件SDI是8位的,这边可以采用使用硬件,发送两次的方案,也可以直接使用软件模拟的方式。我采用的是第二种。
/****************************************
发送数据,D/C为1
******************************************/
void WriteData(unsigned int i)
{
SPI1_CS_0;
SPI1_SDA_1;
__NOP();
SPI1_CLK_0;
__NOP();
__NOP();
SPI1_CLK_1;
SendDataSPI(i);
SPI1_CS_1;
__NOP();
__NOP();
__NOP();
}
/*************************************
SPI发送8位数据
**************************************/
void SendDataSPI(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++)
{
if( (dat&0x80)!=0 ) SPI1_SDA_1;
else SPI1_SDA_0;
__NOP();
__NOP();
dat <<= 1;
SPI1_CLK_0;
__NOP();
__NOP();
__NOP();
SPI1_CLK_1;
}
}
发送命令的时候,同样的步骤。其中_NOP();只是单纯的增加时间,这个根据自己示波器结果调试。(可先单独发一次,重复发,比如一直发WriteComm(0x29);在示波器上能看到100101001就是成功)首先将图片转换为16进制的数据,这个工具网上找,可用image。转换的时候记得大小不要弄错,转换的时候宽度和高速的大小,直接就是在代码显示中的X,Y坐标的设定。打个比方就是,多大的人给多大的衣服。代码画的框小了,显示不够,会刷掉最开始部分,继续显示,显示内容是会一定全显示的,但由于给定范围太小,就会造成最后的部分和最初的部分,抢同一个区域,最初的抢不过最后的。同样如果框大了,那就是拉伸效果了。
欢迎大家一起讨论有关于LCD显示的问题。
全部评论 (0)
还没有任何评论哟~
