51环境下键盘驱动(矩阵键盘).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五节:键盘驱动 指提供一些函数给任务调用,获取按键信息,或读取按键值。 定义一个头文档 KEY.H,描述可用函数,如下: HYPERLINK \l ifndef \o 条件编译控制。意是如果没有定义过某符号#ifndef _KEY_H_ //防止重复引用该文档,如果没有定义过符号 _KEY_H_,则编译下面语句  HYPERLINK \l define \o 符号定义。意是定义一个符号,符号可以为空 #define _KEY_H_ //只要引用过一次,即 #include key.h,则定义符号 _KEY_H_ HYPERLINK \l unsignedChar \o 无符号字符。实际是一个字节、八位二进制的无符号数,取值范围从0到255unsigned char keyHit(  HYPERLINK \l void \o 表示空,即没有。 void ); //如果按键,则返回非0,否则返回0 unsigned char keyGet( void ); //读取按键值,如果没有按键则等待到按键为止 void keyPut( unsigned char ucKeyVal ); //保存按键值ucKeyVal到按键缓冲队列末 void keyBack( unsigned char ucKeyVal ); //退回键值ucKeyVal到按键缓冲队列首  HYPERLINK \l endif \o 条件编译控制。与 #ifdef 或 #ifndef 配对使用 #endif 定义函数体文档 KEY.C,如下: #include “key.h” #define KeyBufSize 16 //定义按键缓冲队列字节数 unsigned char KeyBuf[ KeyBufSize ]; //定义一个无符号字符数组作为按键缓冲队列。该队列为先进 //先出,循环存取,下标从0到 KeyBufSize-1 unsigned char KeyBufWp=0; //作为数组下标变量,记录存入位置 unsigned char KeyBufRp=0; //作为数组下标变量,记录读出位置 //如果存入位置与读出位置相同,则表明队列中无按键数据 unsigned char keyHit( void ) { if( KeyBufWp == KeyBufRp ) return( 0 ); else return( 1 ); } unsigned char keyGet( void ) { unsigned char retVal; //暂存读出键值 while( keyHit()==0 ); //等待按键,因为函数keyHit()的返回值为 0 表示无按键 retVal = KeyBuf[ KeyBufRp ]; //从数组中读出键值 if( ++KeyBufRp = KeyBufSize ) KeyBufRp=0; //读位置加1,超出队列则循环回初始位置 return( retVal ); } void keyPut( unsigned char ucKeyVal ) { KeyBuf[ KeyBufWp ] = ucKeyVal; //键值存入数组 if( ++KeyBufWp = KeyBufSize ) KeyBufWp=0; //存入位置加1,超出队列则循环回初始位置 } /***************************************************************************************** 由于某种原因,读出的按键,没有用,但其它任务要用该按键,但传送又不方便。此时可以退回按键队列。就如取错了信件,有必要退回一样 ******************************************************************************************/ void keyBack( unsigned char ucKeyVal ) { /* 如果KeyBufRp=0; 减1后则为FFH,大于KeyBufSize,即从数组头退回到数组尾。或者由于干扰使得KeyBufRp超出队列位置,也要调整回到正常位置, */ if( --KeyBufRp = KeyBufSize ) KeyBufRp=KeyBufSize-1; KeyBuf[ KeyBufRp ] = ucKeyVal; //回存键值 } 下面渐进讲解键盘物理层的驱动。 电路共同点:P2端口接一共阴数码管,共阴极接GND,P2.0接a段、P2.1接b段、…、P2.7接h段。 软件共同点:code unsigned char

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档