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

📄 main.lst

📁 通过89s51实现的模拟键盘代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 173   2              bflag1_0=!DIP_6;                 //选择波特率
 174   2              bflag1_1=!DIP_5;
 175   2              x=bflag1;
 176   2                      bflag1_0=!DIP_6;                 //选择波特率
 177   2              bflag1_1=!DIP_5;
 178   2              }while(bflag1!=x);
 179   1      
C51 COMPILER V7.50   MAIN                                                                  11/03/2008 11:24:32 PAGE 4   

 180   1              
 181   1              
 182   1        /*------------------------------------------------------------------调试用             */
 183   1      
 184   1              bflag1=x;    //正式有上面的,没有此项
 185   1         
 186   1       /*------------------------------------------------------------------调试用              */
 187   1      
 188   1      
 189   1              switch(bflag1)           //与说明手册上控制位一致
 190   1              {
 191   2              case 0:   
 192   2                      baud_2400();
 193   2                      break;
 194   2              case 2:   
 195   2                      baud_4800();
 196   2                      break;
 197   2              case 1:   
 198   2                      baud_9600();
 199   2                      break;
 200   2              case 3:   
 201   2                      baud_19200();
 202   2                      break;
 203   2              }
 204   1      
 205   1      
 206   1      }
 207          void IdSelect()                                            //球机ID选择子程序
 208          {
 209   1              unsigned char x;
 210   1              P0_7=1;          //       先给1                  按从左到右的BCD方式
 211   1              P1_7=1;
 212   1              P1_6=1;         
 213   1              P1_5=1;
 214   1              P1_4=1;         
 215   1              P1_3=1;
 216   1              P1_2=1;
 217   1              P1_1=1;
 218   1              do
 219   1       {
 220   2              
 221   2              id_0=!P0_7;              //10位拨码开关的右8 位按BCD排列
 222   2              id_1=!P1_7;
 223   2              id_2=!P1_6;              //可选择256位
 224   2              id_3=!P1_5;
 225   2              id_4=!P1_4;              //P0-6 P1-0两位可作它用  ,如果有相机选择可减少ID位数
 226   2              id_5=!P1_3;
 227   2              id_6=!P1_2;
 228   2              id_7=!P1_1;
 229   2              x=id;
 230   2              id_0=!P0_7;              //10位拨码开关的右8 位按BCD排列
 231   2              id_1=!P1_7;
 232   2              id_2=!P1_6;              //可选择256位
 233   2              id_3=!P1_5;
 234   2              id_4=!P1_4;              //P0-6 P1-0两位可作它用  ,如果有相机选择可减少ID位数
 235   2              id_5=!P1_3;
 236   2              id_6=!P1_2;
 237   2              id_7=!P1_1;
 238   2              }while(id!=x);
 239   1      
 240   1              
 241   1              
C51 COMPILER V7.50   MAIN                                                                  11/03/2008 11:24:32 PAGE 5   

 242   1       /*------------------------------------------------------------------调试用              */
 243   1       //SBUF=x;      
 244   1              id=x;   // 正式有上面的,没有此项
 245   1      
 246   1       /*------------------------------------------------------------------调试用              */     
 247   1              
 248   1      }
 249          void LeftRight_out(char x)                //左右方向的位输出
 250          
 251          {
 252   1              bflag=x;                                          //水平方向电机输出
 253   1              P2_3=bflag_3;
 254   1              P2_2=bflag_2;
 255   1              P2_1=bflag_1;
 256   1              P2_0=bflag_0;
 257   1      }          
 258          void UpDown_out(char x)                         //上下方向的位输出
 259          
 260          {
 261   1              bflag=x;                                           //竖直方向电机输出
 262   1              P2_7=bflag_0;
 263   1              P2_6=bflag_1;
 264   1              P2_5=bflag_2;
 265   1              P2_4=bflag_3;
 266   1      }
 267          
 268          /*----------------------------------------------------------------------------
 269          水平方向电机用T0来控制
 270          竖直方向用T1来控制
 271          波特用T2来控制
 272          ------------------------------------------------------------------------------*/
 273          
 274          void T0_load()
 275          {                                                                                       //水平方向
 276   1              int x;
 277   1              x=T0_interval;
 278   1              TH0=(char)(x>>8);                                               //复位时的时间常数
 279   1              TL0=(char)x;
 280   1      }
 281          void T1_load()
 282          {
 283   1              int x;
 284   1              x=T1_interval;                                                   //竖直方向
 285   1              TH1=(char)(x>>8);                                               //复位时的时间常数
 286   1              TL1=(char)x;
 287   1      }
 288          
 289           void AutoTest(void)                                     //自检程序,加电前拨第9位开关于“on”位
 290          {        
 291   1       while(!P1_0)                                            //自检过程中拨回“off“位进入正常运行
 292   1         {
 293   2               WDT_CONTR=0xff;   //0xff;              启动看门狗看门狗清零
 294   2               if(!cDirectHorizon)
 295   2               cDirectHorizon=1;
 296   2           cAutoScan=1;    
 297   2              T0_start();
 298   2              if(!cDirectVertical)
 299   2              cDirectVertical=1 ;
 300   2               cAutoTestVertical=1 ;
 301   2               T1_start();
 302   2              }
 303   1                       
C51 COMPILER V7.50   MAIN                                                                  11/03/2008 11:24:32 PAGE 6   

 304   1               cAutoScan=0; 
 305   1               cAutoTestVertical=0;
 306   1               T1_stop();
 307   1               T0_stop();
 308   1               CameraStop();
 309   1      /*---------------------------
 310   1      因为串口数据易丢失所以在执行串口的程序前不能加别的程序,可能引起数据丢失
 311   1      所以自检程序放在起始段了
 312   1      ---------------------------*/   
 313   1         
 314   1      }
 315          void main()
 316          {       
 317   1      
 318   1      
 319   1          unsigned int x;
 320   1              unsigned long y;
 321   1      ERRor:
 322   1              WDT_cls();
 323   1              GlobalSet();
 324   1              INT_disable();
 325   1              T0_stop();
 326   1              T1_stop();
 327   1              T2_stop();
 328   1              port_init();
 329   1              INT_set();
 330   1              timer_set();
 331   1              SCI_set();
 332   1              T0_load();
 333   1              T1_load();
 334   1              T2_start();
 335   1              INT_enable(); 
 336   1              BaudSelect();      //波特选择              程序波特及ID可随时选
 337   1              IdSelect();                             //ID选择
 338   1              
 339   1          pKeyCode=sKeyCode;                           //接收码清零程序
 340   1                                       for(x=0;x<20;x++)                                       //预设20个字符
 341   1                                       {
 342   2                                               *pKeyCode =0;
 343   2                                      
 344   2                                               ++pKeyCode ;
 345   2      
 346   2                                       }
 347   1                                       pKeyCode=sKeyCode;        //重新指向代码
 348   1      
 349   1          cProtocal= ProtocalSelect();
 350   1      
 351   1      /*----------------------------------------------------------------------

⌨️ 快捷键说明

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