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

📄 pcf8591-da-lcd1602-c51.lst

📁 89S52单片机做的A/D,D/A的实验的源程序PCF8591 D/A CONVERTER */ /* */ /* LCD1602显示 */ /* 参考电压接至5V电源 */ /* 最小输出电
💻 LST
📖 第 1 页 / 共 3 页
字号:
 442          void  Triangle()
 443          {
 444   1          uchar l;
 445   1          for(l=0;l<255;l++)
 446   1               { 
 447   2                 IICSendByte(l);             //data byte
 448   2                 check_ACK();            //检查应答位
 449   2             if(F0 == 1)
 450   2                 {
 451   3                      SystemError = 1;
 452   3              return;               //置错误标志位SystemError
 453   3                 }
 454   2               }
 455   1      
 456   1            for(l=255;l>1;l--)
 457   1               { 
 458   2                 IICSendByte(l);             //data byte
 459   2                 check_ACK();            //检查应答位
 460   2             if(F0 == 1)
 461   2                 {
 462   3                      SystemError = 1;
 463   3              return;               //置错误标志位SystemError
 464   3                 }
 465   2               }
 466   1      }
 467          
 468          /*********************************************************
 469            输出方波函数
 470          *********************************************************/
 471          void  Square()
 472          {
 473   1           IICSendByte(N);         //data byte
 474   1               check_ACK();            //检查应答位
 475   1           if(F0 == 1)
 476   1               {
 477   2                 SystemError = 1;
 478   2             return;               //置错误标志位SystemError
 479   2               }
 480   1            delay(15);
 481   1                N=~N;
 482   1      }
 483          
 484          /*********************************************************
 485            输出正弦波函数
 486          *********************************************************/
 487          void  sin()
 488          {
 489   1        uint i;
C51 COMPILER V7.08   PCF8591_DA_LCD1602_C51                                                12/21/2006 16:15:07 PAGE 9   

 490   1        for(i=0; i<256; i++)
 491   1        {
 492   2          IICSendByte(sin_tab[i]);      //data byte
 493   2              check_ACK();                  //检查应答位
 494   2          if(F0 == 1)
 495   2               {
 496   3                 SystemError = 1;
 497   3             return;                    //置错误标志位SystemError
 498   3               }
 499   2        }
 500   1      
 501   1      }
 502          
 503          /*********************************************************
 504            输出锯齿波函数
 505          *********************************************************/
 506          void  Sawtooth()
 507          {
 508   1        uchar l;
 509   1          for(l=0;l<255;l++)
 510   1               { 
 511   2                 IICSendByte(l);             //data byte
 512   2                 check_ACK();            //检查应答位
 513   2             if(F0 == 1)
 514   2                 {
 515   3                      SystemError = 1;
 516   3              return;                //置错误标志位SystemError
 517   3                 }
 518   2               }
 519   1      }
 520          
 521          /*********************************************************
 522            功能健函数
 523          *********************************************************/
 524          void  keyscan()
 525          {
 526   1         uchar m;
 527   1         if((K2==0)&(!START))       //启动输出后,屏蔽K2健
 528   1         {
 529   2           k_count++;
 530   2           beep();   
 531   2           switch (k_count)
 532   2           {
 533   3              case 1: 
 534   3              lcd_pos(0x00);
 535   3                  for(m=0;m<16;m++)
 536   3              lcd_wdat(dis2[m]);
 537   3           
 538   3              lcd_pos(0x40);
 539   3                  for(m=0;m<16;m++)
 540   3              lcd_wdat(dis5[m]);
 541   3              out1=1;
 542   3                      out4=0;
 543   3              break;
 544   3        
 545   3              case 2: 
 546   3              lcd_pos(0x40);
 547   3                  for(m=0;m<16;m++)
 548   3              lcd_wdat(dis6[m]); 
 549   3              out1=0;
 550   3                      out2=1;
 551   3              break;
C51 COMPILER V7.08   PCF8591_DA_LCD1602_C51                                                12/21/2006 16:15:07 PAGE 10  

 552   3            
 553   3                      case 3: 
 554   3              lcd_pos(0x40);
 555   3                  for(m=0;m<16;m++)
 556   3              lcd_wdat(dis7[m]);
 557   3                      out2=0;
 558   3                      out3=1;
 559   3           
 560   3              break;
 561   3      
 562   3              case 4: 
 563   3              lcd_pos(0x40);
 564   3                  for(m=0;m<16;m++)
 565   3              lcd_wdat(dis8[m]);
 566   3              k_count=0;
 567   3              out3=0;
 568   3                      out4=1;
 569   3              break;
 570   3           
 571   3              default:  
 572   3              out4=0; out3=0; out2=0; out1=0;
 573   3              break;
 574   3           }   
 575   2         }
 576   1         
 577   1          if(K3==0)        //启动输出
 578   1              {
 579   2                 START=1;
 580   2                 beep();
 581   2              }
 582   1      
 583   1              if(K4==0)       //停止输出
 584   1              {
 585   2                 START=0;
 586   2                 beep();
 587   2              }
 588   1      }
 589          
 590          /*******************************************************************/
 591          /*                                                                 */
 592          /*  主函数                                                         */
 593          /*                                                                 */
 594          /*******************************************************************/
 595          main()
 596          {
 597   1          uchar i;
 598   1          delay(10);                 //延时
 599   1          lcd_init();                //初始化LCD
 600   1      
 601   1          lcd_pos(0);                //设置显示位置为第一行
 602   1          for(i=0;i<16;i++) 
 603   1          lcd_wdat(dis1[i]);         //显示字符
 604   1       
 605   1      
 606   1          lcd_pos(0x40);             //设置显示位置为第二行
 607   1          for(i=0;i<16;i++)
 608   1          lcd_wdat(dis2[i]);         //显示字符
 609   1      
 610   1          delay(1500);
 611   1      
 612   1          lcd_pos(0);                //设置显示位置为第一行
 613   1          for(i=0;i<16;i++) 
C51 COMPILER V7.08   PCF8591_DA_LCD1602_C51                                                12/21/2006 16:15:07 PAGE 11  

 614   1          lcd_wdat(dis3[i]);         //显示字符
 615   1       
 616   1          lcd_pos(0x40);             //设置显示位置为第二行
 617   1          for(i=0;i<16;i++)
 618   1          lcd_wdat(dis4[i]);         //显示字符
 619   1      
 620   1              DAC_PCF8591(0x40);
 621   1        
 622   1              while(1)
 623   1          {
 624   2                 keyscan();
 625   2               
 626   2                 while(out1&START)
 627   2                 {
 628   3               sin();              //输出正弦波
 629   3               keyscan();
 630   3                 }
 631   2      
 632   2             while(out2&START)
 633   2                 {
 634   3               Square();           //输出方波
 635   3               keyscan();
 636   3                 }
 637   2      
 638   2                 while(out3&START) 
 639   2                 {
 640   3               Triangle();        //输出三角波
 641   3               keyscan();
 642   3                 }
 643   2            
 644   2                  while(out4&START)
 645   2                 {
 646   3               Sawtooth();        //输出锯齿波
 647   3               keyscan();
 648   3                 }    
 649   2          }
 650   1      }
 651          
 652          //*********************************************************


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    882    ----
   CONSTANT SIZE    =    392    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       1
   IDATA SIZE       =      4       2
   BIT SIZE         =      6       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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