查看: 1123|回复: 1

Arduino 使用Mega2560和LCD1602做的多级菜单显示功能

[复制链接]
  • TA的每日心情
    开心
    2019-1-9 13:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-1-9 13:27 | 显示全部楼层 |阅读模式
    本帖最后由 ZZed 于 2019-1-9 13:39 编辑

    新手小白一枚,最近在做课程设计。看了社区的一个帖子后自己根据原文作者思路写的,按键函数被我自己改了一些算法,简单一点也方便后续加功能。原文作者用的12864是四行中文显示,1602是两行字符显示。再次感谢原文作者的帖子,这是链接(Arduino 用LCD12864做的多级菜单显示功能 https://www.arduino.cn/forum.php ... 6308&fromuid=170791(出处: Arduino中文社区))
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display

    int c, var;
    int  KEY = 9;
    int KEY2 = 10;
    int KEY3 = 11;
    int KEY_NUM1 = 0;
    int KEY_NUM2 = 0;
    int KEY_NUM3 = 0;
    lcd.setCursor(0, 0);
    lcd.print("20163907");
    lcd.setCursor(0, 1);
    lcd.print("Zed'program");


    void setup()
    {
      lcd.begin(16, 2);
      pinMode(KEY, INPUT);
      pinMode(KEY2, INPUT);
      pinMode(KEY3, INPUT);
      var = 2;//初始化界面

      lcd.clear();

    }
    void loop()
    {
      ScanKey();          //按键函数
      ScanKey2();
      ScanKey3();

      switch (var)
      {
        case 0:
          lcd.setCursor(0, c);
          lcd.print(">");
          lcd.setCursor(1, 0);
          lcd.print("gongneng1-1 ");
          lcd.setCursor(1, 1);
          lcd.print("gongneng1-2 ");
          break;
        case 1:
          lcd.setCursor(0, c);
          lcd.print(">");
          lcd.setCursor(1, 0);
          lcd.print("gongneng2-1 ");
          lcd.setCursor(1, 1);
          lcd.print("gongneng2-2 ");
          break;
        case 2:
          lcd.setCursor(0, c);
          lcd.print(">");
          lcd.setCursor(1, 0);
          lcd.print("gongneng1");
          lcd.setCursor(1, 1);
          lcd.print("gongneng2");
          break;
        case 3:
          lcd.setCursor(0, c);
          lcd.print(">");
          lcd.setCursor(1, 0);
          lcd.print("gongneng3-1");
          lcd.setCursor(1, 1);
          lcd.print("gongneng3-2");
          break;
        case 4:
          lcd.setCursor(0, c);
          lcd.print(">");
          lcd.setCursor(1, 0);
          lcd.print("gongneng3");


      }
    }
    void ScanKey() {//菜单选择
      KEY_NUM1 = 0;                       //清空变量
      if (digitalRead(KEY) == HIGH)        //有按键按下
      {
        delay(20);                        //延时去抖动
        if (digitalRead(KEY) == HIGH)      //有按键按下
        {
          KEY_NUM1 = 1;                   //变量设置为1
          while (digitalRead(KEY) == HIGH); //等待按键松手
        }
      }
      if (KEY_NUM1 == 1)             //是否按键按下
      {
        c = c + 1; lcd.clear();
        if (c > 1) {
          lcd.clear();
          switch (var) {
            case 0:
              c = 0; break;
            case 1:
              c = 0; break;
            case 2:
              c = 0; var = 4; break;
            case 3:
              c = 0; break;
            case 4:
              c = 0; var = 2; break;
          }

        }


      }
    }
    void ScanKey2() {//确定按键
      KEY_NUM2 = 0;                       //清空变量
      if (digitalRead(KEY2) == HIGH)        //有按键按下
      {
        delay(20);                        //延时去抖动
        if (digitalRead(KEY2) == HIGH)      //有按键按下
        {

          KEY_NUM2 = 1;                   //变量设置为1
          while (digitalRead(KEY2) == HIGH); //等待按键松手
        }
      }
      if (KEY_NUM2 == 1)             //是否按键按下    算法更改后子菜单确认就不会返回主菜单  也方便后续子菜单功能添加。
      {
        lcd.clear();
        switch (var) {
          case 0:
            break;
          case 1:
            break;
          case 2:
           var = c; c = 0;  break;
          case 3:
            c = 0; break;
          case 4:
            c = 0; var = 3; break;
        }
      }
    }
    void ScanKey3() {//返回按键定义
      KEY_NUM3 = 0;                       //清空变量
      if (digitalRead(KEY3) == HIGH)        //有按键按下
      {
        delay(20);                        //延时去抖动
        if (digitalRead(KEY3) == HIGH)      //有按键按下
        {
          KEY_NUM3 = 1;                   //变量设置为1
          while (digitalRead(KEY3) == HIGH); //等待按键松手
        }
      }
      if (KEY_NUM3 == 1)             //是否按键按下
      {
        var = 2; c = 0; lcd.clear();
      }
    }

    一级菜单

    一级菜单

    二级菜单

    二级菜单







    该用户从未签到

    发表于 2019-1-15 19:07 | 显示全部楼层
    能不能把实物的连接图发一下
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    博哥零基础教你玩转ESP8266(四) 认识一下ESP8266WiFi库
    博哥零基础教你玩转ESP826
    帖子导航: 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    博哥零基础教你玩转ESP8266(一) 重识ESP8266
    博哥零基础教你玩转ESP826
    https://blog.csdn.net/wubo_fly 帖子导航: 博哥零基础教你玩转ESP8266(一) 重识
    无线遥控四个灯泡
    无线遥控四个灯泡
    我有一个遥控器,一个接收板,还有四个灯泡,不知道如何连接在一起,然后控制灯亮
    AS608指纹模块在MEGA2560上的发出滋滋滋的声音
    AS608指纹模块在MEGA2560
    各位大佬求助!近日萌新在做一个门禁系统的毕设,老师要求买个指纹模块,我就去淘宝买
    求助~~!完全不懂的小白只想做一个简单的东西,大神请进。
    求助~~!完全不懂的小白只
    事情是这样,我想做一个通过人体红外感应模块控制电机的装置,这个电机只有一个,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表