本篇文章主要讲解的是静态单个数码管显示
数码管的介绍![](https://i-blog.csdnimg.cn/blog_migrate/e2a733aa466bfa8a385d28effe84f336.png)
数码管是由多个发光二极管组成的所以在51单片机中就可以根据电位的高低来控制
首先是单个数码管
它有两种连接方式第一种为“共阴极” 顾名思义就是所有二极管的的阴极连接在一起只要要控制阳极的电位高低就可以控制二极管的发光与不发光从而显示特定的数字。第二种为共阳极,就是所有二极管的阳极连接在一起,需要控制二极管的阴极的电位高低来控制二极管的亮灭,从而显示特定内容。我所是使用的开发板为共阴极的连接方式。
然后为多个数码管的
它与单个数码管的区别为所有单个数码管相应位置都连在了同一条线上,每个数码管总的亮灭是由上面的引脚决定的。
开发板上的数码管的工作原理。
在开发板中一个数字的显示内容是由8个小的二极管来决定的即“a b c d e f g dp”这 八个又因为是共阴极的连接方式所以这八个二极管的亮灭就由P0所发出的八个接口电位的高低来决定。
同时U4这个单元的作用相当于一个信号放大器。因为一开始从左侧进来的是信号它的能量很弱,如果直接接到数码管上会导致显示的亮度太低。所以就有了U4这个单元,接受到左侧传进来的信号,同时将信号的内容通过电流传输到数码管上,即使有很小的信号就可以使得数码管亮起。
那么在上面的文章中我们知道了怎么来控制数码管来显示我们想要的数字,这么多的数码管如果我们只想要一个来显示应该怎么办呢?
接下来就用到了74HC138译码器。如果我们只想要LED5亮,同时LED5所连接的为Y4这个口,我们只需要将4这个十进制的数转换成二进制赋给P22、P23、P24这三个串口。简单来说 P22、P23、P24在十进制中所代表的权重分别为4 2 1.所以如果LED5亮对于三个口的值就为P2_4=1;P2_3=0;P2_2=0;
对于以上机理解释完之后我们就要开始代码部分的编写。
低阶版
#include <REGX52.H>
void main()
{
P2_4=1;
P2_3=0;
P2_2=1;//十进制为5
P0=0x7D;
while(1)
{
}
}
对于程序的解释为: P2_4=1;P2_3=0;P2_2=1;转换成十进制就是5.又因为Y5所连接的为LED6即从左数第三个的数码管。P0=0x7D为十六进制转换成二进制为 0111 1101.共阴极连接高电位表示亮,所以显示内容为6.
这样一个代码显示的内容就是在第三个数码管上显示数字6.效果如下
进阶版
在上面的函数中如果我们想要改变显示位置和现实数字的话就很麻烦所以就有了下面的进阶版代码。它能够实现在数码管的任意位置显示你想要的数字。
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//定义数组
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;//权重分别为4 2 1
break;
case 2:P2_4=1;P2_3=1;P2_2=0;//权重分别为4 2 1
break;
case 3:P2_4=1;P2_3=0;P2_2=1;//权重分别为4 2 1
break;
case 4:P2_4=1;P2_3=0;P2_2=0;//权重分别为4 2 1
break;
case 5:P2_4=0;P2_3=1;P2_2=1;//权重分别为4 2 1
break;
case 6:P2_4=0;P2_3=1;P2_2=1;//权重分别为4 2 1
break;
case 7:P2_4=0;P2_3=0;P2_2=1;//权重分别为4 2 1
break;
case 8:P2_4=0;P2_3=0;P2_2=0;//权重分别为4 2 1
break;
}
P0=NixieTable[Number];
}
void main()
{
Nixie(3,6);
while(1)
{
}
}
他主要运用到的知识为C语言中的数组和Switch函数(没有什么好说的)对于想要显示的位置Location用Switch函数来实现。对于想要显示的内容用数组来实现。