#include<avr/io.h> #include<util/delay.h>
unsigned char keyscan(void) { unsigned char temp; unsigned char key;
DDRC=0xF0; //高四位输出,低四位输入。 PORTC=0x0F; _delay_ms(10); temp=PINC; //读PC口 temp=temp&0x0F; temp=~(temp|0xF0); if(temp==1) key=0; else if(temp==2) key=1; else if(temp==4) key=2; else if(temp==8) key=3; else key=16; DDRC=0x0F; //高四位输入,低四位出。 PORTC=0xF0; _delay_ms(10); temp=PINC; //读PC口 temp=temp&0xF0; temp=~((temp>>4)|0xF0); if(temp==1) key=key+0; else if(temp==2) key=key+4; else if(temp==4) key=key+8; else if(temp==8) key=key+12; else key=16;
return key; }
int main(void) { unsigned char k; DDRD=0xff;//D口接流水灯
while (1) { k= keyscan();
switch(k) {case 0:PORTD=(1<<0);break; case 1:PORTD=(1<<1);break; case 2:PORTD=(1<<2);break; case 3:PORTD=(1<<3);break; case 4:PORTD=(1<<4);break; case 5:PORTD=(1<<5);break; case 6:PORTD=(1<<6);break; case 7:PORTD=(1<<7);break; default:PORTD=0x00; } } } mega16,内1M,不知道为什么,按相应的键是没有灯亮呀,谁能说说这是为什么?谢谢了 |