中级会员
- 积分
- 407
- 金钱
- 407
- 注册时间
- 2012-8-11
- 在线时间
- 31 小时
|
5金钱
大伙帮我看看为什么,LCD屏用的是spi总线控制,单片机用的是msp430fr5969,程序屏刷颜色是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;
}
上面这两个函数是没问题的,颜色刷屏测试可以
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//函数功能:设置光标位置
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;
}
}
}
|
最佳答案
查看完整内容[请看2#楼]
回复【4楼】pandy:
---------------------------------
哦哦,我的问题已经解决。
|