哈哈, 端口延迟哇.
再写 IO 端口后, 记得要延迟一两个时钟, 否则, 可能读不到准确的数据.
看楼主的程序:
do {
// DDRD=0XFF;
i=(i<<1)|(i>>7);
PORTD=i;
DDRD=0x0f;
j=PIND;
key=j&0xf0;
} while(key==0xf0);
DDRD=0x0f;
j=PIND;
这两句之间没有时间延迟, 所以读不到准确数据了. 中间加几个 _nop() 试试吧.
另外, 楼主应该在改变信号后到读取信号之间尽量增加些时间. 毕竟硬件上还有因寄生电容而导致的延迟呢 |