📄 测试键盘.c
字号:
#include<iom16v.h>
#include<macros.h>
volatile unsigned char flag;
void delay(unsigned int ms)
{ unsigned int i,j;
for(i=0;i<ms;i++)
{ for(j=0;j<40;j++);
}
}
unsigned char key_press()
{
unsigned char i;
DDRB=0XFF;
PORTB=0XF0;
DDRB=0X0F;
i=PINB;
if(i==0XF0)
{
DDRB=0XFF;
return 0;
}
else
{
DDRB=0XFF;
return 1;
}
}
unsigned char key_scan()
{
unsigned char key,i=0X7F,j;
delay(40);
if(key_press())
{
do
{
i=(i<<1|i>>7);
PORTB=i;
DDRB=0X0F;
key=PINB;
j=key&0XF0;
}while(j==0XF0);
while(key_press());
switch(key)
{
case 0xEE:
key=0x0;
break;
case 0xDE:
key=0x1;
break;
case 0xBE:
key=0x2;
break;
case 0x7E:
key=0x3;
break;
case 0xED:
key=0x4;
break;
case 0xDD:
key=0x5;
break;
case 0xBD:
key=0x6;
break;
case 0x7D:
key=0x7;
break;
case 0xEB:
key=0x8;
break;
case 0xDB:
key=0x9;
break;
case 0xBB:
key=0xA;
break;
case 0x7B:
key=0xB;
break;
case 0xE7:
key=0xC;
break;
case 0xD7:
key=0xD;
break;
case 0xB7:
key=0xE;
break;
case 0x77:
key=0xF;
break;
default:
key=16;
}
}
else
{
key=16;
}
return key;
}
void init_devices()
{ DDRD=0xff;
PORTD=0X00;
}
void flag_test(void)
{ unsigned char temp;
if(key_press)
{
temp =key_scan();
switch(temp)
{
case 0x0:
flag=0;
break;
case 0x1:
flag=1;
break;
case 0x2:
flag=2;
break;
case 0x3:
flag=3;
break;
case 0x4:
flag=4;
break;
case 0x5:
flag=5;
break;
case 0x6:
flag=6;
break;
case 0x7:
flag=7;
break;
case 0x8:
case 0x9:
case 0xA:
case 0xB:
case 0xC:
case 0xD:
case 0xE:
case 0xF:
flag=8;
break;
default:
break;
}
}
}
void main()
{ init_devices();
flag_test();
while(1)
{
flag_test();
switch(flag)
{ case 0:
PORTD=0XFE;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 1:
PORTD=0XFD;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 2:
PORTD=0XFB;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 3:
PORTD=0XF7;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 4:
PORTD=0XEF;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 5:
PORTD=0XBF;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 6:
PORTD=0XBF;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 7:
PORTD=0X7F;
delay(1000);
PORTD=0X00;
delay(1000);
break;
case 8:
PORTD=0XFF;
delay(1000);
PORTD=0X00;
delay(1000);
break;
default:
//PORTD=0x00;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -