一、
数码管分为共阴极和共阳极数码管,以上是单个数码管,数码管的每段都是由一个LED灯构成,引脚与数码段就近相连。其中第3、8引脚是公共端(或者是位选段)。
共阴 共阳
51单片机开发板采用的共阴极数码管。
二、
这是四个连在一起的四位数码管 ,同样有共阴和共阳极,四个数码管段选连接在一起,位选都是独立的。
三、
共阴极数码管的段码表
0 1 2 3 4 5 6 7 8 9
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
A B C D E F 空
0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,
四、数码管驱动电路详解
采用74LS138译码器对多位数码管的位选
C | B | A | Y |
0 | 0 | 0 | Y0有效,输出低电平,其他引脚为高电平 |
0 | 0 | 1 | Y1有效,输出低电平,其他引脚为高电平 |
0 | 1 | 0 | Y2有效,输出低电平,其他引脚为高电平 |
0 | 1 | 1 | Y3有效,输出低电平,其他引脚为高电平 |
1 | 0 | 0 | Y4有效,输出低电平,其他引脚为高电平 |
1 | 0 | 1 | Y5有效,输出低电平,其他引脚为高电平 |
1 | 1 | 0 | Y6有效,输出低电平,其他引脚为高电平 |
1 | 1 | 1 | Y7有效,输出低电平,其他引脚为高电平 |
通过控制三个引脚来控制8个端口,节约了MCU的引脚数量。
采用74HC245芯片双向数据缓冲器驱动数码管。其中DIR表示方向,接高电平数据从左向右传输,接低电平数据从右向左传输。而A0.....与B0相当于可以看成是直接相连的。
为什么采用74HC245?
如果LED灯直接接IO口的话用低电平驱动更亮,这是因为单片机所发出的是控制信号,高电平的控制信号驱动能力弱,点亮LED亮度太暗。一般都是低电平驱动。
因此采用74HC245,提高高电平驱动能力,左端的控制信号通过该芯片,该芯片另外接电源,右端的输出引脚通过吸取该芯片的电源VCC能量因此驱动能力增强,可以用高电平驱动数码管。
电容104表示 10 0000pF pF nF uF mF F
四、代码
#include <REGX52.H>
unsigned char shumatable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数组表示0 1 2 3 4 5 6 7 8 9
void Shuma(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=shumatable[Number];
}
void main()
{
Shuma(7,4);//第7个数码管显示数字4
while(1)
{
}
}