51单片机 不同按键不同功能 按键延迟
发布网友
发布时间:2022-04-24 16:33
我来回答
共2个回答
热心网友
时间:2023-04-28 14:26
/*... 你的泵2在等待延时函数里,自然按键没用啦,你要用定时器中断.. ...*/
void time_Init0()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
unsigned char gettime = 0;
unsigned char state = 0;
void time_Init0() Interrupt 0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
state = key_scan();
if(state >1) gettime++;
if( gettime >4 && state == 2 ) {state = 0; sb2 = 0; gettime = 0;}
if(gettime >15) {state = 0; jr = 0; gettime = 0;}
}
void key_scan(void)
{
unsigned char i;
if( sw == 0 )
{
delay(1000);
if( sw == 0) state = 1 ;
}
if( aj1 == 0 )
{
i++; //按键延迟
delay(500);
delay_sign = 1;
if(i >0) state = 2 ; //我这里选择不等待
}
if( aj2 == 0 )
{
i++; //按键延迟
delay(500);
if(i >0) state= 3 ; //我这里选择不等待
}
}
void main()
{
time_Init0() ;
while(1)
{
switch(state)
{
case 1:
sb1 = ~sw ;
break;
case 2:
sb2 = 1;
break;
case 3:
jr = 1;
break;
}
}
}
/*if( gettime >4 && state == 2 ) {state = 0; sb2 = 0; gettime = 0;}
if(gettime >15) {state = 0; jr = 0; gettime = 0;}*/
上面的函数你也可以放主函数里,主函数里就是时间控制不会太精准,在中断里则会干扰按键效率,你自己斟酌吧。追问谢谢,我是初学,有些东西还不懂,不过还是谢谢你。我再继续学习。
热心网友
时间:2023-04-28 14:26
你这时间有点长了,这样不要放在main里面,做定时器的吧,判断变量可以在里面切换