前言

动态数码管显示,程序步骤,
1.了解动态数码管显示原理
2.编程实现


一、什么是动态数码管?

1.静态数码管

在这里插入图片描述
给对应的段码就能显示相应的数字…

2.动态数码管

在这里插入图片描述

二、编程实现步骤

简单理解:三极管是NPN 级, b级连接单片机,单片机引脚输出“1”,be级电压约等于0.7v,ce级导通,数码管得电,
反之,单片机io口输出“0”,be级电压为0,数码管没有电流流过,失电。

  1. 简述
    三极管开关属于电流控制开关,Ib控制Ic,与MOSFET管电压控制相反:

NPN和PNP的电流方向、电压极性相反。

1)NPN :以B→E 电流控制C→E 电流。 正常放大时, 即VC > VB > VE

2)PNP :以E→B 电流控制E→C 电流。 正常放大时, 即VE > VB > VC

总之,VB在中间,VC 和 VE 在两边。而且BJT各极的电压与电流方向是一致的,不会出现电流从低电位处流行高电位的情况。

NPN和PNP区别:箭头所指,即电流流向。如图:

在这里插入图片描述
在这里插入图片描述

PNP的反向电流可以使用I/O口直接提供,注意I/O口的最大承受电压,最好E极电压等于I/O口的高电平。对于E电压比较大的情况下可以使用文章最后的电源控制电路。

原理图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.基本步骤

  • 1.给段码
  • 2.给位选

2.写程序

代码如下(示例):
显示一位数码管

在这里插入代码片
P0=0XF9; //“1”的共阳级段码
P2=0X01;//第一位数码管的位选  0000 0001     除了第一个数码管别的都是灭的

3.仿真实现

新建工程
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入代码片
#include <reg51.h>

void delay(unsigned int ms)// 0-65535
{
	while(ms--);
}

unsigned char leddata[]={ 
 
                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  //"F"
                0x89,  //"H"
                0xC7,  //"L"
                0xC8,  //"n"
                0xC1,  //"u"
                0x8C,  //"P"
                0xA3,  //"o"
                0xBF,  //"-"
                0xFF,  //熄灭
                0xFF  //自定义
 
                         };

void main()
{

	char i=0;
	while(1)
	{
		
		for(i=0;i<8;i++)
		{
			P0=leddata[i+1];//段码  因为从开始,但是i从开始,所以用i+1
			P2=0X01<<i;//位选 i=0,左移0位  0000 0001   i=1  0000 0010
			delay(10000);//为了让你看见这个数码管亮了,所以延时
		}
	
	
	}
}

显示有问题:效果不是8个一起亮
在这里插入图片描述

修改延时可行吗?

自己测?

使用不修改延时的方法

在这里插入图片描述
在这里插入图片描述

解释:

在这里插入图片描述

4.硬件实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入代码片
#include <reg51.h>

void delay(unsigned int ms)// 0-65535
{
	while(ms--);
}

//unsigned char leddata[]={ 
// 
//                0xC0,  //"0"
//                0xF9,  //"1"
//                0xA4,  //"2"
//                0xB0,  //"3"
//                0x99,  //"4"
//                0x92,  //"5"
//                0x82,  //"6"
//                0xF8,  //"7"
//                0x80,  //"8"
//                0x90,  //"9"
//                0x88,  //"A"
//                0x83,  //"B"
//                0xC6,  //"C"
//                0xA1,  //"D"
//                0x86,  //"E"
//                0x8E,  //"F"
//                0x89,  //"H"
//                0xC7,  //"L"
//                0xC8,  //"n"
//                0xC1,  //"u"
//                0x8C,  //"P"
//                0xA3,  //"o"
//                0xBF,  //"-"
//                0xFF,  //熄灭
//                0xFF  //自定义
// 
//                         };

unsigned char leddata[]={ 
 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义
 
                         };


void main()
{

	char i=0;
	while(1)
	{
		
		for(i=0;i<8;i++)
		{
			P0=leddata[i+1];//段码  1  2 
//			P2=0X01<<i;     //位选  1  2 
			P2=i<<2;        //思考
			delay(100);   //延时
			
			
			P0=0x00;        //全灭
			
		}
	
	
	}
}

三、手把手视频

3.1 软件仿真手把手视频

20250425_153426仿真数码管

3.2 硬件仿真手把手视频

20250425_160949实物数码管

效果完美

总结

讲解了数码管静态显示和动态显示的原理,并代码实现

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐