新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > avr 矩陣鍵盤掃描,一種比較簡(jiǎn)單的方法

avr 矩陣鍵盤掃描,一種比較簡(jiǎn)單的方法

作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/201611/316381.htm

#include
#include
#define uchar unsigned char
#define uint unsigned int
#pragma data:code //隨后的數(shù)據(jù)將存貯在程序區(qū),即FLASH區(qū),此區(qū)只能存貯常量,比如表格之類。
const table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c ,
0x39,0x5e,0x79,0x71,0};
#pragma data:data//隨后的數(shù)據(jù)將存貯在數(shù)據(jù)區(qū),即RAM區(qū),此區(qū)可存貯常量和變量。
void delay(uint ms)
{
uint i,j;
for(i=0;ifor(j=0;j<1141;j++);
}
void show_init()
{
DDRA|=BIT(3);
DDRB=0XFF;
DDRA|=BIT(4);
}
void show(uchar aa,uchar bb)//第aa個(gè)數(shù)碼管顯示bb
{

//PORTB=0XFF;
PORTA|=BIT(4);
PORTB=~BIT(aa);
PORTA&=~BIT(4);

PORTA|=BIT(3);
PORTB=table[bb];
PORTA&=~BIT(3);


delay(10);
}

uchar key_scan()
{

uchar i,j,m,n;
uchar key=0;
uchar t[4]={0x7f,0xbf,0xdf,0xef};

for(i=0;i<4;i++)
{
DDRD=0XF0;
j=t[i];

PORTD=j;

if((PIND&0X01)==0)
{
delay(5);
if((PIND&0X01)==0)
{
while((PIND&0X01)==0);
return key;
break;
}
}
key++;

if((PIND&0X02)==0)
{
delay(5);
if((PIND&0X02)==0)
{
while((PIND&0X02)==0);
return key;
break;
}
}
key++;
if((PIND&0X04)==0)
{
delay(5);
if((PIND&0X04)==0)
{
while((PIND&0X04)==0);
return key;
break;
}
}
key++;
if((PIND&0X08)==0)
{
delay(5);
if((PIND&0X08)==0)
{
while((PIND&0X08)==0);
return key;
break;
}
}
key++;
}
return 0xff;//如果沒有健按下返回0xff

}

void main()
{
uchar s=0;
show_init();
while(1)
{
s=key_scan();
if(s!=0xff)//如果有健按下,,顯示
show(0,s);

}

}



關(guān)鍵詞: avr矩陣鍵盤掃

評(píng)論


技術(shù)專區(qū)

關(guān)閉