找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 940|回復(fù): 1
收起左側(cè)

單片機+Proteus仿真,有什么指令能讓lcd返回Proteus剛開始運行的界面

[復(fù)制鏈接]
ID:985137 發(fā)表于 2022-3-23 20:42 | 顯示全部樓層 |閱讀模式
批注 2022-03-23 204132.png

單片機源程序如下:
  1. /*主函數(shù)*/
  2. uchar global_state = 0;
  3. uchar count_num = 0;  //輸入的數(shù)字個數(shù)
  4. void main()
  5. {  
  6.     uchar i;
  7.     uchar passwd;  
  8.            uchar key_value = 0;
  9.         uchar temp_key_value = 0xff;
  10.         Lock = 1;  //剛上電 鎖是需要保持閉合
  11.         Timer0_init();        //定時器初始化
  12.          lcd_init();        //LCD1602初始化  
  13.         while(1)        //進入不斷循環(huán)
  14.         {
  15.                    temp_key_value = Calkey_scan();          //讀取矩陣按鍵的鍵值
  16.                 if(temp_key_value != 0xff)
  17.                 {
  18.                         key_value = temp_key_value;
  19.                 }
  20.                 switch(global_state)
  21.                 {
  22.                         case 0:         //初始化狀態(tài)
  23.                                 display1();         //顯示歡迎語句        -- "welcome"
  24.                                 display5();  //顯示Current T=
  25.                                 Read_Temperature(); //讀取溫度值
  26.                                 display7();  //顯示溫度
  27.                                 if(SetKey==0)        //設(shè)置鍵                          
  28.                   {         
  29.                                             clear();                                                                                                                                                                                                
  30.                       while(1)
  31.                                           {                                                
  32.                         display5();         //顯示Current T=
  33.                         display6();         //顯示上下限
  34.                         Read_Temperature(); //讀取溫度值
  35.                         display7();         //顯示溫度
  36.                         display8();         //顯示上下限溫度                          
  37.                         SetFun();           //指針>                                                                                      
  38.                       }                     
  39.                                   }                                                                                                                                                                                                                                                                                                                                                                     
  40.                                 if(key_value == 13)  //存包按鍵被按下
  41.                                 {
  42.                                     key_value = 0xff;  //將按鍵值清除
  43.                                         Lock = 0;    //開鎖
  44.                                         clear();                 //清屏,準(zhǔn)備下一屏的顯示
  45.                                         display3();    //顯示關(guān)門提示語        -- "close door!"
  46.                                     delay(1900);    //等待關(guān)門 大約3秒
  47.                                         Lock = 1;   //關(guān)門
  48.                                         clear();                 //清屏,準(zhǔn)備下一屏的顯示
  49.                                         global_state = 1;   //切換運行狀態(tài)
  50.                                         passwd = TL0;  //采用定時器寄存器的值作為密碼
  51.                                         genPasswd[0] = passwd/100;                  //存儲密碼
  52.                                         genPasswd[1] = passwd%100/10;
  53.                                         genPasswd[2] = passwd%10;
  54.                                         genPasswd[3] = (genPasswd[1]+genPasswd[2])%10;
  55.                                 }
  56.                                 if(key_value == 14)  //取包按鍵被按下
  57.                                 {
  58.                                     key_value = 0xff;  //將按鍵值清除
  59.                                         clear();    //清屏,準(zhǔn)備下一屏的顯示
  60.                                         global_state = 2;  //切換運行狀態(tài)
  61.                                         count_num = 0;   //清除數(shù)字按鍵變量
  62.                                         for(i = 0;i < 4;i++)  //清空輸入的密碼數(shù)組
  63.                                         inpPasswd[i] = ' '-0x30;
  64.                                 }
  65.                             break;

  66.                         case 1:                //密碼生成狀態(tài)
  67.                                    display2();         //顯示密碼生成界面
  68.                                 delay(1900);    //等待大約3秒
  69.                                 global_state = 0;  //返回到初始界面
  70.                                 clear();        //清屏,準(zhǔn)備下一屏的顯示                                
  71.                             break;

  72.                         case 2:          //輸入密碼狀態(tài)
  73.                            display4();           //顯示輸入密碼界面
  74.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的為0-9的數(shù)字按鍵
  75.                            {                              
  76.                                 if(count_num <= 3)         //如果按鍵次數(shù)小于4次
  77.                                         {
  78.                                         inpPasswd[count_num] = key_value; //將按鍵值存入數(shù)組,并顯示
  79.                                                    count_num++;
  80.                                     }
  81.                                          key_value = 0xff;  //將按鍵值清除
  82.                            }
  83.                            
  84.                            if(fanhui == 0)
  85.                            {
  86.                                     key_value = 0xff;  //將按鍵值清除
  87.                                  
  88.                            }
  89.                                                      
  90.                            if(key_value == 15) //清除按鍵被按下
  91.                            {
  92.                                 key_value = 0xff;  //將按鍵值清除
  93.                                            for(i = 0;i < 4;i++)
  94.                                         inpPasswd[i] = ' '-0x30;  //清除剛剛輸入的密碼
  95.                                         count_num=0;
  96.                            }
  97.                            if(key_value == 16) //確認按鍵被按下
  98.                            {
  99.                                 key_value = 0xff;  //將按鍵值清除
  100.                                            for(i = 0;i < 4;i++)
  101.                                         {
  102.                                                 if(inpPasswd[i] != genPasswd[i])
  103.                                                    break;
  104.                                         }
  105.                                         if(i == 4)          //密碼輸入正確
  106.                                         {
  107.                                                 LEDRED = 1;         //紅燈熄滅
  108.                                                 LEDGREEN = 0;  //綠燈亮
  109.                                                 Lock = 1;  //開鎖
  110.                                                 delay(1900);    //等待大約3秒
  111.                                                 Lock = 0;  //關(guān)鎖
  112.                                                 LEDGREEN = 1;  //綠燈熄滅
  113.                                         }
  114.                                         else   //密碼輸入錯誤
  115.                                         {
  116.                                                 LEDRED = 0;         //紅燈亮
  117.                                                 LEDGREEN = 1;  //綠燈熄滅
  118.                                                 Lock = 0;  //關(guān)鎖
  119.                                                 delay(1900);    //等待大約3秒
  120.                                                 LEDRED = 1;  //紅燈熄滅
  121.                                         }
  122.                                         clear();           //清屏,準(zhǔn)備下一屏的顯示
  123.                                         global_state = 0;  //返回到初始界面
  124.                            }
  125.                            break;                                                                           
  126.                 }               
  127.         }
  128. }
復(fù)制代碼
回復(fù)

使用道具 舉報

ID:121859 發(fā)表于 2022-3-24 08:51 | 顯示全部樓層
很多方法都可以回到初始狀態(tài),比如復(fù)位,比如跳轉(zhuǎn)到程序入口等。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表