【求助】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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
天山狐狸
1楼-- · 2019-08-17 14:18
哈哈,问题已经解决:

画圆函数:U16 x=0,y=0,d=0;
定义成:S16 x=0,y=0,d=0;即可
正点原子
2楼-- · 2019-08-17 18:28
 精彩回答 2  元偷偷看……
ALIEN_WALI
3楼-- · 2019-08-18 00:04
你好 请问你是串行驱动的吗?
留下QQ我和你交流一下
天山狐狸
4楼-- · 2019-08-18 02:47
回复【3楼】ALIEN_WALI:
---------------------------------
我用8位并口驱动的,企鹅:0x16E2AA3C

谢谢
天山狐狸
5楼-- · 2019-08-18 05:29
夜深了,自己再顶顶

看来大家没有遇到过这样的疑惑。
天山狐狸
6楼-- · 2019-08-18 07:37
回复【3楼】ALIEN_WALI:
---------------------------------
qq一般晚上7点后在线

一周热门 更多>