那个大哥有这方面的历程分享下、最好是有硬件驱动的成功案例,借鉴下
比如我小键盘的1的键码是0x69,是不是先发0x69是,在发一次0xf0.0x69结束,好像初始化时还要发什么初始化码?
我现在的程序是一会又了就无限是出现我发的数字,时间又出来不了,,不是按了就有了,是有几率的,我就估计我和电脑配对的时序没弄对,有时间他们有配合对了所以才一直有值,是不是?大家
//------------------------------------------------------------------------------
//---------------------------------------------------------------------------
void OnPS2SendChar(char dat)
{
char ParityBit;
char i;
DIR2_OFF;
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_8)==1)
{
DIR2_ON;
  S_SDA_L;
Delay_Us(20);//start bit
  S_SCL_H;
Delay_Us(20);
  S_SCL_L;
Delay_Us(40);
for(i=0;i<8;i++)
{
if(dat&0x01==0x01){PS_SDA_H arityBit++; Delay_Us(20);}
else {PS_SDA_L; Delay_Us(20);}
dat>>=1;
PS_SCL_H;
Delay_Us(20);
PS_SCL_L;
Delay_Us(40);
}
if(ParityBit%2==0)PS_SDA_H;
else PS_SDA_L;
Delay_Us(20);//parity bit
PS_SCL_H;
Delay_Us(20);
  S_SCL_L;
Delay_Us(40);
  S_SDA_H; Delay_Us(20);//stop bit
  S_SCL_H;
Delay_Us(20);
  S_SCL_L;
Delay_Us(40);
  S_SCL_H;
  S_SDA_H;
Delay_Us(30);
DIR2_OFF;
}
}
void main()
{ Stm32_Clock_Init(9); /*系统时钟设置72MHz*/
delay_init(72); //延时时钟配置
ps2_int();
while(1)
{
OnPS2SendChar(0x73);
Delay_Ms(8);
}
}
引脚是E8--SCL
E10--SDA
E7--SN74LV3245的DIR, OE一直接10K拉的GND
中间是个SN74LV3245的一个芯片进行转化的
|