1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6696|回復(fù): 20
收起左側(cè)

單片機(jī)怎么實(shí)現(xiàn)獨(dú)立按鍵長(zhǎng)按和短按的不同效果

  [復(fù)制鏈接]
ID:672615 發(fā)表于 2020-2-27 11:10 | 顯示全部樓層 |閱讀模式
我想讓k1長(zhǎng)按0.2s后led發(fā)光,長(zhǎng)按2s后熄滅,為什么下面這個(gè)代碼實(shí)現(xiàn)不了這個(gè)功能


單片機(jī)源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i;
sbit k1=P3^1;
sbit led=P2^1;



void init()
{
        TMOD=0X01;
        TH0=(65536-10000)/256;                                        //10ms
        TL0=(65536-10000)%256;
        EA=1;
        ET0=1;
                TR0=1;
}




void main()
{        
        init();
        while(1)
        {
                while(k1==1)
                {
                        i=0;
                        led=1;
                }
                while(k1==0)
                {
                        if(200>i>20)
                        {
                                led=0;
                        }
                        if(i>=200)
                        {
                                led=1;
                        }
                }
        }  
}

void time() interrupt 1
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        i++;

               
}

回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2020-2-27 13:50 | 顯示全部樓層
把中斷里的  i++; 剪貼到  if(200>i>20) 之前試試。
回復(fù)

使用道具 舉報(bào)

ID:158375 發(fā)表于 2020-2-27 14:04 | 顯示全部樓層
程序結(jié)構(gòu)不合理。
關(guān)鍵是:按鍵查詢時(shí)沒(méi)有消除抖動(dòng)的處理。
......
回復(fù)

使用道具 舉報(bào)

ID:170318 發(fā)表于 2020-2-27 14:53 | 顯示全部樓層
k1按下后,啟動(dòng)一個(gè)計(jì)數(shù)器,長(zhǎng)按和短按時(shí)計(jì)數(shù)器出來(lái)不同的數(shù)字,啟動(dòng)相應(yīng)的執(zhí)行程序
回復(fù)

使用道具 舉報(bào)

ID:672615 發(fā)表于 2020-2-27 15:16 | 顯示全部樓層
man1234567 發(fā)表于 2020-2-27 13:50
把中斷里的  i++; 剪貼到  if(200>i>20) 之前試試。

不行啊
回復(fù)

使用道具 舉報(bào)

ID:672615 發(fā)表于 2020-2-27 15:27 | 顯示全部樓層
笨笨兔 發(fā)表于 2020-2-27 14:04
程序結(jié)構(gòu)不合理。
關(guān)鍵是:按鍵查詢時(shí)沒(méi)有消除抖動(dòng)的處理。
......

我加了消抖還是不行啊
回復(fù)

使用道具 舉報(bào)

ID:679425 發(fā)表于 2020-2-27 16:32 | 顯示全部樓層
加了消抖還是不行?那等你解決了,不要忘了貼上啊
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2020-2-27 16:59 | 顯示全部樓層
修改了一下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i;
sbit k1=P3^1;
sbit led=P2^1;

sbit led0=P2^0;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;

sbit led7=P2^7;


void init()
{
                TMOD=0X01;
                TH0=(65536-10000)/256;                                        //10ms
                TL0=(65536-10000)%256;
                EA=1;
                ET0=1;
                TR0=1;
}

void main()
{        
        init();
        while(1)
        {
                if(k1==1)
                {
                        i=0;
                        led=1;
                }
                if(k1==0)
                {
                        if(i < 100)//&&(i!=0)
                        {
                                led=0;
                        }
                        else
                        {
                                led=1;
                        }
                }
        }  
}

void time() interrupt 1
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
       
        led7=~led7;
        i++;
}

回復(fù)

使用道具 舉報(bào)

ID:558309 發(fā)表于 2020-2-27 18:23 | 顯示全部樓層
加一個(gè)定時(shí)判斷啊,先檢測(cè)到按鍵按下定時(shí)器計(jì)時(shí),200ms后在判斷一次,如果按鍵狀態(tài)還是按下就點(diǎn)燈,然后2000ms加一次判斷,如果按鍵狀態(tài)不變,滅燈,反正就是只要按鍵按下了,就做兩次判斷
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-2-27 18:36 | 顯示全部樓層
在你的程序基礎(chǔ)上改的按鍵長(zhǎng)短按LED開(kāi)關(guān)
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint i;
  5. sbit k1=P3^1;
  6. sbit led=P2^1;

  7. void init()
  8. {
  9.         TMOD=0X01;
  10.         TH0=(65536-10000)/256;//10ms
  11.         TL0=(65536-10000)%256;
  12.         EA=1;
  13.         ET0=1;
  14.         TR0=1;
  15. }

  16. void main()
  17. {        
  18.         init();
  19.         while(1);  
  20. }

  21. void time() interrupt 1
  22. {
  23.         TH0=(65536-10000)/256;
  24.         TL0=(65536-10000)%256;
  25.         if(!k1)   
  26.         {  
  27.                 if(i<200)
  28.                         i++;
  29.                 if(i>=200)                                //長(zhǎng)按2秒以上
  30.                         led=1;
  31.         }  
  32.         else
  33.         {  
  34.                 if(i>20 && i<200)                //短按0.2~2秒
  35.                         led=0;
  36.                 i=0;
  37.         }
  38. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:313294 發(fā)表于 2020-2-27 19:02 | 顯示全部樓層
給你分析一下哈,假如按鍵按下為0,led=0時(shí)點(diǎn)亮:按下后key后led直接先是無(wú)反應(yīng),i加到20后點(diǎn)亮,此時(shí)不松開(kāi)等到i加到200,led熄滅。如果一直不松,i值將會(huì)溢出,
回復(fù)

使用道具 舉報(bào)

ID:313294 發(fā)表于 2020-2-27 19:07 | 顯示全部樓層
按你說(shuō)的你這個(gè)就是按下后不松,0.2秒后點(diǎn)亮,持續(xù)不松,2S后熄滅
問(wèn)題1:長(zhǎng)時(shí)間按住i會(huì)溢出
問(wèn)題2:你的這兩個(gè)動(dòng)作都要建立在不松手的前提下,如果松開(kāi),無(wú)論之前任何狀態(tài),都將變成熄滅
總結(jié):邏輯不對(duì),程序不合理,while里面再套倆while,看著很別扭,推薦switch case了解一下
回復(fù)

使用道具 舉報(bào)

ID:698938 發(fā)表于 2020-2-27 19:39 | 顯示全部樓層
k1按下后,啟動(dòng)一個(gè)計(jì)數(shù)器,長(zhǎng)按和短按時(shí)計(jì)數(shù)器出來(lái)不同的數(shù)字,啟動(dòng)相應(yīng)的執(zhí)行程序
回復(fù)

使用道具 舉報(bào)

ID:693716 發(fā)表于 2020-2-27 20:54 | 顯示全部樓層
試試改下代碼

試試改下代碼

試試改下代碼
回復(fù)

使用道具 舉報(bào)

ID:693716 發(fā)表于 2020-2-27 20:56 | 顯示全部樓層
回復(fù)慢了,回來(lái)再看多出老多的答案,壇子里面高手多呀,祝愿論壇越來(lái)越好
回復(fù)

使用道具 舉報(bào)

ID:465279 發(fā)表于 2020-3-7 12:32 | 顯示全部樓層
最近也在學(xué)習(xí)按鍵這塊就進(jìn)來(lái)看了,題主要的應(yīng)該不是手一直按著按鍵吧,如果是這樣這個(gè)實(shí)際用的地方并不多。我理解題主要的應(yīng)該是短按LED亮、長(zhǎng)按滅,看回復(fù)多不能實(shí)現(xiàn)這樣功能。
回復(fù)

使用道具 舉報(bào)

ID:468535 發(fā)表于 2020-3-7 13:30 來(lái)自觸屏版 | 顯示全部樓層
按一次去抖然后按下啟動(dòng)計(jì)數(shù)器,松開(kāi)取值計(jì)數(shù)器,以此數(shù)值判斷并執(zhí)行相應(yīng)操作
回復(fù)

使用道具 舉報(bào)

ID:468535 發(fā)表于 2020-3-7 13:33 來(lái)自觸屏版 | 顯示全部樓層
注意按鍵處理請(qǐng)?jiān)诎存I松開(kāi)時(shí)進(jìn)行。
回復(fù)

使用道具 舉報(bào)

ID:624781 發(fā)表于 2020-3-31 12:45 | 顯示全部樓層
樓主改好代碼了嗎  能貼一下嗎
回復(fù)

使用道具 舉報(bào)

ID:624781 發(fā)表于 2020-3-31 12:45 | 顯示全部樓層
;樓主完善好代碼了嗎  麻煩貼一下參考
回復(fù)

使用道具 舉報(bào)

ID:718310 發(fā)表于 2020-3-31 22:18 來(lái)自觸屏版 | 顯示全部樓層
用一個(gè)按鍵檢測(cè)函數(shù)就可以
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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