【求助】STM32F103驱动LCD12864(ST7920控制的)画圆函数调用后画成矩形了,ATmega88上跑该程序没有问题,这是怎么了???

2019-08-17 09:33发布

如题,我用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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。