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

📄 hello.lst

📁 运用protel设计简单ps2协议键盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
 196                          说明:键盘发送一个字节
 197                          参数:unsigned char
 198                          返回:无
 199                          功能:键盘发送数据
 200          ------------------------------------------------*/
 201          void SendByte(unsigned char scanCode){
 202   1         
 203   1          int i;
 204   1              int ood;
 205   1              CLK =1;
 206   1               
 207   1           wait: while(!CLK);
 208   1                        
 209   1                                                 //等待时钟为高
 210   1                    Delay50us();
 211   1                         if(!CLK)
 212   1                     goto wait;
 213   1      
 214   1                   if(!DATA)                //数据线不为高就退出                                  
 215   1                     return;
 216   1                        
 217   1                        Delay20us(); //延时20us
 218   1                        
 219   1                       
 220   1                        DATA =0;
 221   1                        Delay20us();//延时20us
 222   1                         if(!CLK)
 223   1                     return ;                          //主机阻止发送
 224   1                        CLK =0;                 //输出起始位
 225   1                        Delay40us();//延时40us
 226   1                        CLK =1;
 227   1                        Delay20us();//延时20us
 228   1                       
 229   1                         
 230   1                       for(i = 0; i < 8; i++){  //循环输出八位数据
 231   2                       while(CLK){
 232   3                 if(scanCode&0x01)
 233   3                           { DATA =1; ood++;}
 234   3                         else
 235   3                           DATA =0;
 236   3                      
 237   3                              scanCode >>=1;
 238   3                              Delay20us();//延时20us
 239   3                              if(!CLK)
 240   3                       return ;                        //主机阻止发送
 241   3                              CLK =0;
C51 COMPILER V8.05a   HELLO                                                                12/18/2006 18:13:10 PAGE 5   

 242   3                              Delay40us();//延时40us
 243   3                              
 244   3      
 245   3                       }
 246   2                       CLK =1;             //输出脉冲
 247   2                       Delay20us();//延时20us
 248   2                      
 249   2                       }                       //八位输出完毕
 250   1                       
 251   1               
 252   1                         if(ood%2)                     //奇校验位如果有偶数个1则输出为1
 253   1                           DATA = 1;
 254   1                         else
 255   1                           DATA =0;            //输出脉冲
 256   1                        Delay20us();//延时40us
 257   1                         if(!CLK)
 258   1                     return ;                          //主机阻止发送
 259   1                         CLK =0;
 260   1                        Delay40us();//延时40us
 261   1                         CLK = 1;
 262   1                        Delay20us();//延时20us
 263   1              
 264   1                         DATA =1;                      //输出结束位
 265   1                         Delay20us();//延时20us
 266   1                         CLK = 0;
 267   1                         Delay40us();//延时40us
 268   1                         CLK =1;
 269   1                         Delay20us();//延时20us
 270   1                        
 271   1                              
 272   1                       Delay15us();            //延时30us
 273   1                       Delay15us();
 274   1                       
 275   1                       return;
 276   1                       
 277   1      
 278   1      }
 279          /*-----------------------------------------------
 280                  unsigned char ReceieveByte()  
 281                          说明:键盘接收一个字节
 282                          参数:无
 283                          返回:unsigned char
 284                          功能:键盘接收数据
 285          ------------------------------------------------*/
 286          unsigned char RecieveByte(){
 287   1      
 288   1        unsigned char recieveData =0x00;
 289   1        unsigned char i;
 290   1        unsigned char ood;
 291   1        unsigned char oodRight;
 292   1        
 293   1        while(!CLK);        //等待时钟为高
 294   1        
 295   1        if(DATA)                        //等待数据为低
 296   1         {return 0xfe;}
 297   1         
 298   1        /*DelayNus(30);      //延时20us
 299   1        CLK = 0;                      // 将时钟线拉低
 300   1        DelayNus(59);      //延时40us
 301   1        CLK =1;                        //释放时钟线
 302   1        DelayNus(30);      //延时20us
 303   1                                               
C51 COMPILER V8.05a   HELLO                                                                12/18/2006 18:13:10 PAGE 6   

 304   1                                               //接收起始位 */
 305   1        for(i = 0;i <8;i++){
 306   2              Delay20us();      //延时20us
 307   2              CLK = 0;                        // 将时钟线拉低
 308   2              Delay40us();      //延时40us
 309   2              CLK =1;                  //释放时钟线
 310   2              Delay20us();      //延时20us
 311   2              recieveData>>=1;
 312   2              /*读八位数据*/
 313   2              if(DATA){
 314   3               recieveData = recieveData | 0x80;
 315   3               ood++;
 316   3              }
 317   2              else
 318   2               recieveData = recieveData &0x7F;
 319   2              if(!CLK)
 320   2               return 0xfe; 
 321   2        }
 322   1      
 323   1       
 324   1        Delay20us();      //延时20us
 325   1        CLK = 0;                      // 将时钟线拉低
 326   1        Delay40us();      //延时40us
 327   1        CLK =1;                        //释放时钟线
 328   1        Delay20us();      //延时20us
 329   1                                               
 330   1         if(ood == DATA)      
 331   1              oodRight =1;
 332   1        else
 333   1          oodRight =0;         //接收校验位
 334   1        if(!CLK)
 335   1               return 0xfe; 
 336   1      
 337   1        Delay20us();      //延时20us
 338   1        CLK = 0;                      // 将时钟线拉低
 339   1        Delay40us();      //延时40us
 340   1        CLK =1;                        //释放时钟线
 341   1        Delay20us();      //延时20us
 342   1                                               
 343   1                                                //接收结束位
 344   1        if(!DATA)
 345   1               return 0xfe; 
 346   1              
 347   1        // if(!DATA)   //如果数据线还为0高,等待主机拉高
 348   1      //      return 0;    //发生了错误
 349   1              
 350   1                           //发送应答位
 351   1        Delay15us(); //延时15us
 352   1        DATA =0;              //把数据线拉低
 353   1        Delay5us();   //延时5us
 354   1        CLK =0;
 355   1        Delay40us(); // 延时40us
 356   1        CLK =1;
 357   1        Delay5us();   //延时5us
 358   1        DATA =1;         
 359   1        
 360   1        
 361   1        /*检验校验位是否正确,不正确就产生一个错误*/
 362   1         if(!oodRight)
 363   1                 error = 1;
 364   1         
 365   1         Delay40us();   //延时45us    
C51 COMPILER V8.05a   HELLO                                                                12/18/2006 18:13:10 PAGE 7   

 366   1         Delay5us();
 367   1       return recieveData;
 368   1      }
 369          /*-----------------------------------------------
 370                        unsigned char C_Command()
 371                                     说明:判断主机是否要发送命令
 372                                 参数:无
 373                             返回:unsigned char
 374                                 功能:判断主机是否要发送命令
 375          --------------------------------------------------*/
 376          unsigned char C_Command(){
 377   1       DATA =1;
 378   1       CLK =1;
 379   1       if(!DATA)
 380   1        return 1;
 381   1       else
 382   1        return 0;
 383   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    517    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -