51单片机数码管没有74HC138该如何配置

近日,有一位人找我问了一个数码管的问题,我一看他的板子上面有位选和段选引脚,我就知道他的板子肯定没有74HC138芯片的,经过确认,果真没有,那我们先说什么是位选和段选呢?

1.1段选与位选

段选就是你想要数码显示什么数字,如图,有a、b、c、d、e、f、g、dp,共8段,通过配置这8段的高低电平就可以达到显示0-F的效果。

位选则就是数码管需要显示的位置,比如4位一体的数码管,我需要他显示在第3个位置,这就是位选。

1.2有74HC138芯片的配置

如图可以看到,数码管一般是由74hc138与74hc245驱动的,但是没有138译码器也是可以的,下面会有具体的讲解。

贴上代码(有138译码器)

#include <REGX52.H>

//显示0-9,定义数组,确定自己的是共阴极还是共阳极连接
unsigned char smg_code[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*有138芯片配置*/
//location:显示位置,即位选
//num:显示的数字,即段选
void smg(unsigned int location, num)
{
	switch(location)
	{
		case 1: P2_4=1; P2_3=1; P2_2=1; break;//7,对应数码管第一个位置
		case 2: P2_4=1; P2_3=1; P2_2=0; break;//6
		case 3: P2_4=1; P2_3=0; P2_2=1; break;//5
		case 4: P2_4=1; P2_3=0; P2_2=0; break;//4
		case 5: P2_4=0; P2_3=1; P2_2=1; break;//3
		case 6: P2_4=0; P2_3=1; P2_2=0; break;//2
		case 7: P2_4=0; P2_3=0; P2_2=1; break;//1
		case 8: P2_4=0; P2_3=0; P2_2=0; break;//0
	}
	P0 = smg_code[num];
}
void main()
{
	smg(4,7);
	while(1)
	{
		
	}
}

1.3无74HC138的配置

看图,没有138译码器,但是多了一个锁存器芯片573,可以看到DULA连接到了P2.6上面,是段选,控制a、b、c、d、e、f、g、dp,的亮灭,也就是说,在使用段选时,必须要把P2.6拉高,打开锁存端口,在进行配置,配置完之后记得置0关闭锁存端口。同理,WELA连接到了P2.7,也需要打开锁存端口才能配置。具体二进制配置应该不要多说。

代码如下

/*在第3个数码管显示6*/

#include <REGX52.H>

/*有些同学会使用下面这个头文件,注意,此头文件没有P2_1这种类似的定义,如需使用,必须位定义,使用方法如下*/
//#include <reg52.h>
//sbit DU = P2^6;
//sbit WE = P2^7;

unsigned char smg_code2[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf};//后面自行补充,数码管显示位置

void main(void)
{
	P2_7 = 1;//位选引脚打开
	P0 = smg_code2[3];//第3个位置
	P2_7 = 0;//位选引脚关闭

    P2_6 = 1;//段选引脚打开
	P0 = smg_code[6];//显示6
	P2_6 = 0;//段选引脚关闭
	
	while(1)
	{
		
	}
}

1.4总结

可以看出,两者还是有一些区别的,但是逻辑是差不多的,所以说我们编程之前可以先看看自己的原理图是哪种,再来具体的写代码。

以上就是我对数码管的理解,有什么错误的地方欢迎在评论区指出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LVAN电子实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值