[资源共享] 请教矩阵按键扫描的单片机程序问题

[复制链接]
952|0
 楼主| 豌豆爹 发表于 2023-2-20 14:53 | 显示全部楼层 |阅读模式

大家好!以下是某设备上的单片机程序,我有一些不明白的地方把它复制过来了,就是按键值的范围我不太理解

单片机源程序如下:


#include <c8051F020.H>
#include <intrins.H>
#define Keybus  P0
unsigned char R_Keyno;

unsigned char Get_Keyno(void)
{
     unsigned char Key_h,Key_l,Key_no;
   _nop_();_nop_();_nop_();
   Key_h=Keybus;           //我的理解:此时Key_h=P0,应该是P0口的实际状态。
   _nop_();_nop_();_nop_();_nop_();_nop_();
  Keybus=0x0f;               
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  Key_l=Keybus;                  //我的理解:此时Key_l=0x0f
   _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();
  Keybus=0xf1;
   Key_no=Key_h | Key_l;        //我的理解:如果按位或的话那么 Key_no的值低四位永远是F
   _nop_();
   return Key_no;
}
这是矩阵键盘按键读取的子程序,

void keyin_work(void)
{
    switch (R_Keyno)                 //这是其他引用按键的程序,它的后四位并不是F,请问大神们这个怎么得出来的
         case     0xbc:
         case     0xec:
         case     0xea:
         case     0xba:
         case     0xda:
         case     0xd6:
         case     0xb6:
}
这是应用键盘值判断是哪个按键被按下的应用程序。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

534

主题

2335

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部