找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2508|回復: 1
打印 上一主題 下一主題
收起左側(cè)

回轉(zhuǎn)掃描法取按鍵值的問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:68618 發(fā)表于 2014-11-22 15:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void Key_Check(void)
   {
       Key_Status=Scan_Store_Key();
      if((Key_Status>0)&&(Key_Status<13))
      {
          if(Key_Status==10)//*存包鍵
           {
                STORE_CLR;
                STORE_OUT;
                Delay_us(50);
                STORE_SET;
                Delay_us(100);
                STORE_CLR;//RISING一次,啟動M64 INT6中斷
           }  
         else if(Key_Status==12)//#取包鍵
          {
                Code_Buf_Init();
                Time_Wait=0;//按鍵間隔時間5秒以上沒反應(yīng)退出
                Code_Buf[0]=0x03;
                SN=1;  
                LED_GREEN_OUT;
                LED_GREEN_ON;   
                while(1)
                 {
                         Key_Status0=Scan_Key();//2ms掃描一次
                        if((Key_Status0>0)&&(Key_Status0<13))
                         {
                               if((Key_Status0==10)||(Key_Status0==12))//*,#,直接退出
                                {
                                       Time_Wait=0;
                                       Code_Buf[SN]=0x41;
                                       //SPI_Send(Code_Buf[SN]);//M64里判斷如果有10出現(xiàn)則代表直接退出
                                       SN++;
                                       Code_Buf[SN]=0x06;
                                       //SPI_Send(Code_Buf[SN]);
                                       Check_Sum(&Code_Buf[0],&Check_Buf[0]);
                                      //SPI_Send(Check_Buf[0]);
                                      //SPI_Send(Check_Buf[1]);
                                        LED_RED_OUT;
                                        LED_RED_ON;
                                        Delay_ms(500);
                                        LED_RED_OFF;
                                        LED_GREEN_OFF;
                                        break;
                                    }  
                                  else if(Key_Status0==11)
                                    {
                                         Code_Buf[SN]=0x30;
                                         SN++;
                                         //SPI_Send(0x30);
                                         Time_Wait=0;
                                         if(SN>10)
                                          {
                                               Code_Buf[11]=0x06;//完整10位密碼
                                               Check_Sum(&Code_Buf[0],&Check_Buf[0]);
                                               //SPI_Send(Check_Buf[0]);
                                               //SPI_Send(Check_Buf[1]);
                                               LED_RED_OUT;
                                               LED_RED_ON;
                                               Delay_ms(1000);
                                               LED_RED_OFF;
                                               LED_GREEN_OFF;
                                               break;
                                             }
                                        }  
                                      else
                                        {
                                             Code_Buf[SN]=DEC_To_ASCII(Key_Status0);
                                             SN++;
                                             Time_Wait=0;
                                             //SPI_Send(Code_Buf[SN]);
                                             if(SN>10)
                                              {
                                                     Code_Buf[11]=0x06;//完整10位密碼
                                                     Check_Sum(&Code_Buf[0],&Check_Buf[0]);
                                                     //SPI_Send(Check_Buf[0]);
                                                     //SPI_Send(Check_Buf[1]);
                                                     LED_RED_OUT;
                                                     LED_RED_ON;
                                                     Delay_ms(1000);
                                                     LED_RED_OFF;
                                                     LED_GREEN_OFF;
                                                     break;
                                                 }
                                            }         
                                      }
                                    else
                                      {
                                             Time_Wait++;
                                      }
                                    if(Time_Wait>2500)
                                     {
                                            Code_Buf[SN]=0x06;//密碼輸入超時退出,M64判斷接收的數(shù)據(jù)是否有10位即可
                                            //SPI_Send(Code_Buf[SN]);
                                            Check_Sum(&Code_Buf[0],&Check_Buf[0]);
                                            //SPI_Send(Check_Buf[0]);
                                            //SPI_Send(Check_Buf[1]);
                                            LED_RED_OUT;
                                            LED_RED_ON;
                                            Delay_ms(2000);
                                            LED_RED_OFF;
                                            LED_GREEN_OFF;
                                            break;
                                      }         
                              }      
                       }
                     else
                       {
                              /*SPI_Send(0x03);//03,30,30,16,37,39,M64 LCD顯示請按存包鍵后存包,按取包鍵后手動輸入
                                                                   數(shù)字密碼取包
                             SPI_Send(0x30);
                             SPI_Send(0x30);
                             SPI_Send(0x16);
                             SPI_Send(0x37);
                             SPI_Send(0x39);*/
                        }   
                }
         }         
采用了回轉(zhuǎn)掃描法取按鍵值,現(xiàn)在測試執(zhí)行下來,基本功能都很正常,就是郁悶的取包鍵(#)那個功能,第一次按下去,如果5秒鐘沒鍵響應(yīng)或輸入滿10個密碼數(shù)字或按了*或#后都能正常退出WHILE循環(huán),但是第二次再按#后,測試下來發(fā)現(xiàn)程序居然直接工作了第一個IF判斷后馬上退出了WHILE循環(huán),紅色LED閃半秒,然后再按#,又正常如初,如果10位密碼數(shù)字沒輸入完,按了#中途退出,則再按#進入密碼輸入狀態(tài)時無這種現(xiàn)象,郁悶,正在用LED測試大法進行排除,看問題到底是出在哪里?                                                                                             
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:26206 發(fā)表于 2014-11-22 18:02 | 只看該作者
學習下
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表