#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
//延时毫秒函数
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
//、、、、、、读取键盘操作函数、、、、、、、、
uchar key_press()
{
uchar i;
PORTD=0XF0;
DDRD=0X0F;
i=PIND;
if(i==0XF0)
{
return 0;
}
else
{
return 1;
}
}
读取键值函数
uchar key_scan()
{
uchar key,i=0X7F,j;
delay(10);
if(key_press())
{
do
{
i=(i<<1|i>>7);
PORTD=i;
DDRD=0X0F;
key=PIND;
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 main()
{
uchar m;
DDRA|=0X18; // 0001 1000
DDRB=0XFF;
while(1)
{
if(key_press())
{
m=key_scan();
PORTB=m;
}
}
}
AVR----矩阵键盘实验
最新推荐文章于 2020-12-05 21:18:19 发布