ESP32 矩阵键盘 4*3状态机

简洁高效的ESP32处理矩阵键盘代码…
在这里插入图片描述

/**********矩阵键盘IO映射***************
  3(9)  1(8)   5(4)
                    2(13)
                    7(12)
                    6(18)
                    4(19)
 *************************************/
uint8_t Trg=0,Cont=0;
void Key_Task(void)
{
  uint8_t ReadData,ColumnData,RowData;
  pinMode(9,INPUT_PULLUP);pinMode(8,INPUT_PULLUP);pinMode(4,INPUT_PULLUP);//列线输入
  pinMode(13,OUTPUT);pinMode(12,OUTPUT);pinMode(18,OUTPUT);pinMode(19,OUTPUT);//行线
  //列高行低
  digitalWrite(13,0);digitalWrite(12,0);digitalWrite(18,0);digitalWrite(19,0);
  ColumnData =0x01<<8 | (digitalRead(9)<<6) | (digitalRead(8)<<5) | (digitalRead(4)<<4); //读取列线

  pinMode(9,OUTPUT);pinMode(8,OUTPUT);pinMode(4,OUTPUT);//列线
  pinMode(13,INPUT_PULLUP);pinMode(12,INPUT_PULLUP);pinMode(18,INPUT_PULLUP);pinMode(19,INPUT_PULLUP);//行线输入
  //列低行高
  digitalWrite(9,0);digitalWrite(8,0);digitalWrite(4,0);
  RowData = (digitalRead(19)<<3) | (digitalRead(18)<<2) | (digitalRead(12)<<1) | digitalRead(13); //读取行线

  ReadData=(ColumnData | RowData)^0XFF;
  Trg = ReadData&(ReadData^Cont);	//记录短按键值
  Cont = ReadData;	//记录长按键值

/****************矩阵键码表***********
  1-0X41  	2-0X21 	3-0X11
  4-0X42	5-0X22 	6-0X12
  7-0X44	8-0X24 	9-0X14
  *-0X48	0-0X28 	#-0X18
************************************/
  //按键任务区
  if(Trg == 0x48){ //*按下
    
  }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP8266是一款低成本的Wi-Fi模块,可以用于连接到互联网并与其他设备进行通信。它具有强大的处理能力和丰富的接口,因此非常适合用于物联网应用。4x4矩阵键盘是一种常见的输入设备,由4行4列的按键组成,可以通过行列扫描的方式来检测按键的状态。ESP8266可以通过GPIO引脚与4x4矩阵键盘进行连接,并使用适当的代码来读取按键的状态。 以下是使用ESP8266和4x4矩阵键盘的示例代码: ```python import machine import time # 定义4x4矩阵键盘的行和列引脚 rows = [machine.Pin(0), machine.Pin(1), machine.Pin(2), machine.Pin(3)] cols = [machine.Pin(4), machine.Pin(5), machine.Pin(6), machine.Pin(7)] # 定义4x4矩阵键盘的按键布局 keys = [ ['1', '2', '3', 'A'], ['4', '5', '6', 'B'], ['7', '8', '9', 'C'], ['*', '0', '#', 'D'] ] # 初始化行引脚为输入模式,上拉电阻使其保持高电平 for row in rows: row.init(mode=machine.Pin.IN, pull=machine.Pin.PULL_UP) # 初始化列引脚为输出模式,初始状态为高电平 for col in cols: col.init(mode=machine.Pin.OUT) col.value(1) # 读取按键状态的函数 def read_key(): key = None for i, col in enumerate(cols): col.value(0) # 将当前列引脚拉低 for j, row in enumerate(rows): if not row.value(): # 检测当前行引脚的状态 key = keys[j][i] # 根据行列索引获取按键值 break col.value(1) # 恢复当前列引脚的状态 if key: break return key # 循环读取按键状态并打印 while True: key = read_key() if key: print("Pressed key:", key) time.sleep(0.1) ``` 这段代码通过循环不断读取按键状态,并在按键按下时打印出按键的值。你可以根据需要修改代码,以实现更复杂的功能,比如根据按键值执行不同的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值