/*----------------------------------------------------------------
程序功能：8个LED灯逐个增加点亮，同时第一位数码管显示LED点亮个数。
------------------------------------------------------------------*/

#include<reg52.h>  //包含52系列单片机头文件
#define uchar unsigned char   
#define uint unsigned int
sbit dula=P2^6;  //U1锁存器的锁存端位定义
sbit wela=P2^7;  //U2锁存器的锁存端位定义
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71,0x00};  //数码管段选值编码
uint i,j,k,x;  //声明全局变量i,j,k,x

void main()   //主函数
{	
	P0=0xfe;    //P0口给数码管送入位选信号
	wela=1;     //打开U2锁存端，让0Xfe通过
	wela=0;     //关闭U2锁存端，使0Xfe保持在U2输出端上,作为数码管位选
	while(1)    //while大循环语句，使内部循环体始终在反复运行
	{
		P1=0xFF;  //让全部灯熄灭
		P0=0x3f;  //让数码管显示"0" 
		dula=1;      //打开U1锁存端,让段选值通过
		for(i=0;i<50000;i++);  //延时
		for(k=0;k<8;k++)  
		{
			x=P1;
			P1=x&(~(1<<j++));  //流水灯一个个点亮
			P0=table[j];       //数码管显示LED点亮个数
			for(i=0;i<50000;i++);  //延时
		}
		if(k==8)
		{
			j=0;
			k=0;
		}
	}	
}

