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

標(biāo)題: 大家好,我現(xiàn)在想要實(shí)現(xiàn)同時(shí)按下兩個(gè)按鍵在執(zhí)行一個(gè)動(dòng)作,不知怎么寫了,求大神幫.... [打印本頁]

作者: map0391    時(shí)間: 2017-10-7 18:21
標(biāo)題: 大家好,我現(xiàn)在想要實(shí)現(xiàn)同時(shí)按下兩個(gè)按鍵在執(zhí)行一個(gè)動(dòng)作,不知怎么寫了,求大神幫....



-----------------------------------------------------------------------------------------------------------------------------------
#include "reg51.h"          //頭文件
//=======================聲明區(qū)=================================

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

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

sbit gb1=P0^6;        //關(guān)閉通道1    通道1為開鎖
sbit gb2=P0^7;        //關(guān)閉通道2    通道2為關(guān)鎖
#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;
/******************************************************************
我現(xiàn)在要同時(shí)按下k1、k2執(zhí)行“kaisuo”。同時(shí)按下k2、k3執(zhí)行“guansuo“
*******************************************************************/        
#define kaisuo k1
#define guansuo k2                        
                    
sbit op=P2^7;            //門鎖已開的傳感器,低電平有效使用k8代替
sbit clo_door=P2^6;        //門已關(guān)到位的傳感器,低電平有效,使用k7代替
sbit loc=P2^5;            //門已鎖住的傳感器,低電平有效,使用k6代替

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

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

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

   
}

/*===============子程序=======================================================*/
//=======================延時(shí)函數(shù)=====
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;    //馬達(dá)開     
            }
            while(op==1) ;
            if(op==0)  //門鎖開傳感器
            {   
                delay(30);
                if(op==0)
                {   
                    delay(1);
                    open=0;            //馬達(dá)停止
                    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) //==門未關(guān)閉,
            {   
              delay(300);    //delay,
              if(clo_door==1)  //==門未關(guān)閉,
              {
                gbtd2;
                }     
            }   
            if(clo_door==0)   
             {   
                delay(300);       //delay,
                if(clo_door==0)     //==0門關(guān)閉,
                {
                     if(loc==0)    //如果門已經(jīng)鎖住
                      {
                        gbtd2;  //     退出,關(guān)閉通道2
                      }
                       if(loc==1)   //門鎖鎖傳感器,loc==1,
                       {   
                            lock=1;      //馬達(dá)開始鎖門
                            //while(k2==0);  //k2持續(xù)按下一直點(diǎn)亮led1
                            while(loc==1);
                            if(loc==0)
                            {   
                                delay(1);
                                if(loc==0)
                                {
                                    delay(100);
                                    lock=0;
                                    gbtd2;
                                }
                            }
                       }     
                }   
             }
        }
    }
}            

程序.docx

13.37 KB, 下載次數(shù): 5


作者: map0391    時(shí)間: 2017-10-7 18:51
剛學(xué)51,還不熟,
作者: zl2168    時(shí)間: 2017-10-7 22:39
本帖最后由 zl2168 于 2017-10-7 22:42 編輯

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

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

作者: 978293588    時(shí)間: 2017-10-7 22:50
加油,相信自己

作者: map0391    時(shí)間: 2017-10-8 02:06
zl2168 發(fā)表于 2017-10-7 22:39
按鍵擴(kuò)展Shift功能
在計(jì)算機(jī)中,有一個(gè)鍵,同時(shí)按下某一按鍵和鍵時(shí),會(huì)導(dǎo)致該某一按鍵的第二個(gè)鍵功能,即 ...

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

這個(gè)是要修改的


作者: wulin    時(shí)間: 2017-10-8 10:36
給你寫了一個(gè)單鍵+2鍵+3鍵任意組合例程,你根據(jù)需求刪改。
#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;                //計(jì)數(shù)延時(shí)
        static bit sign=0;        //按鍵自鎖標(biāo)志
        if(PX!=0x0f)                        //有鍵按下
        {
                cnt++;
                if(cnt>=1000)                //延時(shí)消抖,消除多鍵同步差
                {
                        cnt=1000;                //防止溢出
                        if(sign==0)
                        {
                                sign=1;                //防止鍵未抬起重復(fù)讀鍵
                                switch(PX)        //4個(gè)鍵去除0f共15種組合,根據(jù)實(shí)際要求取舍
                                {
                                        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;
        }

}
/**************按鍵服務(wù)*******************/
void key_service()
{
        switch(key)        //共15種組合,根據(jù)實(shí)際任務(wù)取舍
        {
                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();                        //按鍵服務(wù)
        }
}

作者: bayga456    時(shí)間: 2017-10-8 10:47
if(loc==0) 這語句的意思是:如果小括號(hào)里的表達(dá)式是真的( loc等于0 )就執(zhí)行下面大括號(hào)里的語句,否則跳過
{}
想加判斷條件可以寫如下
if((loc==0) && (abc==0)) 這意思是loc和abc都等于0時(shí),才執(zhí)行后面大括號(hào)里的語句,否則跳過
{}
&& 是一個(gè)運(yùn)算符,有興趣的話查查看,C語言還有其實(shí)的運(yùn)算符,對(duì)編程序很有用。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1