数码管介绍
LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件
![](https://img-blog.csdnimg.cn/img_convert/f7f7f65a4906dc4fe2fd4d7d025997f2.png)
数码管管脚定义
![](https://img-blog.csdnimg.cn/img_convert/3fc9d17378ac58b4a511f5d61c3b8c61.png)
![](https://img-blog.csdnimg.cn/img_convert/2c870e14b3dc66009577606d1a3560e2.png)
数码管静态显示
1)代码
#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;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=NixieTable[Number]; //段码输出
}
void main()
{
Nixie(2,3); //在数码管的第2位置显示3
while(1)
{
}
}
Proteus仿真
需要注意数码管器件型号不要选错共阴是后缀是CC共阳是CD
![](https://img-blog.csdnimg.cn/img_convert/3db4c6331621a1ded7d8e604bdf66525.png)
74HC245芯片介绍
74HC245是八同相三态收发器,具有双向传输、双相锁存的功能。
第1脚DIR(T/R),为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2~9脚“A”信号输入输出端,A0=B0,A7=B7,A0与B0是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。
第11~18脚“B”信号输入输出端,功能与“A”端一样,不再描述。
第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。
第10脚GND,电源地。
第20脚VCC,电源正极。
![](https://img-blog.csdnimg.cn/img_convert/bbf3f0fbb480cef443ec17868f62b72d.png)
74LS138芯片介绍
用一块3线-8线译码器74LS138可以组成任何一个三变量输入的逻辑函数,任意一个输入三变量的逻辑函数都可以用一块3线-8线译码器74LS138来实现。根据输出表达式,从中可以看出译码器74LS138是一个完全译码器,涵盖了所有三变量输入的最小项,这个特性正是它组成任意一个组合逻辑电路的基础。74ls138还有另一重要应用,可以组成数据分配器。其实在电路在家用电器、自动化控制等方面都有重要的应用。
结构图及其真值表
![](https://img-blog.csdnimg.cn/img_convert/f393706bb6409fa6d3dde69572bf5945.png)
工作原理及拓展
1、当一个选通端(E1)为高电平,另两个选通端为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。(即输出为Y0至Y7的非)比如:A2A1A0=110时,则Y6输出端输出低电平信号。
2、利用 E1、E2和E3可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。
3、若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
4、可用在8086的译码电路中,扩展内存。
动态数码管显示
1)利用单片机快速扫描使其一直扫描显示,人眼帧率差别。
2)代码
#include <REGX52.H>
//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//延时子函数
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
//数码管显示子函数
void Nixie(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=NixieTable[Number]; //段码输出
Delay(1); //显示一段时间
P0=0x00; //段码清0,消影
}
void main()
{
while(1)
{
Nixie(1,1); //在数码管的第1位置显示1
// Delay(20);
Nixie(2,2); //在数码管的第2位置显示2
// Delay(20);
Nixie(3,3); //在数码管的第3位置显示3
// Delay(20);
}
}