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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9626|回復: 8
打印 上一主題 下一主題
收起左側

大家好,我現在想要實現同時按下兩個按鍵在執行一個動作,不知怎么寫了,求大神幫....

[復制鏈接]
跳轉到指定樓層
樓主



-----------------------------------------------------------------------------------------------------------------------------------
#include "reg51.h"          //頭文件
//=======================聲明區=================================

typedef unsigned char u8;     //    使用“u8”代替unsigned char;無符號字符
typedef unsigned int u16;     //    使用“u16”代替unsigned int;無符號整形

sbit open=P0^0;         //馬達開
sbit suoshe=P0^1;        //鎖舌開
sbit lock=P0^2;        //馬達鎖

sbit gb1=P0^6;        //關閉通道1    通道1為開鎖
sbit gb2=P0^7;        //關閉通道2    通道2為關鎖
#define gbtd1 delay(100),gb1=0,delay(100),gb1=1
#define gbtd2 delay(100),gb2=0,delay(100),gb2=1                        
                    
                    
//==============傳感器輸入端 按鍵======================================
sbit k1=P2^0;            
sbit k2=P2^1;            
sbit k3=P2^2;            
sbit k4=P2^3;
/******************************************************************
我現在要同時按下k1、k2執行“kaisuo”。同時按下k2、k3執行“guansuo“
*******************************************************************/        
#define kaisuo k1
#define guansuo k2                        
                    
sbit op=P2^7;            //門鎖已開的傳感器,低電平有效使用k8代替
sbit clo_door=P2^6;        //門已關到位的傳感器,低電平有效,使用k7代替
sbit loc=P2^5;            //門已鎖住的傳感器,低電平有效,使用k6代替

void delay(u16 i);
void keypros();   

/*==============主程序==========================================================*/

void main()
{
   
        P0=0xc0;  //LED:共陰0關閉輸出,共陽1關閉輸出
        //P2=0x0f;
         while(1)
        {
             keypros();
            
        }

   
}

/*===============子程序=======================================================*/
//=======================延時函數=====
void delay(u16 i)
   {
     u16 j,k;
    for(j=0;j<i;j++)  
        for(k=0;k<200;k++);

   }

//=======================IO、按鍵端口控制==========================================
void keypros()
{
    if(kaisuo==0)
    {
         delay(30);
        //P0^6=1;
         if(kaisuo==0)
        {
            while(op==1)   
            {   
                 open=1;    //馬達開     
            }
            while(op==1) ;
            if(op==0)  //門鎖開傳感器
            {   
                delay(30);
                if(op==0)
                {   
                    delay(1);
                    open=0;            //馬達停止
                    suoshe=1;          //鎖舌打開
//                    while(k1==0) ;    //k1按下一直保持
                    delay(1000);
                    suoshe=0;
                    gbtd1;
                 }
             }
        }      
    }
    if(guansuo==0)
    {
         delay(30);
        //P0^7=1;
        if(guansuo==0)
        {
            if(clo_door==1) //==門未關閉,
            {   
              delay(300);    //delay,
              if(clo_door==1)  //==門未關閉,
              {
                gbtd2;
                }     
            }   
            if(clo_door==0)   
             {   
                delay(300);       //delay,
                if(clo_door==0)     //==0門關閉,
                {
                     if(loc==0)    //如果門已經鎖住
                      {
                        gbtd2;  //     退出,關閉通道2
                      }
                       if(loc==1)   //門鎖鎖傳感器,loc==1,
                       {   
                            lock=1;      //馬達開始鎖門
                            //while(k2==0);  //k2持續按下一直點亮led1
                            while(loc==1);
                            if(loc==0)
                            {   
                                delay(1);
                                if(loc==0)
                                {
                                    delay(100);
                                    lock=0;
                                    gbtd2;
                                }
                            }
                       }     
                }   
             }
        }
    }
}            

程序.docx

13.37 KB, 下載次數: 5

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

使用道具 舉報

沙發
ID:216625 發表于 2017-10-7 18:51 | 只看該作者
剛學51,還不熟,
回復

使用道具 舉報

板凳
ID:111634 發表于 2017-10-7 22:39 | 只看該作者
本帖最后由 zl2168 于 2017-10-7 22:42 編輯

按鍵擴展Shift功能
在計算機中,有一個<Shift>鍵,同時按下某一按鍵和<Shift>鍵時,會導致該某一按鍵的第二個鍵功能,即相當于增加了一個鍵。計算機常用此法變相擴展了鍵盤鍵的數量,單片機也可采用類似<Shift>鍵,在基本不增加耗費I/O端線的前提下,變相擴展按鍵的數量。
實例74 按鍵擴展shift功能.7z (23.73 KB, 下載次數: 14)

Proteus仿真一下,確認有效。
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。

評分

參與人數 1黑幣 +30 收起 理由
map0391 + 30 又學到了新的知識

查看全部評分

回復

使用道具 舉報

地板
ID:237726 發表于 2017-10-7 22:50 | 只看該作者
加油,相信自己
回復

使用道具 舉報

5#
ID:216625 發表于 2017-10-8 02:06 | 只看該作者
zl2168 發表于 2017-10-7 22:39
按鍵擴展Shift功能
在計算機中,有一個鍵,同時按下某一按鍵和鍵時,會導致該某一按鍵的第二個鍵功能,即 ...

首先要感謝您的解答,又學到了一種控制方法。
我之前的問題描述的不夠清楚,
這個是原始的

這個是要修改的

回復

使用道具 舉報

6#
ID:213173 發表于 2017-10-8 10:36 | 只看該作者
給你寫了一個單鍵+2鍵+3鍵任意組合例程,你根據需求刪改。
#include <AT89X52.H>
#define uint unsigned int
#define uchar unsigned char
#define PX (P2&0x0f)        //P2低4位映射到PX低4位
uint key;                                //鍵值變量

/**************按鍵掃描*******************/
void key_scan()
{
        static uint cnt;                //計數延時
        static bit sign=0;        //按鍵自鎖標志
        if(PX!=0x0f)                        //有鍵按下
        {
                cnt++;
                if(cnt>=1000)                //延時消抖,消除多鍵同步差
                {
                        cnt=1000;                //防止溢出
                        if(sign==0)
                        {
                                sign=1;                //防止鍵未抬起重復讀鍵
                                switch(PX)        //4個鍵去除0f共15種組合,根據實際要求取舍
                                {
                                        case 0x0e: key= 1; break;
                                        case 0x0d: key= 2; break;
                                        case 0x0c: key= 3; break;
                                        case 0x0b: key= 4; break;
                                        case 0x0a: key= 5; break;
                                        case 0x09: key= 6; break;
                                        case 0x08: key= 7; break;
                                        case 0x07: key= 8; break;
                                        case 0x06: key= 9; break;
                                        case 0x05: key=10; break;
                                        case 0x04: key=11; break;
                                        case 0x03: key=12; break;
                                        case 0x02: key=13; break;
                                        case 0x01: key=14; break;
                                        case 0x00: key=15; break;
                                }
                        }
                }
        }
        else                                 //鍵抬起
        {
                cnt=0;       
                sign=0;
        }

}
/**************按鍵服務*******************/
void key_service()
{
        switch(key)        //共15種組合,根據實際任務取舍
        {
                case 1:  P1=0xfe; break;        //LED顯示鍵值
                case 2:  P1=0xfd; break;
                case 3:  P1=0xfc; break;
                case 4:  P1=0xfb; break;
                case 5:  P1=0xfa; break;
                case 6:  P1=0xf9; break;
                case 7:  P1=0xf8; break;
                case 8:  P1=0xf7; break;
                case 9:  P1=0xf6; break;
                case 10: P1=0xf5; break;
                case 11: P1=0xf4; break;
                case 12: P1=0xf3; break;
                case 13: P1=0xf2; break;
                case 14: P1=0xf1; break;
                case 15: P1=0xef; break;
        }
}

void main()
{
        while(1)
        {
                key_scan();                                //按鍵掃描
                key_service();                        //按鍵服務
        }
}

評分

參與人數 1黑幣 +30 收起 理由
map0391 + 30

查看全部評分

回復

使用道具 舉報

7#
ID:162136 發表于 2017-10-8 10:47 | 只看該作者
if(loc==0) 這語句的意思是:如果小括號里的表達式是真的( loc等于0 )就執行下面大括號里的語句,否則跳過
{}
想加判斷條件可以寫如下
if((loc==0) && (abc==0)) 這意思是loc和abc都等于0時,才執行后面大括號里的語句,否則跳過
{}
&& 是一個運算符,有興趣的話查查看,C語言還有其實的運算符,對編程序很有用。

評分

參與人數 1黑幣 +30 收起 理由
map0391 + 30 很給力!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线午夜| 国产精品96久久久久久 | 久久成人精品视频 | 国产黄色av电影 | 精品一区二区免费视频 | 一级毛片视频 | 欧美福利视频 | 中文字幕一区二区三区乱码图片 | av黄色在线| 99精品视频免费观看 | 国产a爽一区二区久久久 | 国产女人与拘做视频免费 | 成人性视频免费网站 | 亚洲精品一区在线 | 日韩av免费在线电影 | 国产成人福利视频在线观看 | 一区二区三区亚洲精品国 | 欧美精品一区三区 | 午夜电影福利 | 天天草视频 | 高清视频一区 | 欧美午夜一区 | 视频一区中文字幕 | 美美女高清毛片视频免费观看 | 日韩在线视频一区 | 日韩中文字幕一区 | 亚洲自拍偷拍视频 | 亚洲国产精品久久 | 成人在线视 | 色呦呦在线| 午夜av电影 | 日韩成人在线视频 | 国产成人精品a视频 | 亚洲激情综合网 | 国产精品一区二区三区在线播放 | 色欧美综合 | 久久精品一级 | 欧美精品一区二区在线观看 | 亚洲视频免费在线看 | 99re国产| 国产精品欧美一区二区三区不卡 |