ARM接ps2键盘
/* 此程序是为Ps/2键盘控制上位机程序,用于采集键盘数据和发送键盘控制信号 */
#define PS2_CLK_SET(x) /* 0=输入 1=输出 2=释放状态 */
#define PS2_DATA_SET(x) /* 0=输入 1=输出 2=释放状态 */
#define PS2_CLK(x)
#define PS2_DATA(x)
#define PS2_DELAY(x)
#define PS2_STATE_CLK /* 读时钟线状态 */
#define PS2_STATE_DATA /* 读数据线状态 */
typedef unsigned char U8;
typedef int INT32;
/* 主机向键盘发送一个字节数据 */
void Ps2_SendData(U8 data)
{
INT32 i;
U8 j,k;
/* 时钟拉低100微妙 */
PS2_CLK_SET(1); // 设置为输出
PS2_CLK(0);
PS2_DELAY(100);
/* 数据线拉低 */
PS2_DATA(0);
/* 释放时钟线 */
PS2_CLK_SET(2); // 设置为释放状态
/* 送8位数据 */
k = 0;
for(i=0;i<8;i++)
{
// 这里的while会不会造成死循环???
while(PS2_STATE_CLK); // 等待时钟拉低
j = (data<<i) & 0x1;
k = k ^ j;
PS2_DATA(j);
while(!PS2_STATE_CLK); // 等待时钟拉高,
}
// 发送奇效验
while(PS2_STATE_CLK);
PS2_DATA(k);
while(!PS2_STATE_CLK);
// 释放数据线
PS2_DATA_SET(2);
while(PS2_STATE_DATA); // 等待数据拉低
while(PS2_STATE_CLK); // 等待时钟拉低
// 等待设备释放数据和时钟,
// 这里怎样才能判断数据和时钟线被释放掉???
}
// 问题...