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

QQ登錄

只需一步,快速開始

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

關(guān)于單片機(jī)按鍵控制小燈,一個(gè)按鍵如何控制多個(gè)程序?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:421426 發(fā)表于 2019-1-1 15:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
想實(shí)現(xiàn)一個(gè)按鍵控制多個(gè)程序應(yīng)該怎么辦   每按下一次  更換一個(gè)程序   但是用的同一個(gè)按鍵
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

12#
ID:259017 發(fā)表于 2019-1-3 19:10 | 只看該作者
可以使用狀態(tài)機(jī)
回復(fù)

使用道具 舉報(bào)

11#
ID:460873 發(fā)表于 2019-1-3 15:36 來自手機(jī) | 只看該作者
#include<reg52.h> #define uint unsigned int #define uchar unsigned char #define LED P0 sbit S1=P1^0; 按鍵1 void delay(uint i) { uchar x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } void main() { if(s1==0) { delay(2); if(s1==0) { LED=0; } } }
回復(fù)

使用道具 舉報(bào)

10#
ID:421426 發(fā)表于 2019-1-3 14:41 | 只看該作者
sadwdawdasd 發(fā)表于 2019-1-1 16:59
#include
#define uchar unsigned char
sbit key = P1^0;

但是怎樣才可以將程序快速的跳出延時(shí)函數(shù)呢    我想用break  但是應(yīng)該怎么加呢
回復(fù)

使用道具 舉報(bào)

9#
ID:356526 發(fā)表于 2019-1-1 17:50 | 只看該作者
定義一個(gè)變量,每按一次按鍵變量自加1,然后判斷變量的值,根據(jù)變量的值跳轉(zhuǎn)程序,當(dāng)變量自增到一定的值就重新給變量賦值1,希望能幫到你
回復(fù)

使用道具 舉報(bào)

8#
ID:94031 發(fā)表于 2019-1-1 17:25 | 只看該作者
可以設(shè)個(gè)標(biāo)記,按一下標(biāo)記+1,標(biāo)記數(shù)不變后,執(zhí)行標(biāo)記數(shù)對(duì)應(yīng)的程序。
回復(fù)

使用道具 舉報(bào)

7#
ID:459381 發(fā)表于 2019-1-1 17:05 | 只看該作者
控制多個(gè)程序  首先程序是你自己寫的   執(zhí)行完一個(gè)動(dòng)作倒是可以進(jìn)行下一個(gè)  但是按鈕就是個(gè)開關(guān)而已   所以按鍵切換不了程序   程序簡(jiǎn)單或復(fù)雜自己寫入
回復(fù)

使用道具 舉報(bào)

6#
ID:459397 發(fā)表于 2019-1-1 16:59 | 只看該作者
#include <reg51.h>
#define uchar unsigned char
sbit key = P1^0;
sbit led0 = P1^1;
sbit led1 = P1^2;
uchar count = 0;
void delayms (uchar time)//延時(shí)
{
for(time; time>0; time--)
{
TMOD |= 0x01;
TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1; //啟動(dòng)計(jì)數(shù)器0
while(TF0!=1);//計(jì)數(shù)溢出
TF0 = 0;
TR0 = 0;
}
}
void scan_key (void)
{
if (!key)
{
delayms (5);
if (!key)
{
delayms (1);
while (!key);
count++;
if (count==3)
{
count = 0;
}
}
}
}
void main (void)
{
P1 = 0xff;
while (1)
{
scan_key ();
if (count==0)
{
led0 = 1;
led1 = 1;
}
if (count==1)
{
led0 = 0;
led1 = 1;
}
if (count==2)
{
led0 = 1;
led1 = 0;
}
}
}
回復(fù)

使用道具 舉報(bào)

5#
ID:357520 發(fā)表于 2019-1-1 16:40 | 只看該作者
創(chuàng)建標(biāo)志位,一個(gè)值對(duì)應(yīng)一個(gè)程序
回復(fù)

使用道具 舉報(bào)

地板
ID:164602 發(fā)表于 2019-1-1 16:25 | 只看該作者
可以嘛——用switch語(yǔ)句。
按鍵只計(jì)數(shù),再通過switch語(yǔ)句選擇不同的函數(shù),就可以了。
例如:
                if(k1==0)//掃描鍵盤k1
                {
                        Delay10ms(1);
                        if(k1==0)
                        {
                            j++;
                            if (j>5)
                            {
                                 j=0;
                            }
                            while((i<50)&&(k1==0))
                            {
                                    Delay10ms(1);
                                    i++;
                            }
                            i=0;
                        }

                switch(j)         //位選,選擇點(diǎn)亮的數(shù)碼管,
                {
                        case(0):
                                ONE(); break;
                        case(1):
                                TWO(); break;
                        case(2):
                                ......; break;
                        case(3):
                                ......; break;
                        case(4):
                                ......; break;
                        case(5):
                                ......; break;
                        }
回復(fù)

使用道具 舉報(bào)

板凳
ID:459120 發(fā)表于 2019-1-1 16:19 | 只看該作者
可以使用中斷嵌套
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:451904 發(fā)表于 2019-1-1 16:09 來自手機(jī) | 只看該作者
可以定義一個(gè)變量,按鍵按下去后變量加一,然后后面寫if語(yǔ)句,當(dāng)變量為0時(shí)執(zhí)行什么程序,當(dāng)變量為1時(shí)執(zhí)行什么程序,以此類推,這樣就可以用一個(gè)按鍵更換程序了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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