数码管就是一种常见用于显示的器件,比如电子时钟中的显示时间的就是数码管,
工业控制设备上数据显示,参数的显示等,在消费类电子上也有广泛的应用。
其实数码管的本质就是发光二极管的组合使用。
数码管和LED灯一样,有两种接法,共阴极和共阳极。
共阴极时,输入高电平时有效,共阳极时输入低电平有效。
数码管的结构及原理如下图所示:
![](https://img-blog.csdnimg.cn/2199f0fd36fb47a2bdef1e5ca18b666e.png)
数码管驱动电路分析
![](https://img-blog.csdnimg.cn/ec02b0d6ae434d3db422b8f7b7fc7b73.png)
点亮过程:假设共阳,那么公共端就要全给高电平 0xff 那么P0 = 0xff 只要把 p2.6 = 1,
这时0xff就会写到Q0-Q7,这时p2.6=0,那么刚才0xff的数据就会锁存到Q0-Q7,
之后 P0的数据不管你怎么改变,输出永远保存刚才的数据。
如,图一所示,
一个数码管上一共可以理解为有八个部分
在共阴极中如果想要输出一个字母b
那么我们可以对照表,能观察出数码管中分别是CDEFG部分显示,
对应的引脚排列是0111 1100
在排列的二进制换算为十六进制,即:0x7c
如,图二所示,
左下角阴: 段选 对应字母连接 (选数字)
右下角阳:位选 WEI 对应 (第
几个)
字符,位选,段选的关系
数码管字符段选位选的关系是指在使用数码管时,通过控制不同的位选信号和字符段信号,
来控制数码管上显示的数字或字符。其中,位选信号用于选择数码管的哪一位进行显示,
而字符段信号则用于控制该位上的哪些段亮起来,从而显示出对应的数字或字符。
例如,在一个双位数码管中,如果要显示数字“12”,则需要先选择第一位进行显示,
然后通过控制字符段信号,让该位上的“1”对应的字符段亮起来,
同时让该位上的“2”对应的字符段亮起来。接着,再选择第二位进行显示,
同样通过控制字符段信号,让该位上的“2”对应的字符段亮起来。
需要注意的是,不同型号的数码管可能存在不同的字符段选位选的关系
,
因此在使用时需要参考具体的数码管型号和数据手册。
代码
![](https://img-blog.csdnimg.cn/299a44aa11a64220be82083ceaf1fca4.png)
![](https://img-blog.csdnimg.cn/4587c0bb99cb427ba0d237b21e68a13e.png)
ai代码 在这段代码中,我们使用了共阴极的7段LED显示屏的编码表,并且对编码进行了取反操作。
修改了七段LED中的编码。
修改如图
显示
完整代码:
#include <reg52.h>
#define duan P0
#define uchar unsigned char
sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
uchar code sz[17]={
0x3f, // 数字0的编码
0x06, // 数字1的编码
0x5b, // 数字2的编码
0x4f, // 数字3的编码
0x66, // 数字4的编码
0x6d, // 数字5的编码
0x7d, // 数字6的编码
0x07, // 数字7的编码
0x7f, // 数字8的编码
0x6f // 数字9的编码
};
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
while(1)
{
duan=sz[6];
wei1=0;
wei2=0;
wei3=0;
wei4=1;
delay(5);
duan=sz[1];
wei1=0;
wei2=0;
wei3=1;
wei4=0;
delay(5);
duan=sz[4];
wei1=0;
wei2=1;
wei3=0;
wei4=0;
delay(5);
duan=sz[7];
wei1=1;
wei2=0;
wei3=0;
wei4=0;
delay(5);
}
}