📄 key.c
字号:
#include <iom16v.h>
#include <macros.h>
//键盘接口
#define KEYDDR DDRB
#define KEYPORT PORTB
#define KEYPIN PINB
//键盘接口
unsigned char num[]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};
/**************INT0处理函数 start*******************/
/**************
捕捉键盘输入中断进行处理
*******************/
#pragma interrupt_handler INT0_TURNLOW_handler:2
void INT0_TURNLOW_handler(void)
{
unsigned char i,j,ScanCode;
ScanCode=0x01;
CLI();
for(i=0;i<4;i++)
{
KEYPORT=ScanCode;for(j=0;j<10;j++);
if ((KEYPIN&0XF0)!=0x00) USART_Transmit(keycode(ScanCode,KEYPIN&0XF0));//串口发送
ScanCode<<=1;
}
for(j=0;j<200;j++);//消抖
SEI();
KEYPORT=0X0F;
}
/**************INT0处理函数 end*******************/
/**************解码函数 start*******************/
unsigned keycode(unsigned char row,unsigned char line)
{
unsigned char temp;
switch(row) //行值处理
{
case 0x01:temp=0x00;break;
case 0x02:temp=0x04;break;
case 0x04:temp=0x08;break;
case 0x08:temp=0x0c;break;
}
switch(line) //列值处理
{
case 0x10:temp+=0x00;break;
case 0x20:temp+=0x01;break;
case 0x40:temp+=0x02;break;
case 0x80:temp+=0x03;break;
}
return num[temp];
}
/**************解码函数 end*******************/
/**************键盘初始化 stat*******************/
void KEY_INI(void)//高四位输出并拉高
{
KEYDDR = 0x0F;
KEYPORT = 0x0F;
/*************INT0初始化 start******************/
PORTD &= 0xFB;
DDRD &= 0xFB;
MCUCR=(1<<ISC01)|(1<<ISC00);//上升沿触发
GICR=(1<<INT0);
/**************INT0初始化 end*******************/
}
/**************键盘初始化 end*******************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -