Advertisement

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)

还没有任何评论哟~