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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機按鍵程序看不懂,求解惑 從if(temp != 0)開始就看不懂了

[復制鏈接]
跳轉到指定樓層
樓主
ID:724177 發表于 2020-5-7 15:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "bsp_key.h"

unsigned char KeyNum=0;
bit KeyOnFlag=0;

void keyDelayUs2x(unsigned char t)
{   
while(--t);
}

unsigned char keyScan(void)
{
    unsigned char temp = 0;

    if(KEY1 == KEY_ON)
    {
        keyDelayUs2x(100);
        if(KEY1 == KEY_ON)
        {
            temp = 1;        
        }   
    }
    else if(KEY2 == KEY_ON)
    {
        keyDelayUs2x(100);
        if(KEY2 == KEY_ON)
        {
            temp = 2;        
        }   
    }
    else if(KEY3 == KEY_ON)
    {
        keyDelayUs2x(100);
        if(KEY3 == KEY_ON)
        {
            temp = 3;        
        }   
    }
    else
    {
        temp = 0;
    }
    if(temp != 0)
    {
            KeyOnFlag=1;//按鍵按下標志位置1
            KeyNum=temp;//按鍵賦值 下一步等待釋放            
    }
    else
    {
        KeyOnFlag = 0;
    }
    if((KeyNum!=0)&&(KeyOnFlag==0))
    {
        temp = KeyNum;
        KeyNum = 0;
        return temp;
    }
    else
    {
        return 0;
    }
}
從if(temp != 0)開始就看不懂了,這個是按鍵控制子程序,求解答

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

使用道具 舉報

沙發
ID:517466 發表于 2020-5-7 16:55 | 只看該作者
從前面的代碼可以看出來,temp!=0,表示有按鍵被按下了,temp=1,表示按鍵1被按下,temp=2,表示按鍵2被按下。temp=0,表示沒有按鈕被按下。
回復

使用道具 舉報

板凳
ID:639106 發表于 2020-5-7 17:00 | 只看該作者
if(temp != 0) 是如果temp不等于0
回復

使用道具 舉報

地板
ID:311846 發表于 2020-5-7 17:09 | 只看該作者
有按鍵按下則改變temp的值,沒有則為0,三個按鍵對應1-3,那么
if(temp != 0)//則表示按鍵有效,有按鍵按下不等于0,進入判斷
    {
            KeyOnFlag=1;//按鍵按下標志位置1
            KeyNum=temp;//按鍵賦值 下一步等待釋放            
    }
    else
    {
        KeyOnFlag = 0;//如果按鍵按下那么就進入上面的程序,按鍵賦值給了KeyNum,KeyNum就保存了剛才的按鍵值,然后釋放了按鍵就會進入此,將標志位改為0
    }
    if((KeyNum!=0)&&(KeyOnFlag==0))//如果按鍵按下了,KeyNum就保存了按鍵值,那么就等于0,KeyOnFlag==0就是按鍵按下后釋放了按鍵他才等于0,則是有按鍵按下并釋放了就進入此判斷
    {
        temp = KeyNum;//這里給他賦值temp,將按鍵值重新賦值給局部變量,局部變量每次進入函數會清0
        KeyNum = 0;//讀取按鍵值后,將全局變量重新賦值為0,防止重復執行
        return temp;//返回按鍵值
    }
    else
    {//如果沒按鍵按下就返回0
        return 0;
    }
}
夠詳細了吧!
回復

使用道具 舉報

5#
ID:724177 發表于 2020-5-7 20:52 | 只看該作者
權威人物 發表于 2020-5-7 17:09
有按鍵按下則改變temp的值,沒有則為0,三個按鍵對應1-3,那么
if(temp != 0)//則表示按鍵有效,有按鍵按 ...

首先非常萬分感謝前輩仔細回答我的問題,其次我還有點疑問。按照你的思路如果有按鍵按下就會執行KeyOnFlag=1;KeyNum=temp; else后面的語句( KeyOnFlag = 0)不就直接跳過了么,為啥說按鍵釋放了就執行 KeyOnFlag = 0。其次 if((KeyNum!=0)&&(KeyOnFlag==0))我自己感覺本身不是矛盾了么,為什么會同時滿足?如果 KeyNum!=0,那么不就是KeyOnFlag==1,本人剛接觸c語言,單片機,不是太懂,求解惑,謝謝
回復

使用道具 舉報

6#
ID:311846 發表于 2020-5-8 10:07 | 只看該作者
電子小白啊 發表于 2020-5-7 20:52
首先非常萬分感謝前輩仔細回答我的問題,其次我還有點疑問。按照你的思路如果有按鍵按下就會執行KeyOnFla ...

唉!看來你程序運行都不知道,你按鍵釋放了,程序還在跑動,是不是就可以進入KeyOnFlag = 0了?那么 if((KeyNum!=0)&&(KeyOnFlag==0))這條件不就滿足了嗎?
回復

使用道具 舉報

7#
ID:70069 發表于 2020-5-8 10:22 | 只看該作者
設KEY3=0      
temp=3         
keyonflag=1   
keynum=3   
條件不滿足  
return 0         
設第二次進入掃描
KEY1 KEY2 KEY3都是1
temp=0
keyonflag=0
keynum=3
此時滿足條件
temp=3
return temp=3
這段代碼就是如果KEYON=0檢測上升沿觸發。KEYON=1檢測下降沿觸發
回復

使用道具 舉報

8#
ID:724177 發表于 2020-5-9 15:12 | 只看該作者
benclee 發表于 2020-5-8 10:22
設KEY3=0      
temp=3         
keyonflag=1   

啊,原來是這樣,謝謝前輩指點。頭文件設置KEYON=0。原來時一直掃描調用的
回復

使用道具 舉報

9#
ID:724177 發表于 2020-5-9 15:15 | 只看該作者
權威人物 發表于 2020-5-8 10:07
唉!看來你程序運行都不知道,你按鍵釋放了,程序還在跑動,是不是就可以進入KeyOnFlag = 0了?那么 if(( ...

啊,我終于懂了,我的問題出在以為只會調用一次這個子程序,謝謝前輩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 视频一区二区三区中文字幕 | 欧美精品一区二区在线观看 | 久久久久中文字幕 | 日韩欧美在线观看 | 久久久这里都是精品 | 久久久久久黄 | 欧美一区二区三区精品免费 | 亚洲欧美日韩久久久 | xxx.在线观看| 日韩插插| 日本午夜免费福利视频 | 仙人掌旅馆在线观看 | 一级做a爰片性色毛片视频停止 | 天天综合久久网 | 精品国产综合 | www久久国产 | 亚洲免费在线 | 精品国产免费人成在线观看 | 日韩手机在线看片 | www.4567| 天天拍天天插 | 国产精品美女久久久久久不卡 | 欧美中文字幕在线观看 | 青青草一区二区 | 日韩国产一区二区三区 | 一级黄色片免费在线观看 | 欧美成人自拍视频 | 高清成人av| 欧美精品中文字幕久久二区 | 欧美天堂在线观看 | 欧美激情区 | 男人天堂视频在线观看 | 中文字幕97 | 色综合一区二区 | 一本色道精品久久一区二区三区 | 韩日在线观看视频 | 91精品国产91久久久久久 | 在线播放中文字幕 | 久久综合一区 | 欧美视频福利 | 国产一区二区在线播放 |