void KeyInit(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin =_74HC165D_DAT_PIN ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //复用推挽输出
GPIO_Init(_74HC165D_DAT_GPIO, &GPIO_InitStructure); //
GPIO_InitStructure.GPIO_Pin =_74HC165D_CLK_PIN ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //复用推挽输出
GPIO_Init(_74HC165D_CLK_GPOI, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin =_74HC165D_LD_PIN ;
GPIO_Init(_74HC165D_LD_GPIO, &GPIO_InitStructure);
_74HC165D_LD_H;
_74HC165D_CLK_L;
}
unsigned char ReadKey(void)
{
_74HC165D_LD_H;
_74HC165D_CLK_L;
unsigned char dat = 0x00;
_74HC165D_LD_L;
delay_us(2);
_74HC165D_LD_H;
if(PAin(0))
{
dat|=0x01;
}
for(unsigned char i = 0 ; i<7; i++)
{
dat<<=1;
_74HC165D_CLK_L;
_74HC165D_CLK_H;
delay_us(2);
dat |= (PAin(0))?1:0;
}
_74HC165D_CLK_L;
return dat;
}