51静态数码管


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

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

//--声明全局函数--//
void Delay10ms(unsigned int c);   //误差 0us

//--定义全局变量--//
//RAM,ROM
unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
                                 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//共阴极数码管的段选code
 
//0~F段码
//0:0011_1111 
/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{
	unsigned char i = 0;

	while(1)
	{
		GPIO_DIG = ~DIG_CODE[i]; //共阳极数码管
		i++;
		if(i == 16)
		{
			i = 0;
		}
		Delay10ms(50);
	}				
}

/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能		   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

	//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
	{
		for (b=38;b>0;b--)
		{
			for (a=130;a>0;a--);
		}          
	}       
}