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

📄 monitor.lst

📁 汽车行驶状态记录仪,使用单片机和CPLD开发
💻 LST
📖 第 1 页 / 共 2 页
字号:
 310   3                                      num1=2;
 311   3                                      num2=num2*10+num1;
 312   3                                      disp_num(num1);
 313   3                                      break;
 314   3                              case 0x41:
 315   3                                      num1=3;
 316   3                                      num2=num2*10+num1;
 317   3                                      disp_num(num1);
 318   3                                      break;
 319   3                              case 0x0a:
 320   3                                      num1=4;
 321   3                                      num2=num2*10+num1;
 322   3                                      disp_num(num1);
 323   3                                      break;
 324   3                              case 0x12:
 325   3                                      num1=5;
 326   3                                      num2=num2*10+num1;
 327   3                                      disp_num(num1);
 328   3                                      break;
 329   3                              case 0x22:
 330   3                                      num1=6;
 331   3                                      num2=num2*10+num1;
 332   3                                      disp_num(num1);
 333   3                                      break;
 334   3                              case 0x42:
 335   3                                      num1=7;
 336   3                                      num2=num2*10+num1;
 337   3                                      disp_num(num1);
 338   3                                      break;
 339   3                              case 0x0c:
 340   3                                      num1=8;
 341   3                                      num2=num2*10+num1;
 342   3                                      disp_num(num1);
 343   3                                      break;
 344   3                              case 0x14:
 345   3                                      num1=9;
 346   3                                      num2=num2*10+num1;
 347   3                                      disp_num(num1);
 348   3                                      break;
 349   3                              case 0x24:
 350   3                                      num1=0;
 351   3                                      num2=0;
 352   3                                      lcd_mwc(0xba);
 353   3                                      lcd_mwc(0x40);
 354   3                                      for (num1=0;num1<8;num1++) disp_num(10);
 355   3                                      lcd_mwc(0xba);
 356   3                                      lcd_mwc(0x40);
 357   3                                      break;
 358   3                              case 0x44:
 359   3                                      lcd_mwc(0xba);
 360   3                                      lcd_mwc(0x40);
 361   3                                      for (num1=0;num1<8;num1++) disp_num(10);
 362   3                                      lcd_mwc(0xba);
 363   3                                      lcd_mwc(0x40);
 364   3                                      break;
C51 COMPILER V7.02b   MONITOR                                                              01/18/2005 13:48:05 PAGE 7   

 365   3                      }
 366   2              }
 367   1              return(num2);
 368   1      }
 369          
 370          /*两个中断处理函数*/
 371          
 372          void timer0(void) interrupt 1 using 1
 373          {
 374   1              EA=0;//diable interrupt
 375   1              time_counter++;
 376   1              P3_5=0;//enable cpld
 377   1              circle=P0;
 378   1              P3_5=1;
 379   1              ttcy+=circle;
 380   1              timer0_flag=1;
 381   1              EA=1;
 382   1      }
 383          
 384          
 385          void int0(void) interrupt 0 using 2
 386          {
 387   1              EA=0;
 388   1              WMCON=WMCON&0xfe;
 389   1              int0_flag=1;
 390   1      }
 391          
 392          void main(void)
 393          {
 394   1              uint a;
 395   1              uchar m,n,l;
 396   1              for (m=0;m<200;m++) for (n=0;n<250;n++) ; //delay 200ms,should be adjusted to be not less then 200ms
 397   1                                      //in order to wait peripheral to be ready
 398   1      
 399   1              P3_0=0;//turn alarm off
 400   1              P3_5=1;//diable cpld output
 401   1              P3_2=1;//ready for int0
 402   1              buffer_counter=6;
 403   1              
 404   1              lcd_clear();
 405   1              lcd_init();
 406   1      
 407   1              lcd_mwc(0xb8);
 408   1              lcd_mwc(0x40);
 409   1              dispm_hz_up(&QING);
 410   1              dispm_hz_up(&CHA);
 411   1              dispm_hz_up(&KA);
 412   1              lcd_mwc(0xb9);
 413   1              lcd_mwc(0x40);
 414   1              dispm_hz_down(&QING);
 415   1              dispm_hz_down(&CHA);
 416   1              dispm_hz_down(&KA);//display "请插卡"
 417   1              
 418   1              P1=0xff;
 419   1              while (cardin()&0xa0) ;//这个地方,用什么来表示已经插卡需要商量。
 420   1              
 421   1              page_counter=getcurpage();
 422   1              
 423   1              lcd_mwc(0xb8);
 424   1              lcd_mwc(0x50);
 425   1      //      dispm_hz_up(&QING);
 426   1              dispm_hz_up(&SHU);
C51 COMPILER V7.02b   MONITOR                                                              01/18/2005 13:48:05 PAGE 8   

 427   1              dispm_hz_up(&CHE);
 428   1              dispm_hz_up(&HAO);
 429   1              lcd_mwc(0xb9);
 430   1              lcd_mwc(0x50);
 431   1      //      dispm_hz_down(&QING);
 432   1              dispm_hz_down(&SHU);
 433   1              dispm_hz_down(&CHE);
 434   1              dispm_hz_down(&HAO);//display "请输车号"
 435   1              
 436   1              lcd_mwc(0xba);
 437   1              lcd_mwc(0x40);
 438   1              a=getkey();
 439   1              write_to_flash((uchar)(a>>8));
 440   1              write_to_flash((uchar)a);//store 车号
 441   1              
 442   1              lcd_mwc(0xb8);
 443   1              lcd_mwc(0x60);
 444   1      //      dispm_hz_up(&QING);
 445   1      //      dispm_hz_up(&SHU);
 446   1              dispm_hz_up(&ZHAN);
 447   1      //      dispm_hz_up(&HAO);
 448   1              lcd_mwc(0xb9);
 449   1              lcd_mwc(0x60);
 450   1      //      dispm_hz_down(&QING);
 451   1      //      dispm_hz_down(&SHU);
 452   1              dispm_hz_down(&ZHAN);
 453   1      //      dispm_hz_down(&HAO);//display "请输站号"
 454   1              
 455   1              lcd_mwc(0xba);
 456   1              lcd_mwc(0x40);
 457   1              a=getkey();
 458   1              write_to_flash((uchar)(a>>8));
 459   1              write_to_flash((uchar)a);//store 站号
 460   1              
 461   1      //      buffer_counter=0;
 462   1              
 463   1              set_5s_counter();
 464   1              
 465   1              lcd_mwc(0xb8);
 466   1              lcd_mwc(0x40);
 467   1              dispm_hz_up(&SU);
 468   1              dispm_hz_up(&DU);
 469   1              lcd_mwc(0xb9);
 470   1              lcd_mwc(0x40);
 471   1              dispm_hz_down(&SU);
 472   1              dispm_hz_down(&DU);//display "速度"
 473   1              
 474   1              lcd_mwc(0xbc);
 475   1              lcd_mwc(0x40);
 476   1              dispm_hz_up(&LI);
 477   1              dispm_hz_up(&CHENG);
 478   1              lcd_mwc(0xbd);
 479   1              lcd_mwc(0x40);
 480   1              dispm_hz_down(&LI);
 481   1              dispm_hz_down(&CHENG);//display "里程"
 482   1              
 483   1              
 484   1              
 485   1              while (!run_bit) ;//wait for vehicle move
 486   1              storetime();
 487   1              buffer_counter=10;
 488   1              
C51 COMPILER V7.02b   MONITOR                                                              01/18/2005 13:48:05 PAGE 9   

 489   1              WMCON=0xe0;//2.048s watchdog timer
 490   1              WMCON=WMCON|0x01;//enable watchdog
 491   1              
 492   1              while (1)//sycling wait
 493   1              {
 494   2                      for (m=0;m<250;m++) for (n=0;n<250;n++) ;
 495   2                      for (m=0;m<250;m++) for (n=0;n<250;n++) ;//should be adjusted for 500ms delay
 496   2                      WMCON=WMCON|0x02;//reset watchdog
 497   2                      
 498   2                      if (circle>LIMIT) P3_0=1;
 499   2                      else P3_0=0;//if overspeed then alarm
 500   2                      
 501   2                      if (timer0_flag==1) 
 502   2                      {
 503   3                              write_to_flash(circle);
 504   3                              timer0_flag=0;
 505   3                      }
 506   2      
 507   2                      WMCON=WMCON|0x02;//reset watchdog               
 508   2                      if (time_counter>=120)//if 10 min,show speed and distance
 509   2                      {
 510   3                              time_counter=0;
 511   3                              m=36*circle/35;
 512   3                              n=m/100;
 513   3                              
 514   3                              lcd_mwc(0xba);
 515   3                              lcd_mwc(0x40);
 516   3                              disp_num(n);
 517   3                              
 518   3                              l=(m-n*100)/10;
 519   3                              disp_num(l);
 520   3                              
 521   3                              disp_num(m-n*100-l*10);
 522   3                              disp_num(11);
 523   3                              
 524   3                              n=(36*circle-35*m)*10/35;
 525   3                              disp_num(n);//以上计算速度并显示
 526   3                              
 527   3                              a=ttcy/700;
 528   3                              m=a/100;
 529   3                              
 530   3                              lcd_mwc(0xbd);
 531   3                              lcd_mwc(0x40);
 532   3                              disp_num(m);
 533   3                              n=(a-m*100)/10;
 534   3                              disp_num(n);
 535   3                              disp_num(a-m*100-n*10);
 536   3                              disp_num(11);
 537   3                              m=(ttcy-700*a)*10/700;
 538   3                              disp_num(m);//以上计算并显示里程
 539   3                      }
 540   2      
 541   2                      WMCON=WMCON|0x02;//reset watchdog
 542   2      
 543   2                      if (int0_flag==1) 
 544   2                      {
 545   3                              write_to_flash(0xf0);
 546   3                              write_to_flash(0xf1);
 547   3                              storetime();
 548   3                              
 549   3                              lcd_clear();
 550   3                              lcd_init();
C51 COMPILER V7.02b   MONITOR                                                              01/18/2005 13:48:05 PAGE 10  

 551   3                              lcd_mwc(0xb8);
 552   3                              lcd_mwc(0x40);
 553   3                              dispm_hz_up(&QING);
 554   3                              dispm_hz_up(&SHU);
 555   3                              dispm_hz_up(&ZHAN);
 556   3                              dispm_hz_up(&HAO);
 557   3                              lcd_mwc(0xb9);
 558   3                              lcd_mwc(0x40);
 559   3                              dispm_hz_down(&QING);
 560   3                              dispm_hz_down(&SHU);
 561   3                              dispm_hz_down(&ZHAN);
 562   3                              dispm_hz_down(&HAO);//display "请输站号"
 563   3                              
 564   3                              lcd_mwc(0xba);
 565   3                              lcd_mwc(0x40);
 566   3                              a=getkey();
 567   3                              write_to_flash((uchar)(a>>8));
 568   3                              write_to_flash((uchar)a);//store 站号
 569   3                              
 570   3                              if (buffer_counter!=0)
 571   3                              {
 572   4                                      while (!(df_busy()&0x80)) ;
 573   4                                      P1 &= ~DF_CHIP_SELECT;               // enable DataFlash
 574   4           
 575   4                                      if (active_buffer==1) write_spi(B1_TO_MM_PAGE_PROG_WITHOUT_ERASE);
 576   4                                      else write_spi(B2_TO_MM_PAGE_PROG_WITHOUT_ERASE);
 577   4                                      write_spi(0x00);                       // don't cares
 578   4                                      write_spi((uchar)(page_counter>>7)); // don't cares plus first 4 bits of page address
 579   4                                      write_spi((uchar)(page_counter<<1));      // page address 
 580   4                                      write_spi(0x00);                   // don't cares
 581   4                                             
 582   4                                      P1 |= DF_CHIP_SELECT;                // disable DataFlash
 583   4                                      if (active_buffer==1) active_buffer=0;
 584   4                                      else active_buffer=1;
 585   4                                      buffer_counter=0;
 586   4                              }
 587   3                              
 588   3                              
 589   3                              a=getfrnpg();
 590   3                              write_to_flash((uchar)(page_counter>>8));
 591   3                              write_to_flash((uchar)page_counter);
 592   3                              while (!(df_busy()&0x80)) ;
 593   3                              P1 &= ~DF_CHIP_SELECT;               // enable DataFlash
 594   3           
 595   3                              if (active_buffer==1) write_spi(B1_TO_MM_PAGE_PROG_WITHOUT_ERASE);
 596   3                              else write_spi(B2_TO_MM_PAGE_PROG_WITHOUT_ERASE);
 597   3                              write_spi(0x00);                       // don't cares
 598   3                              write_spi((uchar)(a>>7)); // don't cares plus first 4 bits of page address
 599   3                              write_spi((uchar)(a<<1));      // page address 
 600   3                              write_spi(0x00);                   // don't cares
 601   3                                 
 602   3                              P1 |= DF_CHIP_SELECT;                // disable DataFlash                               
 603   3      
 604   3                              page_counter++;
 605   3                              TIME_LSTPGH=(uchar)(page_counter>>8);
 606   3                              TIME_LSTPGL=(uchar)(page_counter);
 607   3                              a--;                            
 608   3                              TIME_FRNPGH=(uchar)(a>>8);
 609   3                              TIME_FRNPGL=(uchar)a;                   
 610   3                      }       
 611   2              }
 612   1      }
C51 COMPILER V7.02b   MONITOR                                                              01/18/2005 13:48:05 PAGE 11  



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1913    ----
   CONSTANT SIZE    =    448    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19       5
   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 + -