|
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
const uchar table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void fm();
void delay(uint z);
void init();
void key();
void display();
void fm();
void main()
{
init();
while(1)
{
key();
display();
}
}
void delay(uint z)//延時函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()//初始化函數(shù)
{
DDRA=0X5C;
DDRB=0XFF;
PORTA&=0XFB;
PORTB=0XFF;
PORTA|=0X04;
PORTA&=0XFB;
PORTA&=0XEF;
// PORTB=0XFF;
PORTB=0XFE;
PORTA|=0X10;
PORTA&=0XEF;
}
void key()
{
uchar temp;
DDRD=0XFF;
PORTD=0XFF;
PORTD&=0XFE;
DDRD&=0X0F;
// PORTD&=0XFE;
temp=PIND;//讀數(shù)據(jù),判斷是否有鍵按下
temp=temp&0XF0;
if(temp!=0XF0)
{
delay(10);
PORTD&=0XFE;
temp=PIND;
temp=temp&0XF0;
if(temp!=0XF0)
{
temp=PIND;
switch(temp)
{
case 0xeE:
num=0;
break;
case 0xdE:
num=1;
break;
case 0xbE:
num=2;
break;
case 0x7E:
num=3;
break;
}
}
while(temp!=0XF0)
{
PORTD&=0XFE;
temp=PIND;
temp=temp&0XF0;
fm();//蜂鳴器函數(shù),由于是有緣蜂鳴器,所以需要一定的頻率來驅動才能發(fā)聲
}
}
DDRD=0XFF;
PORTD=0XFF;
PORTD&=0XFD;
DDRD&=0X0F;
temp=PIND;
temp=temp&0XF0;
if(temp!=0XF0)
{
delay(10);
PORTD&=0XFD;
temp=PIND;
temp=temp&0XF0;
if(temp!=0XF0)
{
temp=PIND;
switch(temp)
{
case 0xeD:
num=4;
break;
case 0xdD:
num=5;
break;
case 0xbD:
num=6;
break;
case 0x7D:
num=7;
break;
}
}
while(temp!=0XF0)
{
PORTD&=0XFD;
temp=PIND;
temp=temp&0XF0;
fm();
}
}
DDRD=0XFF;
PORTD=0XFF;
PORTD&=0XFB;
DDRD&=0X0F;
temp=PIND;
temp=temp&0XF0;
if(temp!=0XF0)
{
delay(10);
PORTD&=0XFB;
temp=PIND;
temp=temp&0XF0;
if(temp!=0XF0)
{
temp=PIND;
switch(temp)
{
case 0xeB:
num=8;
break;
case 0xdB:
num=9;
break;
case 0xbB:
num=10;
break;
case 0x7B:
num=11;
break;
}
}
while(temp!=0XF0)
{
PORTD&=0XFB;
temp=PIND;
temp=temp&0XF0;
fm();
}
}
DDRD=0XFF;
PORTD=0XFF;
PORTD&=0XF7;
DDRD&=0X0F;
temp=PIND;
temp=temp&0XF0;
if(temp!=0XF0)
{
delay(10);
PORTD&=0XF7;
temp=PIND;
temp=temp&0XF0;
if(temp!=0XF0)
{
temp=PIND;
switch(temp)
{
case 0xe7:
num=12;
break;
case 0xd7:
num=13;
break;
case 0xb7:
num=14;
break;
case 0x77:
num=15;
break;
}
}
while(temp!=0XF0)
{
PORTD&=0XF7;
temp=PIND;
temp=temp&0XF0;
fm();
}
}
}
void display()//顯示函數(shù)
{
PORTA&=0XF7;
PORTB=table[num];
PORTA|=0X08;
PORTA&=0XF7;
}
void fm()
{
PORTA&=0XBF;
delay(3);
PORTA|=0X40;
delay(1);
}
|
|