共阳极公共端接阳极,低电平有效(灯亮), 共阳极数码管内部发光二极管的阳极(正极)都联在一起,此数码管阳极(正极)在外部只有一个引脚
共阴极公共端接阴极,高电平有效(灯亮),共阴极数码管内部发光二极管的阴极(负极)都联在一起,此数码管阴极(负极)在外部只有一个引脚
共阳极数码管:通过输入低电平(0)点亮(二极管导通)
共阴极数码管:通过输入高电平(1)点亮(二极管导通)
共阴极阴极接在一起,通常连接GND,因此通过输入高电平点亮。
如果想显示"8",只要将a、b、c、d、e、f、g点亮
如果想显示"0",只要将a、b、c、d、e、f点亮
A2-A4开发板使用的是共阴极数码管。而 A5-A7开发板小的8位数码管是共阴极,而大的数码管使用共阳极。
共阴极数码管由于点亮数码管需要消耗大量电流(会导致其它功能电流减少),所以开放版一般通过连接驱动电路来放大输出电流。如74HC245和74HC573芯片。‘
共阳极数码管由于通常通过VCC电源供电,所以在实际工业开发中一般使用共阳极数码管。
**以共阴极为例:**通过连接驱动芯片,输入高电平使数码管点亮。如要点亮"0",将a、b、c、d、e、f输入高电平,g和DP输入低电平。则低位为1111,高位为1100。
P0 ^ 7-P0 ^ 0为0011 1111,转化为十六进制为0x3F。
//!!!同理而共阳极因为连接电源VCC,所以想要点亮则要输入低电平,即将0x3F取反。
以A2-A4开发板为例(采用共阴极数码管):
通过八个I/O端口控制段选(由于单片机数码管采用动态显示方式连接,即八位数码管每个位的数码管对应相同段的线路连接在一起)
通过3-8译码器三个端口控制位选。
3-8译码器:看 A0,A1,A2 输入管脚的电平状态。如果 A0,A1,A2 都为低电平,则Y0 输出有效电平(低电平),其他管脚均输出高电平。如果 A0 为高电平,A1,A2 都为低电平,则 Y1 输出有效电平(低电平),其他管脚均输出高电平。其他几种输出大家可以对照真值表查看。如果 E1、E2 使能管脚任意一个为高电平或者 E3 为低电平,不论输入是什么,输出都为高电平。
这里总结一个方法:A0、A1、A2 输入就相当于 3 位 2 进制数,A0 是低位,A1 是次高位,A2 是高位。而 Y0-Y7 具体哪一个输出有效电平,就看输入二进制对应的十进制数值。比如输入是 101(A2,A1,A0),其对应的十进制数是 5,所以 Y5 输出有效电平(低电平)。
A2-A4开发板(采用共阴极数码管):
段选直接与I/O端口相连。位选使用74HC138译码器,通过三个引脚控制八个LED(注意3-8译码器中存在非门,输入高电平,若输出有效,则输出低电平)。
A5-A7开发板(采用单个共阳极数码管,也可以采用共阴极数码管):
若采用共阳极:输入电流通过电源直接提供。I/O端口可以任意选择(P0、P1、P2、P3)与J8排针连接
输出数字0的段码0x3f(共阴极),~0x3f(共阳极)
因为3-8译码器与电源相连,所以当P2 ^ 2,P2 ^ 3和P2 ^ 4端口连接时,输入的电平会使数码管点亮。因此A2-A4开发板由于是集成电路,在LED灯实验时,由于P2口的连接会导致数码管也发光。
A2-A4:
A5-A7:
注意它们数码管的顺序是相反的。
可控制3-8译码器的输入电平来选择对应位数码管的发光。
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define SMG_A_DP_PORT P0
sbit A0=P2^2;
sbit A1=P2^3;
sbit A2=P2^4;
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //第一个g代表全局变量global
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴0-F
void main()
{
A0=0;
A1=1;
A2=1;// 110B,则06数码管(第七个)发光(用于通过3-8译码器控制共阴极数码管)
while(1)
{
SMG_A_DP_PORT=gsmg_code[0];//共阴
//SMG_A_DP_PORT=~gsmg_code[0];//共阳
}
}
A5开发板
共阴极:
共阳极:取反前
取反后