|
本帖最后由 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();
- }
- }
复制代码 在论坛也学了不少东西了这是视频youku地址 http://v.youku.com/v_show/id_XMzU0NTMwMjM0OA==.html?spm=a2h3j.8428770.3416059.1
|
-
对应的菜单功能
-
菜单上下选择
-
菜单上下选择
-
第二页菜单显示
-
-
-
lcd12864.zip
3.7 KB, 下载次数: 1547
|