【51单片机】〈C语言+KEIL+proteus〉点阵LED显示实验+器件/思路 |
您所在的位置:网站首页 › 骨牌用什么做的 › 【51单片机】〈C语言+KEIL+proteus〉点阵LED显示实验+器件/思路 |
点阵LED显示实验 前言 一、环境 二、硬件 1.关于Matrix-8×8 2、连接线路 三、软件 1、基本思路 2、头文件 3、点阵LED显示 1)跳动爱心的代码: 2)显示字母的代码: 3)附上完整代码: 四、效果——女朋友获得爱意,你获得女朋友 总结 前言今天女朋友生日,除了礼物之外,一时想不到能给她点什么不一样的,并且奈何自己不会写诗,没办法从这方面入手。所以就用我会的方式吧。 既然最近自己琢磨琢磨单片机,也准备玩儿点阵LED的显示实验,这时我灵机一动,不如用LED做一个吧。(👈👈👈老理工男了,怎么有的女朋友?) 好,下面就来看看我是怎么做的吧。 一、环境环境用的是Keil5编译,这是目前比较主流的单片机编译软件,支持汇编和C。其次,我用到了Proteus8软件仿真,没有自己买单片机,仿真软件的东西很全面。具体的软件操作在我的上一篇文章中有说了,这里就不再赘述。需要看软件操作的小伙伴可以参考我的这篇文章:https://blog.csdn.net/cumtLeibnizDavid/article/details/115704150 二、硬件这次用到的原件有80C51、MATRIX-8×8-RED、RESPACK-8,以及POWER和GROUND。 1.关于Matrix-8×8 MATRIX-8×8-RED是8×8的红色LED点阵(除了红色还有其他颜色,也不止有8×8规格的),它共有16个引脚,8个阳极引脚控制列上的LED,8个阴极引脚控制行上的LED。通常我们把控制行上LED的八位二进制数称为列值,控制列的二进制称为列选信号。类似于数据与片选信号的关系。 上图就是一个matrix-8×8的LED,我们无法从外观上看出它的阴极和阳极,这时候我们就需要自己找出来。方法也很简单,就是给它加电源。当列选端口为高电平,列值为低电平时LED点亮,利用这一特点,很容易找出阴极和阳极。如下图: 我们只需要连接左边或者右边一种即可,这里为方便说明把两端都测试了一遍。打开仿真,即可观察到: 观察左边发现:上端输入高电平的列有LED发光,说明上端是阳极(列选),下端是阴极(列值)。而右边上端低电平下端高电平并没有LED亮起,佐证了刚才的结论。 进一步,我们看到阴极输入01111011,在一列中,从高到低是10000100B。发现了吗?阴极低电平时对应的LED亮起,01111011就是列值。 2、连接线路 在对MATRIX8×8有了了解,测出了端口性质。接下来是连接电路。首先我们需要明确一点,80C51的P0口需要上拉电阻才能输出高电平,具体原因是80C51芯片的设计结构,在这里就不解释了(因为我也不甚了解,不献丑了。有大佬可以评论区科普一下吗?) 这里我们选用P0口做列选,用P2口作列值。于是得到如图的电路图: 其中,RESPACK-8是排阻,其八位端口接P0口,作为上拉电阻。Matrix-8×8-RED的阳极接P0口(列选),阴极接P2口(列值)。 三、软件1、基本思路 我的设计的是先显示一颗跳动的爱心❤,然后把她的名字首字母显示出来。根据这个想法,我们就很好想到实现办法了。 首先,我们需要设置在开始的一段时间内让爱心跳动,再让字母轮流出现。 爱心怎么跳动?我们可以用一大一小的爱心交替显示表现这种效果。 怎么显示?点阵LED可以用动态扫描法显示,只需控制好循环就能显示图形。 下面开始编写代码: 2、头文件 #include int Ledcode[5][8]={ {0x0C,0x1E,0x3E,0x7C,0x7C,0x3E,0x1E,0x0C},//大爱心 {0x00,0x0C,0x1C,0x38,0x38,0x1C,0x0C,0x00},//小爱心 {0x32,0x73,0xdb,0xdb,0xdb,0xdb,0xce,0x64},//字母‘S’ {0x01,0x03,0x7f,0xff,0xc3,0xe1,0x60,0x00},//字母‘J’ {0x01,0x03,0x87,0xfc,0xfc,0x86,0x03,0x01}};//字母‘Y’ int line[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//列选 上面的代码,因为我想显示一颗跳动的爱心,所以在这个8×8的点阵中设计了一个大爱心和一个小爱心,让大小爱心交替显示,表现出跳动的效果。 后面的字母是名字缩写。列选则是每次选择一列显示。所有这些都是我一个一个画出来再转化的列值。 一开始是这样的: 把它整个画出来了 然后是这样 把列中对应的二进制数写出来,就是列值了。 最后,还进行了修改,这都是在看到效果后对一些细节修改了。 让大家见笑了。 3、点阵LED显示 这里采用的是动态扫描的方式,因为每一列显示的列值都不一样,所以用动态扫描每次显示一列,只要循环的速度足够快,就能看到一幅静态的图案,这利用的是人眼的视觉暂留现象。 1)跳动爱心的代码: int times=0; while(times |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |