在嵌入式系统的产品设计时,大部分情况会涉及人机交互,而作为直接且能直观表达的,莫过于屏幕了。这次拿到的这块板,可以说是麻雀虽小五脏俱全,
该有的外设都有了,使用M3的内核,支持完整的蓝牙协议栈。屏幕是一块OLED 240x240的屏,虽然没有触摸屏功能,但是足够使用了,接下来将用这个
屏幕做任意画线算法,实现点到点的画线。
2、平时使用中,屏幕大多都是用来做一些字体显示,偶尔刷新图片,当需要做复杂GUI的时候,可能还会做移植,这不,在论坛里看到了大佬的操作。从
视频看出,这个芯片跑GUI刷新这个屏幕似乎有点吃力。所以决定用Bresenham算法做一个简单的显示,以满足自己做画的页面,不用去移植GUI且简单
3、Bresenham简介
直线方程
众所周知,最基本的斜截式直线方程为y=kx+b(k为斜率,b为截距)y=kx+b(k为斜率,b为截距)。这个方程存在的缺点是无法表示直线x=αx=α,所以
用一个新的方程来代替Ax+By+C=0Ax+By+C=0。
Bresenham Bresenham画直线的算法主要步骤是判断下一点的位置。维基百科中有一张图比较形象
图中,每一个点代表的是一个像素,假定我们有直线f(x,y)f(x,y)且当前坐标为(x,y)(x,y),判断下一个点的y轴坐标步
骤为(如果要确定x轴坐标也类似):
........后续请看原文链接
4、实现
仅需在原有的工程基础上加以改进即可,首先到工程目录下,找到LCD文件的画点函数,等下需要用到,
在此加入这个函数(网上搜这个算法能找到就不贴源码了),需要的请前往Google去找,顺便可以学习下大佬们优秀的算法,
需要在lcd.h中做声明,因为我们在别的地方调用它,然后在执行函数那边再根据自己需要做相应的画线,实现一些简单的点线面绘制功能,
然后编译下载,会得到下图所示的页面显示。画的有点没规则了…………,总来说学习这个算法还是不错的,经过实验,再各种LCD上也通用,只需提供
根据坐标画点的函数即可,很是方便。