51动态数码管


不用译码器

 /**********************51单片机学习例程************************
*  平台:Keil U4 + STC89C52
*  名称: 静态数码管试验流动显示0-F
*  编写:Tony
*  日期:2022-2-2
*   QQ : 674749794
*  晶体:12MHZ
*	 变更记录:无
******************************************************************/

#include

//--定义使用的IO口--//
#define GPIO_DIG   P0	//段选
#define GPIO_PLACE P1	//位选

//--定义全局变量--//
unsigned char code DIG_PLACE[8] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];
//用来存放要显示的8位数的值

//--声明全局函数--//
void DigDisplay(); //动态显示函数

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main(void)
{
	unsigned char i;

	for(i=0; i<8; i++)
	{
		DisplayData[i] = DIG_CODE[i];	
		//DisplayData[i] = 0xFF;
	}
	while(1)
	{
		DigDisplay();
	}				
}

/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能		   : 使用数码管显示
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void DigDisplay()
{
	unsigned char i;
	unsigned int j;

	for(i=0; i<8; i++)
	{
		GPIO_PLACE = DIG_PLACE[i];	 //发送位选
		GPIO_DIG = DisplayData[i];     //发送段码
		j = 10;						 //扫描间隔时间设定
		while(j--);	
		GPIO_DIG = 0x00;//消隐
	}
}

138译码器

 /**********************51单片机学习例程************************
*  平台:Keil U4 + STC89C52
*  名称: 静态数码管试验流动显示0-F
*  编写:Tony
*  日期:2022-2-2
*   QQ : 674749794
*  晶体:12MHZ
*	 变更记录:无
******************************************************************/

#include

//--定义使用的IO--//
#define GPIO_DIG P0

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

//--定义全局变量--//
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];
//用来存放要显示的8位数的值

//--声明全局函数--//
void DigDisplay(); //动态显示函数
/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DisplayData[i]=DIG_CODE[i];	
	}
	while(1)
	{
		DigDisplay();
	}				
}
/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能		   : 使用数码管显示
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void DigDisplay()
{
	unsigned char i;
	unsigned int j;
	for(i=0;i<8;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=0;LSB=0;LSC=0; break;//显示第0位
			case(1):
				LSA=1;LSB=0;LSC=0; break;//显示第1位
			case(2):
				LSA=0;LSB=1;LSC=0; break;//显示第2位
			case(3):
				LSA=1;LSB=1;LSC=0; break;//显示第3位
			case(4):
				LSA=0;LSB=0;LSC=1; break;//显示第4位
			case(5):
				LSA=1;LSB=0;LSC=1; break;//显示第5位
			case(6):
				LSA=0;LSB=1;LSC=1; break;//显示第6位
			case(7):
				LSA=1;LSB=1;LSC=1; break;//显示第7位	
		}
		GPIO_DIG=DisplayData[i];//发送段码
		j=10;						 //扫描间隔时间设定
		while(j--);	
		GPIO_DIG=0x00;//消隐
	}
}