查看: 8387|回复: 29

Arduino 用LCD12864做的多级菜单显示功能

[复制链接]
  • TA的每日心情
    郁闷
    2019-3-23 09:17
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2018-4-17 19:29 | 显示全部楼层 |阅读模式
    本帖最后由 15706794215 于 2018-4-18 10:25 编辑

    在论坛找了一下没找到多级菜单的帖子然后就自己勉强的做了一个,在论坛潜水了这么久了,我也发个程序,用的是LCD12864直接输出中文的,库我会把库放出来的;然后在放几张图片吧。代码比好简单,连线方式论坛上有我就不重复造车轮了,就修改一下引脚定义,程序比较简陋,能实现基本工资的菜单功能,共能模块可以自己加.

    1. #include "LCD12864RSPI.h"
    2. LCD12864RSPI LCDA(4, 5, 6);//引脚定义
    3. int c, var;
    4. #define KEY 22
    5. #define KEY2 29
    6. #define KEY3 25
    7. int KEY_NUM1 = 0;
    8. int KEY_NUM2 = 0;
    9. int KEY_NUM3 = 0;
    10. void setup() {
    11.   pinMode(KEY, INPUT_PULLUP);//按键内部上拉
    12.   pinMode(KEY2, INPUT_PULLUP);
    13.   pinMode(KEY3, INPUT_PULLUP);
    14.   var = 4;//初始化主界面
    15. }

    16. void loop() {
    17.   int dNumber = random(300);//随机数模拟采集值
    18.   ScanKey();//按键函数
    19.   ScanKey2();//按键函数
    20.   ScanKey3();
    21.   switch (var) {//界面循环显示函数
    22.     case 0://界面1
    23.       LCDA.setCursor(0, 2);
    24.       LCDA.print("电机转速");
    25.       LCDA.setCursor(1, 0);
    26.       LCDA.print("电机转速:");
    27.       LCDA.setCursor(1, 5);
    28.       LCDA.print( dNumber);
    29.       break;
    30.     case 1://界面二
    31.       LCDA.setCursor(0, 2);
    32.       LCDA.print("半径显示");
    33.       LCDA.setCursor(1, 0);
    34.       LCDA.print("最大半径:");
    35.       LCDA.setCursor(1, 5);
    36.       LCDA.print( dNumber);
    37.       LCDA.setCursor(2, 0);
    38.       LCDA.print("最小半径:");
    39.       LCDA.setCursor(2, 5);
    40.       LCDA.print( dNumber);
    41.       break;
    42.     case 2://界面三
    43.       LCDA.setCursor(0, 2);
    44.       LCDA.print("正反转");
    45.       LCDA.setCursor(1, 0);
    46.       LCDA.print("正转:");
    47.       LCDA.setCursor(1, 4);
    48.       LCDA.print("正转:");
    49.       break;
    50.     case 3://界面四
    51.       LCDA.setCursor(2, 2);
    52.       LCDA.print("误差:");
    53.       LCDA.setCursor(2, 5);
    54.       LCDA.print( dNumber);
    55.       break;
    56.     case 4:界面五
    57.       LCDA.setCursor(c, 0);
    58.       LCDA.print("→");
    59.       LCDA.setCursor(0, 1);
    60.       LCDA.print("转速显示");
    61.       LCDA.setCursor(1, 1);
    62.       LCDA.print("半径显示");
    63.       LCDA.setCursor(2, 1);
    64.       LCDA.print("正反转判断");
    65.       LCDA.setCursor(3, 1);
    66.       LCDA.print("误差");
    67.       break;
    68.     case 5://界面六
    69.       LCDA.setCursor(c, 0);
    70.       LCDA.print("→");
    71.       LCDA.setCursor(0, 1);
    72.       LCDA.print("电压显示");
    73.       LCDA.setCursor(1, 1);
    74.       LCDA.print("限制");
    75.       LCDA.setCursor(2, 1);
    76.       break;
    77.   }
    78. }
    79. void ScanKey() {//菜单选择
    80.   KEY_NUM1 = 0;                       //清空变量
    81.   if (digitalRead(KEY) == LOW)        //有按键按下
    82.   {
    83.     delay(20);                        //延时去抖动
    84.     if (digitalRead(KEY) == LOW)      //有按键按下
    85.     {
    86.       KEY_NUM1 = 1;                   //变量设置为1
    87.       while (digitalRead(KEY) == LOW); //等待按键松手
    88.     }
    89.   }
    90.   if (KEY_NUM1 == 1)             //是否按键按下
    91.   {
    92.     c = c + 1; LCDA.clear(); if (c > 3) {
    93.       LCDA.clear();  //LED的状态翻转
    94.       var = 5;
    95.       c = 0;
    96.     }
    97.     if (var == 5) {
    98.       if (c == 2) {
    99.         LCDA.clear();
    100.         var = 4;
    101.         c = 0;
    102.       }
    103.     }

    104.   }
    105. }
    106. void ScanKey2() {//确定按键
    107.   KEY_NUM2 = 0;                       //清空变量
    108.   if (digitalRead(KEY2) == LOW)        //有按键按下
    109.   {
    110.     delay(20);                        //延时去抖动
    111.     if (digitalRead(KEY2) == LOW)      //有按键按下
    112.     {

    113.       KEY_NUM2 = 1;                   //变量设置为1
    114.       while (digitalRead(KEY2) == LOW); //等待按键松手
    115.     }
    116.   }
    117.   if (KEY_NUM2 == 1)             //是否按键按下
    118.   {
    119.     var = c; LCDA.clear();
    120.   }
    121. }
    122. void ScanKey3() {//返回按键定义
    123.   KEY_NUM3 = 0;                       //清空变量
    124.   if (digitalRead(KEY3) == LOW)        //有按键按下
    125.   {
    126.     delay(20);                        //延时去抖动
    127.     if (digitalRead(KEY3) == LOW)      //有按键按下
    128.     {
    129.       KEY_NUM3 = 1;                   //变量设置为1
    130.       while (digitalRead(KEY3) == LOW); //等待按键松手
    131.     }
    132.   }
    133.   if (KEY_NUM3 == 1)             //是否按键按下
    134.   {
    135.     var = 4; LCDA.clear();
    136.   }
    137. }
    复制代码
    在论坛也学了不少东西了这是视频youku地址 http://v.youku.com/v_show/id_XMzU0NTMwMjM0OA==.html?spm=a2h3j.8428770.3416059.1

    对应的菜单功能

    对应的菜单功能

    菜单上下选择

    菜单上下选择

    菜单上下选择

    菜单上下选择

    第二页菜单显示

    第二页菜单显示
    33333185703.jpg

    lcd12864.zip

    3.7 KB, 下载次数: 590

  • TA的每日心情
    开心
    2018-6-6 20:38
  • 签到天数: 104 天

    [LV.6]常住居民II

    发表于 2018-4-17 23:12 | 显示全部楼层
                                       图片?

    该用户从未签到

    发表于 2018-4-18 19:23 | 显示全部楼层
    谢楼主,代码很有启示作用!
  • TA的每日心情
    开心
    2019-1-18 15:28
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-7-28 22:56 | 显示全部楼层
    这库强悍!直接print 中文汉字,不需要转换内码。有种发现新大陆的感觉!只是看了半天没看懂它的内码是怎么转换的。。。在.h文件里有个类,然后怎么调用的.cpp里边的代码,,c++没学过,真心搞不明白,望指点

    该用户从未签到

    发表于 2018-8-23 00:13 | 显示全部楼层
    请问是12864B   20 脚的这款屏嘛?
    太强了,直接干中文

    该用户从未签到

    发表于 2018-8-23 00:20 | 显示全部楼层
    请问高手接线是不是可以这教程上面的接?
    谢谢

    该用户从未签到

    发表于 2018-8-23 07:54 | 显示全部楼层
    请问是不是按照这里的接?
    https://www.arduino.cn/forum.php?mod=viewthread&tid=75455&highlight=12864B

  • TA的每日心情
    郁闷
    2019-3-23 09:17
  • 签到天数: 6 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-9-1 15:26 | 显示全部楼层
    share366 发表于 2018-8-23 07:54
    请问是不是按照这里的接?
    https://www.arduino.cn/forum.php?mod=viewthread&tid=75455&highlight=12864B
    ...

    是的就是这图
  • TA的每日心情
    郁闷
    2019-3-23 09:17
  • 签到天数: 6 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-9-1 15:27 | 显示全部楼层
    share366 发表于 2018-8-23 00:13
    请问是12864B   20 脚的这款屏嘛?
    太强了,直接干中文

    是啊就得大家玩的普通LCD12864屏幕
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    arduino温湿度串口监视器显示问题
    arduino温湿度串口监视器
    本人刚学arduino,遇到一些技术问题,希望大佬们帮我看一下程序,具体就是温湿度开始
    全过程展示:PWM自定义、测速、PID调速、PID自整定
    全过程展示:PWM自定义、
    有一天,电控小白在某宝上买来了一块Arduino Mega2560、一款直流电机。小白想:“这款
    关于数据同步遇到的问题
    关于数据同步遇到的问题
    首先,下载了DHT-sensor-library-master.zip 并解压到libraries文件夹中(图1) 其次
    blinker设备连接一会后自动断开
    blinker设备连接一会后自
    [mw_shl_code=arduino,true]#define BLINKER_WIFI #define BLINKER_PRINT Serial #
    学生智能打卡系统(接入blinker)
    学生智能打卡系统(接入bl
    【项目名称】学生智能打卡系统(接入blinker) 一.感谢各位大佬 首先感谢社区的管理员
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表