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

📄 显示部分程序.lst

📁 2013电子设计大赛手写板G题
💻 LST
📖 第 1 页 / 共 2 页
字号:
 281          下面这个函数用于任何点描点
 282          --------------------------------------------------*/
 283          
 284          void LCD_Display(uchar x,y)
 285           {
 286   1        uchar a[8];
 287   1        uchar j;
 288   1        y=63-y;
 289   1        for(j=0;j<8;j++) a[j]=0x0;
 290   1        a[0]=0x01;
 291   1        a[7]=0x80;
 292   1        if((x==0)||(x==96))
 293   1           { 
 294   2             for(j=0;j<8;j++)
 295   2                 a[j]=0xff; 
 296   2           }
 297   1      /*  if(x%2==0)
 298   1          { 
 299   1                      a[pointY>>3]|=0x01<<(pointY&0x07);
 300   1              a[(pointY+16)>>3]|=0x01<<((pointY+16)&0x07);
 301   1              a[(pointY+32)>>3]|=0x01<<((pointY+32)&0x07);
 302   1                      a[(pointY+48)>>3]|=0x01<<((pointY+48)&0x07);
 303   1              }
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 6   

 304   1      
 305   1      if(x==pointX)
 306   1           for(j=0;j<64;j++)
 307   1                  if(j%2==0)
 308   1                          a[j>>3]|=0x01<<(j&0x07);
 309   1      if(x==(pointX+16))
 310   1           for(j=0;j<64;j++)
 311   1                  if(j%2==0)
 312   1                a[j>>3]|=0x01<<(j&0x07);
 313   1      if(x==(pointX+32))
 314   1           for(j=0;j<64;j++)
 315   1                  if(j%2==0)
 316   1                          a[j>>3]|=0x01<<(j&0x07);
 317   1      if(x==(pointX+48))
 318   1           for(j=0;j<64;j++)
 319   1                  if(j%2==0)
 320   1                          a[j>>3]|=0x01<<(j&0x07);
 321   1      if(x==(pointX+64))
 322   1           for(j=0;j<64;j++)
 323   1                  if(j%2==0)
 324   1                          a[j>>3]|=0x01<<(j&0x07);
 325   1      if(x==(pointX+80))
 326   1           for(j=0;j<64;j++)
 327   1                  if(j%2==0)
 328   1                          a[j>>3]|=0x01<<(j&0x07);
 329   1                */
 330   1       a[y/8]|=0x01<<(y&0x07);
 331   1      
 332   1      LCD_ror_wr(x,a);
 333   1      
 334   1       }
 335          
 336          
 337          unsigned char ad1()
 338          {
 339   1              ADC_CONTR=0x80;//开 A/D 转换电源,选择AD速度
 340   1              P1ASF=0x00;//选择 P1.0 作为 A/D 转换通道
 341   1              ADC_CONTR|=0x08;//启动 A/D 转换
 342   1              while((ADC_CONTR&0x10)==0);//等待 A/D 转换结束
 343   1              ADC_CONTR&=0xE7;//将 ADC_FLAG 清0
 344   1              Delay_us(4);
 345   1              return(ADC_RES);//保存 A/D 转换结果
 346   1      }
 347          
 348          unsigned char ad2()
 349          {
 350   1              ADC_CONTR=0x81;//开 A/D 转换电源,选择AD速度
 351   1              P1ASF=0x02;//选择 P1.0 作为 A/D 转换通道
 352   1              ADC_CONTR|=0x08;//启动 A/D 转换
 353   1              while((ADC_CONTR&0x10)==0);//等待 A/D 转换结束
 354   1              ADC_CONTR&=0xE7;//将 ADC_FLAG 清0
 355   1              Delay_us(4);
 356   1              return(ADC_RES);//保存 A/D 转换结果
 357   1      }
 358          
 359          
 360          /*------------------------------------------------
 361          下面这个函数?
 362          --------------------------------------------------*/
 363          void zhi(uchar x,y,n,uchar *s)
 364          {
 365   1        uchar i;
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 7   

 366   1        for(i=0;i<n;i++)
 367   1        if((x+i)>63)
 368   1         {
 369   2              LCD_WriteCommand(0xB8+y,Right);
 370   2              LCD_WriteCommand(0x40+x+i-64,Right);
 371   2              LCD_WriteData(s[i],Right);
 372   2         }
 373   1        else
 374   1         {
 375   2              LCD_WriteCommand(0xB8+y,Left);
 376   2              LCD_WriteCommand(0x40+x+i,Left);
 377   2              LCD_WriteData(s[i],Left);
 378   2         }
 379   1      }
 380          
 381          
 382          void stop_play(void) interrupt 0
 383          { 
 384   1          
 385   1        stop=1;
 386   1        while(stop){stop=key2;}
 387   1      }
 388          
 389          
 390          void play_stop(void) interrupt 2
 391          {
 392   1      
 393   1      gao=0;
 394   1      di=0;
 395   1      cai[0]=0;
 396   1      cai[1]=255;
 397   1      cai[2]=0;
 398   1      cai[3]=0;
 399   1      cai0[0]=0;
 400   1      cai0[1]=9;
 401   1      cai0[2]=0;
 402   1      shi=0;
 403   1      ge=0;
 404   1      ms=0; 
 405   1                       
 406   1                         
 407   1      }
 408          /*---------------------------------------------------------------------------
 409          下面这个函数初始化一开始的显示值。
 410          ---------------------------------------------------------------------------*/
 411          void display_int(void)    
 412          {
 413   1      zhi(98,0,5,Table3+5*0);    //显示PPV  单位 V  小数点。
 414   1      zhi(104,0,5,Table3+5*0);
 415   1      zhi(110,0,5,Table3+5*1);
 416   1      zhi(117,2,5,Table3+5*1);
 417   1      zhi(107,2,1,Table4); 
 418   1      
 419   1      zhi(98,4,5,Table3+5*4);    //显示 FREQ 和 单位 HZ 小数点
 420   1      zhi(104,4,5,Table3+5*5);
 421   1      zhi(110,4,5,Table3+5*6); 
 422   1      zhi(116,4,5,Table3+5*7); 
 423   1      zhi(117,6,5,Table3+5*2); 
 424   1      zhi(123,6,5,Table3+5*3);
 425   1      //zhi(107,6,1,Table4);
 426   1      
 427   1      zhi(101,2,5,Table+5*shi);  
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 8   

 428   1      zhi(110,2,5,Table+5*ge);        
 429   1      
 430   1      zhi(98,6,5,Table+5*0);               
 431   1      zhi(104,6,5,Table+5*0);
 432   1      zhi(110,6,5,Table+5*0);
 433   1      for(x=0;x<98;x++)
 434   1      {
 435   2      LCD_Display(x,0);
 436   2      }
 437   1      
 438   1        
 439   1      }
 440          /*---------------------------------------------------------------------------
 441          下面这个函数初始化一开始变量值,和中断
 442          ---------------------------------------------------------------------------*/
 443          void data_int(void)       
 444          {
 445   1        x=0;
 446   1        EA=1;
 447   1        EX0=1;
 448   1        EX1=1;
 449   1        P3=0Xff;
 450   1        P1=0Xff;
 451   1        
 452   1        cai[0]=0;
 453   1        cai[1]=255;
 454   1        cai[2]=0;
 455   1        cai[3]=0;
 456   1        cai0[0]=0;
 457   1        cai0[1]=9;
 458   1        cai0[2]=0;
 459   1        shi=0;
 460   1        ge=0;
 461   1      
 462   1      
 463   1      }
 464          
 465          
 466          
 467          /*---------------------------------------------------------------------------
 468          下面这个函数计算峰峰值 和 频率 并显示出来
 469          ---------------------------------------------------------------------------*/
 470          void display_vvp_hz(void)
 471          {
 472   1      
 473   1                        cai[3]=ad1();
 474   1                     //   cai0[2]=gao+di;
 475   1                        n=(unsigned int)cai[3];
 476   1                                                 m=n/4;
 477   1                                                 shi=m/10;
 478   1                                                      ge=m%10;
 479   1                         zhi(101,2,5,Table+5*shi);                 
 480   1                         zhi(110,2,5,Table+5*ge);
 481   1                                        cai[0]=ad2();
 482   1                                       n=(unsigned int)cai[0];
 483   1                                       count=n*2;
 484   1                                        shu3=count/100;       
 485   1                                                                count=count%100;
 486   1                                                                shu1=count/10;    // 获取计数值的十位
 487   1                                    shu2=count%10;
 488   1                                        zhi(98,6,5,Table+5*shu3);               
 489   1                                    zhi(104,6,5,Table+5*shu1);
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 9   

 490   1                                    zhi(110,6,5,Table+5*shu2);
 491   1      
 492   1      }
 493          
 494          
 495          //定时器0的中断函数
 496          void T0_int() interrupt 1
 497          {
 498   1              TL0=0xf0;
 499   1              TH0=0xdb;
 500   1      
 501   1              time--;
 502   1              if(time==0){ //定时1s
 503   2                      shu1=TH1;
 504   2                      shu2=TL1;
 505   2                      count=shu1*256+shu2;
 506   2                      flag=1;
 507   2                      TH1=0;
 508   2                      TL1=0;
 509   2                      time=108;
 510   2              }
 511   1      
 512   1      }
 513          
 514          /*---------------------------------------------------------------------------
 515          下面这个函数为主函数?
 516          ---------------------------------------------------------------------------*/
 517          void main(void) 
 518          { 
 519   1        LCD_Initial();  
 520   1        Delay_x10ms(10);
 521   1        LCD_CLR(Left);
 522   1        Delay_x10ms(10);
 523   1        LCD_CLR(Right);
 524   1        Delay_x10ms(10);
 525   1      
 526   1        data_int();
 527   1        display_int();
 528   1        
 529   1      while(1)
 530   1      
 531   1      {        
 532   2                       
 533   2                    caiy1=ad1(); caiy2=ad1(); //caiy3=ad1(); caiy4=ad1();
 534   2                    y=(9*caiy1+caiy2)/80;
 535   2                                caix1=ad2(); caix2=ad2(); //caix3=ad2(); caix4=ad2();
 536   2                     x=(9*caix1+caix2)/80;
 537   2      
 538   2                    if(y<64)          //当接收到的数据是有效值的时候
 539   2                                           {                 
 540   3                     y=y+5;
 541   3                                 x=x+8;
 542   3                         LCD_Display(x,y);  //显示在液晶屏上描绘当前数据点。
 543   3                                         display_vvp_hz();
 544   3                                        // 时间轴 加1;下一个点会描绘在X+1处。
 545   3                       }
 546   2                  
 547   2                  if(x==97) x=0;           //当时间轴满了,超过了方格范围,时间轴变回起点。
 548   2                  Delay_x10ms(10);        //延时,延时值MS越大,单位时间内能取得的点越少,波形显示就越窄。。反之
             -越宽。
 549   2               
 550   2      }    
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 10  

 551   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1692    ----
   CONSTANT SIZE    =    109    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =    101      25
   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 + -