其他分享
首页 > 其他分享> > 2021-04-16

2021-04-16

作者:互联网

数码管进阶应用

让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;第7位
				case(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();
	}
	
}

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

标签:case,LSB,LSC,04,16,LSA,break,数码管,2021
来源: https://blog.csdn.net/boybs/article/details/115771149