欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

單片機(jī)按鍵控制LED的實(shí)現(xiàn) 感謝各位大佬抽空回復(fù)

[復(fù)制鏈接]
ID:685954 發(fā)表于 2020-7-24 11:04 | 顯示全部樓層 |閱讀模式
各位大佬,請(qǐng)教一個(gè)單片機(jī)問題,如一個(gè)按鍵按一次   控制一個(gè)LED常亮,并倒計(jì)時(shí)2分鐘后熄滅,但是按鍵并未清零,下次想點(diǎn)亮LED的時(shí)候,還需要多按一次按鍵(相當(dāng)于關(guān)閉), 我想問下怎么使下次點(diǎn)亮LED時(shí)候,只需要按一次點(diǎn)亮就行,是不是需要在定時(shí)器結(jié)束時(shí)候按鍵取反下,但是按鍵不是自鎖式的,所以應(yīng)該怎么實(shí)現(xiàn)呢?感謝各位大佬抽空回復(fù)
回復(fù)

使用道具 舉報(bào)

ID:739325 發(fā)表于 2020-7-24 14:20 | 顯示全部樓層
說一下我的思路哈。首先判斷按下是否按下,按下之后產(chǎn)生一個(gè)LED標(biāo)記。若是按鍵松手則復(fù)位按鍵。那么可以通過這個(gè)按下按鍵產(chǎn)生的LED標(biāo)記去控制燈的亮滅,例如燈需要亮兩分鐘,那么在兩分鐘后將LED標(biāo)記清0即可
回復(fù)

使用道具 舉報(bào)

ID:451718 發(fā)表于 2020-7-24 14:52 | 顯示全部樓層
本帖最后由 robinsonlin 于 2020-7-24 15:18 編輯

#define K1                    P37
#define LED                    P36

unsigned long SysTick;
unsigned char KFlag;

void Delay10ms()                //@22.1184MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 1;
        j = 216;
        k = 35;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
void Timer0Init(void)                //1毫秒@22.1184MHz
{
        AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TL0 = 0x9A;                //設(shè)置定時(shí)初值
        TH0 = 0xA9;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
}

void main()
{
    K1 = 1;
    LED = 0;
    KFlag = 1;      Timer0Init() ;
   EA = 1;

    while(1)
    {
         if(K1==0 && KFlag==1)
         {
             Delay10ms();
             if(K1==0 && KFlag==1)
             {
                 T1 = SysTick;
                 KFlag = 0;
                 //LFlag = 1;
                 LED = 1;
             }
         }

         if(K1==0 && LED==1)
         {
             Delay10ms();
             if(K1==0 && LED==1)
             {            
                 LFlag = 0;
                 LED = 0;
             }
         }

         if((SysTick-T1)>=120000 && LED==1)
         {
             LED = 0;
             LFlag = 0;
         }
    }
}


void tm0_isr() interrupt 1         //中斷入口
{
        SysTick++;
}


回復(fù)

使用道具 舉報(bào)

ID:636538 發(fā)表于 2020-7-24 17:22 | 顯示全部樓層
你可以做個(gè)標(biāo)志位,當(dāng)按鍵再次按,下倒計(jì)時(shí)2分鐘就清零關(guān)閉LED,不再進(jìn)入倒計(jì)時(shí)2分鐘,再次按下點(diǎn)亮并倒計(jì)時(shí)2分鐘后熄滅
回復(fù)

使用道具 舉報(bào)

ID:454000 發(fā)表于 2020-7-24 19:00 | 顯示全部樓層
@壇子,找一些案例來練練就什么都整明白了,不要整天的想這樣想那樣又不想自己動(dòng)手敲代碼,是學(xué)不了什么東東的
回復(fù)

使用道具 舉報(bào)

ID:452950 發(fā)表于 2020-7-24 19:05 | 顯示全部樓層
LED亮的條件加一個(gè)就好了,
按鍵按下且標(biāo)志為1時(shí)LED亮2分鐘同時(shí)標(biāo)志置零,
按鍵按下且標(biāo)志為0時(shí)LED不動(dòng),標(biāo)志置一
回復(fù)

使用道具 舉報(bào)

ID:808700 發(fā)表于 2020-7-28 11:45 | 顯示全部樓層
弄個(gè)變量a=0,按一下按鍵,a+1;判斷a值,燈亮倒計(jì)時(shí),時(shí)間到了,a清0,燈滅
回復(fù)

使用道具 舉報(bào)

ID:685954 發(fā)表于 2020-7-28 14:43 | 顯示全部樓層
謝謝大家回復(fù),這個(gè)問題已經(jīng)通過標(biāo)志位解決,謝謝大家提供思路
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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