跳到主要内容

4.3 OLED显示屏与按键实现

(1)介绍与准备

在把屏幕点“亮”后,我们继续在这个基础上学习按键的操作。在ESP32平台上,KEY1等4个按键默认接上拉电阻,当按键按下时,其电平状态为低电平,我们可以根据这个原理来判断按键是否按下。

通常的按键所用的开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了减少这种现象带来的影响,我们采取的措施是软件上的按键消抖,通过延时一段时间后再进行判断。

alt text

图4.3.1 原理图

(2)实验代码

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

//spi驱动方式
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 36, /* data=*/ 35, /* cs=*/ 10, /* dc=*/ 33, /* reset=*/ 34);
uint8_t a = 0;
int key1Pin = 1; // 按键引脚1

void setup(void) {
pinMode(key1Pin ,INPUT_PULLUP); //上拉输入
u8g2.begin();
}

void loop(void) {
int Value = digitalRead(key1Pin); //读取按键1引脚的值
if (Value == LOW) { //判断键值等于0,执行下面的程序
delay(100);//软件消抖
if(Value == LOW){
a++;
}
}

u8g2.clearBuffer();
u8g2.setFont(u8g2_font_wqy16_t_gb2312a);
u8g2.setCursor(0,32);
u8g2.print(a);
u8g2.sendBuffer();
}

(3)实验讲解

表1.3 按键模块函数讲解
函数说明
pinMode()
设置引脚的模式,设置引脚的模式,如输入、输出等
digitalRead()
读取数字引脚的 HIGH(高电平)或 LOW(低电平)
u8g2.setFont()
设置字体集
u8g2.setCursor()
设置绘制光标位置(x,y)

(4)实验现象

编译上传代码后,可以看到屏幕上显示“0”这个数字。每次按下按键KEY1时,这个数字加1。

alt text

图4.3.2 KEY1按下一次时