我的问题就卡在K2按键可以进行模式加一这一步和K3的模式减一这一步,我不知道到这里我应该如何将我之前编好的那八个模式导进去,因为我把它们都封装成函数,请大佬们给点提示,孩子真的写不出来了。没有任何思路
单片机源程序如下:
#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个都点亮(从低位往高位)
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED从1个亮到8个都点亮(从高位往低位)
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;//按键标志位
void keyscan();//按键检测函数
uchar i,j,a;
void delayms(uint xms);
void disp0() //状态0 全亮
{ P1=0x00;
delayms(500);
}
void disp1() //状态1 低位到高位依次亮
{
for(i=0;i<8;i++)
{
P1=table0[ i];
delayms(500);
}
P1=0xff;
}
void disp2() //状态2 LED从高位到低位依次亮
{ P1=0xff;
for(i=0;i<8;i++)
{ P1=table1[ i];
delayms(500);
}
}
void disp3() // 状态3 LED闪烁3次
{ for(i=0;i<3;i++)
{ P1=0X00;
delayms(500);
P1=0xff;
delayms(500);
}
}
void disp4() //状态4 LED自上而下逐渐点亮
{
for(i=0;i<8;i++)
{
P1=table3[ i];
delayms(100);
}
P1=0xff;
}
void disp5() //状态5 从LED全部亮到全不亮
{
for(i=0;i<9;i++)
{
P1=table5[ i];
delayms(100);
}
delayms(300);
}
void disp6() //状态6 逐步逆时针点亮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() //状态7 全灭
{ P1=0XFF;
delayms(500);
}
void main()
{
while(1)
{ keyscan();
switch(keyflag)
{case 1:disp0();break;
case 2: break;
case 3: break;
case 4:disp7();break;
}
}
}
void delayms(uint xms)
{ uint i,j;
for(i=0;i<xms;i++)
for(j=0;j<120;j++);
}
void keyscan()
{ P0=0xff;//输入先写“1”
if((P0&0x0f)!=0x0f)//检测有按键按下
{delayms(10);//延时去抖
if(key0==0)//key0按键按下
keyflag=1;//设标志位1
if(key1==0)//key1按键按下
keyflag=2;//设标志位2
if(key2==0)//key2按键按下
keyflag=3;//设标志位3
if(key3==0)//key3按键按下
keyflag=4;//设标志位4
while(!key0);
while(!key1);
while(!key2);
while(!key3);
}
}
|