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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

Proteus仿真單片機C語言,按設置鍵while跳不出去

[復制鏈接]
跳轉到指定樓層
樓主
ID:985137 發(fā)表于 2022-3-23 11:26 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. void SetFun(void) //進入設置參數(shù)子函數(shù)
  2. {      
  3.         if(SetKey==0)  //設置按鍵
  4.             {
  5.                   if(Set1<2)        Set1++;   //設置按鍵次數(shù)累計
  6.                   else Set1=0;                                                
  7.             }
  8.         switch(Set1) //根據(jù)設置按鍵次數(shù),指向對應設置位置
  9.             {
  10.                  case 0:
  11.                                     wr_com(0x80);
  12.                                 wr_dat(' ');
  13.                                 wr_com(0x88);
  14.                                 wr_dat(' ');
  15.                                     break;//清除設置符號
  16.                  case 1:
  17.                                         wr_com(0x80);
  18.                                 wr_dat('>');
  19.                                         wr_com(0x88);
  20.                                 wr_dat(' ');
  21.                                         break;//指向設置下限
  22.                  case 2:
  23.                                         wr_com(0x80);
  24.                                 wr_dat(' ');
  25.                                         wr_com(0x88);
  26.                                 wr_dat('>');
  27.                                         break;//指向設置上限
  28.             }
  29.         while(SetKey==0);//等待按鍵松開
  30. }


  31. /*主函數(shù)*/
  32. uchar global_state = 0;
  33. uchar count_num = 0;  //輸入的數(shù)字個數(shù)
  34. void main()
  35. {  
  36.     uchar i;
  37.     uchar passwd;  
  38.            uchar key_value = 0;
  39.         uchar temp_key_value = 0xff;
  40.         Lock = 1;  //剛上電 鎖是需要保持閉合
  41.         Timer0_init();        //定時器初始化
  42.          lcd_init();        //LCD1602初始化

  43.         while(1)        //進入不斷循環(huán)
  44.         {
  45.                    temp_key_value = Calkey_scan();          //讀取矩陣按鍵的鍵值
  46.                 if(temp_key_value != 0xff)
  47.                 {
  48.                         key_value = temp_key_value;
  49.                 }
  50.                 switch(global_state)
  51.                 {
  52.                         case 0:         //初始化狀態(tài)
  53.                                 display1();         //顯示歡迎語句        -- "welcome"

  54.                                 display5();  //顯示Current T=
  55.                                 Read_Temperature(); //讀取溫度值
  56.                                 display7();  //顯示溫度

  57.                                 if(SetKey==0)        //設置鍵                          
  58.                   {   
  59.                                      if(SetKey==0)
  60.                                          {               
  61.                       while(1)
  62.                                           {
  63.                         display5();         //顯示Current T=
  64.                         display6();         //顯示上下限
  65.                         Read_Temperature(); //讀取溫度值
  66.                         display7();         //顯示溫度
  67.                         display8();         //顯示上下限溫度                          
  68.                         SetFun();           //指針>           
  69.                         if(SetKey==0)       //再次點擊設置鍵                          
  70.                          {                           
  71.                                                   if(SetKey==0) break;                                                  
  72.                          }
  73.                        }
  74.                                           }                                                            
  75.                                    }
  76.                                                                                                                                                                                                                               
  77.                                 if(key_value == 13)  //存包按鍵被按下
  78.                                 {
  79.                                     key_value = 0xff;  //將按鍵值清除
  80.                                         Lock = 0;    //開鎖
  81.                                         clear();                 //清屏,準備下一屏的顯示
  82.                                         display3();    //顯示關門提示語        -- "close door!"
  83.                                     delay(1900);    //等待關門 大約3秒
  84.                                         Lock = 1;   //關門
  85.                                         clear();                 //清屏,準備下一屏的顯示
  86.                                         global_state = 1;   //切換運行狀態(tài)
  87.                                         passwd = TL0;  //采用定時器寄存器的值作為密碼
  88.                                         genPasswd[0] = passwd/100;                  //存儲密碼
  89.                                         genPasswd[1] = passwd%100/10;
  90.                                         genPasswd[2] = passwd%10;
  91.                                         genPasswd[3] = (genPasswd[1]+genPasswd[2])%10;
  92.                                 }
  93.                                 if(key_value == 14)  //取包按鍵被按下
  94.                                 {
  95.                                     key_value = 0xff;  //將按鍵值清除
  96.                                         clear();    //清屏,準備下一屏的顯示
  97.                                         global_state = 2;  //切換運行狀態(tài)
  98.                                         count_num = 0;   //清除數(shù)字按鍵變量
  99.                                         for(i = 0;i < 4;i++)  //清空輸入的密碼數(shù)組
  100.                                         inpPasswd[i] = ' '-0x30;
  101.                                 }
  102.                             break;

  103.                         case 1:                //密碼生成狀態(tài)
  104.                                    display2();         //顯示密碼生成界面
  105.                                 delay(1900);    //等待大約3秒
  106.                                 global_state = 0;  //返回到初始界面
  107.                                 clear();        //清屏,準備下一屏的顯示                                
  108.                             break;

  109.                         case 2:          //輸入密碼狀態(tài)
  110.                            display4();           //顯示輸入密碼界面
  111.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的為0-9的數(shù)字按鍵
  112.                            {                              
  113.                                 if(count_num <= 3)         //如果按鍵次數(shù)小于4次
  114.                                         {
  115.                                         inpPasswd[count_num] = key_value; //將按鍵值存入數(shù)組,并顯示
  116.                                                    count_num++;
  117.                                     }
  118.                                          key_value = 0xff;  //將按鍵值清除
  119.                            }
  120.                            if(key_value == 15) //清除按鍵被按下
  121.                            {
  122.                                 key_value = 0xff;  //將按鍵值清除
  123.                                            for(i = 0;i < 4;i++)
  124.                                         inpPasswd[i] = ' '-0x30;  //清除剛剛輸入的密碼
  125.                                         count_num=0;
  126.                            }
  127.                            if(key_value == 16) //確認按鍵被按下
  128.                            {
  129.                                 key_value = 0xff;  //將按鍵值清除
  130.                                            for(i = 0;i < 4;i++)
  131.                                         {
  132.                                                 if(inpPasswd[i] != genPasswd[i])
  133.                                                    break;
  134.                                         }
  135.                                         if(i == 4)          //密碼輸入正確
  136.                                         {
  137.                                                 LEDRED = 1;         //紅燈熄滅
  138.                                                 LEDGREEN = 0;  //綠燈亮
  139.                                                 Lock = 1;  //開鎖
  140.                                                 delay(1900);    //等待大約3秒
  141.                                                 Lock = 0;  //關鎖
  142.                                                 LEDGREEN = 1;  //綠燈熄滅
  143.                                         }
  144.                                         else   //密碼輸入錯誤
  145.                                         {
  146.                                                 LEDRED = 0;         //紅燈亮
  147.                                                 LEDGREEN = 1;  //綠燈熄滅
  148.                                                 Lock = 0;  //關鎖
  149.                                                 delay(1900);    //等待大約3秒
  150.                                                 LEDRED = 1;  //紅燈熄滅
  151.                                         }
  152.                                         clear();           //清屏,準備下一屏的顯示
  153.                                         global_state = 0;  //返回到初始界面
  154.                            }
  155.                            break;                                                                           
  156.                 }               
  157.         }
  158. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2022-3-23 16:25 | 只看該作者
不要用while(1)套while(1)
回復

使用道具 舉報

板凳
ID:1005707 發(fā)表于 2022-3-23 16:37 | 只看該作者
你這程序都不全,SetKey這個值在哪里改變?沒有中斷或者rtos的話怎么可能跳的出去?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久www| 亚洲精品片 | 国产专区在线 | 日本特黄a级高清免费大片 特黄色一级毛片 | 中国黄色在线视频 | 尤物在线精品视频 | 亚洲成人一区二区三区 | 第四色狠狠 | 亚洲精品在线91 | 久久视频精品在线 | 国产精品不卡一区二区三区 | 日本中文字幕在线视频 | 九九国产在线观看 | 国产色片在线 | 天天干视频网 | 国产精品网址 | 91视频网址 | 中文字幕丁香5月 | 精品国产乱码久久久久久牛牛 | 黑人巨大精品欧美黑白配亚洲 | 国产亚洲精品久久久久动 | 午夜丁香视频在线观看 | 老外几下就让我高潮了 | 免费高潮视频95在线观看网站 | 成人片在线看 | 亚洲乱码国产乱码精品精98午夜 | 精品中文字幕一区二区三区 | 男人的天堂中文字幕 | 精品一区二区视频 | 中文字幕一区二区三区四区五区 | 欧美精品一二区 | 日本一区二区三区四区 | 亚洲国产91| 黑人巨大精品欧美一区二区免费 | 成人精品鲁一区一区二区 | av黄色免费在线观看 | 在线欧美亚洲 | 在线观看国产精品一区二区 | 在线播放中文字幕 | 91毛片网| 国产伦精品一区二区三区高清 |