以下是吴鉴鹰单片机课程里的按键扫描
unsigned char Key_Scan(void)
{
uchar Key_Temp,Scan_Code,Temp_Code;
P2 = 0XF0;
Key_Temp = P2;
if((Key_Temp&0xf0)^0xf0) //0XE0 0b1110 0000 & 0b1111 0000 --0b1110 0000 ^0b1111 0000= 0b0001 0000
{
Scan_Code = 0xfe; //0B1111 1110
while((Scan_Code&0x10) != 0x00) //0XFE = 0B1111 1110 0B1111 0111
{
P2 = Scan_Code;
if((P2&0XF0)^0XF0)
{
Temp_Code = (P2&0XF0)|0X0F;//1101 0111 &0x f0 = 0b1101 0000 |0x0f = 0b1101 1111 ~0b0010 0000
return((~Temp_Code)+(~Scan_Code));
}
else
{
Scan_Code = (Scan_Code<<1)|0X01;// 0b1111 1110 <<1 = 1111 1100 | 0000 0001 = 1111 1101
}
Delay(10); 这里不明白
}
}
return(0);
}
视频里说硬件响应需要时间,这里不明白为什么要加延时。
|