400-810-1218加入收藏夹|设为主页|广告服务|网币|登录|注册
当前位置:首页 >> 技术频道 >> 单片机开发

用C语言编写的带有16个按键的实验仿真板键盘实例

来源:平凡单片机 作者:佚名 发布时间:2009-10-09 08:49:15 发表评论

摘要:由于DPJ8的16个按键属矩阵式键盘,较之直接接法要复杂,加之dpj8版本变换时输入/输出口作过变化,因此造成很多读者对DPJ8实验仿真板中的键盘用法不甚明了。

关键词:C键盘单片机

  由于DPJ8的16个按键属矩阵式键盘,较之直接接法要复杂,加之dpj8版本变换时输入/输出口作过变化,因此造成很多读者对DPJ8实验仿真板中的键盘用法不甚明了。

  以下以C语言为例写一个例子,说明键的用法:

  #include "at89x52.h"

  typedef unsigned char uchar;

  typedef unsigned int uint;

  void mDelay(uint j)

  { uint i;

  for(;j>0;j--)

  for(i=0;i<125;i++);

  }

  /*键盘接法:

  矩阵式键盘:

  

 

  p3.7~p3.4是行线,用于输出

  P3.3~P3.0是列行,用于输入

  先读入P3的高4位的值,然后将相应的值再写入P3口的低4位

  例:按键F读入P3.7的值,如果是0,则P3.3为0,否则为1

  按键E 0, P3.4

  .

  .

  .

  .

  */

  uchar GetKey()

  { uchar KeyValue,tmp;

  uchar i;

  P3=0x0f; //用于输入的P3口的I/O线置高,用于输出的I/O口线全部为低

  KeyValue=P3; //获得P3口的值

  KeyValue|=0xf0; //低4位置高

  if(KeyValue==0xff)

  return 0; //无键按下

  else

  mDelay(10); //否则延时10ms去键抖动

  P3=0x0f; //用于输入的P3口的I/O线置高,用于输出的I/O口线全部为低

  KeyValue=P3; //获得P3口的值

  KeyValue|=0xf0; //低4位置高

  if(KeyValue==0xff)

  return 0;

  else

  { for(i=0;i<4;i++)

  { P3=0xff; //P3口全部置高

  P3&=~(0x80>>i);

  /*0x80就是10000000B,当i=0时,0x80>>i即为该数本身,~为取反,即P3和01111111B相与

  如果i=1,那么0x80>>i的结果是01000000,取反后是10111111,即P3和该数相与

  i是其他值依次类推,保证每次总是只有一条输出线是低电平

  */

  KeyValue=P3; //取键值

  KeyValue|=0xf0;

  if(KeyValue!=0xff)

  break;

  }

  KeyValue&=~(0x10<

  for(;;) //以下等待键释放

  { P3=0x0f;

  tmp=P3;

  tmp|=0xf0;

  if(tmp==0xff)

  break;

  }

  return KeyValue;

  }

  }

  void main()

  {

  uchar KeyValue;

  for(;;)

  KeyValue=GetKey();

  }

  以下是按下各键后返回的键值:

  E7,EB,ED,EE

  D7,DB,DD,DE

  B7,BB,BD,BE

  77,7B,7D,7E

  在得到这些键值后,不难对各键进行相应的处理。

0
顶一下
0
踩一下

发表评论

请自觉遵守互联网相关政策法规,作者管理后台可以删除恶意评论、广告和违禁词语。