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

📄 ddcjc.lst

📁 电动车测试平台控制系统。自动测量电动车各项参数
💻 LST
📖 第 1 页 / 共 3 页
字号:
 279   2                     Bike = 406;  //16英寸
 280   2                     break;
 281   2               case 1:
 282   2                     Bike = 457;  //18英寸
 283   2                     break;
 284   2               case 2:
 285   2                     Bike = 508;  //20英寸
 286   2                     break;
 287   2               case 3:
 288   2                     Bike = 559;  //22英寸
 289   2                     break;
 290   2               case 4:
 291   2                     Bike = 610;  //24英寸
 292   2                     break;
 293   2               }
 294   1      }
 295           
 296          void InitSys ()
 297          {
 298   1               //uchar uBaseYear = 4;
 299   1      
 300   1               //初始化各引脚
 301   1               TRIP_PIN =FALSE;         
 302   1           DAT_595 = HIGH;
 303   1           CLK_595 = HIGH;
C51 COMPILER V7.50   DDCJC                                                                 11/28/2006 20:24:32 PAGE 6   

 304   1           STB_595 = HIGH;
 305   1               SEL_595 = HIGH;
 306   1      
 307   1               ClearAllData ();
 308   1      
 309   1               ReadParam ();
 310   1      
 311   1               //初始化定时器0,1
 312   1           TMOD = 0x11;
 313   1              
 314   1               //定时器0,方式1
 315   1           TH0 = TH0_VAL;
 316   1           TL0 = TH0_VAL; 
 317   1               TR0 = TRUE;
 318   1               ET0 = FALSE;  
 319   1                      
 320   1               //定时器1,方式1,用于显示
 321   1           TH1 = TH1_VAL;
 322   1           TL1 = TL1_VAL;
 323   1           TR1 = TRUE;
 324   1               ET1 = TRUE;
 325   1      
 326   1               IsOption = FALSE;
 327   1                                  
 328   1               /*
 329   1               //初始化外中断0
 330   1           IT0 = TRUE; //边沿触发方式
 331   1           EX0 = TRUE;
 332   1               */
 333   1      
 334   1               //初始化外中断1
 335   1           IT1 = TRUE; //边沿触发方式
 336   1               PX1 = TRUE; 
 337   1           EX1 = FALSE;
 338   1               
 339   1               //初始化系统时钟        
 340   1               //Init8583 (PCF8583_CTR, 0x00);          
 341   1               
 342   1           //NValue = NVALUE;
 343   1               Wheel = GetWheel (); 
 344   1               DisplaySysTime ();
 345   1               
 346   1               EA  = TRUE;
 347   1      
 348   1               //测试DA
 349   1               I2CSend (MAX517_ADDR, 0x00, 0x80);
 350   1               
 351   1               //Delay (500, 255);
 352   1      
 353   1              
 354   1      }
 355          
 356          void ClearLED ()     //清除屏幕
 357          {
 358   1           uchar i;
 359   1      
 360   1               for (i=0; i<18; i++)
 361   1                    DispBuf[i] = 0;
 362   1      }
 363          
 364          uint GetWheel ()  //得到轮子周长
 365          {
C51 COMPILER V7.50   DDCJC                                                                 11/28/2006 20:24:32 PAGE 7   

 366   1           uint Temp;
 367   1      
 368   1               Temp = PI * (dword)Dia / 100;
 369   1      
 370   1               if ((PI * (dword)Dia % 100) > 44)
 371   1                   Temp = Temp + 1;
 372   1               return Temp;
 373   1      }
 374          
 375          void DisplaySysTime ()     //显示系统时间
 376          {
 377   1           uchar cTemp, cBaseYear;
 378   1               //显示
 379   1           Get8583Data(BASE_YEAR, &cBaseYear, 1); 
 380   1               Get8583Data (HUNSEC, UartBuf, 6);
 381   1               cTemp = GetYear (UartBuf[4]) + cBaseYear*4;    //年
 382   1               DispBuf[0] = LED_CODE[2];   
 383   1               DispBuf[1] = LED_CODE[0];
 384   1               DispBuf[2] = LED_CODE[(cTemp>>4) & 0x0F];   
 385   1               DispBuf[3] = LED_CODE[ cTemp & 0x0F];
 386   1               cTemp = GetMonth (UartBuf[5]);                     //月
 387   1               DispBuf[4] = LED_CODE[cTemp>>4 & 0x0F];
 388   1               DispBuf[5] = LED_CODE[cTemp & 0x0F];
 389   1               cTemp = GetDate (UartBuf[4]);                              //日
 390   1               DispBuf[6] = LED_CODE[cTemp>>4 & 0x0F];         
 391   1               DispBuf[7] = LED_CODE[cTemp & 0x0F];
 392   1               DispBuf[9] = 0x00;
 393   1               DispBuf[10] = LED_CODE[UartBuf[3]>>4 & 0x0F];  //时     
 394   1               DispBuf[11] = LED_CODE[UartBuf[3] & 0x0F];
 395   1               DispBuf[12] = 0x00;
 396   1               DispBuf[13] = LED_CODE[UartBuf[2]>>4 & 0x0F];  //分     
 397   1               DispBuf[14] = LED_CODE[UartBuf[2] & 0x0F];
 398   1               DispBuf[15] = LED_CODE[UartBuf[1]>>4 & 0x0F];  //秒     
 399   1               DispBuf[16] = LED_CODE[UartBuf[1] & 0x0F];
 400   1               DispBuf[17] = 0x00;
 401   1      }
 402          
 403          
 404          void WriteDateTime()
 405          {
 406   1           uchar uYear;
 407   1               //计算BCD码
 408   1               UartBuf[0] = (UartBuf[16] << 4) | UartBuf[17];  //秒
 409   1               UartBuf[1] = (UartBuf[14] << 4) | UartBuf[15];  //分
 410   1               UartBuf[2] = (UartBuf[12] << 4) | UartBuf[13];  //时
 411   1               uYear = UartBuf[5] * 10 + UartBuf[6];
 412   1               UartBuf[3] = ((uYear%4)<<6) | (UartBuf[10] << 4) | UartBuf[11];  //年日
 413   1               UartBuf[4] = (UartBuf[7] << 4) | UartBuf[9];    //月
 414   1               Set8583Byte (PCF8583_CTR, 0x80);
 415   1               Set8583Data (SECOND, UartBuf, 5);               //写日期时间
 416   1               Set8583Byte (PCF8583_CTR, 0x00);
 417   1               Set8583Byte (BASE_YEAR, uYear/4);                           
 418   1               Set8583Byte (CMP_YEAR, uYear%4);
 419   1      }
 420          
 421          
 422          uint GetResult (uchar uLen)
 423          {
 424   1           uint Data = 0;
 425   1               uchar i;
 426   1      
 427   1               for (i=uLen; i<4; i++)
C51 COMPILER V7.50   DDCJC                                                                 11/28/2006 20:24:32 PAGE 8   

 428   1                    Data = Data * 10 + CodeIndex[i];
 429   1               return Data;
 430   1      }
 431          
 432          void InitCodeIndex (uint Data)
 433          {
 434   1           uchar i;
 435   1               for (i=0; i<4; i++)
 436   1               {
 437   2                    CodeIndex[3-i] = Data % 10;
 438   2                    Data = Data / 10;
 439   2               }
 440   1               DataIndex = CodeIndex[0];
 441   1      }
 442          
 443          uchar ReadKey ()     //读键盘
 444          {
 445   1               //WordType idata Convert;
 446   1      
 447   1               switch (~P2)
 448   1               {
 449   2               case 0x01:               //设置 
 450   2                    bDispTime = FALSE;
 451   2                    IsOption = TRUE;    
 452   2                        ShiftIndex = 4;
 453   2                    ClearLED ();
 454   2                    DispBuf[0] = LED_CODE[10];
 455   2                        DispBuf[1] = LED_CODE[16];
 456   2                        DispBuf[2] = LED_CODE[OptIndex];   
 457   2                        IsShine = TRUE;
 458   2                        switch (OptIndex)
 459   2                        {
 460   3                        case 0:
 461   3                               //显示当前记录编号
 462   3                                       IntToLED (RecordIndex, 3, 3, FALSE, FALSE, 4);
 463   3                                       InitCodeIndex(RecordIndex);
 464   3                                       break;
 465   3                        case 1:  
 466   3                               //计算当前记录编号
 467   3                                       RecordIndex = GetResult(0);
 468   3                                       //记录编号             
 469   3                           //Convert.w = RecordIndex;
 470   3                           //Set8583Data (RCORDINDEX, Convert.b, 2);
 471   3                                       WriteParam ();
 472   3                                       DispBuf[7] = LED_CODE[ModeIndex];
 473   3                               break;
 474   3                        case 2:
 475   3                                       //保存模式
 476   3                                       //Set8583Byte (MODE_INDEX, ModeIndex);
 477   3                                       WriteParam ();
 478   3                                       IntToLED (OptDistance, 3, 2, TRUE, FALSE, 4);    //显示
 479   3                           //换算得到当前值的下标
 480   3                                       InitCodeIndex (OptDistance);
 481   3                               break;
 482   3                        case 3:
 483   3                               //计算设置行程
 484   3                                       OptDistance = GetResult(0);
 485   3                                       OptKilDis = OptDistance / 100;
 486   3                                       OptDis = (OptDistance % 100) * 10;
 487   3                                       
 488   3                                       //里程
 489   3                                       //Convert.w = OptDistance;
C51 COMPILER V7.50   DDCJC                                                                 11/28/2006 20:24:32 PAGE 9   

 490   3                                       //Set8583Data (DIS_ALARM, Convert.b, 2);
 491   3                                       WriteParam ();
 492   3                                       ShiftIndex ++;
 493   3                                       IntToLED (OptRate, 2, 1, TRUE, FALSE, 5);
 494   3                                       //换算得到当前值的下标
 495   3                                       InitCodeIndex(OptRate);
 496   3                               break;
 497   3                        case 4: 
 498   3                               //计算报警速度
 499   3                                       OptRate = GetResult(1);
 500   3                                       
 501   3                                       //车速
 502   3                           //Convert.w = OptRate;
 503   3                                       //Set8583Data (RATE_ALARM, Convert.b, 2);
 504   3                                       WriteParam ();
 505   3                               IntToLED (OptVoltage, 3, 1, TRUE, FALSE, 4);
 506   3                                       //换算得到当前值的下标
 507   3                                       InitCodeIndex(OptVoltage);
 508   3                               break;
 509   3                        case 5:
 510   3                               //计算欠压电压
 511   3                                       OptVoltage = GetResult(0);
 512   3      
 513   3                                       //电压 
 514   3                           //Convert.w = OptVoltage;
 515   3                                       //Set8583Data (VOL_ALARM, Convert.b, 2);
 516   3                                       WriteParam ();
 517   3                                       ShiftIndex ++;
 518   3                               IntToLED (OptCurrent, 2, 1, TRUE, FALSE, 5);
 519   3                                       //换算得到当前值的下标
 520   3                                       InitCodeIndex(OptCurrent);
 521   3                               break;
 522   3                        case 6:
 523   3                               //计算过载电流
 524   3                                       OptCurrent = GetResult(1); 
 525   3      
 526   3                                       //电流
 527   3                           //Convert.w = OptCurrent;
 528   3                                       //Set8583Data (CURR_ALARM, Convert.b, 2);
 529   3                                       WriteParam ();
 530   3                                       //打印模式
 531   3                                       DispBuf[7] = LED_CODE[PrinterIndex];                            
 532   3                               break;
 533   3                        case 7:
 534   3                               //保存打印模式
 535   3                                       //Set8583Byte (PRINT_INDEX, PrinterIndex);
 536   3                                       WriteParam ();
 537   3                                       ShiftIndex = 6;
 538   3                                       //电池容量     
 539   3                                       IntToLED (Battery, 1, 1, FALSE, FALSE, 6); 
 540   3                                       //换算得到当前值的下标
 541   3                                       InitCodeIndex(Battery);
 542   3                               break;
 543   3                        case 8:
 544   3                               Battery = GetResult(2);
 545   3      
 546   3                                       //保存电池容量
 547   3                                       //Set8583Byte (BATTERY, Battery);
 548   3                                       WriteParam ();
 549   3                                       //显示当前N
 550   3                                       IntToLED (NValue, 3, 3, FALSE, FALSE, 4);
 551   3                               //换算得到当前值的下标
C51 COMPILER V7.50   DDCJC                                                                 11/28/2006 20:24:32 PAGE 10  

 552   3                                       InitCodeIndex(NValue);
 553   3                               break;
 554   3                        case 9:
 555   3                               //计算N值
 556   3                                       NValue = GetResult(0);
 557   3      
 558   3                                       //N值    
 559   3                           //Convert.w = NValue;
 560   3                                       //Set8583Data (N_VALUE, Convert.b, 2);
 561   3                                       WriteParam ();
 562   3                                       ShiftIndex ++;
 563   3                                       //显示滚筒直径

⌨️ 快捷键说明

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