unsigned char keyscan(void)
{
unsigned char i,j,key=0xff;
DDRA =0xf0; //设置端口高4位输出,低四位内部上拉输入
PORTA=0x0f; //初始行输出都为0
if((PINA&0x0f)==0x0f) return 0xff; //没有键按下时直接返回
else
{
delay(5); //延时去抖
if((PINA&0x0f)==0x0f) return 0xff; //再次判断是否有键按下
else
for(i=4;i<8;i++)
{
PORTA=~(1<<i)|0x0f; //i行输出全0
for(j=0;j<4;j++)
{
if((PINA&(1<<j))==0) //读取键值
key=(i-4)*4+j; //计算键值,0~15 r
}
}return key;
}
}
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余1页未读,立即下载