电路原理图如下:
char Keysacn() //键盘扫描函数
{
static char n,key_value = 0;
IIC_start();
IIC_Write_cmd(0x42);//读按键命令
IIC_ack();//CLK = 1;
SDA=1; //设置为输入// 在读按键前拉高数据线--在无按键按下时,读键数据为1111_1111
for(n=0;n<8;n++)//从低位开始读-低位在前,高位在后
{
CLK = 0;
// key_value = key_value>>1;//先读低位
delay_6us();
key_value>>=1;
CLK = 1;
if(SDA)
{
key_value = key_value|0x80;
}
else
{
key_value = key_value|0x00;
}
delay_6us();
delay_6us();
delay_6us();
}
IIC_ack();
IIC_stop();
return (key_value);
}
|