📄 ps2.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 + -