51单片机 单按钮启停
发布网友
发布时间:2022-05-23 21:17
我来回答
共3个回答
热心网友
时间:2024-03-09 06:45
先试着在start_keyscan() 函数里面最后加一个while(!K1),在没松开按键的时候不跳出函数。然后在主循环里面加一个while(1)把所有的代码包进去。
这样先试一下,虽然貌似和你停不下来没啥关系,但是程序会更稳定一点。。。
热心网友
时间:2024-03-09 06:45
将 while(action) 改成 if(action) 按键结尾最好再加一个 while(!K1);追问是可以暂停了,但不是彻底停止,其实程序挺复杂的,不只是让灯闪烁,是个倒计时,这样点了暂停后是停在我点的那一时刻了,帮我看看怎么全部停止,就是关电的效果。
追答在吗? 加 854091421
热心网友
时间:2024-03-09 06:46
第一:
这个地方修改一下:
void start_keyscan()
{
if(K1==0)
{
delay(10);
if(K1==0)
action=~action;
//---加一句这个:
while(K1 == 0);
}
}
第二:
这个地方修改一下:
void delay(unsigned char t)
{
unsigned char i;
for(t;t>0;t--)
for(i=2000;i>0;i--) ;
}
把上面的unsigned char i修改成unsigned int i
因为unsigned char 最大只能到 255,你的程序里用了 2000,你调用的时候用了 500,其实都没有达到,所以要改.
第三:
这个地方修改一下:
while(action)
{
led=~led;
delay(500);
led=~led;
delay(500);
}
修改成:
while(1)
{
if(action)
{
led=~led;
delay(500);
}
else
{
led = 1; //---如果你的二极管的负极接P1^0,led = 1就是关闭二极管
//---如果你的二极管负极接的是地,那么led = 0是关闭二极管
//---根据电路来选择.
}
}