收藏文章 楼主
版块:工业液晶屏   类型:普通   作者:工业液晶屏   查看:3706   回复:0   获赞:0   时间:2022-01-17 16:21:54


如何在点阵屏上制图——根据LCD12864

LCD12864:12864液晶屏

   — 准备专业知识 — 
实际上,文中应当算得上计算机图形学中的一个实际支系,因此,计算机图形学的最基础规定便是文中的主要规定了,因为考虑诸位老铁的食欲,我便多唠叨下。 

1、位操作 
像LCD12864这一种二值显示屏,大家通常习惯应用1个字节数表明持续的8个点,1相匹配的对应位被照亮,0则表明没亮,因此针对图型的实际操作最主要的方式那便是位操作了。 
备考一下常见的位操作,假定Dis表明是某一个现有详细地址的內容 
Dis = Dis~     日夜颠倒 
Dis &= ~(1<<n) 第n处被擦去, 
Dis |= (1<<n)   第n处被画了一个点 
Dis ^= (1<<n)   假如n处是亮的,就变被擦下去;假如n处是一片空白的,就被照亮了…… 
…… 类似也就是这种 

2、做图的基本原理 
点是一切光栅尺显示设备最主要的因素,全部的操控也是以点为基本的,因此要学好如何去运用点组成线、圆、添充便是务必要熟练掌握的——几何图形不能够很差。 
也有,融合显示屏硬件配置的特性,针对优化算法开展提升的一些方式也是必须去把握的。比如说:怎样添充这类的……后边还会继续对于于LCD12864来作详尽的详细介绍。 

3、人机交互技术学 
尽管说许多的人也没有去真心实意的学过这门课程,可是或多或少或是针对页面应当都是有些许掌握。如何去运用手里的操作过程函数公式来作出一些动画特效?怎样分配文本框?怎样制作用户界面的一些基本元素,例如按键,
乃至怎样的表明中国汉字,全是社交互动学必须教會你的——总得来说,如果你是沒有学过这一门课程内容,你的商品 只有你自身一个人用得话——那么就不必太在意,没有错的。 

4、最为关键的物质条件 
你需要了解一种单片机设计,把握到一种点阵式显示屏。 

如何在点阵屏上制图——根据LCD12864
Chapter One  

— 从静脉滴注逐渐 —  



前边就早已说过去了,针对栅格数据的显示设备而言,点是一切图型的基本,简言之,不容易在液晶屏的随意部位无拘无束的画点也不可以说你早已把握了某一种液晶显示屏的运用了。实际上,依据小编的一些工作经验,试着画点
通常就能显现出许多的问题。就拿LCD12864而言,一段时间,小编常常发觉,在片转换的位置便会有一点点不正确…… 



在表明怎样画点以前我先表明一个定义:表明缓冲区域。 

说白了的表明缓冲区域,说白了,它便是表明数据信息的一个缓冲地带而已。在一般情形下,大家制图也是立即的对
这方面缓存地区开展实际操作。 

许多好朋友如今就需要提出问题了:大家为什么不立即的对显示屏开展实际操作呢? 

实际上,LCD自身就具有着一块表明储存器,还可以被觉得是一个表明缓存文件,立即写在这个储存器上的数据信息并不是是立即表明出去的,而大多数是必须一个表明命令来暗指一下。大家有的过程中也会根据这类相似的新技术来完成非常大的照片表明——先画好,随后再交给各位看,令人认为你是一下就画好啦的,自然假如你有意的必须那种图片被“画”出去的实际效果,则没有探讨之列了。问题就取决于,LCD是片外的資源,对其储存器的浏览可以被觉得是对片外存储器的浏览,其速率显而易见是沒有对片内SRAM的操作速度快。如果我们应用的是那类常见的串行通信方法来做图(说白了串行通信方法做图,便是制图命令的实行和操作系统的别的实际操作是串口的,命令不进行,其他的实际操作就不容易强制执行),那麼针对一些处理速度规定非常高的系统软件而言便会产生一些重要的安全隐患——乃至不是符合规定的;假如开拓一段片内储存空间和LCD的储存器一一对应,在同样的时间以内,耗费同样的資源来维持这两个储存空间的一致性,那麼就可以确保实时系统的稳定性和靠谱了,确保图像表明的一切正常(由于容许跳帧嘛^_^ )。这就是我们为何还必须此外在片内选择一个表明缓冲区域的缘故了。 

之后,大家的实际操作全是对于于表明缓冲区域的。表明缓冲区域可能变成一个定义,无论这一缓冲区域坐落于SRAM内或是LCD的內部。比如说,大家接下来必须一个成本低的电子游戏机 ——例如做一个贪食蛇电子游戏机赠给教师做为课题设计,或是是赠给小侄子,那麼,M8乃至是M48可能变成优选,问题是,M8是肯定没法开拓出一个8 * 128 = 1K尺寸的二维数组,因此,在这个时候,评定LCD的片内存储器做为表明缓冲区域便是不二的挑选——好在贪食蛇的速率太快也没有办法玩哈。 



绕了这么多的弯子,到底如何去画点呢?我都想多填补一个缘故,有关,为何必须表明缓冲区域,因为点阵屏应用的是1个字节数来表明8个点的,假如你要促使在其中一个字节中的某一个点被实际操作而不危害到其他点,你至少要了解原先这一部位是表明的哪些內容,针对有一些应用595联级的LCD机器设备而言,没法立即从LCD载入现有的数据信息,因此开拓了一个缓冲区域,从这当中得到信息内容进行生产加工之后再放回家,是这类机器设备解决表明图案的唯一方式——自然大家都还没那麼惨,可是从LCD中获得所需点所属字节数的信息或是务必的,要不然你画一个点便会影响其一条线上全部的数据信息。 



   好的,那麼大家事实上早已确立了如何去画一个点。 

   最先,依据客户得出的坐标系测算出时需画的点所属现有内的详细地址偏移; 

   随后,大家读取该详细地址内的数据信息; 

   再度,依据客户所需画点的种类(擦掉、画点、反向点)来开展相对应的实际操作得到一个新的数据信息; 

   最终,将该数据信息写回原本的详细地址。 



   并不是难以吧? 

--------------------------------------------- 

LCD12864填补专业知识 

1、有关平面坐标。很多人,包含小编,一开始都不明白LCD12864的运行内存暗指方法,觉得X、Y好像并不是那回事。之后才发觉,只需把显示屏竖着放一切就行明白了。X或是横坐标,Y或是竖轴……可是这明显不符大家的习惯性,大家习惯长的那一个边做为横坐标,因此必须一点点座标中间的变换。 

假定键入的是一切正常习惯性的座标 X,Y DX DY便是LCD上的座标,那麼变换关联是 



char DX = (Y >> 3);                               //测算出归属于哪一个字节数 

char BX = Y - (DX << 3);                             //归属于该字节数的哪一个位 

char DY = X; 



2、载入12864的数据信息的情况下,一定要留意,E数据信号要在一个降低延以后不断拉升,随后才可以一切正常一个人独处数据信息;假定立即拉升,确实也可以读出数据,可是,等待抓头发,发帖“[想求]侠客帮助有关12864——请应用清晰的大文章标题……”^_^ 



--------------------------------------------- 

废话少说(说的许多了),看源码: 

# define LCD12864_Graphic_Draw          0x01 

# define LCD12864_Graphic_Clear           0x00 

# define LCD12864_Graphic_Not          0x02 



…… 



void LCD12864Draw(char X,char Y,char Type) 



char DX = (Y >> 3);                               //测算出归属于哪一个字节数 

       char BX = Y - (DX << 3);                      //测算出归属于字节数哪一位 

       char TempData = 0; 



       LCD12864_ChooseBoth; 

      

       setX(DX); 

       if (X > 63) 

       { 

         LCD12864_ChooseCS2; 

            X -= 64; 

       } 

       else 

       { 

         LCD12864_ChooseCS1; 

       } 

       setY(X); 

      

       TempData = getLCD12864Data(); 

      

       switch (Type) 

       { 

         case LCD12864_Graphic_Clear: 

                   TempData &= ~(1<<BX); 

                   break; 

            case LCD12864_Graphic_Not: 

                   TempData ^= (1 << BX); 

                   break; 

            default: 

                   TempData |= (1 << BX);  

       } 

      

setY(X); 

      

       sendDataToLCD(TempData); 

}

12864图形屏
如何在点阵屏上制图——根据LCD12864
尤其表明一下,有关贪食蛇案例的问题,这篇文章里边只能简易得谈及一下。 

做为嵌入式操作系统开发设计的一个案例,我能此外开一个贴子详细描述开发设计全过程。 
这一案例将做为详细介绍嵌入式操作系统开发方式的一个不错的事例,用以表述一个系统软件和一段表明您调开了某一个作用的编码中间有什么不同,与此同时也将详细介绍硬件开发系统软件的几类方式(非常循环系统、生产调度器),顺带侃一侃時间推动的系统软件RTOS (Real Time Operation System嵌入式操作系统)和RTS(Real Time System)实时系统。
如何在点阵屏上制图——根据LCD12864
[此章前言] 

平行线由点组成,更精准的说,平行线是由挨近这根线的清晰度组成。这就引出一个问题,究近这些点算得上挨近一条平行线;什么点算不上是挨近一条平行线,这务必应用一种优化算法做为根据。事实上,图象处理优化算法和纯几何图形优化算法或是有较大区别的,问题就出在一个离散化上边,简言之,你画出的平行线很可能是一组起伏严重的锯齿状像素群而不是一条看上去有标准转变的平行线。 
自然,太过度基础理论的事物对我们都是沒有是多少具体使用价值的。下边,我便详细介绍二种常用的划线构思,一种便是最非常容易被想起的直线方程测算的方式,此外一种则是被称作布兰森汉姆(Bresenham)的计算机图形学流行优化算法。 
   
在详细介绍完这二种优化算法之后,大家会对于LCD12864的硬件配置构造为事例,详细介绍,实际优化算法的建立和提升。
如何在点阵屏上制图——根据LCD12864
最先,大家从最主要的数学算法谈起。 
如果我们应用公式计算y = kx b来做为制图的根据,那麼就必须分3种状况:水准平行线,直线斜率为0;竖直平行线,直线斜率为五穷达(换句话说k不会有);一般平行线。 
假定大家早已清楚平行线的起止座标点(Xbegin,Ybegin)和终点站(Xend,Yend),x,y,是当今的座标点,如果我们根据提升x反算出y的方式得话,这一公式计算就可以非常容易变换为伪代码。 
LineMode 为平行线的种类:水准,竖直,一般 
if Xbegin == Xend then LineMode = 水准 
elseif Ybegin = Yend   then LineMode = 竖直 
else k = (Yend - Ybegin) / (Xend - Xbegin) 

switch LineMode 
   case 水准 
      for x = Xbegin to Xend 
         在x,Ybegin处画点 
   case 竖直 
      for y = Ybegin to Yend 
         在Ebegin,y处画点 
   default: 
      for x = Xbegin to Xend 
      { 
         y = kx b 
         在x,y处画点 
      } 

比较简单,并不是么?留意,绝大多数情形下,这一优化算法存有许多乘除法和乘法,对单片机设计系统软件而言,很有可能并不是那麼适合哦。画出的点也基本上比较满意。
如何在点阵屏上制图——根据LCD12864
拥有以上的编码铺底,我觉得很多人都能够安心了,由于了不起跑一个快速晶振电路也可以迅速的画出平行线,不然你还是必须细心的阅读文章接下来的优化算法。 

最先,大家得出这一优化算法的伪代码。 
在(x1,y1)到(x2,y2)中间画一条平行线 

dx 是x到终点站横坐标轴的间距 
dy 是y到终点站纵轴的间距 
ix 是dx的绝对值 
iy 是dy的平方根 
inc是dx和dy中很大的那一个 
plot是是不是要画一个点的标志位,boolean自变量 

plotx 是当今点所属的横坐标轴 
ploty 是当今点所属的纵轴 
  
plotx = x1 
ploty = y1 
x = 0 
y = 0 

在 plotx,ploty画一个点——起始点 

for i = 0 to inc 增加量1 
   x = ix 
   y = iy 
   plot = false 

   if x > inc then 
          plot = true 
          x -= inc 
            if dx > 0 then plotx  
            if dx < 0 then plotx -- 
  
   if y > inc then 
          plot = true 
          y -= inc 
            if dy > 0 then ploty  
            if dy < 0 then ploty -- 

   if plot == true then 在(plotx,ploty)处画点 
这就是计算机图形学中时兴的布兰森汉姆(Bresenham)优化算法,他的用意便是选用离散变量的整数金额增加量来替代直线斜率增加量测算,学习培训这一优化算法,最好是的办法没有看是多少基础理论,反而是依照里面的伪代码自身进行一条平行线的制作工作中,你也就能心照不宣了——并不是小兄弟我懒惰。 

全部的测算全是简易得整数金额测算,编码高效率当然无需小兄弟我啰嗦哈。
如何在点阵屏上制图——根据LCD12864
俗话说得好,俗话说:巧妇难为无米之炊,拥有点还有了平行线优化算法,间距文本框的制作很近了,But Stop! “沒有最好是,只求更强”这也是大家做系统软件开发应当切记的一条规则。 
拥有以上的优化算法还不够,终究,她们仅仅一些伪代码,对于不一样的显示屏——精确地说,是对于不一样的独显存储投射方法,有不一样的算法优化方式。到底有什么优化方法姑且无论,实际上她们是一个基本原理,我觉得先解释一下,为何大家必须蚁群算法,换句话说,大家必须先搞清楚是什么地方造成了沉余。 

你是否还记得黑与白点阵式显示屏的独显存储投射方法么?它简易的应用1个字节数表明8个座标点,与此同时这1个字节数是顺着显示屏的长边方位投射的,因此在我们想画一条竖直的平行线时,针对每一个涉及到的字节数都是有很有可能要反复的实际操作8其次多,这类实际操作并不是简单图画线,反而是要先载入再测算最终再写那样的复合型实际操作,反复8次仅仅为了更好地把全部字节数发黑显而易见是一种非常不能忍受的沉余——我们都知道,立即把这个字节数载入一次,测算一次,再写一次就完成了。根据这类观念,大家必须把这类特殊情况独立获取出去,再次提升编码……实际提升编码就交给大伙儿写作业了哈。 

与此同时填补一下,那样做,并不是只对划线作了提升,实际上,在后面,矩形框的添充里边,这类提升会极大地提高速率,由于添充的实质便是划线(点)…… 
 


【申明】一部分信息内容来源于互联网技术,力争安全性立即、准确,目地取决于传送其他信息,并不意味着对其思想观点赞成或对其真实有效承担。如本网转截信息内容涉及到出版权等问题,请立即与本网联络删掉。


全站外链: TEC传感器 | 猫掌外链
 
回复列表
默认   热门   正序   倒序

回复:在点阵屏上边制图—LCD12864操纵的详细说明

网站公告

近期本站被人为恶意注册及发布垃圾帖,每一个发帖都会经过审核,一经发现违法或垃圾帖的用户,帖子将被删除或封号,请大家共同维护互联网环境,共创美好互联网未来。

详细的发帖规则请阅读:

《小猪外链网发帖规则》

《小猪外链网最新金币规则》

注:本站严禁发布灰色违禁违法内容,如发现立刻永久封号,如开通会员的概不退款。

Powered by 小猪外链网 8.3.15

©2015 - 2025 小猪SEO外链平台

备案号:浙ICP备17015142号

免责申明:本网站内容由平台入驻会员撰写,除创始人账号外,其他观点仅代表作者本人,不代表小猪外链网立场。如果内容涉及侵犯其他公司、团体的利益、请联系小猪SEO外链网客服举证删除

您的IP:18.220.98.157,2025-05-05 19:58:41,Processed in 0.31753 second(s).

各位站长请准守小猪SEO外链网的发帖规则,文明理性发言

外链优化

用户名:

粉丝数:

签名:

资料 关注 好友 消息
分享
已有0次打赏