定义一个头文档 <KEY.H>,描述可用函数,如下:
代码
1.
#ifndef _KEY_H_ //防止重复引用该文档,如果没有定义过符号
_KEY_H
_
,则编译下面语句
2.
#define _KEY_H_ //只要引用过一次,即
#include <key.h>,则定义符号 _K
EY_H_
3.
unsigned
char
keyHit(
void
);
//
如果按键,则返回非0,否则返回0
4.
unsigned
char
keyGet(
void
);
//读取按键值,如果没有按键则等待到按键为
止
5.
void
keyPut( unsigned
char
ucKeyVal );
//保存按键值 ucKeyVal 到按键缓冲队
列末
6.
void
keyBack( unsigned
char
ucKeyVal );
//退回键值 ucKeyVal 到按键缓冲队
列首
7.
#endif
定义函数体文档 KEY.C,如下:
代码
1.
#include “key.h”
2.
#define KeyBufSize 16 //
定义按键缓冲队列字节数
3.
unsigned
char
KeyBuf[ KeyBufSize ];
//定义一个无符号字符数组作为按键缓
冲队列。该队列为先进
4.
//先出,循环存取,下标从0到
KeyBufSize-1
5.
unsigned
char
KeyBufWp=0;
//
作为数组下标变量,记录存入位置
6.
unsigned
char
KeyBufRp=0;
//
作为数组下标变量,记录读出位置
7.
//
如果存入位置与读出位置相同,则表明队列中无按键数据
8.
unsigned
char
keyHit(
void
)
9.
{
if
( KeyBufWp == KeyBufRp )
return
( 0 );
else
return
( 1 ); }
10.
11.
unsigned
char
keyGet(
void
)
12.
{ unsigned
char
retVal;
//
暂存读出键值
13.
while
( keyHit()==0 );
//等待按键,因为函数 keyHit()的返回值为
0 表示无按
键
14.
retVal = KeyBuf[ KeyBufRp ];
//
从数组中读出键值
15.
if
( ++KeyBufRp >= KeyBufSize ) KeyBufRp=0;
//读位置加1,超出队列则循
环回初始位置
16.
return
( retVal );
17.
}