51单片机之静态数码管显示

一、数码管介绍

1.1 基本定义与结构

定义:LED数码管是一种由多个发光二极管(LED)封装在一起,形成“8”字型的显示器件。它广泛用于仪表、时钟、车站、家电等场合,用于显示数字、字母或符号。

结构:LED数码管通常由8个LED构成,其中7个LED构成7笔字形,用于显示数字或字母,另1个LED构成小数点(可选)。这些LED按照一定的图形及排列封装在一起,形成完整的显示单元。

1.2 分类与接法 

分类:根据电源极性的不同,LED数码管可以分为共阴极和共阳极两种类型。共阴极数码管的7段显示字码共用一个电源的负极,是高电平点亮;而共阳极数码管的7段显示字码共用一个电源的正极,是低电平点亮。

接法:无论是共阴极还是共阳极数码管,都可以通过控制各段LED的亮灭来显示相应的数字、字母或符号。在实际应用中,需要根据单片机的I/O口配置和驱动能力来选择合适的接法。本文所用的单片机是共阴极数码管。

1.3 静态显示原理

静态显示:静态显示是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动,或者使用如BCD码二-十进位转换器进行驱动。这种方式的优点是编程简单,显示亮度高,但缺点是占用I/O口多。

工作原理:在静态显示模式下,单片机通过控制各段LED的亮灭来显示数字或字母。对于共阴极数码管,当某一段的LED需要点亮时,该段对应的I/O口输出高电平;对于共阳极数码管,则输出低电平。同时,为了保证数码管能够正常显示,还需要将公共极(共阴极或共阳极)连接到适当的电源或地线上。

二、原理图

 2.1 原理图分析

 

单片机等微控制器的引脚上拉电流能力一般在20mA左右,想要直接点亮数码管、显示屏等大功率显示器件则明显不够,这时,我们用74HC245芯片来增加单片机引脚的驱动能力。该芯片的引脚上拉电流能够达到73-83mA。它的引脚有三种输出状态:高电平、低电平和高阻态。同时,有八路输入与八路输出,他的工作电压范围是3至5V。19号引脚为使能端,低电平有效所以接地。1号引脚DIR决定了数据是从A缓冲到B还是B缓冲到A,当1接VCC时,左侧A7-A0作为输入端,右侧B7-B0作为输出端。

由第二张单片机核心原理图可知A7-A0左侧接了RP8 RP12的电阻,保证74HC245芯片在没有工作时电位被稳定钳位在低电平。芯片的输出引脚直接连接数码管,这里每条线路串接了一只100Ω的电阻,这个电阻起限流的作用,根据负载的不同,我们选取不同阻值的电阻来进行限流。

 

动态数码管的输出端接到了74HC138译码器的输出端。 74HC138译码器主要用于选择具体点亮哪个数码管,下面是74HC138译码器的真值表 :

2.2 总结 

当我们想要点亮第三个数码管(LED6),让其显示为6,则需要74HC138译码器的输出端LED1-LED8中Y5非为0,其他为1即1111 1011(注意Y0非接的是LED1),此时对应的输入端CBA(P24 P23 P22)为101;还需要让数码管的a c d e f g被点亮,即74HC245的A7-A0(P07-P00)为0111 1101(从高位往低位读),对应十六进制的的0x7D。

三、静态数码管显示实验

3.1 代码示例

3.1.1 直接赋值

#include <REGX52.H>

void main()
{
	P2_4=1;
	P2_3=0;
	P2_2=1;
	P0=0x7d;
	while(1)
	{
		
	}
}

 

3.1.2 编写子函数——switch和数组实现 

#include <REGX52.H>
unsigned char NixieTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//对应的数字0-9

void Nixie(unsigned char Location, unsigned char 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(1,0); //第一段数码管显示数字0
	while(1)
	{
		
	}
}

 

注: LED灯亮了是由于引脚冲突了,只需要看数码管是否显示正确即可

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值