找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4508|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

去掉while(1)循環(huán)后就只能按住鍵盤才能使LED發(fā)光 走過路過的大哥幫忙看看

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:156852 發(fā)表于 2017-4-23 18:35 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
為什么去掉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ù)
{
while(z--);


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


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




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:47286 發(fā)表于 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ù)
{
        while(z--);
}

void main()
{
        while(1)
        {
                if(key==0)   //消抖
                {
                        delay(1000);    //延時
                        if(key==0)
                        {
                                while(!key);   //松手消抖
                                led=1;   //點(diǎn)亮led(如果你是灌電流 這里就應(yīng)該是0才能亮)
                        }
                }
        }
}
回復(fù)

使用道具 舉報

板凳
ID:192838 發(fā)表于 2017-4-23 20:53 | 只看該作者
我來看看 新手
回復(fù)

使用道具 舉報

地板
ID:192841 發(fā)表于 2017-4-23 21:02 | 只看該作者
你那個程序就像遙控器的按鈕,檢測到放開才就會中斷
回復(fù)

使用道具 舉報

5#
ID:156852 發(fā)表于 2017-4-23 21:20 | 只看該作者
Herscon 發(fā)表于 2017-4-23 21:02
你那個程序就像遙控器的按鈕,檢測到放開才就會中斷

但是為什么把這個K1()這個函數(shù)放到while(1)中就算松手也會保持發(fā)光,講道理while(1)中如果沒有進(jìn)行第二次按鍵,也不會觸發(fā)K1()這個子函數(shù)
回復(fù)

使用道具 舉報

6#
ID:156852 發(fā)表于 2017-4-23 21:22 | 只看該作者
dzbj 發(fā)表于 2017-4-23 20:47
拷貝回去試試這樣行不行

#include

我的意思是在去掉while(1)這個循環(huán)時松手后led會熄滅,但是把K1()這個子函數(shù)放到while(1)中就算松手也不會熄滅。實(shí)在想不明白
回復(fù)

使用道具 舉報

7#
ID:47286 發(fā)表于 2017-4-23 21:39 | 只看該作者
qiran1818 發(fā)表于 2017-4-23 21:20
但是為什么把這個K1()這個函數(shù)放到while(1)中就算松手也會保持發(fā)光,講道理while(1)中如果沒有進(jìn)行 ...

那你沒寫全啊 K1這個函數(shù)跟哪呢 根本沒看見啊
回復(fù)

使用道具 舉報

8#
ID:192871 發(fā)表于 2017-4-23 22:20 | 只看該作者
遇同問題
回復(fù)

使用道具 舉報

9#
ID:191913 發(fā)表于 2017-4-24 08:28 | 只看該作者
可能是延時消抖的問題,在延時消抖中,檢測不到按鍵狀態(tài)
回復(fù)

使用道具 舉報

10#
ID:151348 發(fā)表于 2017-4-24 15:58 | 只看該作者
1樓正解,關(guān)鍵是 while(!key);   //松手消抖
回復(fù)

使用道具 舉報

11#
ID:192523 發(fā)表于 2017-4-24 16:40 | 只看該作者
主程序沒有while(1)是不完整的,那樣程序就只會執(zhí)行一次,必須要一個while(1)
回復(fù)

使用道具 舉報

12#
ID:187614 發(fā)表于 2017-4-24 19:55 | 只看該作者
主程序只執(zhí)行了一遍,LED不會反轉(zhuǎn),把MAIN()中的代碼寫到while(1){    }中
回復(fù)

使用道具 舉報

13#
ID:193421 發(fā)表于 2017-4-25 14:59 | 只看該作者
主程序沒有while(1),那樣程序就只會走一次,打多程序都要while(1)
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表