background image

 

定义一个头文档 <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.

}