请教 读按键程序.

[复制链接]
2158|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

主题

934

帖子

0

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