遇到一个长按的问题,单片机一通电就执行第一个显示,然后通过长按进行两个模式切换,求解一下
#define key_S 20
#define key_L key_S*50
uchar fen;
uint count;
bit a=0;
sbit key3 = P1^3;
sbit led0 = P1^0;
sbit led1 = P1^7;
sbit led2 = P1^6;
void delay(unsigned int t)//延时时间 = t*9+16 us
{
while(t--);
}
void Scan_key()
{
if(!key3)
{
count++;
if(count==key_L)
{
a=~a;
if(a)
{
Write_1621(29,0x20,4); //怎么使这代码一开机就显示,然后通过长按切换这两个程序
}
else
{
Write_1621(29,0x40,4);
}
}
if(count>key_L)
count=key_L+1;
}
else
{
if(count>key_S && count<key_L)
{
if(++fen==4)
fen=0;
}
count=0;
switch(fen)
{
case 0:Write_1621(8,0x01,4);led0=1;led1=1;led2=1;break;
case 1:Write_1621(8,0x80,4);led0=0;led1=1;led2=1;break;
case 2:Write_1621(8,0x40,4);led0=1;led1=0;led2=1;break;
case 3:Write_1621(8,0x20,4);led0=1;led1=1;led2=0;break;
default:break;
}
}
delay(110);
}
void main( )
{
Init_1621(); //初始化
Port1Cfg(1,0); //端口推挽输出
Port1Cfg(1,3);
Port1Cfg(1,6);
Port1Cfg(1,7);
while(1)
{
Scan_key();
}
}
|