博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Arduino》开发 之 基于 u8g2 库 的 OLED 菜单界面
阅读量:3914 次
发布时间:2019-05-23

本文共 2508 字,大约阅读时间需要 8 分钟。

简介:

程序思想移植于:

硬件:

ESP8266:

ESP8266 NODEMCU  
gpio5 D1 SCL
gpio4 D2 SDA

程序示例:

/*@作者:刘泽文@板卡:ESP8266@功能:基于U8g2的简单菜单演示@时间:2020/5/3*/#include 
#include
#include
#define UP_KEY D6 //gpio12#define M_KEY D5 //gpio14#define DOWN_KEY D7 //gpio13//读取键值#define keyup digitalRead(UP_KEY)#define keyenter digitalRead(M_KEY)#define keydown digitalRead(DOWN_KEY)uint8_t func_index=0;void (*current_operation_index)();void fun1();void fun2();void fun3();void fun4();void page_1_to_4();typedef struct{ uint8_t current; uint8_t up;//向上翻索引号 uint8_t down;//向下翻索引号 uint8_t enter;//确认索引号 void (*current_operation)();}key_table;key_table table[7]={ {0,3,1,0,(*fun1)}, {1,0,2,1,(*fun2)}, {2,1,3,2,(*fun3)}, {3,2,0,3,(*fun4)},};U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);void setup(void){ u8g2.begin(); u8g2.enableUTF8Print(); ESP.wdtEnable(5000);//看门狗初始化} void loop(void){ /*******************find index****************************/ if((keyup==0)||(keydown==0)||(keyenter==0)) { delay(10);//消抖 if(keyup==0) { func_index=table[func_index].up; //向上翻 while(!keyup)ESP.wdtFeed();// 喂 狗 } if(keydown==0) { func_index=table[func_index].down; //向下翻 while(!keydown)ESP.wdtFeed();// 喂 狗 } if(keyenter==0) { func_index=table[func_index].enter; //确认 while(!keyenter)ESP.wdtFeed();// 喂 狗 } } current_operation_index=table[func_index].current_operation; (*current_operation_index)();//执行当前操作函数 ESP.wdtFeed();// 喂 狗 }void fun1(){ u8g2.clearBuffer(); page_1_to_4(); //显示光标 u8g2.setFont(u8g2_font_open_iconic_all_1x_t); u8g2.drawGlyph(5, 16*(1%4==0? 4:1%4)-4,118); u8g2.sendBuffer();}void fun2(){ u8g2.clearBuffer(); page_1_to_4(); //显示光标 u8g2.setFont(u8g2_font_open_iconic_all_1x_t); u8g2.drawGlyph(5, 16*(2%4==0? 4:2%4)-4,118); u8g2.sendBuffer();}void fun3(){ u8g2.clearBuffer(); page_1_to_4(); //显示光标 u8g2.setFont(u8g2_font_open_iconic_all_1x_t); u8g2.drawGlyph(5, 16*(3%4==0? 4:3%4)-4,118); u8g2.sendBuffer();}void fun4(){ u8g2.clearBuffer(); page_1_to_4(); //显示光标 u8g2.setFont(u8g2_font_open_iconic_all_1x_t); u8g2.drawGlyph(5, 16*(4%4==0? 4:4%4)-4,118); u8g2.sendBuffer();}void page_1_to_4(){ u8g2.setFont(u8g2_font_wqy14_t_gb2312a); u8g2.setCursor(20, 16*1-2); u8g2.print(" 1.桌面设置"); u8g2.setCursor(20, 16*2-2); u8g2.print(" 2.屏幕设置"); u8g2.setCursor(20, 16*3-2); u8g2.print(" 3.网络信息"); u8g2.setCursor(20, 16*4-2); u8g2.print(" 4.智能配网");}

 

转载地址:http://kkprn.baihongyu.com/

你可能感兴趣的文章
Java中创建对象的5种方式
查看>>
Java并发控制机制详解
查看>>
Java Executor 框架学习总结
查看>>
15个顶级Java多线程面试题及答案
查看>>
成为优秀Java程序员的10大技巧
查看>>
一位10年Java工作经验的架构师聊Java和工作经验
查看>>
Java架构师学习路线
查看>>
号称精通Java的你,是否真的名副其实
查看>>
你可以把编程当做一项托付终身的职业
查看>>
细思极恐——你真的会写Java吗?
查看>>
Java并发面试,幸亏有点道行,不然又被忽悠了
查看>>
Java基础面试题收集整理
查看>>
SpringBoot基础篇Bean之条件注入@Condition使用姿势
查看>>
让你秒懂线程和线程安全,只需5步!
查看>>
Spring Boot学习之Logback和Log4j2集成与日志发展史
查看>>
程序员薪水的那些事
查看>>
Java注解(annotation)机制
查看>>
volatile关键字全面解析
查看>>
Java如何实现哈夫曼编码
查看>>
从源代码的角度理解Java设计模式的装饰模式
查看>>