LCD 240*320显示屏驱动芯片为ILI9341不能画线和显示字符

2019-07-15 15:28发布

大伙帮我看看为什么,LCD屏用的是spi总线控制,单片机用的是msp430fr5969,程序屏刷颜 {MOD}是OK的,也就是屏初始化、写数据,写命令是没问题的所以程序这三部分补贴出来,现在是不能画线,和显示字符。显示字符的先不用理会,先解决画点问题先,求解!
/*************************************************
函数名:LCD_SetRegion
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点,Y_IncMode表示先自增y再自增x
返回值:无
*************************************************/
void Lcd_SetRegion(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end)
{
  LCD_CS_LOW;
  LCD_WriteIndex(0x2a);
  LCD_WriteData16Bit(x_start>>8,x_start);
  LCD_WriteData16Bit(x_end>>8,x_end);
  LCD_WriteIndex(0x2b);
  LCD_WriteData16Bit(y_start>>8,y_start);
  LCD_WriteData16Bit(y_end>>8,y_end);
  LCD_WriteIndex(0x2c);
  LCD_CS_HIGH;
}
void Lcd_Clear(uint16_t Color)  //清屏,刷屏            
{
  unsigned int i,m;
  Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
  LCD_RS_DC_HIGH;
  LCD_CS_LOW;
  for(i=0;i<Y_MAX_PIXEL;i++)
  {
    for(m=0;m<X_MAX_PIXEL;m++)
    {
      LCD_WriteData(Color>>8);
      LCD_WriteData(Color);
    }   
  }
  LCD_CS_HIGH;
}
上面这两个函数是没问题的,颜 {MOD}刷屏测试可以
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//函数功能:设置光标位置
void LCD_SetCursor(unsigned int x,unsigned int y)
{
  unsigned int xpos,ypos;
   // xpos = 239 - x;
    xpos =  x;
        
    ypos = y;
   
        LCD_WriteIndex(0x2A);
        LCD_WriteData16Bit(xpos>>8,xpos);   
        LCD_WriteIndex(0x2B);
        LCD_WriteData16Bit(ypos>>8,ypos);
        LCD_WriteIndex(0x2c);
}
//函数功能:在指定位置画点
void LCD_DrawPoint(unsigned int x,unsigned int y,unsigned int Color)
{
      LCD_SetCursor(x,y);
      LCD_WriteData16Bit(Color>>8,Color);
}
//函数功能:画线
void LCD_DrawLine(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, unsigned int Color)
{
  unsigned int t;
  int xerr=0,yerr=0,delta_x,delta_y,distance;
  int incx,incy,uRow,uCol;
  delta_x=x2-x1;  
delta_y=y2-y1;
uRow=x1;
uCol=y1;
if(delta_x>0)
        incx=1;
  else if(delta_x==0)
        incx=0;
   else
      {
        incx=-1;delta_x=-delta_x;
      }   
if(delta_y>0)
        incy=1;
  else if(delta_y==0)
        incy=0;
    else
      {
        incy=-1;delta_y=-delta_y;
      }   
if( delta_x>delta_y)
    distance=delta_x;
else
        distance=delta_y;
for(t=0;t<=distance+1;t++ )
{  
    LCD_DrawPoint(uRow,uCol,Color);
    xerr+=delta_x ;  
    yerr+=delta_y ;  
    if(xerr>distance)
    {
    xerr-=distance;
    uRow+=incx;
    }
    if(yerr>distance)
    {
    yerr-=distance;
    uCol+=incy;
    }
}  
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。