⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard.c

📁 一个关于AVR单片机的例程
💻 C
字号:
/**************************************
** Filename: keyboard.c
** Describe: 矩阵键盘程序
** Author : 古欣 www.avrvi.com
** Time  :   2007-2-15
**************************************/

#include "config.h"

/**************************************
** 说明:线翻转法进行键盘扫描
** 输出:获得高低位的扫描值
** 有键时需要耗时 14ms
**************************************/
unsigned char key_scan(void)
{
 unsigned char temp=0,key=0;
 KEY_DDR  = 0xF0;  //高四位输出0,键按下,则对应的值为0
 KEY_PORT = 0x0F;  //低四位输入,内部电阻上拉,没有键按下时为高
 temp = KEY_PIN&0x0F;//与掉高四位
 if(temp==0x0F)
 {
  return 0; // 无按键返回
 }
 else
 {
  delay_ms(10);
  temp = KEY_PIN&0x0F; //延时去抖后再检测
  if(temp==0x0F)
    return 0;
  else
    key=temp; 
 }
 //翻转
 KEY_DDR  = 0x0F;  //低四位输出0,键按下,则对应的值为0
 KEY_PORT = 0xF0;  //高四位输入,内部电阻上拉,没有键按下时为高
 delay_ms(3);     //延时等待稳定
 
 temp = KEY_PIN&0xF0;//与掉低四位
 if(temp==0xF0)
 {
  return 0; // 无按键返回
 }
 else   //这里不再延时再扫描,因为已经确定了不是抖动才会进入本步操作。
 {
    key |= temp; //高低位的键值进入KEY
 }
 KEY_DDR = 0x00;/*输出复位*/
 KEY_PORT = 0xFF;

 return key;
}


/**************************************
** 说明:获得键盘的值  
** 内部调用函数key_scan
** 输出:实际键值
**************************************/
unsigned char get_key(void)
{
 unsigned char i=0;
 i=key_scan();
 switch (i) {/*将按键码转换成键值*/
  case  0x00: return 0x00;
  case  0xEE: return '1';
  case  0xED: return '2';
  case  0xEB: return '3';
  case  0xE7: return 'A';
  case  0xDE: return '4';
  case  0xDD: return '5';
  case  0xDB: return '6';
  case  0xD7: return 'B';
  case  0xBE: return '7';
  case  0xBD: return '8';
  case  0xBB: return '9';
  case  0xB7: return 'C';
  case  0x7E: return '*';
  case  0x7D: return '0';
  case  0x7B: return '#';
  case  0x77: return 'D';
  default : return 0x00;
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -