数码管进阶应用

数码管进阶应用

让8个数码管依次先单独显示0-9 ,然后在让8个数码管一起显示0-F。
同样还是在B站小蜜蜂老师那里的题,因为开发板的不一样所以显示方式也有所不同】

小蜜蜂老师单片机

我开发板实现的功能,通过138译码器来全部同时打开8个数码管的时候一直有问题,只能通过缩小延时来显示8个数码管同时亮的假象。希望各位博客大佬帮忙指正一下。在这里插入图片描述



#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 smg_duan[17]={
	0x3f,0x06,0x5b,0x4f,0x66,
	0x6d,0x7d,0x07,0x7f,0x6f,
	0x77,0x7c,0x39,0x5e,0x79,0x71};
	
void delay_smg(u16 t)
{
	while(t--);
	
}



void delay(u16 t)
{
	while(t--);
	
}


//数码管显示函数

void DigDisplay( u8 dat , u8 pos)
{
	u8 i;
	for(i=0;i<8;i++)
	{
		
			switch(pos)	 //传入pos进行数码管的选择
			{
				case(0):
					LSA=1;LSB=1;LSC=1; break;7case(1):
					LSA=0;LSB=1;LSC=1; break;//第六位
				case(2):
					LSA=1;LSB=0;LSC=1; break;//ÏÔʾµÚ5λ
				case(3):
					LSA=0;LSB=0;LSC=1; break;//ÏÔʾµÚ4λ
				case(4):
					LSA=1;LSB=1;LSC=0; break;//ÏÔʾµÚ3λ 
				case(5):
					LSA=0;LSB=1;LSC=0; break;//ÏÔʾµÚ2λ 
				case(6):
					LSA=1;LSB=0;LSC=0; break;//ÏÔʾµÚ1λ 
				case(7):
					LSA=0;LSB=0;LSC=0; break;//ÏÔʾµÚ0λ	
			}
			P0=dat;//将数码管断传入P0口
			delay(3000); //¼ä¸ôÒ»¶Îʱ¼äɨÃè	
			P0=0x00;//消影
		}
}

//最终数码管显示
void smg_result()
{
		u8 i,j,k ;
		for( i = 0;i< 8 ;i++)
		{
			for( j = 0 ; j< 10 ;j++)
			{
				DigDisplay(smg_duan[j] ,i);
				delay(200);
			}
		}
		
		delay(200);
			for( j = 0 ; j< 10 ;j++)
			{
				for( i = 0 ;i <8 ;i++)
				{
					DigDisplay(smg_duan[j] ,i);
				}
			}
}

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

每天记录学习过程,一起进步(加油)!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小殷学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值