怎样在点阵屏上绘图.doc

上传人:人*** 文档编号:554995343 上传时间:2023-06-23 格式:DOC 页数:14 大小:43KB
返回 下载 相关 举报
怎样在点阵屏上绘图.doc_第1页
第1页 / 共14页
怎样在点阵屏上绘图.doc_第2页
第2页 / 共14页
怎样在点阵屏上绘图.doc_第3页
第3页 / 共14页
怎样在点阵屏上绘图.doc_第4页
第4页 / 共14页
怎样在点阵屏上绘图.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《怎样在点阵屏上绘图.doc》由会员分享,可在线阅读,更多相关《怎样在点阵屏上绘图.doc(14页珍藏版)》请在金锄头文库上搜索。

1、怎样在点阵屏上绘图基于LCD12864 前言 前言往往要解释写文章的动机和原因,同时给作者一个正题以外灌水的机会本文也不例外。 一、为什么我要写这篇文章。 不可否认,我的确受到了Armok的利诱影响,但是最近发生的一些事情却使我觉得写这篇文章是非常有必要的。在OurAVR上看到很多版本的LCD驱动程序,几乎每一个版本都只是简单的将全部或部分的显示数据Cover到LCD的显存上,完成一个字或者是图片的显示就等着大家喊“牛”了。其实要走的路还很远。对一个工程项目来说,增加n多的成本来提供一个点阵屏作为用户接口,不是一两幅欢迎图片和Now Loading.Please Standy By的提示能糊弄

2、的过去的。用户希望你提供的是友好的图形界面GUI,虽然比不过XP和Apple的华丽,但是由各种基本图形组成的窗口界面还是需要的。 当我们真的想实现一个图形界面的时候,很快就会发现,我们需要的不仅仅是一个被喊了“牛”的初级驱动,我们需要的是一个图形引擎一个自定义的图形函数包,没有DirectX的华丽,但是能绘制一个任意的直线或是矩形就够了结果往往发现无所适从。这个时候,我们遇到的就是一个门槛,真正的嵌入式工程师和一个业余电子爱好者之间的门槛。 二、我如何写这篇文章 考虑到本人老王卖瓜的习惯,所以请大家一定无比在吃饭前看本人写的技术文章,同时保持耐心等待续集(绝对有续集)。本人现单身,个人问题众多

3、,学习任务重,所以可能有时候写文章象羊拉屎,不对大家胃口,请见谅。 硬件平台:AVR Mega8级 软件平台:ICC LCD:不带字库的12864规范:符合基本的C编程规范 三、何时开始正文 预备知识 其实,本文应该算是计算机图形学的一个具体分支,所以,计算机图形学的基本要求就是本文的基本要求,考虑到各位兄弟的胃口,我就多罗嗦下。 (1)位操作 向LCD12864这种二值屏幕,我们习惯于用1个字节表示连续的8个点,1表示对应位被点亮,0表示不被点亮,所以对图形的操作最基本的手段就是位操作。 复习下,常用的位操作,假设Dis表示某一个现存地址的内容 Dis = Dis 黑白颠倒 Dis &= (

4、1n) 第n处被擦去, Dis |= (1n) 第n处被画了一个点 Dis = (1 3); /计算出属于哪个字节 char BX = Y - (DX 3);/计算出属于哪个字节 char BX = Y - (DX 63) LCD12864_ChooseCS2; X -= 64; else LCD12864_ChooseCS1; setY(X); TempData = getLCD12864Data(); switch (Type) case LCD12864_Graphic_Clear: TempData &= (1BX); break; case LCD12864_Graphic_Not:

5、 TempData = (1 BX); break; default: TempData |= (1 BX); setY(X); sendDataToLCD(TempData); 特别说明一下,关于贪食蛇范例的问题,这篇文章里面只会简单得提及一下。 作为嵌入式系统开发的一个范例,我会另外开一个帖子详细说明开发过程。 这个范例将作为介绍嵌入式系统开发方法的一个很好的例子,用于解释一个系统和一段表示您调通了某一个功能的代码之间有什么区别,同时也将介绍嵌入式开发系统的几种模式(超级循环、调度器),顺便侃一侃时间驱动的系统RTOS (Real Time Operation System实时操作系统)和

6、RTS(Real Time System)实时系统。 五、本章导读 直线由点构成,更精确的说,直线是由靠近这条线的像素构成。这就引出一个问题,究竟那些点算是靠近一条直线;哪些点不算是靠近一条直线,这必须使用一种算法作为依据。实际上,图形学算法和纯几何算法还是有很大差别的,问题就出在一个离散化上面,说白了,你画出的直线很可能是一组波动厉害的锯齿象素群而不是一条看起来有规则变化的直线。 当然,太过于理论的东西对我们是没有多少实际价值的。下面,我就介绍两种常见的画线思路,一种就是最容易被想到的直线方程计算的方法,另外一种则是被称为布兰森汉姆(Bresenham)的计算机图形学主流算法。 在介绍完这两种算法以后,我们会针对LCD12864的硬件结构为例子,介绍,具体算法的实现和优化。 首先,我们从最基本的数学算法说起。 如果我们使用公式来作为绘图的依据,那么就需要分3种情况:水平直线,斜率为0;垂直直线,斜率为无穷达(或者说k不存在);普通直线。 假设我们已经知道直线的起始坐标点(Xbegin,Ybegin)和终点(Xend,Yend),x,y,是当前的坐标点,如果我们通过增加x反算出y的方法的话,这个公式就可以很容易转换为伪代码。 LineMode 为直线的类型:水平,垂直,普通 if Xbegin = Xend then LineMode

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号