找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 943|回复: 1
收起左侧

单片机+Proteus仿真,有什么指令能让lcd返回Proteus刚开始运行的界面

[复制链接]
ID:985137 发表于 2022-3-23 20:42 | 显示全部楼层 |阅读模式
批注 2022-03-23 204132.png

单片机源程序如下:
  1. /*主函数*/
  2. uchar global_state = 0;
  3. uchar count_num = 0;  //输入的数字个数
  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)        //进入不断循环
  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:         //初始化状态
  23.                                 display1();         //显示欢迎语句        -- "welcome"
  24.                                 display5();  //显示Current T=
  25.                                 Read_Temperature(); //读取温度值
  26.                                 display7();  //显示温度
  27.                                 if(SetKey==0)        //设置键                          
  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();                 //清屏,准备下一屏的显示
  45.                                         display3();    //显示关门提示语        -- "close door!"
  46.                                     delay(1900);    //等待关门 大约3秒
  47.                                         Lock = 1;   //关门
  48.                                         clear();                 //清屏,准备下一屏的显示
  49.                                         global_state = 1;   //切换运行状态
  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();    //清屏,准备下一屏的显示
  60.                                         global_state = 2;  //切换运行状态
  61.                                         count_num = 0;   //清除数字按键变量
  62.                                         for(i = 0;i < 4;i++)  //清空输入的密码数组
  63.                                         inpPasswd[i] = ' '-0x30;
  64.                                 }
  65.                             break;

  66.                         case 1:                //密码生成状态
  67.                                    display2();         //显示密码生成界面
  68.                                 delay(1900);    //等待大约3秒
  69.                                 global_state = 0;  //返回到初始界面
  70.                                 clear();        //清屏,准备下一屏的显示                                
  71.                             break;

  72.                         case 2:          //输入密码状态
  73.                            display4();           //显示输入密码界面
  74.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的为0-9的数字按键
  75.                            {                              
  76.                                 if(count_num <= 3)         //如果按键次数小于4次
  77.                                         {
  78.                                         inpPasswd[count_num] = key_value; //将按键值存入数组,并显示
  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;  //关锁
  112.                                                 LEDGREEN = 1;  //绿灯熄灭
  113.                                         }
  114.                                         else   //密码输入错误
  115.                                         {
  116.                                                 LEDRED = 0;         //红灯亮
  117.                                                 LEDGREEN = 1;  //绿灯熄灭
  118.                                                 Lock = 0;  //关锁
  119.                                                 delay(1900);    //等待大约3秒
  120.                                                 LEDRED = 1;  //红灯熄灭
  121.                                         }
  122.                                         clear();           //清屏,准备下一屏的显示
  123.                                         global_state = 0;  //返回到初始界面
  124.                            }
  125.                            break;                                                                           
  126.                 }               
  127.         }
  128. }
复制代码
回复

使用道具 举报

ID:121859 发表于 2022-3-24 08:51 | 显示全部楼层
很多方法都可以回到初始状态,比如复位,比如跳转到程序入口等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表