找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4741|回复: 5
打印 上一主题 下一主题
收起左侧

单片机控制点阵学习基础,适合新手 有Proteus仿真图和程序

  [复制链接]
跳转到指定楼层
楼主
经过学习,今天整理了8*8点阵学习的基础,有Proteus仿真图和单片机程序、word说明文档、取模软件,适合新手,应能看懂入门。后续随时间增加移动、16*16等。我也在学习,期待高手帮助,谢谢。

在Proteus中,有4种8*8点阵模型,分别为MATRIX-8*8-BLUE(蓝色,上图第1个)、MATRIX-8*8-GREEN (绿色,上图第2个)、 MATRIX-8*8-ORANGE (橙色,上图第3个)、MATRIX-8*8-RED(红色,上图第4个)。每个8*8点阵均由64个LED小灯组成,如左边D1、D2所示:当在D1加正向电压时,LED小灯点亮,当在D2加反向电压时,LED不亮,这是点阵学习的基础。
如上图,在Proteus中,,不进行任何旋转操作,直接放置4种点阵,加上电源后,只有红色点阵第1排亮2个灯,其他均不亮。由图可知道,上排2根线,有2列有灯亮,即上排接通的列选,下排接通行选。当高电平选中列、低电平选中行时,相应LED灯亮。
如上图,当我们把电源极性相反后,红色点阵不亮,其他3种都为左边第1、2排第1列亮2个LED灯。上排有2根线,而第1排、第2排有灯亮,即说明上排接通行选,因为有2根线所以有2行有灯亮,那下排就是接通列选。由图可知,这3种也是高电平选中列、低电平选中行时,相应LED灯亮。
由此,我们得出3点结论:
1、仿真效果上看,绿色和红色显示较清楚,蓝和橙色显示不够清楚,这就是我们下面选红或绿做仿真的原因。
2、红色的点阵是上列选下行选,其他3种是上行选下列选。如图1,红色上面接2根线,因为上面是列选,说明选择了2列,下面接了1根线,说明选择了1行,所以就是第一行左边2个灯亮。图2同理是点了2排的第1个。
3、以上4种点阵,无论上列选下行选还是上行选下列选,都是当高电平选中列、低电平选中行时,相应LED灯亮。此为编程的基础。
例如我要点亮红色点阵的第一行,因为它是上列选,下行选,高电平选中列、低电平选中行时相应LED灯亮,所以需在下面第1个端子加GND,上面8个端子加VCC,如下图:
如果我要1、3、5、6行亮,则只需将行选信号(下端子)第1、3、5、6加GND即可,如下图:
这样,红色点灯点亮方法我们就知道了。接下来我们看看其他点阵点亮的方法,以绿色为例。还是以点亮点阵的第一行为例。绿色点阵,上行选下列选,高电平选中列、低电平选中行时相应LED灯亮。所以应该为上面第1个端子为行选信号,接一个GND,下面的端子为列信号,全部给VCC即可,如下图:
如果我要2、4、6行亮,该怎样办呢?很显然,就是行信号相应位置选中(给GND)即可,如图:
明白了这点,我们可以开始我们的编程了。上面示例为硬件测试,由读者自行在Proteus中画出即可。
第1节:通过编程,控制绿色点阵点亮左上角第一个LED灯。
分析:绿色点阵为上行选,下列选,高电平给列,低电平给行时即亮。因此,编程将上端子第1个端子写0,下端子第1个端子写1即可。原理图如下:
程序如下:
//本程序点亮绿色点阵第一个灯,P2.7接上排第1个,行选,应给低电平;P3.7接上排第1个,列选,应给高电平。
#include<reg52.h>  //定义头文件
void main()  //主函数开始
{
              P2=0x7f;//0111 1111 第1位P2.7为0,即给行选一个低电平;
    P3=0x80;//1000 0000 第1位P3.7为1,即给列选一个高电平;
              while(1);//死循环,能让程序停在这里
}
第2节:通过编程,控制绿色点阵点亮左上角第一排LED灯亮。
与上节相比,第1排仍需给低电平,再将列信号全部给高电平即可,仿真图如下:
源程序如下:
#include<reg52.h>  //定义头文件
void main()  //主函数开始
{
              P2=0x7f;//0111 1111 第1位P2.7为0,即给行选一个低电平;
    P3=0xff;//给列选全部加一个高电平;
              while(1);//死循环,能让程序停在这里
}
其他行、列等由读者按自己想法完成,接下来,介绍如果点亮我们需要的字符。
一般我们按行扫描方式,就是列信号给高电平,算出第一行的列信号哪个亮哪个不亮,待程序扫描完第一行,再到第二行,直到扫描完8行就完成一个字符的显示了。“同一时刻,有且只有一行在亮”,这是编程的基础,和数码管动态显示一样的。下面我们在点阵上显示“中国”的中字。首先我们把原理图画出来,如下图:
分析:绿色点阵,上行选下列选,高电平选中列、低电平选中行时相应LED灯亮,这是编程的基础。就上图而言,我们按行扫描方式,第1行时,即给P2.7低电平时,P3口控制第一行哪一列亮就给高电平,否则给低电平。依次扫描完8行即可。我们可以把扫描第一行时,列信号应该给第一行送什么数先算出,其他一样,这样,先把列信号算出,可以用取模软件。
1、新建图像,选择宽度是8,高度是8,即8*8点阵。
2、在取模方法选择横向取模,一般行扫描方式就选这个。字节倒序是满足一些硬件需求,比如第一位应该是接最高位,但硬件第1位接最低位,所以此处不选即可。
3、在模拟动画中,放大格点,把“中”字点选出来。以后到16*16时,可在文件输入区输入即可。在8*8时,还是手工选择即可。
4、在取模方式中,选C51格式,点阵生成区出现了8*8点阵,行扫描时的列信号,将其复制到程序中即可。
完整程序如下:
#include<reg52.h>  //包含头文件
char code hang[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //行编码,分别选中第一行至第8行
char code lie[]={0x00,0x08,0x7f,0x49,0x49,0x7f,0x08,0x08}; //行扫描时,列信号编码
void delay(int a) //延时函数
{
int x,y;
for(x=0;x<a;x++)
for(y=0;y<110;y++);
}
void main()  //主函数
{
int num;
while(1)
{
              for(num=0;num<8;num++)//行扫描8次,轮流选中第一行,第1个列编码,直到第8行;
                            {
                            P2=hang[num]; //送行编码,当num=0时送第一行时的编码,依次类推送完1至8行;
                            P3=lie[num];  //送列编码,每一行把相应列该亮哪个灯送到端口。
                            delay(5);     //送完行和列,适当做一下延时。
              }
  }
}
效果图如下:
程序不变,只需改变char code lie[]里的编码,即可改变显示不同的字符。如字符1。在取模软件得出列信号为:0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C,效果图如下:
至此,点阵学习基础就学完了。我们可以在8*8点阵上显示固定的一些字符了。要显示汉字,后续将8*8拼成16*16再进行。8*8点阵,如何移动等问题还没解决,而且8*8就用去了16个IO口,后续需减少IO口的使用,增加74LS138、74LS595等。我也在学习中,本文把学到的知识自己总结好发出来,希望对初学点阵的朋友有帮助!

全部资料51hei下载地址:
点阵学习基础.rar (689.63 KB, 下载次数: 44)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:487483 发表于 2020-10-31 17:08 | 只看该作者
写的很详细,大赞一个
回复

使用道具 举报

板凳
ID:328014 发表于 2021-8-7 15:47 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

地板
ID:1047290 发表于 2022-10-11 13:38 | 只看该作者
写的很详细全面,赞一个,多谢楼主分享知识。
回复

使用道具 举报

5#
ID:245820 发表于 2022-12-1 10:47 | 只看该作者
讲解非常详细,谢谢
回复

使用道具 举报

6#
ID:245820 发表于 2023-2-17 11:01 | 只看该作者
非常详细。谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表