动态数码管显示(proteus仿真图和程序)

该博客基于STC89C52RC单片机编程,采用四位一体动态数码管显示。介绍了共阳极和共阴极数码管的基础,前者用PNP三极管驱动,后者用NPN三极管驱动,还给出了proteus仿真电路图和C51程序代码。
该文章已生成可运行项目,

一、基础理解

  • 本博客基于STC89C52RC单片机进行编程。
  • 采用四位一体动态数码管显示。

二、共阳极数码管

1、基础介绍
  • 共阳极数码管显示需要PNP三极管进行驱动电路。
  • 三极管的集电极连接数码管的位选端,发射极连接电源,基极连接单片机进行控制。
  • 基极高电平,集电极就低电平,基极低电平,集电极就高电平,数码管亮。
  • 仿真中需要在位选端接电阻接地,否则当基极为高电平时,集电极还是高电平。
  • 实际电路中位选端可以不接电阻不接电。
2、proteus仿真电路图

共阳极数码管显示

3、C51程序
#include <reg51.h>

#define duanxuan P1        //段选接口
#define weixuan P2      //位选接口

unsigned char code wxcode[4]={0xfe,0xfd,0xfb,0xf7};
unsigned char code dxcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void DigDisplay(int num);

void main()
{
	int num = 9876;
	int t = 0;
	//每隔一段时间num-1
	while(1)
	{
		t++;
		if(t == 500)
			t = 0, num--;
		DigDisplay(num);
	}
}

//num是显示的数字
void DigDisplay(int num)
{
	unsigned char i;
	unsigned int j;
	int gewei,shiwei,baiwei,qianwei;
	
	gewei = num % 10;
	shiwei = num / 10 % 10;
	baiwei = num / 100 % 10;
	qianwei = num / 1000;
	
	for(i=0; i<4; i++)
	{
		 weixuan = wxcode[i];
		 duanxuan = 0xff;
		if(i == 3)
		{
			duanxuan = dxcode[gewei];
		}
		if(i == 2)
		{
			duanxuan = dxcode[shiwei];
		}
		if(i == 1)
		{
			duanxuan = dxcode[baiwei];
		}
		if(i == 0)
		{
			duanxuan = dxcode[qianwei];
		}
		j=10;
		while(j--);
		duanxuan=0xff;
	}
}

三、共阴极数码管

1、基础介绍
  • 共阴极数码管显示需要NPN三极管进行驱动电路。
  • 三极管的集电极连接电源,发射极连接数码管的位选端,基极连接单片机进行控制。
  • 基极高电平,发射极就高电平,基极低电平,发射极就低电平,数码管亮。
2、proteus仿真图

共阴极数码管

3、C51程序代码
#include <reg51.h>

#define duanxuan P1       
#define weixuan P2    

unsigned char code wxcode[4]={0xfe,0xfd,0xfb,0xf7};
unsigned char code dxcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void DigDisplay(int num);

void main()
{
	int num = 9876;
	int t = 0;
	while(1)
	{
		t++;
		if(t == 500)
			t = 0, num--;
		DigDisplay(num);
	}
}

void DigDisplay(int num)
{
	unsigned char i;
	unsigned int j;
	int gewei,shiwei,baiwei,qianwei;
	
	gewei = num % 10;
	shiwei = num / 10 % 10;
	baiwei = num / 100 % 10;
	qianwei = num / 1000;
	
	for(i=0; i<4; i++)
	{
		 weixuan = wxcode[i];
		 duanxuan = 0x00;
		if(i == 3)
		{
			duanxuan = dxcode[gewei];
		}
		if(i == 2)
		{
			duanxuan = dxcode[shiwei];
		}
		if(i == 1)
		{
			duanxuan = dxcode[baiwei];
		}
		if(i == 0)
		{
			duanxuan = dxcode[qianwei];
		}
		j=10;
		while(j--);
		duanxuan=0x00;
	}
}
本文章已经生成可运行项目
要在Proteus中使用数码管显示学号,可以按照以下几个步骤来进行设计: ### 1. 准备工作 首先,在Proteus软件中新建一个仿真项目,并添加所需的元器件。 #### 所需元件列表: - **7段数码管** (Common Cathode 或 Common Anode) - **单片机** (如8051、Arduino等) - **电阻** - **电源模块** ### 2. 连接电路 根据所选的单片机型号连接相应的引脚到数码管上。对于每个数码管段(a-g),需要通过限流电阻接到对应的I/O口线上;如果采用多位数码管,则还需额外考虑位选择线的控制。 ### 3. 编程设置 编写程序以驱动数码管显示出指定的内容——即你的学号数字序列。这里假设我们使用的是8051系列MCU为例: ```c #include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit DIGIT_P1 = P2^0; // 假设这是一个4位共阴极数码管的第一位 uchar code SEG_CODE[] = {0x3F,0x06,0x5B,0x4F,...}; // 数字0~9对应字符编码表 void main() { while(1) { for(uint i=0;i<length_of_studentID;i++) { DIGIT_P1 = 0; P0 = SEG_CODE[studentID[i] - '0']; delay(); // 简短延时函数防止闪烁过快 DIGIT_P1 = 1; } } } ``` 以上代码片段仅作示意用途,实际应用时你需要依据具体的硬件配置调整端口号以及完善其他细节部分。 ### 4. 调试运行 完成上述操作之后保存工程并启动仿真实验观察结果是否正确无误地呈现出预期内容。如果有任何问题可以通过修改源码或检查线路排除故障直至达到满意效果为止。 ---
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值