??????? 本章就要说到关于动态数码管的相关内容了,其实从前面的gpio和蜂鸣器,我们基本都只是学习了一下单个gpio的使用,那这一节呢我们就来回顾一下整体的一组gpio的操作方法。在回忆之前,还是需要先将一些知识给补充到。
1.关于数码管
??????? 首先关于数码管,其实说来也很简单,一个数码管其实就是说有很多个led灯需要同时进行操作,就是一组gpio全都给低电平或者是高电平咯,这里其实就有一点区分了,你的数码管在设计的时候是把所有的阴极接到了一起还是说把所有数码管的阳极接到了一起,如果是所有的阳极接到了一起的话就是说是共阳极数码管,反之就是说是共阴极数码管,这个可以看你的芯片手册,或者是用万用表来测,测试方法见后面拓展,而我的数码管是一个共阴极数码管,我们假如把这个共阴极这边接到地,而我们给他们的每一个的阳极给到高低电平,其实也就可以显示一个完整的数字了。而多位数码管放到一起就是一个多位数码管了,只是它的构造和用多个一位数码管基本相似,就以我的4位数码管为例,见下图:
2. 硬件 ??????
??????? 从以上图我们可以看到我这里的上面就是每个数码管的共阴极,我们一般称这个为段选线,我们只要选择一条给它一个低电平,那么我们下面的其他的线全部给我们想要的位一些高电平,那么我们的数码管就能点亮成为我们自己想要的数字。可以注意到我们给a电平的时候对应的a位就会被点亮。而关于其中的74HC245芯片,关于每一个芯片我们第一件事情都应该说是去查它的芯片手册,首先我们为什么需要74HC245这个芯片呢?其实这里和我们上一节讲的东西十分相似,就是说51单片机的驱动能力不行,需要我们给它增加驱动能力,这里就是我们添加74HC245的原因,而关于它我们其实是不需要配置的,因为在硬件上面我们就做好了相应的配置,给DE引脚一个低电平来使能,就是说让芯片工作,而且呢vcc是给了一个高电平的话就可以从A到B输出,这样的话关于数码管的硬件就讲的差不多了,但是我的上面的段选线并不是直接接到gpio上面的,而是选择接到了38译码器上,如下图所示
???????? 其实这个时候最好的方式还是去看38译码器的芯片手册,我这里就直接说说它的特性,我们直接复制一下它的真值表就明白了。
???????? 这里的A0,A1,A2分别对应上图的A,B,C,E1,E2,E3,分别对应G1,G2A,G2B,因为我们这里的E1,E2,E3状态已经确定了,那么我们就只需要通过A,B,C来完成功能了,由上图所示,L代表低电平,H代表高电平,X代表任意状态,因为我们的E1,E2,E3的状态已经确定,所以我们直接从第四行开始看,意思是我们通过A、B、C就可以选择Y的状态了,让对应的Y位输出低电平,就可以选中对应的数码管。
3,软件
??????? 我们现在呢关于数码管的程序就编写一个同时显示0到7的数据的有关内容,代码如下:
#include <reg52.h>
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
unsigned code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0x0~0xf
/*延迟时间*/
void delay(int x){
while(x--);
}
void main(){
int i;
while(1){
for(i = 0;i < 8;i++){
switch(i){
case 0:
LSA = 0; LSB = 0; LSC = 0;
break;
case 1:
LSA = 1; LSB = 0; LSC = 0;
break;
case 2:
LSA = 0; LSB = 1; LSC = 0;
break;
case 3:
LSA = 1; LSB = 1; LSC = 0;
break;
case 4:
LSA = 0; LSB = 0; LSC = 1;
break;
case 5:
LSA = 1; LSB = 0; LSC = 1;
break;
case 6:
LSA = 0; LSB = 1; LSC = 1;
break;
case 7:
LSA = 1; LSB = 1; LSC = 1;
break;
}
P0 = smgduan[i];
delay(10); //延迟
P0 = 0x00; //消影
}
}
}
??????? 我们这个程序除了前面的有关的介绍,其中最重要的就是有关于延迟的内容,其中延迟不能太长,太长的话就会导致不是同时显示,其实我们的同时显示就是分时显示的,只是我们的眼睛没有那么快,才看起来像是同时显示的一样,就和我们看电视是同一个道理,后面的消影主要是为了,消除残影。而其中的关于数字的数组就是我直接一个一个的算的啦。
4.拓展内容
??????? 关于如何用万用表来测数码管的电压,万用表用到电压表的挡位,我们可以任选两个引脚来测他们之间的电压,只要他们之间的电压是1.5v,再把其中的一端接到另一个引脚上去,你就可以知道数码管是共阳极还是共阴极了,其实没有万用表其实分析一下电路图也就出来了,大家看看我的电路图一分析也就知道是共阴极了,实在还是不行,翻对应的手册,也是可以的。
|