这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » AVR,ps2 AVR模拟ps2键盘!没反应?请高手指点!!!

共3条 1/1 1 跳转至

AVR,ps2 AVR模拟ps2键盘!没反应?请高手指点!!!

院士
2006-09-17 18:14:16     打赏
AVR,ps2 AVR模拟ps2键盘!没反应?请高手指点!!!



关键词: 模拟     键盘     反应     高手     指点    

院士
2006-12-22 22:43:00     打赏
2楼
问 我看了,不过我们是计算机是主机,单片机是从机,从机向主机发送键盘扫描码,没有反应,
程序如上。是否时序有问题!!
#define CLK PD4
#define DAT PD5

//DATA设置一个上升沿
#define DAT_UP         PORTD|=BIT(DAT)
//DATA设置一个下降沿
#define DAT_DOWN     PORTD&=~BIT(DAT)
//LCK设置一个上升沿
#define CLK_UP         PORTD|=BIT(CLK)
//LCK设置一个下降沿
#define CLK_DOWN       PORTD&=~BIT(CLK)

  void ps2_send(unsigned char data_send)
    {//PS2发送程序,每次发送一个字节。
     //  低位在前,一个校验位,一个停止位
     
      unsigned  char i;
      unsigned  char j,k;
      i=data_send;
      k=parity_check(i);      
      //      
      DDRD=0X30;
      PORTD=0X30;
      //开始位      
      DAT_DOWN;//DATA设置一个下降沿,起使位
      CLK_DOWN;//SCK设置一个下降沿
      delay_us(40);
      //
      CLK_UP;//SCK设置一个上升沿
      delay_us(40);
      //
      for(j=1;j<=8;j++)//发送8位ASCII码
         {
        unsigned char flag;
          flag=i&0x01;
          if(flag)
              {
               DAT_UP;//
              }
           else
              {
               DAT_DOWN;//
              }
      //
          CLK_DOWN;//发送一位数据
          delay_us(40);//
          CLK_UP;//
          delay_us(40);//
          i>>1;//测试下一位
          } //8位发送完毕
          
    
       //下面是校验位与停止位
         
         //
         if(k==1)
         {
               DAT_DOWN;//DATA设置一个下降沿
         }
         else
         {
                DAT_UP;//DATA设置一个上升沿
         }
         //
         //
          
         CLK_DOWN;//SCK设置一个下降沿
         delay_us(40);
         
          //以下是停止位
         CLK_UP;//SCK设置一个上升沿
         delay_us(40);
         DAT_UP;//DATA设置一个上升沿
         CLK_DOWN;//SCK设置一个下降沿
         delay_us(40);
         CLK_UP; //SCK设置一个上升沿
    
    }


1: 有检测忙状态吗?

专家
2022-08-27 15:47:53     打赏
3楼

学习了解一下


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]