eetydd

  • 7 主题
  • 7 帖子
  • 445 积分
  • 身份:LV2 初级技术员
  • E币:322

【富芮坤物联网开发板评测】+(3) FR8016HA开发板- 屏幕任意画线显示

2020-7-10 21:04:05 显示全部楼层
1、简介:
在嵌入式系统的产品设计时,大部分情况会涉及人机交互,而作为直接且能直观表达的,莫过于屏幕了。这次拿到的这块板,可以说是麻雀虽小五脏俱全,
该有的外设都有了,使用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文件的画点函数,等下需要用到,
QQ图片20200710204243.png
在此加入这个函数(网上搜这个算法能找到就不贴源码了),需要的请前往Google去找,顺便可以学习下大佬们优秀的算法,
QQ图片20200710204641.png
需要在lcd.h中做声明,因为我们在别的地方调用它,然后在执行函数那边再根据自己需要做相应的画线,实现一些简单的点线面绘制功能,
QQ图片20200710205311.png
然后编译下载,会得到下图所示的页面显示。画的有点没规则了…………,总来说学习这个算法还是不错的,经过实验,再各种LCD上也通用,只需提供
根据坐标画点的函数即可,很是方便。
QQ图片20200710205558.png


最新评论

楼层直达:

FPFA兔兔爸

  • 0 主题
  • 364 帖子
  • 1341 积分
  • 身份:LV4 高级技术员
  • E币:780
我要评论
1
38
广告
关闭 热点推荐上一条 /5 下一条
快速回复 返回列表