好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

点阵屏显示原理及实验详解.doc

29页
  • 卖家[上传人]:鲁**
  • 文档编号:531648902
  • 上传时间:2024-02-12
  • 文档格式:DOC
  • 文档大小:102KB
  • / 29 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 标题:LED点阵屏学习攻略 共享资料2010-8-13 8:5044LED点阵屏学习攻略 在经历了将近一个学期断断续续的点阵屏学习后,最后终于在AVR平台下完成了128*32点阵屏的无闪烁显示现把整个学习过程总结如下:无论是51单片机还是AVR单片机,点阵屏的显示原理是一样的,所以首先从51讲起说明:以下所有试验如无特殊说明均在Keil uVision3 + Proteus 6.9 SP5下仿真完成一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:      1.首先在Proteus下选择我们需要的元件,AT89C52、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-8*8-RED在这里请大家牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础   2.在选择完以上三个元件后,我们开始布线,具体如下图: 这里P2是列选,P3连接38译码器后作为行选。

      选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展3.下面让我们把它点亮,先看一个简单的程序:(将奇数行偶数列的点点亮,效果如下图) 下面是源代码:/************8*8LED点阵屏显示*****************/#include void delay(int z) //延时函数 {       int x,y;       for(x=0;x

      重点让我们看while循环内,首先是行选P3=0,此时38译码器的输入端为000,则输出端为01111111,即B0端为低电平,此时选中了点阵屏的第一行,接着列选我们给P2口赋0x55,即01010101,此时又选中了偶数列,紧接着延时然后分别对第三、五、七行进行相同的列选这样就点亮了此点阵屏奇数行偶数列交叉的点完成这个程序,我们会发现其实点阵屏的原理是如此简单,和数码管的动态显示非常相似,只不过换了一种方式而已4.完成了上面的点亮过程,下面我们让这个8*8的点阵屏显示一个汉字:“明”先看效果图: 源代码如下:/************8*8LED点阵屏显示*****************/#include char code table[]={0x0f,0xe9,0xaf,0xe9,0xaf,0xa9,0xeb,0x11}; //"明"  字编码  void delay(int z) //延时函数 {       int x,y;       for(x=0;x

      我们来分析第一行的情况即num=0的时候,首先P3=0,选中第一行,然后P2=table[0],即P2等于table数组中第一个数据0x0f,则此时就点亮了第一行相应的点接着延时,其他行同理这样我们就完成了一个最简单汉字的显示2)16*16点阵的显示原理 1.虽然完成了上面8*8点阵的显示,但是由于点的数量太少以至于它的显示效果并不是很理想,事实上现在大部分点阵的汉字都是16*16显示的,下面让我们来学习16*16点阵的显示和上面一样我们先选择元件:AT89C52,74LS138,,MATRIX-8*8-GREEN,因为要显示16*16的汉字,我们就不能再使用一个38译码器进行行选了,这里我们用两个38译码器组合成一个4选16的译码器(当然也可以使用74159)而MATRIX-8*8-GREEN点阵需要4个完成后如下图: 2.先来看看4选16的译码器是如何工作的,这里有4个输入端a、b、c、d,16个输出端H0~H15,如上图连线后即可完成类似于38译码器一样的工作只不过扩展到了16行选关于连线的原理这里不再赘述,只要明白38译码器的原理这个可以轻松理解接着完成全部布线如下图所示:3.连好线后,P1作为行选,P2、P3一起作为列选。

      现在16*16的点阵被分成两块并不完整的部分,我们可以整体移动(包括点阵屏、连线以及连接点,)来方便我们观察显示的效果(最好同时去掉仿真中电平的指示灯)接着我们来看一个程序,还是让此点阵屏显示一个汉字:“明”先看效果图:源代码如下:/************16*16LED点阵屏显示*****************/#include char code table[]={0x00,0x20,0x20,0x7F,0x7E,0x21,0x22,0x21,                         0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,                         0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,                         0x80,0x20,0x80,0x20,0x40,0x28,0x20,0x10}; // “明” void delay(int z){       int x,y;       for(x=0;x

      然后还是来看while循环内,同样for循环依次扫描16行,以第一行为例,即num=0时,首先P1=0,选中第一行,P2=table[0]、P3=table[1]送出列选数据,即第一行要显示的两个字节的数据其他行同理这样很轻松的我们就完成了16*16点阵的显示程序虽然完成了,但是回过头来看一看就会发现,我们在这里使用了P2与P3口一起来做列选,浪费了大量的I/O/资源,而且现在点阵屏的大小还只有16*16,如果想要扩展的更大,已经没有足够的I/O口可用了所以一定要想出更好的办法进行列选5.为了解决上面提到的问题,我们来学习一个新的元件:74HC595它实质上是一个串行移位寄存器,能够实现“串入并出”的功能,关于它的使用我们还是用上一个列子来讲解,先来看看它的实现,如图:可以看到这里我们仅使用了三个I/O口就完成了列选数据的发送主要来看74HC595是如何实现“串入并出”的,这里我们使用了两个595进行了级联,即第二个595的数据输入端连接了第一个595的级联输出口Q7’也就是说,我们只需要从第一个595的输入端串行输入数据,便可以实现把数据送入第二个595的功能而且595的数量可以进行无限的级联,而不管有多少个595,我们只需要一个数据输入端就可以,这样就大大节省了I/O资源。

      对于595的具体使用还是来看程序源代码如下:/************16*16LED点阵屏显示*****************/#include sbit R="P2"^0;     //数据输入端口 sbit CLK="P2"^1;       // 时钟信号 sbit STB="P2"^2;        // 锁存端 char code table[]={0x00,0x20,0x20,0x7F,0x7E,0x21,0x22,0x21,                            0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,                            0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,                            0x80,0x20,0x80,0x20,0x40,0x28,0x20,0x10}; // “明” void delay(int z){       int x,y;       for(x=0;x

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.