Arduino 用LCD12864做的多级菜单显示功能-Arduino中文社区 - Powered by Discuz! Archiver

15706794215 发表于 2018-4-17 19:29

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

本帖最后由 15706794215 于 2018-4-18 10:25 编辑

在论坛找了一下没找到多级菜单的帖子然后就自己勉强的做了一个,在论坛潜水了这么久了,我也发个程序,用的是LCD12864直接输出中文的,库我会把库放出来的;然后在放几张图片吧。代码比好简单,连线方式论坛上有我就不重复造车轮了,就修改一下引脚定义,程序比较简陋,能实现基本工资的菜单功能,共能模块可以自己加.
#include "LCD12864RSPI.h"
LCD12864RSPI LCDA(4, 5, 6);//引脚定义
int c, var;
#define KEY 22
#define KEY2 29
#define KEY3 25
int KEY_NUM1 = 0;
int KEY_NUM2 = 0;
int KEY_NUM3 = 0;
void setup() {
pinMode(KEY, INPUT_PULLUP);//按键内部上拉
pinMode(KEY2, INPUT_PULLUP);
pinMode(KEY3, INPUT_PULLUP);
var = 4;//初始化主界面
}

void loop() {
int dNumber = random(300);//随机数模拟采集值
ScanKey();//按键函数
ScanKey2();//按键函数
ScanKey3();
switch (var) {//界面循环显示函数
    case 0://界面1
      LCDA.setCursor(0, 2);
      LCDA.print("电机转速");
      LCDA.setCursor(1, 0);
      LCDA.print("电机转速:");
      LCDA.setCursor(1, 5);
      LCDA.print( dNumber);
      break;
    case 1://界面二
      LCDA.setCursor(0, 2);
      LCDA.print("半径显示");
      LCDA.setCursor(1, 0);
      LCDA.print("最大半径:");
      LCDA.setCursor(1, 5);
      LCDA.print( dNumber);
      LCDA.setCursor(2, 0);
      LCDA.print("最小半径:");
      LCDA.setCursor(2, 5);
      LCDA.print( dNumber);
      break;
    case 2://界面三
      LCDA.setCursor(0, 2);
      LCDA.print("正反转");
      LCDA.setCursor(1, 0);
      LCDA.print("正转:");
      LCDA.setCursor(1, 4);
      LCDA.print("正转:");
      break;
    case 3://界面四
      LCDA.setCursor(2, 2);
      LCDA.print("误差:");
      LCDA.setCursor(2, 5);
      LCDA.print( dNumber);
      break;
    case 4:界面五
      LCDA.setCursor(c, 0);
      LCDA.print("→");
      LCDA.setCursor(0, 1);
      LCDA.print("转速显示");
      LCDA.setCursor(1, 1);
      LCDA.print("半径显示");
      LCDA.setCursor(2, 1);
      LCDA.print("正反转判断");
      LCDA.setCursor(3, 1);
      LCDA.print("误差");
      break;
    case 5://界面六
      LCDA.setCursor(c, 0);
      LCDA.print("→");
      LCDA.setCursor(0, 1);
      LCDA.print("电压显示");
      LCDA.setCursor(1, 1);
      LCDA.print("限制");
      LCDA.setCursor(2, 1);
      break;
}
}
void ScanKey() {//菜单选择
KEY_NUM1 = 0;                     //清空变量
if (digitalRead(KEY) == LOW)      //有按键按下
{
    delay(20);                        //延时去抖动
    if (digitalRead(KEY) == LOW)      //有按键按下
    {
      KEY_NUM1 = 1;                   //变量设置为1
      while (digitalRead(KEY) == LOW); //等待按键松手
    }
}
if (KEY_NUM1 == 1)             //是否按键按下
{
    c = c + 1; LCDA.clear(); if (c > 3) {
      LCDA.clear();//LED的状态翻转
      var = 5;
      c = 0;
    }
    if (var == 5) {
      if (c == 2) {
      LCDA.clear();
      var = 4;
      c = 0;
      }
    }

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

      KEY_NUM2 = 1;                   //变量设置为1
      while (digitalRead(KEY2) == LOW); //等待按键松手
    }
}
if (KEY_NUM2 == 1)             //是否按键按下
{
    var = c; LCDA.clear();
}
}
void ScanKey3() {//返回按键定义
KEY_NUM3 = 0;                     //清空变量
if (digitalRead(KEY3) == LOW)      //有按键按下
{
    delay(20);                        //延时去抖动
    if (digitalRead(KEY3) == LOW)      //有按键按下
    {
      KEY_NUM3 = 1;                   //变量设置为1
      while (digitalRead(KEY3) == LOW); //等待按键松手
    }
}
if (KEY_NUM3 == 1)             //是否按键按下
{
    var = 4; LCDA.clear();
}
}
:D在论坛也学了不少东西了这是视频youku地址 http://v.youku.com/v_show/id_XMzU0NTMwMjM0OA==.html?spm=a2h3j.8428770.3416059.1

sanhuasr 发表于 2018-4-17 23:12

                                 图片?

索尔学单片机 发表于 2018-4-18 19:23

谢楼主,代码很有启示作用!:lol

abraham.w 发表于 2018-4-22 20:17

前来学习

sundaniao 发表于 2018-7-28 22:56

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

share366 发表于 2018-8-23 00:13

请问是12864B   20 脚的这款屏嘛?
太强了,直接干中文

share366 发表于 2018-8-23 00:20

请问高手接线是不是可以这教程上面的接?
谢谢

share366 发表于 2018-8-23 07:54

请问是不是按照这里的接?
https://www.arduino.cn/forum.php?mod=viewthread&tid=75455&highlight=12864B

https://www.arduino.cn/data/attachment/forum/201802/07/210619oqmucek869umlckz.jpg

15706794215 发表于 2018-9-1 15:26

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

是的就是这图

15706794215 发表于 2018-9-1 15:27

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

是啊就得大家玩的普通LCD12864屏幕
页: [1] 2 3 4 5 6
查看完整版本: Arduino 用LCD12864做的多级菜单显示功能