bit keyput_char(unsigned char put_char);
unsigned char keyrev_char();
void mouseput_char();
unsigned char mouserev_char();
bit parity();
bit command();
void receive_process();
void serial_init();
void delay_16us();
void delay_24us();
void delay_ms(unsigned char ms_number);
sbit key_data=P1^0;
sbit key_clk=P1^1;
unsigned char bdata s_buf,r_buf,parity_buf;
unsigned char buffer[5];num=0;
sbit mouse_data=P1^2;
sbit mouse_clk=P1^3;
sbit s_buf0=s_buf^0;
sbit parity_buf0=parity_buf^0;
sbit r_buf7=r_buf^7;
main()
{
unsigned char loop;
serial_init();
for(loop=0;loop <10;loop++)
{
SBUF=loop;
while(TI==0);
TI=0;
}
do
{
receive_process();
}while(1);
}
unsigned char keyrev_char()
{
unsigned char i;
bit PARITY;
r_buf=0;
while(!key_clk);
delay_24us();
if(key_data)
{
return 1;
}
delay_24us();
delay_16us();
key_clk=0;
for(i=0;i <8;i++)
{
delay_24us();
delay_16us();
key_clk=1;
delay_16us();
r_buf7=key_data;
if(i=!7)
r_buf=r_buf> > 1;
delay_24us();
key_clk=0;
}
delay_24us();
delay_16us();
key_clk=1;
delay_16us();
PARITY=key_data;
delay_24us();
key_clk=0;
delay_16us();
delay_24us();
key_clk=1;
delay_24us();
if(!key_data){return 1;};
key_data=0;
delay_16us();
key_clk=0;
delay_16us();
delay_24us();
key_clk=1;
delay_16us();
key_data=1;
delay_16us();
parity_buf=r_buf;
if(PARITY==parity())
return r_buf;
else {return 1;}
}
bit keyput_char(unsigned char put_char)
{
unsigned char i;
bit PARITY;
parity_buf=put_char;
PARITY=parity();
s_buf=put_char;
if(command) return 0;
key_data=0;
delay_16us();
key_clk=0;
for(i=0;i <8;i++)
{
delay_24us();
delay_16us();
key_clk=1;
delay_16us();
if(!key_clk) return 0;
key_data=s_buf0;
s_buf=s_buf> > 1;
delay_16us();
key_clk=0;
}
delay_24us();
delay_16us();
key_clk=1;
delay_16us();
if(!key_clk)return 0;
key_data=PARITY;
delay_24us();
key_clk=0;
delay_24us();
key_clk=1;
delay_16us();
key_data=1;
delay_24us();
key_clk=0;
delay_24us();
delay_24us();
key_clk=1;
delay_16us();
return 1;
}
void serial_init()
{
TH1=0xf3;
TL1=0xf3;
TMOD=0x20;
PCON=0x00;
TR1=1;
SCON=0x40;
}
void delay_ms(unsigned char ms_number)
{
unsigned char loop,loop1;
for(loop=0;loop <ms_number;loop++)
{for(loop1=0;loop1 <160;loop1++);}
}
bit parity()
{
bit parity=1;
unsigned char data c;
for(c=0;c <8;c++)
{
parity^=parity_buf0;
parity_buf=parity_buf> > 1;
}
return parity;
}
bit command()
{
step:while(!key_clk);
delay_16us();
delay_24us();
if(!key_clk) goto step;
if(key_data) return 0;
else return 1;
}
void receive_process()
{
unsigned char rev_char;
if(!(command())) return;
rev_char=keyrev_char();
SBUF=rev_char;
while(TI==0);
TI=0;
}
void delay_24us()
{
unsigned char loop;
for(loop=0;loop <6;loop++);
}
void delay_16us()
{
unsigned char loop;
for(loop=0;loop <3;loop++);
}
我实在不知道原因?电脑发过来数据我怎么接收不到!