动态数码管

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int  u16;

sbit P24 = P2^4;
sbit P23 = P2^3;
sbit P22 = P2^2;
sbit K1 =P3^1;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(u16 y)
{
	while(y>0)
	{
		y--;
	}
}

/*
74HC138真值表
P24	P23	P22		L1	L2	L3	L4	L5	L6	L7	L8
C	B	A		Y0	Y1	Y2	Y3	Y4	Y5	Y6	Y7

L	L	L		L	H	H	H	H	H	H	H
L	L	H		H	L	H	H	H	H	H	H
L	H	L		H	H	L	H	H	H	H	H
L	H	H		H	H	H	L	H	H	H	H
H	L	L		H	H	H	H	L	H	H	H
H	L	H		H	H	H	H	H	L	H	H
H	H	L	  	H	H	H	H	H	H	L	H
H	H	H		H	H	H	H	H	H	H	L
*/

void	display(void)
{
	u8	i;
	for(i=0;i<8;i++)
	{
		P0 = 0;			//消影

		/*
		//位的选择,if语句方式
		if(i==0){P24=0;P23=0;P22=0;}
		else if(i==1){P24=0;P23=0;P22=1;}
		else if(i==2){P24=0;P23=1;P22=0;}
		else if(i==3){P24=0;P23=1;P22=1;}
		else if(i==4){P24=1;P23=0;P22=0;}
		else if(i==5){P24=1;P23=0;P22=1;}
		else if(i==6){P24=1;P23=1;P22=0;}
		else if(i==7){P24=1;P23=1;P22=1;}
		*/

		/*
		//位的选择,switch语句方式
		switch(i)
		{
			case 0:P24=0;P23=0;P22=0;break;
			case 1:P24=0;P23=0;P22=1;break;
			case 2:P24=0;P23=1;P22=0;break;
			case 3:P24=0;P23=1;P22=1;break;
			case 4:P24=1;P23=0;P22=0;break;
			case 5:P24=1;P23=0;P22=1;break;
			case 6:P24=1;P23=1;P22=0;break;
			case 7:P24=1;P23=1;P22=1;break;
		}*/
		if(i==0){P2 = 0;}
		else{P2+=4;}
		

		P0 = smgduan[i];//显示数字
		delay(25);
	}
}

void	display1(u8 com8,u8 com7,u8 com6,u8 com5,u8 com4,u8 com3,u8 com2,u8 com1)
{
	 P0=0;P24=0;P23=0;P22=0;P0=smgduan[com1];delay(25);

	 P0=0;P24=0;P23=0;P22=1;P0=smgduan[com2];delay(25);

	 P0=0;P24=0;P23=1;P22=0;P0=smgduan[com3];delay(25);

	 P0=0;P24=0;P23=1;P22=1;P0=smgduan[com4];delay(25);

	 P0=0;P24=1;P23=0;P22=0;P0=smgduan[com5];delay(25);

	 P0=0;P24=1;P23=0;P22=1;P0=smgduan[com6];delay(25);

	 P0=0;P24=1;P23=1;P22=0;P0=smgduan[com7];delay(25);

	 P0=0;P24=1;P23=1;P22=1;P0=smgduan[com8];delay(25);
}


u8	keyscan(void)
{
	if(K1==0)
	{
		delay(250);
		if(K1==0)
		{
			while(K1==0){}
			delay(250);
			return(1);
		}
	}
	return(0);	
}


void main( )
{
	u8	k1;
	u8	shuzi=0;

	while(1)
	{	
		k1=keyscan();
		if(k1==1)
		{
			shuzi++;
			if(shuzi>15){shuzi=0;}
		}
		display1(shuzi,shuzi,shuzi,shuzi,shuzi,shuzi,shuzi,shuzi);
	}
}

你可能感兴趣的:(动态数码管)