单片机学习小组
登录
直播中
王莉
7年用户
1254经验值
私信
关注
怎样去编写单片机的独立按键与矩阵按键的扫描函数呢
开启该帖子的消息推送
单片机
独立按键
矩阵按键
单片机
的独立按键是什么?单片机的矩阵按键是什么?
怎样去编写单片机的独立按键与矩阵按键的扫描函数呢?
回帖
(1)
张梅
2022-2-23 09:24:48
蓝桥杯单片机硬件基础
独立按键
跳线帽需要短接J5口的3和2引脚,按键能使用的仅有第一列(即上图中S4、S5、S6、S7)。当按键按下时,相应的P30-33口输入为低电平,由此编写独立按键扫描函数。
矩阵按键
跳线帽需要短接J5口的1和2引脚,按键能使用16个(即上图中S4-S19)。矩阵按键的扫描方法可采用行列扫描法,分为两步:
将行的输出设为低电平(0),检测列的电平输入值。
将列的输出设为低电平(0),检测行的电平输入值。
将两个检测值进行叠加,计算判断哪个按键被按下;具体的原理这里就不展开讲解了,较为简单。
相关代码编写:
独立按键扫描函数:
void KEY_1(void)
{
static u8 key_flag = 1;
if(key_flag && (P30 == 0||P31 == 0|| P32 == 0||P33 == 0))
{
key_flag = 0;
if(P30 == 0) //S7
{
}
else if(P31 == 0) //S6
{
}
else if(P32 == 0) //S5
{
}
else if(P33 == 0) //S4
{
}
}
else if(P33 && P32 && P31 && P30) key_flag = 1;
}
矩阵按键扫描函数:
u16 j;
void KEY_2(void)
{
u16 k; static u16 i;
P44 = 0; P42 = 1; P35 = 1; P34 = 1;
k = P3;
P44 = 1; P42 = 0;
k = (k<<4)|(P3&0x0f);
P42 = 1; P35 = 0;
k = (k<<4)|(P3&0x0f);
P35 = 1; P34 = 0;
k = (k<<4)|(P3&0x0f);
k = ~k;
i = k&(k^j);
j = k;
switch(i)
{
case 0x8000: break; //S4
case 0x4000: break;
case 0x2000: break;
case 0x1000: break;
case 0x0800: break;
case 0x0400: break;
case 0x0200: break;
case 0x0100: break;
case 0x0080: break;
case 0x0040: break;
case 0x0020: break;
case 0x0010: break;
case 0x0008: break;
case 0x0004: break;
case 0x0002: break;
case 0x0001: break;
}
}
蓝桥杯单片机硬件基础
独立按键
跳线帽需要短接J5口的3和2引脚,按键能使用的仅有第一列(即上图中S4、S5、S6、S7)。当按键按下时,相应的P30-33口输入为低电平,由此编写独立按键扫描函数。
矩阵按键
跳线帽需要短接J5口的1和2引脚,按键能使用16个(即上图中S4-S19)。矩阵按键的扫描方法可采用行列扫描法,分为两步:
将行的输出设为低电平(0),检测列的电平输入值。
将列的输出设为低电平(0),检测行的电平输入值。
将两个检测值进行叠加,计算判断哪个按键被按下;具体的原理这里就不展开讲解了,较为简单。
相关代码编写:
独立按键扫描函数:
void KEY_1(void)
{
static u8 key_flag = 1;
if(key_flag && (P30 == 0||P31 == 0|| P32 == 0||P33 == 0))
{
key_flag = 0;
if(P30 == 0) //S7
{
}
else if(P31 == 0) //S6
{
}
else if(P32 == 0) //S5
{
}
else if(P33 == 0) //S4
{
}
}
else if(P33 && P32 && P31 && P30) key_flag = 1;
}
矩阵按键扫描函数:
u16 j;
void KEY_2(void)
{
u16 k; static u16 i;
P44 = 0; P42 = 1; P35 = 1; P34 = 1;
k = P3;
P44 = 1; P42 = 0;
k = (k<<4)|(P3&0x0f);
P42 = 1; P35 = 0;
k = (k<<4)|(P3&0x0f);
P35 = 1; P34 = 0;
k = (k<<4)|(P3&0x0f);
k = ~k;
i = k&(k^j);
j = k;
switch(i)
{
case 0x8000: break; //S4
case 0x4000: break;
case 0x2000: break;
case 0x1000: break;
case 0x0800: break;
case 0x0400: break;
case 0x0200: break;
case 0x0100: break;
case 0x0080: break;
case 0x0040: break;
case 0x0020: break;
case 0x0010: break;
case 0x0008: break;
case 0x0004: break;
case 0x0002: break;
case 0x0001: break;
}
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
独立按键
矩阵按键
单片机
按键
实现的功能有哪些
2022-02-23
993
矩阵
按键
的
扫描
方法有何优缺点
呢
2022-02-23
3185
请问怎么实现51
单片机
独立
按键
和
矩阵
按键
?
2021-08-30
995
单片机
独立
按键
和
矩阵
键盘的原理是什么?
2022-01-18
1197
51
单片机
开发板的查询方式是
独立
按键
还是
矩阵
按键
呢
2021-10-26
1088
怎样
去
编写
STM32
按键
处理的程序
呢
2021-12-01
670
如何
去
实现
独立
按键
与
矩阵
按键
的基本模板
呢
2022-02-23
769
怎样
去
实现
独立
按键
和
矩阵
按键
电路的程序代码
呢
2022-01-20
926
判断
单片机
扫描
矩阵
按键
有无
按键
按下的方法是什么
2022-02-23
1530
怎样
去
编写
一种
按键
状态
机
函数
呢
2022-03-01
1182
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分