您的位置:首页单片机AVR单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

4X4键盘扫描程序

[日期:2008-01-11 ] [来源:iccavr 作者:] [字体: (投递新闻)

4X4键盘扫描程序,采用查表方式,适用于AVR单片机。

此处为4X4键盘软件部分,硬件部分设计请参照:

此程序对应的键盘电路为:

/*
键盘扫描函数
 读取当前键盘的状态
 有按键按下返回相应按键值
 无按键按下返回"0x00"
*/
unsigned char key_read(void){
 unsigned char i;
 
 DDRA = 0x00;/*获取列地址*/
 PORTA = 0x0F;
 DDRA = 0xF0;
 i = PINA;
 
 DDRA = 0x00;/*获取行地址*/
 PORTA = 0xF0;
 DDRA = 0x0F;
 i |= PINA;
 
 DDRA = 0x00;/*输出复位*/
 PORTA = 0xFF;
 
 switch (i) {/*将按键码转换成键值*/
  case  0x00: return 0x00;
  case  0xEE: return '1';
  case  0xDE: return '2';
  case  0xBE: return '3';
  case  0x7E: return 'A';
  case  0xED: return '4';
  case  0xDD: return '5';
  case  0xBD: return '6';
  case  0x7D: return 'B';
  case  0xEB: return '7';
  case  0xDB: return '8';
  case  0xBB: return '9';
  case  0x7B: return 'C';
  case  0xE7: return '*';
  case  0xD7: return '0';
  case  0xB7: return '#';
  case  0x77: return 'D';
  default : return 0x00;
  }
}
/*
按键获取函数
 获取按键信号,其中包含有状态记录及按键去颤抖。
 有正确按键按下返回相应按键值
 无正确按键按下返回"0x00"
*/
unsigned char get_key(void){
 unsigned char i;
 static unsigned char j;/*按键记录*/
 i = key_read();
 if (i == 0x00){/*无有效按键按下*/
  j = 0x00;/*清除按键记录*/
  return 0x00;/*程序退出*/
  }
 if (j == 0x00) {/*为新按键*/
  j = i;/*保存本次采样结果*/
  delay_ms(10);/*去按键颤抖*/
  i = key_read();
  if(i == j) {
   return i;
   }
  }
 return 0x00;
}
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告