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

📄 receive_ps2.txt

📁 单片机与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 + -