⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2.c

📁 一个用C语言编写的usb程序,测试可以运行,内附有原理图
💻 C
字号:
//#pragma SRC
#include <at89x51.h>

#include "ps2.h"

bit ps2read(void) //data read to PS2_BYTE.
{
  unsigned char c;
  bit parity = 0;

//  PS2_BYTE = 0;
  PS2_Ready = 0;
  while (PS2_DATA==0 || PS2_CLK==0);

  c = lim0;
  while (PS2_DATA==1) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  if (PS2_DATA != 0) return 0;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit0 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit1 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit2 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit3 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit4 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit5 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit6 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  PS2_bit7 = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  parity = PS2_DATA;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}
  c = lim1;
  while (PS2_CLK==1) {c--; if (c==0) return 0;}
  if (PS2_DATA != 1) return 0;

  c = lim1;
  while (PS2_CLK==0) {c--; if (c==0) return 0;}

  PS2_Ready = 1;
  return parity;
}

bit ps2test(bit parity)
{
  unsigned char c;
  if (PS2_Ready == 0) return 1;

  s0 = PS2_BYTE;
  c = 0;
  if (s0b0==1) c++;
  if (s0b1==1) c++;
  if (s0b2==1) c++;
  if (s0b3==1) c++;
  if (s0b4==1) c++;
  if (s0b5==1) c++;
  if (s0b6==1) c++;
  if (s0b7==1) c++;
  s0 = c;
  return (s0b0^parity);
}

void ps2write(unsigned char dat)
{
  unsigned char c;
  bit parity;
  s0 = dat;

  c = 0;
  if (s0b0==1) c++;
  if (s0b1==1) c++;
  if (s0b2==1) c++;
  if (s0b3==1) c++;
  if (s0b4==1) c++;
  if (s0b5==1) c++;
  if (s0b6==1) c++;
  if (s0b7==1) c++;
  s0 = c;
  parity = ~s0b0;

  s0 = dat;

  PS2_CLK = 0;
  c = lim0;
  while (c!=0) --c;

  PS2_DATA = 0;
  c = lim2;
  while (c!=0) --c;
  PS2_CLK = 1;
//  c = 250;
//  while (c!=0) --c;
  while (PS2_CLK==1);
//  while (PS2_CLK==0);
//  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b0;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b1;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b2;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b3;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b4;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b5;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b6;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = s0b7;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = parity;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

  c = lim2;
  while (c!=0) --c;
  PS2_DATA = 1;
  while (PS2_CLK==0);
  while (PS2_CLK==1);

} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -