📄 receive_ps2.txt
字号:
#define kbda_in PINB //键盘输入
#define kbda_out PORTB //键盘输出
#define kbda_ddr DDRB //键盘方向
#define kbvcc_high 0x10 //键盘电源置高
#define kbvcc_low 0xef //键盘电源置低
#define kbda_high 0x08 //键盘数据置高
#define kbda_low 0xf7 //键盘数据置低
#define kbclk_in PIND //键盘时钟输入
#define kbclk_out PORTD //键盘时钟输出
#define kbclk_ddr DDRD //键盘时钟方向
#define kbclk_high 0x04 //键盘时钟置高
#define kbclk_low 0xfb //键盘时钟置低
//****************单片机从鼠标接收一个字节************//
void receive_1frame(void)
{
unsigned char rec,i,parity,val;
static unsigned char KeyData1=0;
kbda_ddr&=kbda_low;
kbclk_ddr&=kbclk_low;
while(kbda_in&kbda_high);//等待数据线变低,标志着起始位的到来
while(kbclk_in&kbclk_high); //等待时钟线变低
while(!(kbclk_in&kbclk_high));//等待上升沿
for(i=0;i<8;i++)//接收8位数据 。注:鼠标发过来的数据是先发低位后发高位
{
while(kbclk_in&kbclk_high);//等待时钟下降沿,来一个下降沿就从数据线上读一个数据
KeyData1>>=1;
if(kbda_in&kbda_high)
KeyData1|=0x80;
while(!(kbclk_in&kbclk_high)); //等时钟变高
}
if(KeyData1==CODE_POST)
KeyBoardConnectFlag=1;
KeyData1=0;
while(kbclk_in&kbclk_high);//等待校验位的时钟下降沿
while(!(kbclk_in&kbclk_high)); //低电平等
while(kbclk_in&kbclk_high);//等待停止位的下降沿
while(!(kbclk_in&kbclk_high));//等待停止位的上升沿
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -