IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 单片机学习(5(2)——按键(矩阵按键)) -> 正文阅读

[嵌入式]单片机学习(5(2)——按键(矩阵按键))

注:此单片机型号为STC15F2K60S2.

矩阵按键

原理

来源:我自己:)
首先,把跳线帽连接1、2,使其进入矩阵按键模式。

来源:我自己:)
此时,即为矩阵按键模式。
来源:我自己:)
按键原理
由图可看出,行接口有:P30、P31、P32、P33.
——————列接口有:P44、P42、P35、P34.
以S7举例,假设要检测S7被按下,则首先要设置其左端为低电平,即设置P44为低电平并且其余端口保持高电平,再检测其右端即P30是否为低电平即可。
(原理与独立按键相似,只是要自己设置一段为低电平。)

代码

来源:蓝桥杯官方。

unsigned char Key_Read(void)
{
  unsigned int  Key_New;
  unsigned char Key_Val;

  P44 = 0; P42 = 1; P35 = 1; P34 = 1;	// 第1列
  Key_New = P3;
  P44 = 1; P42 = 0;	// 第2列
  Key_New = (Key_New<<4) | (P3&0x0f);/*这里需要注意,先将P3与一个0x0f,将前面的清零,
  然后再将结果与前值左移四位的数相或,或是有1则为1,其他都不变,
  所以前四项保持不变,后四项看是否按下而改变。*/
  P42 = 1; P35 = 0;	// 第3列
  Key_New = (Key_New<<4) | (P3&0x0f);
	P35 = 1; P34 = 0;	// 第4列
  Key_New = (Key_New<<4) | (P3&0x0f);

  switch(~Key_New) //因为每次只按下一个按键,就算你以为同时按下,实际上仍为依次按下。
  {
    case 0x8000: Key_Val = 4; break;	// S4     0111 1111 1111 1111
    case 0x4000: Key_Val = 5; break;	// S5     1011 1111 1111 1111
    case 0x2000: Key_Val = 6; break;	// S6     1101 1111 1111 1111
    case 0x1000: Key_Val = 7; break;	// S7     1110 1111 1111 1111
    case 0x0800: Key_Val = 8; break;	// S8     1111 0111 1111 1111
    case 0x0400: Key_Val = 9; break;	// S9     1111 1011 1111 1111
    case 0x0200: Key_Val = 10; break;	// S10
    case 0x0100: Key_Val = 11; break;	// S11
    case 0x0080: Key_Val = 12; break;	// S12
    case 0x0040: Key_Val = 13; break;	// S13
    case 0x0020: Key_Val = 14; break;	// S14
    case 0x0010: Key_Val = 15; break;	// S15
    case 0x0008: Key_Val = 16; break;	// S16
    case 0x0004: Key_Val = 17; break;	// S17
    case 0x0002: Key_Val = 18; break;	// S18
    case 0x0001: Key_Val = 19; break;	// S19
    default: Key_Val = 0;
  }
  return Key_Val;
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:56:38  更:2021-10-08 11:56:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:42:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码