////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////4*4键盘程序//////////////////////////////////////////////
#include <delay.h>
#include "key.h"
/******************************按键定义**************************************/
//////////////////////////////////////////////////////////////////////////////
#define KEY_READ_DELAY_US 20
/////////////////////////////////////////////////////////////////////////////////////////////////
/********键盘扫描函数 读取当前键盘的状态 有按键按下返回相应按键值 无按键按下返回"0x00"**********/
unsigned char key_read(void)
{ unsigned char add;
unsigned char row_add; //行地址
unsigned char col_add; //列地址
//KEYPADDec = 0x00;
//获取列地址
PORTA&=0X0f; //PC高位输出低电平
DDRA|=0xF0;
PORTA|=0X0F; //PB0--PB3起用上拉电阻
DDRA&=0xf0; //PB0--PB3为输入
delay_us(KEY_READ_DELAY_US);
//delay_ms(10); //延时10ms,否则可能因为低电平时间太短,出现单片机无法识别按键!重要!
col_add =~((PINA&0X0f)|0xf0);
//获取行地址
PORTA&=0Xf0; //PB低四位输出低电平
DDRA|=0x0F;
PORTA|=0XF0;
DDRA&=0x0f;
delay_us(KEY_READ_DELAY_US);
//delay_ms(10);
row_add=~((PINA&0Xf0)|0x0f);
add=row_add+col_add;
return add;
}