高铁速度显示这样的广告牌要不要了解一下
LED广告牌这样的LED显示器要不要了解一下
LED显示器这些的显示器,我们,现在都设计不了
哈哈哈哈哈哈哈
好像挺尴尬的那我们现在可以做什么样的呢?这样的
LED点阵显示爱心这样的
LED点阵显示汉字Q:想不想知道怎么设计呢?A:那肯想了,还用问
那么,就接下来,我们就来一步一步向大家展示这么好玩的东西怎么去设计出来0、效果展示,功能分析视频加载中...看了视频,那么我们就来分析一下如何实现这些功能显示部分使用LED点阵显示,后面会介绍LED点阵的原理LED点阵模块LED点阵驱动电路74ls245驱动电路单片机主控模块主控模块 AT89C51有了基本的模块选择,那么如何去实现功能呢?科普时间到了,小本本记下来哦
LED点阵模块如何驱动呢?首先我们要知道,既然叫LED点阵,那么说到底,还是LED,那就无非两个状态:亮,不亮用数电的说法就是 1,0知道了这个,那我们就来看一张图LED点阵原理图这还是88的LED点阵原理图,我们从原理图中可以看到什么呢?很多LED灯,被乱七八糟的连起来了,第一眼就是这样的感觉大家如果第一次接触这玩意儿,可能就是这种感觉但不要慌,容科技仔来分析一下:首先我们从最右边开始看,每一列的LED的负极(有一条横线那边),都被一条导线连起来了,从这里可以知道,这条导线就是列线这里先不管什么是列线,先接着看接下来我们从最下边开始看,每一行的LED的正极都被一条导线连起来了,那么这条线就是行线了同样的,接着往下看行线有8条,列线有8条,那么大家有没有想起数码管的的驱动方式呢?动态数码管的驱动方式,不断的扫描位选端,实现动态显示那么因为88的LED点阵的数据量较大,所以只能采用动态扫描显示我们将一个图像(任何数字、汉字、字母等等在这里都是图像)分解成很多部分,把显示数据送到列线上,然后一次点亮一行,并不断循环,实现动态显示的效果实际实现方法如下for(m=0;m<100;m++) // 循环显示100次{ w=0x01; // 行选数据 for(j=0;j<8;j++) //循环八次进行行选,实现动态显示{ P1=w; // 将行选数据送至P1端口,后面是LED点阵的行线 P0=~led[5][j]; // 将需要显示的数据送至P0端口,后面是LED点阵的列线 delay(100); // 延时显示时长 w<<=1; // 左移行选数据 P0=0xff; // 关闭显示,防止拖影 }}当然这个代码还是看起来比较抽象,那么我们在仿真的情况下把延时调长一点,就会出现明显的卡顿,那么就是在不断的进行扫描显示我们来举个例子,什么叫扫描显示比如,我们一共有8个人,要上8楼,有一个横排电梯可以让他们上去,但要求每上一层做一个不同的动作我们提前把动作编好,然后告诉他们,现在是几楼了(传递行数据),然后他们就做自己在对应层数要做的动作(传递列数据)然后我们让他们多来几次,再搞个延时拍摄,最后再快放,只要他们配合的好,这就是一个LED点阵的效果了没有动画演示,实在对不住大家,能力有限不知道这个例子有没有让大家理解到什么是扫描显示,有一个地方不太完美,其实列数据是发送到了每一个数码管上的,但只有输入行数据的那一列才会被点亮,希望大家可以理解我的意思知道了原理,那我们就开始造吧!1、硬件电路设计这东西就直接给了吧,也没啥好藏着掖着的如果你整不好这张图,那就关注我吧,我,可以教你
如果你整好了这张图,那也关注我吧,你,可以教我
如果你想要这个仿真,那必须关注我,私信发送“03”获取仿真与程序
那么图来了:硬件电路图这里就不去解释为什么这么连了有一点必需要注意,我们要知道哪边是行线,哪边是列线
但你知道怎么测试吗?这里又要输出一点知识了,我只说一遍啊,如果你后来忘了,那我就不管了,除非你想起再来这里看看如果我们拿到的是真实的LED点阵模块,要去使用,那么我们就用万用表的蜂鸣档去测试,红表笔为正极,黑表笔为负极接上LED点阵两边的引脚上面,一次不行就反过来再试一次,直到有一个LED灯亮起的时候,那么接红标笔的那边就是行线那么这是为什么呢,我们的代码中行线是高电平,大家也看到了代码:......w = 0x01;......w <<=1;相信大家都是直到这两句话是什么意思,但我是还是想说一下,w <<= 1;就是把w左移一位,那么w的中的高电平位1,就会向左移一下,那么是不是就实现每次只点亮一行的效果呢,再不断的循环嗯,对,就是那感觉如果是仿真模块,那我们该如何去判断呢,这里和实际的模块原理上是一模一样,你想到了怎么去做吗?我们给一个模块的两边分别加上高低电平,其中一个LED小灯就会亮,看哪边是高电平,高电平的那边确定为行线为什么是这样,那就和上面的解释是一样的了判断行线Q:那你说,这个情况下那边是行线呢?A:这很明显嘛,左边是行选线嘛Q:不错不错,一点就通啊!A:那是肯定的啦额,说了这么多,还是要搬上实际的代码才有用啊2、程序设计什么都不说,就是这么直接干上代码#include \"reg51.h\" void delay(unsigned int i); // 主函数void main() {// 显示二维数组 unsigned char code led[6][8]={ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //不显示 {0x18,0x24,0x24,0x24,0x24,0x24,0x24,0x18}, //0 {0x00,0x18,0x1c,0x18,0x18,0x18,0x18,0x18},//1 {0x00,0x1e,0x30,0x30,0x1c,0x06,0x06,0x3e},//2 {0x00,0x1e,0x30,0x30,0x1c,0x30,0x30,0x1e},//3 {0x00,0x66,0x99,0x00,0x18,0x81,0x42,0x3C}}; // 笑脸 unsigned char w; // 用于保存行选数据 unsigned int j,k,m; // j,k,m控制循环次数for(k = 1; k < 5; k++) // 循环三次,分别显示1,2,3{for(m = 0; m < 100; m++) // 此循环是为了加长显示时间{w = 0x01; // 行数据 for(j = 0; j < 8; j++) // 循环八次进行行选,实现动态显示 { P1 = w; P0 = ~led[k][j]; delay(100); w<<=1; P0 = 0xff; } delay(1000); // 延时 } } while(1) // 一直显示笑脸 { for(m=0;m<100;m++) { w=0x01; for(j=0;j<8;j++) { P1=w; P0=~led[5][j]; delay(100); w<<=1;P0=0xff; } } delay(1000); for(m = 0;m < 100; m++) { P0 = 0X00; // 关闭显示 P1 = 0X00; // 关闭显示 其实写一句也是一样的,这里是为了强制确认关闭 delay(100); } } } // 延时函数 void delay(unsigned int i) { unsigned int k; for(k=0;k<i;k++); }关于显示部分我就不说了,主要来讲一讲这个数组是怎么来的在LED原理解释里面我讲到了行选数据和列选数据,那么这个数组就是列选数据,通过将想要表现的数据通过取模软件编码出来,再在这里写出来,再通过一系列巴拉巴拉的操作,你就可以看到视频中的那个效果了3、软硬件联调这种数据线比较的程序其实是非常不好调的,我在做的时候就乱码了很多次,当然88的相对来说比较简单,也不会出现太多问题主要是让大家了解这种点阵是如何工作的,了解了一个,那么几个拼在一起,实现一个大的显示屏,也是可以实现的调试嘛,还是一样的,就在视频里面4、写在最后今天写的东西说实话让我费了很多心思,想了好多种写的方式,但表现的还是不算很好,还需要继续学习希望大家能从我的文章中学到一点东西,这便是我最大的期望那么,为了让你想要关注我,我就给你看一个更厉害的东西1616LED点阵很好,现在你看了,那就必须要关注我关注我,私信发送“03”就可以获得两个实例的仿真和程序,以及对应的字模软件,还有小编的在线指导操作与讲解哦赶紧行动吧
关注+点赞+转发,是我创作的动力,我希望更多人看得到我的文章,让我的文章可以被更多想要学习这些知识的人看到希望大家继续支持我这枚小小科技仔
(图片来源网络,侵删)
0 评论