標(biāo)題: 去掉while(1)循環(huán)后就只能按住鍵盤才能使LED發(fā)光 走過路過的大哥幫忙看看 [打印本頁]

作者: qiran1818    時(shí)間: 2017-4-23 18:35
標(biāo)題: 去掉while(1)循環(huán)后就只能按住鍵盤才能使LED發(fā)光 走過路過的大哥幫忙看看
為什么去掉while(1)循環(huán)后就只能按住鍵盤才能使LED發(fā)光,松手后就熄滅了。#include <reg52.h>
#define uint unsigned int
sbit key=P3^1;     //獨(dú)立鍵盤
sbit led=P2^0;      //led
void delay(uint z)  //延時(shí)函數(shù)
{
while(z--);


}
void main()
{
if(key==0)   //消抖
{
delay(1000);    //延時(shí)
     if(key==0)
         {
          led=~led;   //點(diǎn)亮led
         }
  }
while(!key);   //松手消抖
}


/*void main()
{
  while(1)
{
   k1();
}
} */





作者: dzbj    時(shí)間: 2017-4-23 20:47
本帖最后由 dzbj 于 2017-4-23 20:49 編輯

拷貝回去試試這樣行不行

#include <reg52.h>
#define uint unsigned int

sbit key=P3^1;     //獨(dú)立鍵盤
sbit led=P2^0;      //led

void delay(uint z)  //延時(shí)函數(shù)
{
        while(z--);
}

void main()
{
        while(1)
        {
                if(key==0)   //消抖
                {
                        delay(1000);    //延時(shí)
                        if(key==0)
                        {
                                while(!key);   //松手消抖
                                led=1;   //點(diǎn)亮led(如果你是灌電流 這里就應(yīng)該是0才能亮)
                        }
                }
        }
}
作者: 索拉卡    時(shí)間: 2017-4-23 20:53
我來看看 新手
作者: Herscon    時(shí)間: 2017-4-23 21:02
你那個(gè)程序就像遙控器的按鈕,檢測(cè)到放開才就會(huì)中斷
作者: qiran1818    時(shí)間: 2017-4-23 21:20
Herscon 發(fā)表于 2017-4-23 21:02
你那個(gè)程序就像遙控器的按鈕,檢測(cè)到放開才就會(huì)中斷

但是為什么把這個(gè)K1()這個(gè)函數(shù)放到while(1)中就算松手也會(huì)保持發(fā)光,講道理while(1)中如果沒有進(jìn)行第二次按鍵,也不會(huì)觸發(fā)K1()這個(gè)子函數(shù)
作者: qiran1818    時(shí)間: 2017-4-23 21:22
dzbj 發(fā)表于 2017-4-23 20:47
拷貝回去試試這樣行不行

#include

我的意思是在去掉while(1)這個(gè)循環(huán)時(shí)松手后led會(huì)熄滅,但是把K1()這個(gè)子函數(shù)放到while(1)中就算松手也不會(huì)熄滅。實(shí)在想不明白
作者: dzbj    時(shí)間: 2017-4-23 21:39
qiran1818 發(fā)表于 2017-4-23 21:20
但是為什么把這個(gè)K1()這個(gè)函數(shù)放到while(1)中就算松手也會(huì)保持發(fā)光,講道理while(1)中如果沒有進(jìn)行 ...

那你沒寫全啊 K1這個(gè)函數(shù)跟哪呢 根本沒看見啊
作者: fengniaoyan    時(shí)間: 2017-4-23 22:20
遇同問題
作者: 天國(guó)    時(shí)間: 2017-4-24 08:28
可能是延時(shí)消抖的問題,在延時(shí)消抖中,檢測(cè)不到按鍵狀態(tài)
作者: imxuheng    時(shí)間: 2017-4-24 15:58
1樓正解,關(guān)鍵是 while(!key);   //松手消抖
作者: 桂木桂馬    時(shí)間: 2017-4-24 16:40
主程序沒有while(1)是不完整的,那樣程序就只會(huì)執(zhí)行一次,必須要一個(gè)while(1)
作者: 51Lovers    時(shí)間: 2017-4-24 19:55
主程序只執(zhí)行了一遍,LED不會(huì)反轉(zhuǎn),把MAIN()中的代碼寫到while(1){    }中
作者: 碎碎念    時(shí)間: 2017-4-25 14:59
主程序沒有while(1),那樣程序就只會(huì)走一次,打多程序都要while(1)





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1