打印

请教 读按键程序.

[复制链接]
1421|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
avocationA|  楼主 | 2008-5-11 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "keyScan.h"

#include <reg51.h>
#define KEY_BOARD P1
#define DELAY_VALUE 500
/*****************
延时子程序
*****************/
void delay()
{
 unsigned short data i;
 for(i = DELAY_VALUE;i != 0;i--);
}
/**********************
取得当前按键码
**********************/
unsigned char getKey()
{
 unsigned char data keyState,scan,count,keyCode;
 keyCode = 0xff;
 /*是否有键按下*/
 KEY_BOARD = 0xf0;                                         
 keyState = KEY_BOARD | 0x0f;
 keyState = ~keyState;
 if(!keyState) return keyCode;
 delay();
 KEY_BOARD = 0xf0;
 keyState = KEY_BOARD | 0x0f;
 keyState = ~keyState;
 if(!keyState) return keyCode;
 /*键盘扫描*/
 scan = 0xfe;
 for(count = 0;count < 4;count++){
     KEY_BOARD = scan;
     scan <<= 1;
     scan ++;
     keyState = KEY_BOARD & 0xf0;
     if(keyState){
          switch(keyState){
          case 0xe0:
               keyCode = count;
               break;
          case 0xd0:
               keyCode = count + 4;
               break;
          case 0xb0:
               keyCode = count + 8;
               break;
          case 0x70:
               keyCode = count + 12;
               break;
          }
     }
     if(keyCode != 0xff) break;
 }
 //等到按键松开
 do{
    KEY_BOARD = 0xf0;
    keyState = KEY_BOARD | 0x0f;
    keyState = ~keyState;
 }while(keyState);
 return keyCode;
}

相关帖子

沙发
avocationA|  楼主 | 2008-5-11 14:10 | 只看该作者

keyState = KEY_BOARD | 0x0f;这句好像没有意义了吧,?

keyState = KEY_BOARD | 0x0f;
keyState = ~keyState;
if(!keyState) return keyCode;

上面那三行不懂,不知道是做什么用的?
keyState 的值好像被覆盖了那么keyState = KEY_BOARD | 0x0f;这句好像没有意义了吧,?

使用特权

评论回复
板凳
一级菜鸟| | 2008-5-11 14:41 | 只看该作者

没有意义?

这段代码是挺臭,不过keyState = KEY_BOARD | 0x0f并非没有意义,它屏蔽了P1的高4位。

使用特权

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

本版积分规则

123

主题

935

帖子

0

粉丝