38译码器驱动数码管电路图
时间:2022-12-16 01:00:00
用38译码器驱动数码管节省IO端口
(1)什么是38译码器?
38译码器有3个输入端口A、B、C和8个输出端口Y0-Y7.输出端口的值由输入端口控制
(2)为什么使用38译码器?
回顾之前的驱动动态数码管,段码端口控制显示的数字,一个com哪个数字管工作由端口控制,8个段码端口连接IO引脚,com端口接8个IO引脚。这是浪费IO为了节约口资源IO使用38译码器连接资源com这样可以用3个输入引脚控制8个com端口了。J15接到J16端口。
(3)为什么3个输入端可以控制8个输出端口值?
三个输入端口,每个端口有两种状态(0或1),三个端口可以形成8个不同状态。
(4)如何控制3个输入端口的8个输出端口?
根据74LS查询38译码器芯片的译码表138芯片数据手册。
可获得分析数据手册:
(1)G1、G2*使能引脚的两个端口,并希望38译码器工作,G1接高电平,G2*连接低电平。因此,在上面38译码器的原理图中G1接VCC,G2*接GND。
(2)当ABC当三个输入端口输入不同的值时,Y0-Y7.相应的输出低电平。回想起来,动态数码管是共阴数码管,而38翻译器Y0-Y7默认输出高电平,连接无缝。
实验分析:
第一步:八个数字管阳极接一个IO负责输出显示的数字(即输出相应的段码)。
第二步:八个数字管com分别连接到38译码器的端Y0-Y7引脚。38译码器ABC控制数字管的三个输入端com端口达到控制数字管工作的目的。
第三步:按原理图接线,J15-J16、ABC分别接P1.0、P1.1、P1.2
第四步:测量数码管段码和38译码器的译码表。
第五步:编程。
实验代码:
#include
void delay(void)
{
unsigned char i=0,j=0;
for(i=0;i<100;i );
for(j=0;j<20;j );
}
void main(void)
{
/* P0.0接到 A,P0.1接到B,P0.2接到C
P0端口是段码口,控制要显示的数字
P1端口是38译码器的端口,通过com控制第几个数字管工作
*/
/* 测试38译码器的位码
c b a
000 Y0输出低电平 第一个数字管工作 对应16进制数0x1
001 Y1输出低电平 二是数码管工作 对应16进制数0x2
010 Y2输出低电平 三是数码管工作 对应16进制数0x3
011 Y3输出低电平 第四个数字管工作 对应16进制数0x4
100 Y4输出低电平 第五个数字管工作 对应16进制数0x5
101 Y5输出低电平 第六个数字管工作 对应16进制数0x6
110 Y6输出低电平 第七个数字管工作 对应16进制数0x7
111 Y7输出低电平 第8个数码管工作 对应16进制数0x8
*/
unsigned char duanma[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
//段码
unsigned char weima[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7}; ///38译码器的位码
unsigned char i=0;
while(1)
{
for(i=0;i<=7;i )
{
P1=weima[i]; ///38译码器的位码
P0=duanma[i]; //八个数码管的段码
delay();
P0=0; //消隐
}
}
}
实验总结:
(1)使用38译码器是为了节省IO口,如果IO不能使用38译码器。
(2)动态数码管的阳极连接P0这个IO在端口上,控制数字管显示的数字,阴极连接到38翻译器的八个输出引脚Y0-Y7,Y0-Y7由38译码器的ABC三个输入引脚控制。控制哪个数字管工作。
(3)测试数码管的段码和38译码器的位码。
(4)先分析原理图,看怎么接线,再看38译码器的数据手册,看怎么工作。最后编程。
(5)注重实验分析过程,而不是知识本身,总结学习方法。