如题,我用stm32f103vct6驱动了一个ST7920控制的12864,这个驱动我在2011年再avr单片机上跑过,画圆函数是没有问题的。
今天移植到stm32上,画圆函数调用后画出来的确实矩形,我的画点,画线函数测试都没有问题。
问题1:我的画圆函数怎么了???现在没有avr那个板子了,无法再次测试了。
问题2:根据st7920的手册,读RAM时先要写一个地址,然后伪读一次,再连续读2个字节,这样才是真正的读。
但是我网上能找到的读法和我下面的程序差不多,没有写地址,也没有伪读,更没有读2个字节。但是下面的读函数
我测试(画点,画线,填充一个矩形)确实可以工作,这是为啥呢?读函数到底怎么写?手册上写的错了??
问题3:问题2中读出的2个字节,哪个有用?
================郁闷的读函数================
[mw_shl_code=c,true]U8 LCD12864_Read(void)
{
U8 data=0xFF;
WaitForReady();//判忙
SetReadData; //数据管脚设置为输入
LCD12864_RS_1; //数据
delay(10);
LCD12864_RW_1; //读
delay(10);
LCD12864_EN_1;
delay(10);
data = LCD12864_Data_PIN;//读
delay(10);
LCD12864_EN_0;
SetWriteData;//数据管脚设置为输出
return data;
}[/mw_shl_code]
================跑哪儿去的画圆函数================
[mw_shl_code=c,true]void plotC(U16 x,U16 y,U16 xc,U16 yc,U8 color)
{
DrawPoint(xc+x,yc+y,color);
DrawPoint(xc+x,yc-y,color);
DrawPoint(xc-x,yc+y,color);
DrawPoint(xc-x,yc-y,color);
DrawPoint(xc+y,yc+x,color);
DrawPoint(xc+y,yc-x,color);
DrawPoint(xc-y,yc+x,color);
DrawPoint(xc-y,yc-x,color);
}
void LCD12864_DrawCircle(U16 xc,U16 yc,U16 r,U8 color)
{
U16 x=0,y=0,d=0;
y = r;
d = 3 - (r + r);
x = 0;
while(x <= y)
{
plotC(x,y,xc,yc,color);
//使用Bresenham算法画圆
if(d <=0)
{
d += (x + x + x + x) + 6;
}
else
{
d+=((x - y) + (x - y) + (x - y) + (x - y)) + 10;
y--;
}
x++;
}
}[/mw_shl_code]
|