一.数码管原理
1.138译码器
其有3个输入端A、B和C,输出端有8位,对应51单片机的8位数码LED。将输入端输入的3位数据作为3位二进制码(C B A 的顺序),然后译码器将2进制转为10进制,使对应的引脚变成低电平,其余引脚为高电平,这样就能使对应的数码LED点亮。
优点:从8个线控制减少到3个线控制,节约了单片机的I/O口资源。
特别要注意的是:
1)3位二进制数转为十进制为0—7。但数码管的编号是1—8。因此想要计算对应数码管的二进制数,需要先使数码管编号-1,再转为二进制数。
2)3位二进制码(C B A 的顺序),也就是P2_4=; P2_3=; P2_2=; 。
2.数码管
1)74HC245
74hc245是一种在单片机系统中常用的驱动器,三态输出八路收发器,在电路中的作用是:增加io口的驱动能力,比如说51单片机的io口本身的驱动电流较小但所带的负载很大,这种时候就可以使用74hc245来增强io口的驱动能力。
2)引脚:
74HC245的引脚包括输出使能
(OE),方向控制
(DIR),A组输入/输出
(A0-A7),B组输入/输出
(B0-B7),电源
(VDD)和地
(GND)。
DIR:双向数据缓存,DIR接高电平,将A组
(A0-A7)数据传输到B组
(B0-B7)。
3)逻辑功能:
只有当输出使能OE为0
时,芯片才能被使能
,不然芯片所以输入输出端口处于高阻态
(既不是高电平也不是低电平)。
4)电容
电容104 代表10后面加4个0,也就是10 0000 pF
5)应用实例
功能:使编号为5的数码管显示数字“6”
代码
#include <REGX52.H>
void mian()
{
//编号为5的数码管
P2_4=1;
P2_3=0;
P2_2=0;
//数码管显示“6”数字 (0111 1011) (D7)
P0=0x7D;
//需要带上while循环
while(1)
{
}
}
二.动态数码管显示
原理:人眼视觉暂留
消影 :P0=0x00;break;
功能:使多个LED亮起
代码:
#include <REGX52.H>
#include <INTRINS.H>
void delay(int d)
{
while(d--)
{
_nop_();
_nop_();
_nop_();
}
}
int NixieTube (int Location,int Number)
{
int x=Location-1;
P2_2=x%2;P2_3=(x/2)%2;P2_4=(x/4)%2;
switch(Number)
{
case 0:P0=0x3F;delay(100);P0=0x00;break;
case 1:P0=0x06;delay(100);P0=0x00;break;
case 2:P0=0x5B;delay(100);P0=0x00;break;
case 3:P0=0x4F;delay(100);P0=0x00;break;
case 4:P0=0x66;delay(100);P0=0x00;break;
case 5:P0=0x6D;delay(100);P0=0x00;break;
case 6:P0=0x7D;delay(100);P0=0x00;break;
case 7:P0=0x07;delay(100);P0=0x00;break;
case 8:P0=0x7F;delay(100);P0=0x00;break;
case 9:P0=0x6F;delay(100);P0=0x00;break;
}
}
void main()
{
while(1)
{
NixieTube(1,1);
NixieTube(2,2);
NixieTube(3,3);
}
}