久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7738|回復: 11
收起左側

關于單片機按鍵控制小燈,一個按鍵如何控制多個程序?

  [復制鏈接]
ID:421426 發表于 2019-1-1 15:11 | 顯示全部樓層 |閱讀模式
想實現一個按鍵控制多個程序應該怎么辦   每按下一次  更換一個程序   但是用的同一個按鍵
回復

使用道具 舉報

ID:451904 發表于 2019-1-1 16:09 來自手機 | 顯示全部樓層
可以定義一個變量,按鍵按下去后變量加一,然后后面寫if語句,當變量為0時執行什么程序,當變量為1時執行什么程序,以此類推,這樣就可以用一個按鍵更換程序了
回復

使用道具 舉報

ID:459120 發表于 2019-1-1 16:19 | 顯示全部樓層
可以使用中斷嵌套
回復

使用道具 舉報

ID:164602 發表于 2019-1-1 16:25 | 顯示全部樓層
可以嘛——用switch語句。
按鍵只計數,再通過switch語句選擇不同的函數,就可以了。
例如:
                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)         //位選,選擇點亮的數碼管,
                {
                        case(0):
                                ONE(); break;
                        case(1):
                                TWO(); break;
                        case(2):
                                ......; break;
                        case(3):
                                ......; break;
                        case(4):
                                ......; break;
                        case(5):
                                ......; break;
                        }
回復

使用道具 舉報

ID:357520 發表于 2019-1-1 16:40 | 顯示全部樓層
創建標志位,一個值對應一個程序
回復

使用道具 舉報

ID:459397 發表于 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)//延時
{
for(time; time>0; time--)
{
TMOD |= 0x01;
TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1; //啟動計數器0
while(TF0!=1);//計數溢出
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;
}
}
}
回復

使用道具 舉報

ID:459381 發表于 2019-1-1 17:05 | 顯示全部樓層
控制多個程序  首先程序是你自己寫的   執行完一個動作倒是可以進行下一個  但是按鈕就是個開關而已   所以按鍵切換不了程序   程序簡單或復雜自己寫入
回復

使用道具 舉報

ID:94031 發表于 2019-1-1 17:25 | 顯示全部樓層
可以設個標記,按一下標記+1,標記數不變后,執行標記數對應的程序。
回復

使用道具 舉報

ID:356526 發表于 2019-1-1 17:50 | 顯示全部樓層
定義一個變量,每按一次按鍵變量自加1,然后判斷變量的值,根據變量的值跳轉程序,當變量自增到一定的值就重新給變量賦值1,希望能幫到你
回復

使用道具 舉報

ID:421426 發表于 2019-1-3 14:41 | 顯示全部樓層
sadwdawdasd 發表于 2019-1-1 16:59
#include
#define uchar unsigned char
sbit key = P1^0;

但是怎樣才可以將程序快速的跳出延時函數呢    我想用break  但是應該怎么加呢
回復

使用道具 舉報

ID:460873 發表于 2019-1-3 15:36 來自手機 | 顯示全部樓層
#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; } } }
回復

使用道具 舉報

ID:259017 發表于 2019-1-3 19:10 | 顯示全部樓層
可以使用狀態機
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲第1页 | 国产成年人小视频 | 影音先锋中文字幕在线观看 | 亚洲精品久 | 欧美黑人又粗大 | 91超碰在线观看 | 香蕉国产在线视频 | 一级片在线视频 | 一区二区三区国产精品 | 国产日韩欧美一区 | 午夜免费在线 | 亚洲成人国产精品 | www.天天操 | 精品国产一区二区在线 | av国产精品毛片一区二区小说 | av中文字幕在线播放 | 一区二区三区精品在线视频 | 人人看人人草 | 韩国理论电影在线 | 天天干狠狠 | 天天夜夜操 | 依人成人 | 日韩精品 电影一区 亚洲 | 亚洲国产成人精品女人久久久野战 | 日韩淫片免费看 | 国产精品日本一区二区在线播放 | 久久er99热精品一区二区 | 18gay男同69亚洲网站 | 剑来高清在线观看 | 成人在线观看网站 | 一区二区免费在线视频 | 日韩美女爱爱 | 国产一级免费视频 | av中文在线播放 | 国产精品一区二 | 91久色| 国产毛片久久久久久久久春天 | 二区久久 | 欧美一区二区小视频 | 国产精品揄拍一区二区久久国内亚洲精 | 欧产日产国产精品99 |