51单片机动态数码管应用2

数码管

动态数码管实现原理

通过位选每次只打开一个数码管,然后给段选输送显示的值,然后延时,然后只打开下一个数码管的位选,给段选输出显示的值,通过每次只打开一个数码管后,设置延时时间,然后只打开下一个数码管,由于延时速度比较快,在程序操作中,第一个数码管已经不显示了,然后去显示第二个数码管,但是在人眼看到的第一个数码管和第二个数码管同时显示出来了。

通过每次打开一个数码管,然后延时,由于延时速度比较快,但是在人的肉眼中上一次显示的数码管也显示出来了,从而实现动态扫描,但是会出现一个问题,当我打开第一个数码管显示数字0,然后当打开第二个数码管显示数字1,可能在当我打开第二个数码管显示1的时候,会有打开上一次数码管显示0的残影,所以每次打开一个数码管并且显示完成后需要进行消影,如果是共阴极数码管那么段选是高电平有效,那么消影用0x00,如果是共阳极数码管那么段选是低电平有效,那么消影用0xff.用来清除给段选输送的值,起到一个清除的作用。

2.代码

c 复制代码
#include <reg51.h>

typedef unsigned int u16;
typedef unsigned char u8;

#define SMG_A_DP_POST P0 
sbit LSA = P2^2;
sbit LSB = P2^3; 
sbit LSC = P2^4;

u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管0-F

void delay_50ms(u16 us) {
	while(us--);
}
void smg_display(void) {
	u8 i = 0;
	for (i = 0; i < 8; i++) {
		switch(i) {
			case 0: LSA = 0; LSB = 0; LSC = 0; break;
			case 1: LSA = 1; LSB = 0; LSC = 0; break;
			case 2: LSA = 0; LSB = 1; LSC = 0; break;
			case 3: LSA = 1; LSB = 1; LSC = 0; break;
			case 4: LSA = 0; LSB = 0; LSC = 1; break;
			case 5: LSA = 1; LSB = 0; LSC = 1; break;
			case 6: LSA = 0; LSB = 1; LSC = 1; break;
			case 7: LSA = 1; LSB = 1; LSC = 1; break;
		}
		SMG_A_DP_POST = gsmg_code[i];
		delay_50ms(100);
		SMG_A_DP_POST = 0X00;//消影
	}
}

void main() {
	while(1) {
		 smg_display();
	}
	
}

3.实现结果

相关推荐
NamoAmitabha1282 小时前
嵌入式开发中的定时器---deepseek
单片机·嵌入式硬件
福建佰胜张工2 小时前
深度解析 Allen-Bradley 150-B135NBDA 智能电机控制器:选型、参数与工业应用
运维·数据库·单片机·嵌入式硬件·安全·自动化
secondyoung2 小时前
Cortex-R52与TriCore详细对比
arm开发·单片机·嵌入式硬件·mcu
送外卖的工程师2 小时前
STM32仓库环境监测系统
stm32·单片机·嵌入式硬件
2501_922639583 小时前
率能半导体 SS6840单通道H桥驱动芯片:42V/7A,覆盖打印机、办公自动化、机器人、工业缝纫机四大应用场景
stm32·单片机·嵌入式硬件·硬件工程
天空'之城3 小时前
002基于 STM32 的智能灯光窗帘控制系统
stm32·单片机·毕业设计·智能家居·pwm
电子科技圈3 小时前
芯科科技2026年Tech Talks技术系列讲座再增添全新主题共探无线SoC架构演进与安全合规
科技·嵌入式硬件·mcu·物联网·安全·架构·iot
NYFEA4 小时前
跨协议桥接与高精度传感:我们的接口芯片如何连接物理世界?
嵌入式硬件
Zhao136824553915 小时前
DP4330A 与DP4363 测试对比
嵌入式硬件
辛迪聊物业数字化5 小时前
智慧社区小程序落地避坑指南:3类物业方案选型+成本测算,线上服务零翻车
大数据·嵌入式硬件·百度·系统架构