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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機簡易密碼鎖判斷程序一直錯誤,無法判斷按下的三個按鍵是否正確,怎么回事?

查看數: 5137 | 評論數: 6 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2019-10-19 19:11

正文摘要:

簡易的單片機密碼鎖用不了,使用的是靜態數碼管+矩陣按鍵+蜂鳴器+繼電器 自己寫的程序,下載到單片機后按鍵可以使用,按下一個按鍵,數碼管會正常顯示按鍵按下對應的字符,但按了123后蜂鳴器和繼電器沒有反應,下面 ...

回復

ID:626711 發表于 2019-10-22 13:43
hhh402 發表于 2019-10-21 11:48
void judge_number()函數中的變量 int mi_ma=0;是局部變量,每運行一次都會重新初始化為0,mi_ma永遠為零, ...

我知道這次的問題出在哪兒了,當我按下1的時候
if(cunfang!=0)       //判斷存放按鍵的數值是否為零,當不為零的話相當于輸入了一位密碼
   {  if(a1==0)   //這個與else a1=1;配合保證每次按鍵只計算一次。a1必須是靜態變量或全局變量。
       {
           a1=1;
          mi_ma=mi_ma+1;                //記錄按下的次數
          password[mi_ma]=cunfang;   //把按下的密碼存放到數組中
       }
     else a1=0;
第一次循環的時候記錄下我的密碼1,然后我還沒松開的時候他第二次循環就來了這次把a1變成零,然后緊接著第三次循環記錄下第二位密碼還是1,我按下1的那一會兒它會循環很多次,然后都相當于密碼是111
給這個     else a1=0;
改成再加一個判斷語句,把矩陣鍵盤的數據傳送進來,判斷矩陣鍵盤是否松開松開的話a1=0
ID:626711 發表于 2019-10-22 13:25
hhh402 發表于 2019-10-21 11:48
void judge_number()函數中的變量 int mi_ma=0;是局部變量,每運行一次都會重新初始化為0,mi_ma永遠為零, ...

還是不行,不過把密碼改成111可以工作
ID:491577 發表于 2019-10-21 11:48
void judge_number()函數中的變量 int mi_ma=0;是局部變量,每運行一次都會重新初始化為0,mi_ma永遠為零,要改成:   
void judge_number()    //檢測按下的三次是否依次為123
{
   static int mi_ma=0,a1=0;    int n;
   if(cunfang!=0)       //判斷存放按鍵的數值是否為零,當不為零的話相當于輸入了一位密碼
   {  if(a1==0)   //這個與else a1=1;配合保證每次按鍵只計算一次。a1必須是靜態變量或全局變量。
       {
           a1=1;
          mi_ma=mi_ma+1;                //記錄按下的次數
          password[mi_ma]=cunfang;   //把按下的密碼存放到數組中
       }
     else a1=0;
/*上面這7行(if    else語句)是保證每次按鍵只計算一次,原理:原來a1=0,第一次按鍵時if語句運行一次后a1=1,以后就不會再運行if里面的語句     了,直到按鍵釋放后a1才會等于0,如此循環。這個語句要牢記,處理按鍵時都會用到。注意:這個語句里面的變量必須是靜態變量或全局變量。
*/
   }
if(mi_ma==3)                      //判斷是否按下了三次
   {
    mi_ma=0; //復位
    password[0]=password[1]*100+password[2]*10+password[3];   把前三次輸入的數字合并
    if(password[0]==123)   //設置正確密碼是123 并判斷用戶輸入的密碼是否為123       】
        {                                                                                                                  |
         buzzer=0;                                                                                                    |
         for(n=0;n<1000;n++)                                                                                   |    當密碼輸入正確繼電器打開,蜂鳴器響
          {                                                                                                                |
                  relay=~relay;                                                                                        |
                delay(10);                                                                                             |
          }                                                                                                                】
          delay(6553400);                                       //延時約1分鐘相當于開鎖一分鐘
         }
   }
}
ID:626711 發表于 2019-10-20 19:05
hhh402 發表于 2019-10-20 10:18
你的程序是按下1按鍵后一直輸出1直到松開按鍵為止,void judge_number()  這個函數是只要有按鍵按下就一直 ...

還是不行,我把密碼改成111,無論是長按111還是短按111,繼電器都不會打開
keydown()函數應該一次只能得到一個數值
ID:626711 發表于 2019-10-20 18:32
hhh402 發表于 2019-10-20 10:18
你的程序是按下1按鍵后一直輸出1直到松開按鍵為止,void judge_number()  這個函數是只要有按鍵按下就一直 ...

還是不行,把密碼改成111,不管是長按111還是短按111繼電器都不會打開
我的keydown();函數按下一次應該是只能返回一個數字
ID:491577 發表于 2019-10-20 10:18
你的程序是按下1按鍵后一直輸出1直到松開按鍵為止,void judge_number()  這個函數是只要有按鍵按下就一直累加,按1就是1一直累加,累加3次之后得到3個1,如果你把密碼改成111,就可以打開繼電器了。修改的方法:void judge_number() 中加入判斷保證每按下一個按鍵只累加一次,才可以得到你想要的結果。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99这里只有精品 | 国产中文视频 | 亚洲综合视频 | 自拍偷拍亚洲欧美 | 亚洲国产成人在线观看 | 久草日韩 | 亚洲免费成人av | 国产综合久久 | 亚洲一区二区久久久 | 国产成人综合久久 | 国产精品久久久久久婷婷天堂 | 欧美一级二级在线观看 | 欧美日韩a| 玖玖视频免费 | 欧美电影一区 | 夜夜爽99久久国产综合精品女不卡 | a视频在线观看 | 免费视频成人国产精品网站 | 日日干天天操 | 国产精品99久久久久久宅男 | 国产一级免费在线观看 | 欧美在线视频一区二区 | 国产玖玖 | 在线中文字幕亚洲 | 亚洲免费一区 | 亚洲第一网站 | 毛片免费在线 | 伊人无码高清 | 国产免费自拍 | 欧美精品中文字幕久久二区 | 午夜影院网站 | 亚洲毛片在线观看 | 三级av免费 | 精品国产欧美 | 在线天堂免费中文字幕视频 | 伊人久久国产 | 91精品国产乱码久久久久久久 | 国产精品一区二区三区在线 | 日韩激情网 | 欧美专区在线视频 | 国产视频亚洲视频 |