51单片机入门-8X8点阵LED_第1页
51单片机入门-8X8点阵LED_第2页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 51单机门8X8点阵LED章录1.初识点阵LED1.1.什么是点阵LEDLED点阵屏通过LED(发光极管)组成,以灯珠亮灭来显字、图、动画、视频等,是各部分组件都模块化的显器件,通常由显模块、控制系统及电源系统组成。LED点阵显屏制作简单,安装便,被泛应于各种公共场合,如汽车报站器、告屏以及公告牌等。 点阵LED显屏作为种现代电媒体设备,具有灵活的的显积(可任意的分割和拼装)、亮度、长寿命、数字化、实时性等特点,应常泛。前边学了LED灯和LED数码管后,学习LED点阵就要轻松多了。个数码管是由 8 个LED组成,同理,个 8X8 的点阵就是由 64 个LED组成。如下图:其内部结构原理图,如

2、下图:1.2.点亮LED点阵从上图可知,每的LED的阳极(阴极)连接在起由左侧的 8 个引脚控制(例如:第的LED的阳极由第 9 号引脚控制),每列的LED的阴极(阳极)连接在起由上侧的 8 个引脚控制。 那么如果我们把 9 号引脚置电平、13 号引脚置低电平的话,左上的那个LED灯就会被点亮。我们先在proutes中建仿真图:12#include3void main()45P0 = 0 ;6P2 = 0 ;7while(1)89P0 = 0 x01 ;101112P2 = 0 x01 ; 仿真结果如下:我们可以看到,左上脚的LED被点亮了。从这我们可以逐步发现点阵的控制原理了。我们前讲了个数

3、码管就是 8 个 LED 灯,个点阵是 64 个 LED 灯。同样的道理,我们还可以把个点阵理解成是 8 个数码管。经过前的学习已经掌握了 6 个数码管同时显的法,那 8 个数码管也应该轻轻松松了。1.3.点阵显图案独的 LED 灯可以实现流灯,数码管可以显多位数字,那点阵 LED 就得来显点花样了。我们要显花样的时候,往往要先做出来些图形,这些图形的数据要转换到我们的程序当中去,这个时候就需要取模软件。给家介绍款简单的取模软件,这种取模软件在上都可以下载到,家来了解下如何使,先看下操作界。标点下“新建图形”,根据我们板上的点阵,把宽度和度分别改成 8,然后点确定。 标点下“新建图形”,根据我

4、们板上的点阵,把宽度和度分别改成 8,然后点确定。点击左侧的“模拟动画”菜单,再点击“放格点”选项,直放到最,那我们就可以在我们的 8X8 的点阵图形中标填充点, 点击左侧的“模拟动画”菜单,再点击“放格点”选项,直放到最,那我们就可以在我们的 8X8 的点阵图形中标填充点,就可以画图形了。 1取模软件是把取为 1,取为 0家可以看到 P0 控制的是,所以“横向取模”,如果控制的是列,就要选“纵向取模”。选中“字节倒序”这个选项,是因为左边是低位 DB0,右边是位 DB7,所以是字节倒序,其它两个选项家了解,点确定后,选择“取模式”这个菜单,点下“C51 格式”后,在“点阵成区”动产了 8 个

5、字节的数据,这 8 个字节的数据就是取出来的“模”。家注意,虽然我们了软件来取模,但是也得知道其原理是什么,在这个图,的个格表位进制的 1,的个格表位进制的 0。第个字节是 0 x00,其实就是这个 8X8 图形的第,全就是 0 xFF;第个字节是 0 x66,低位在左边,位在右边,家注意看,的表 1,的表 0,就组成了 0 x66 这个数值。同理其它的数据家也就知道怎么来的了。那么下我们就程序把这些数据依次送到点阵上去,看看运效果如何。 1234567891011121314151617181920212223242526272829303132333435363738394041case

6、0 : P0 = 0 xfe ; P2 = imagei ; i + ; break ;case 1 : P0 = 0 xfd ; P2 = imagei ; i + ; break ;case 2 : P0 = 0 xfb ; P2 = imagei ; i + ; break ;case 3 : P0 = 0 xf7 ; P2 = imagei ; i + ; break ;case 4 : P0 = 0 xef ; P2 = imagei ; i + ; break ;case 5 : P0 = 0 xdf ; P2 = imagei ; i + ; break ;case 6 : P0

7、 = 0 xbf ; P2 = imagei ; i + ; break ;case 7 : P0 = 0 x7f ; P2 = imagei ; i = 0 ; break ;TMOD = 0 x01; /设置T0 为模式1TH0 = 0 xFC; /为 T0 赋初值0 xFC67,定时1msTL0 = 0 x67;ET0 = 1; /使能T0 中断TR0 = 1; /启动T0while(1);void InterruptTimer0 () interrupt 1TH0 = 0 xFC; /重新加载初值TL0 = 0 x67;对于 8X8 的点阵来说,我们可以显些简单的图形,字符等。但部分汉

8、字通常来说要到 16X16 个点, 8X8 的点阵只能显些简单笔画的汉字,家可以取模做出来试试看。使屏显汉字的法和屏的法是类似的,所需要做的只是按照相同的原理来扩展数和列数已。2.点阵的动画显点阵的动画显,说到底就是对多张图分别进取模,使程序算法巧妙的切换图,多张图组合起来就成了段动画了,我们所看到的动画、游戏等等,它们的基本原理也都是这样的。2.1.点阵的纵向移动 上节我们学了如何在点阵上画个形,有时候我们希望这些显是动起来的,不是静的。对于点阵本已经没有多少的知识点可以介绍了,主要就是编程算法来解决问题了。如我们现在要让点阵显个 I U 的动画,先我们要把这个图形取模软件画出来看下。这张图

9、共有 24 ,每 8 组成张点阵图,并且每向上移动就出现了张新图,共组成了 16 张图。个变量 index 来代表每张图的起始位置,每次从 index 起始向下数 8 代表了当前的图,250ms 改变张图,然后不停的动态刷新,这样图就变成动画了。先我们要对显的图进横向取模,虽然这是 16 张图,由于我们每张图都是和下连续的,所以实际的取模值只需要 24 个字节就可以完成,我们来看看程序。 123unsigned char index = 0 , tmr = 0 ;unsigned char i = 0;4567891011121314151617181920212223242526272829

10、30313233343536373839404142434445464748495051EA = 1 ;TMOD = 0 x01; /设置 T0 为模式1TH0 = 0 xFC; /为 T0 赋初值0 xFC67,定时1msTL0 = 0 x67;ET0 = 1; /使能 T0 中断TR0 = 1; /启动 T0while(1);void InterruptTimer0 () interrupt 1TH0 = 0 xFC; /重新加载初值 家把这个程序下载到单机上看看效果,个 I U 直往上动的动画就出现了,现在还有哪位敢说我们科同学不懂浪漫的?还需要什么玫瑰花取悦朋友吗?点技术含量都没有,要

11、玩就玩点科技,呵呵。2.2.点阵的横向移动上下移动我们会了,那我们还想左右移动该如何操作呢?法:最简单,就是把板侧过来放,纵向取模就可以完成。这家是不是有种头顶冒汗的感觉?我们要做好技术,但是不能沉溺于技术。技术是我们的具,我们在做开发的时候除了好这个具外,也得多拓展解决问题的思路,要慢慢培养的多度思维式。那把板正过来,左右移动就完不成了吗?当然不是。家慢慢的学多了就会培养了种感觉,就是旦硬件设计好了,我们要完成种功能,脑就可以直接思考出来能否完成这个功能,这个在我们进电路设计的时候最为重要。我们在开发产品的时候,先是设计电路,设计电路的时候,程师就要在脑中通过思维来验证板硬件和程序能否完成我

12、们想要的功能,旦硬件做好了,做好板回来剩下的就是靠编程来完成了。只要是硬件逻辑上没问题,功能上软件肯定可以实现。当然了,我们在进硬件电路设计的时候,也得充分考虑软件编程的便性。因为我们的程序是 P0 来控制点阵的整,所以对于我们这样的电路设计,上下移动程序是较好编写的。那如果我们设计电路的时候知道我们的图形要左右移动,那我们设计电路画板的时候就要尽可能的把点阵横过来放,有利于我们编程便,减少软件作量。法:和纵向取模样,将横向的共阴数码管看成是纵向的共阳数码管。 123unsigned char index = 0 , tmr = 0 ;unsigned char i = 0;456789101

13、1121314151617181920212223242526272829303132333435363738394041424344454647484950515253case 0 : P2 = 0 xfe ; P0 = imagei + index ; i + ; break ;case 1 : P2 = 0 xfd ; P0 = imagei + index ; i + ; break ;case 2 : P2 = 0 xfb ; P0 = imagei + index ; i + ; break ;case 3 : P2 = 0 xf7 ; P0 = imagei + index ;

14、i + ; break ;case 4 : P2 = 0 xef ; P0 = imagei + index ; i + ; break ;case 5 : P2 = 0 xdf ; P0 = imagei + index ; i + ; break ;case 6 : P2 = 0 xbf ; P0 = imagei + index ; i + ; break ;case 7 : P2 = 0 x7f ; P0 = imagei + index ; i = 0 ; break ;void main()EA = 1 ;TMOD = 0 x01; /设置 T0 为模式1TH0 = 0 xFC;

15、/为 T0 赋初值0 xFC67,定时1msTL0 = 0 x67;ET0 = 1; /使能 T0 中断TR0 = 1; /启动 T0while(1);void InterruptTimer0 () interrupt 1TH0 = 0 xFC; /重新加载初值 那么下我们要进横向做 I U 的动画了,先把我们需要的图画出来,再逐取模,和上张图类似的是,我们这个图形共有 30 张图,通过程序每 250ms 改变张图,就可以做出来动画效果了。但是不同的是,我们这个是要横向移动,横向移动的图切换时的字模数据不是连续的,所以这次我们要对 30 张图分别取模。最上的图形是横向连在起的效果,实际上我们要

16、把它分解为 30 个帧,每帧图单独取模,取出来都是 8 个字节的数据,共就是 30X8 个数据,我们个维数组来存储它们。12#include3unsigned char index = 0 , tmr = 0 ;4unsigned char i = 0;5unsigned char code image308 = 60 xFF,0 xFF,0 xFF,0 xFF,0 xFF,0 xFF,0 xFF,0 xFF, /动画帧10 xFF,0 x7F,0 xFF,0 xFF,0 xFF,0 xFF,0 xFF,0 x7F, /动画帧20 xFF,0 x3F,0 x7F,0 x7F,0 x7F,0 x

17、7F,0 x7F,0 x3F, /动画帧30 xFF,0 x1F,0 x3F,0 x3F,0 x3F,0 x3F,0 x3F,0 x1F, /动画帧40 xFF,0 x0F,0 x9F,0 x9F,0 x9F,0 x9F,0 x9F,0 x0F, /动画帧50 xFF,0 x87,0 xCF,0 xCF,0 xCF,0 xCF,0 xCF,0 x87, /动画帧60 xFF,0 xC3,0 xE7,0 xE7,0 xE7,0 xE7,0 xE7,0 xC3, /动画帧70 xFF,0 xE1,0 x73,0 x73,0 x73,0 xF3,0 xF3,0 xE1, /动画帧80 xFF,0 x

18、70,0 x39,0 x39,0 x39,0 x79,0 xF9,0 xF0, /动画帧90 xFF,0 x38,0 x1C,0 x1C,0 x1C,0 x3C,0 x7C,0 xF8, /动画帧100 xFF,0 x9C,0 x0E,0 x0E,0 x0E,0 x1E,0 x3E,0 x7C, /动画帧110 xFF,0 xCE,0 x07,0 x07,0 x07,0 x0F,0 x1F,0 x3E, /动画帧120 xFF,0 x67,0 x03,0 x03,0 x03,0 x07,0 x0F,0 x9F, /动画帧130 xFF,0 x33,0 x01,0 x01,0 x01,0 x03,0 x87,0 xCF, /动画帧140 xFF,0 x99,0 x00,0 x00,0 x00,0 x81,0 xC3,0 xE7, /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论