51单片机之动态数码管的实现

本文介绍了一种采用发光管余晖和人眼视觉暂留效应实现的动态数码管显示方法。通过138译码器控制数码管的段选线,并利用循环方式对每位数码管进行操作。文章还提供了具体的C语言实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么是动态的?

1.采用了发光管的余晖和人眼的视觉暂留效应,使人看到好像各位数码管都在同时显示

2.特点:

1.同样是利用了138译码器对高低电平进行操作

2. 动态显示将所有的数码管的段选线并联,采用循环的方式对每一位进行操作

3.关于138译码器

输出高低电频是有着一定规律的

如果是110(LSA,LSB,LSC),则为L3为低电平;(反向二进制)

同时,要注意看真值表(X为任意值,L为低电平,H为高电平)


4.关于怎样实现动态的具体操作

1.使用数组来时数码管实现输出数字

2.使用for循环来时函数进行循环操作

3.使用switch case函数实现不同字段的选择

4.同时使用delay()函数和最后对P0值刷新进行消影处理

#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;

//138译码器
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//书写子函数
void delay(u16 i)
{
	while(i--);
}
void Digdisplay()	//显示0到7
{
   u8 i;
   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;
		
		}
		//发送字码
		P0=smgduan[i];
		//延时
	 	delay(100);
		//进行消影处理,防止重影
		P0=0X00;
		
		 }
   }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值