📄 key.c
字号:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <avr/pgmspace.h>
#include "main.h"
//----------------------------------
//返回 按键 || 返回 按键 || 返回 按键 || 返回 按键 ||
//0~9 0~9 10 。 11 up 12 dw
//返回 按键 || 返回 按键 || 返回 按键 || 返回 按键 ||
// 13 enter 14 menu 15 esc 16 无效
unsigned char array_scan[4]={0xef,0xdf,0xbf,0x7f};
int key_scan(void)
{
int array,jianhao=16;
DDRB=0xf0;//PB4-PB7输出,PB0-PB3输入
PORTB=0x0f;//PB0-PB3使能内部上拉,PB4-PB7输出低
if((PINB&0x0f)!=0x0f)//判断是否有键按下
{
_delay_loop_2(50000);//延时18毫秒
if((PINB&0x0f)!=0x0f)//再次判断是否有键按下
{
for(array=0;array<4;array++)
{
PORTB=array_scan[array];
switch(PINB&0x0f)
{
case 0x0e:jianhao=0+array;break;
case 0x0d:jianhao=4+array;break;
case 0x0b:jianhao=8+array;break;
case 0x07:jianhao=12+array;break;
default:_delay_loop_1(1);//延时270纳秒;
}
}
if((jianhao>=0)&&(jianhao<=3))//等待按键释放
{
PORTB=array_scan[jianhao];
while((PINB&0x0f)!=0x0f);
}
else if((jianhao>=4)&&(jianhao<=7))
{
PORTB=array_scan[jianhao-4];
while((PINB&0x0f)!=0x0f);
}
else if((jianhao>=8)&&(jianhao<=11))
{
PORTB=array_scan[jianhao-8];
while((PINB&0x0f)!=0x0f);
}
else if((jianhao>=12)&&(jianhao<=15))
{
PORTB=array_scan[jianhao-12];
while((PINB&0x0f)!=0x0f);
}
}
else
_delay_loop_1(1);//延时270纳秒
}
else
_delay_loop_1(1);//延时270纳秒
switch(jianhao)
{
case 0: jianhao=15;break;
case 1: jianhao=12;break;
case 2: jianhao=14;break;
case 3: jianhao=13;break;
case 4: jianhao=10;break;
case 5: jianhao=11;break;
case 6: jianhao=0;break;
case 7: jianhao=9;break;
case 8: jianhao=7;break;
case 9: jianhao=8;break;
case 10: jianhao=6;break;
case 11: jianhao=5;break;
case 12: jianhao=3;break;
case 13: jianhao=4;break;
case 14: jianhao=2;break;
case 15: jianhao=1;break;
default:jianhao=16;
}
if(jianhao!=16)
{bell_di();}
//SREG=0x00;//关全局中断
return jianhao;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -