蓝桥杯——单片机学习(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;
}
自己写的代码

key.h

#ifndef __KEY_H
#define __KEY_H
#include "STC15F2K60S2.H"

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moqim Flourite.

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值