|
程序修改可以了,不過效率太低了,要用定時器才行。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key0=P0^0;
sbit key1=P0^1;
sbit key2=P0^2;
sbit key3=P0^3;
uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED從低位往高位移
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED從高位往低位移
uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED從1個亮到8個都點(diǎn)亮(從低位往高位)
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED從1個亮到8個都點(diǎn)亮(從高位往低位)
uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED從8個全亮到一個都不亮(從低位往高位)
uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED從8個全亮到一個都不亮(從高位往低位)
uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};//LED從低位往高位移(最低位始終為0)
uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};//LED從高位往低位移(最高位始終為0)
uchar keyflag=0;//按鍵標(biāo)志位
void keyscan();//按鍵檢測函數(shù)
uchar i,j,a;
void delayms(uint xms);
void disp0() //狀態(tài)0 全亮
{
P1=0x00;
delayms(500);
}
void disp1() //狀態(tài)1 低位到高位依次亮
{
P1=0xff;
for(i=0;i<8;i++)
{
P1=table0[i];
delayms(500);
}
}
void disp2() //狀態(tài)2 LED從高位到低位依次亮
{
P1=0xff;
for(i=0;i<8;i++)
{
P1=table1[i];
delayms(500);
}
}
void disp3() // 狀態(tài)3 LED閃爍3次
{
for(i=0;i<3;i++)
{
P1=0X00;
delayms(500);
P1=0xff;
delayms(500);
}
}
void disp4() //狀態(tài)4 LED自上而下逐漸點(diǎn)亮
{
for(i=0;i<8;i++)
{
P1=table3[ i];
delayms(100);
}
P1=0xff;
}
void disp5() //狀態(tài)5 從LED全部亮到全不亮
{
for(i=0;i<9;i++)
{
P1=table5[ i];
delayms(100);
}
delayms(300);
}
void disp6() //狀態(tài)6 逐步逆時針點(diǎn)亮P1的LED,熄滅
{
P1=0xff;
for(j=0;j<2;j++)
{
for(i=0;i<8;i++)
{
P1=table2[ i];
delayms(100);
}
P1=0xff;
}
}
void disp7() //狀態(tài)7 全滅
{ P1=0XFF;
delayms(500);
}
void main()
{
while(1)
{
keyscan();
switch(keyflag)
{
case 1:disp0();break;
case 2:disp1();break;
case 3:disp2();break;
case 4:disp3();break;
case 5:disp4();break;
case 6:disp5();break;
case 7:disp6();break;
case 8:disp7();break;
}
}
}
void delayms(uint xms)
{ uint i,j;
for(i=0;i<xms;i++)
for(j=0;j<120;j++);
}
void keyscan()
{
if((P0&0x0f)!=0x0f)//檢測有按鍵按下
{
delayms(10);//延時去抖
if(key0==0)//key0按鍵按下
keyflag=1;
if(key1==0 && keyflag<7)//key1按鍵按下
keyflag++;//設(shè)標(biāo)志位2
if(key2==0 && keyflag>2)//key2按鍵按下
keyflag--;//設(shè)標(biāo)志位3
if(key3==0)//key3按鍵按下
keyflag=8;//設(shè)標(biāo)志位4
while(!key0);
while(!key1);
while(!key2);
while(!key3);
}
}
|
|