1、用单片机接受并解码 ps2键盘发送过来的数据作者:liuee45 来源:本站原创 点击数: 598 更新时间:2010年10月12日 【字体:大 中 小】板子介绍:http:/ :125739409 电话:15173607302/本程序可实现用单片机来接受从 ps2键盘上传输过来的数据./把电脑键盘插入51hei-5开发板的 ps2,然后按键 p0口就会有不同的灯亮/跳线设置:默认/晶振:6M#include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件/#include“51hei.h“/*以下是引脚定义*/sbit PS2CLK=P35; sbit PS
2、2DAT=P27;sbit leds =P14; /*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms()unsigned char i,j; for(i=0;i0;i-)if(!PS2DAT) break; if(!PS2DAT)/再次检测数据线i = 8;PS2CLK = 1;while(!PS2CLK);/等待 PC释放时钟线for( t = 20;t 0;t-); /12M 延时40uSfor( J = 11; J 0 ;J-)PS2CLK = 0;for( t = 20;t 0;t-); /12M 延时40uS
3、PS2CLK =1;if(h = 0)/读8位数据位pcval = 1;if(PS2DAT) pcval |= 0x80;i -;if(i = 0) /完成 h+; else if( h = 1)/读校验位ACC = pcval;if(P = PS2DAT)/校验错误 berr_parity = 1; h+;else if(h = 2)/停止位if(!PS2DAT)berr_stop = 1;break;PS2DAT = 0;h+;else break; if(!PS2CLK) /检测到主机停止发送,返回0xFE PS2DAT = 1 ;return(0xFE); for( t = 20;t 0;t-); /12M 延时20uS/for( J = 11; J 0 ;J-)PS2DAT = 1;/释放if(berr_stop|berr_parity)/停止位错误或者校验错误,返回0XFFwhile(!PS2DAT);return(0xFF);else return(pcval); /返回数据/if(!PS2DAT)/if(!PS2CLK)/end/*函数功能:主函数*/ void main(void) leds=0;while(1) P0= PS2hosttokey();