打印
[资源共享]

请教矩阵按键扫描的单片机程序问题

[复制链接]
728|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:
}
这是应用键盘值判断是哪个按键被按下的应用程序。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

513

主题

1978

帖子

5

粉丝