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

📄 v.lst

📁 8输入简易数字电压表
💻 LST
字号:
C51 COMPILER V7.08   V                                                                     03/08/2009 20:48:41 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE V
OBJECT MODULE PLACED IN v.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE v.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<intrins.h>                 //调用_nop_()延时函数用  
   3          #define ad_con P2                   //0809的控制口? 
   4          #define addata P0                   //0809的数据口    
   5          #define disdata P1                  //数码管的字段码码输出口   
   6          #define uchar unsigned char 
   7          #define uint unsigned int
   8          
   9          uchar num=0x00;                     //存放单通道显示时的当前通道数       
  10          
  11          sbit ALE=P2^3;                      //0809的地址锁存信号                 
  12          sbit START=P2^4;                    //0809的启动信号     
  13          sbit OE=P2^5;                       //0809的输出允许信号    
  14          sbit KEY1=P3^5;                     //循环或单路显示选择按键   
  15          sbit KEY2=P3^6;                     //通道选择?按键     
  16          sbit EOC=P3^7;                      //0809的转换结束?信号 
  17          sbit DISX=disdata^7;                //小数点位   
  18          sbit FLAG=PSW^0;                    //循环或单路显示标志位   
  19          uchar code dis_7[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};  //LED数码管的字段码    
  20          uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7};          //4个LED数码管的位选码     
  21          uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};    //0809的8个通道转换数据缓冲区    
  22          uchar data dis[5]={0x00,0x00,0x00,0x00,0x00};            //显示缓冲区   
  23          
  24          delay1ms(uint t)          //1ms延时子函数   
  25          {uint i,j;
  26   1        for(i=0;i<t;i++)
  27   1        for(j=0;j<120;j++);
  28   1       }
  29          
  30          
  31           keytest()     //检测按键子函数   
  32           { if(KEY1==0)           //检测循环或单路选择按键是否按下     
  33   1            {FLAG=!FLAG;       //标志位取反  ,循环,单路显示切换   
  34   2                 while(KEY1==0);
  35   2                 }
  36   1                 if(FLAG==1)       //单路显示方式时,检测通道选择按键是否按下     
  37   1                 { if(KEY2==0)
  38   2                   {num++;
  39   3                       if(num==8)
  40   3                       {num=0;}
  41   3                       while(KEY2==0);
  42   3                       }
  43   2                       }
  44   1                       }
  45          scan()     //显示扫面子函数   
  46          { 
  47   1      uchar k,n;
  48   1      int h;
  49   1      if(FLAG==0)            //循环显示子程序   
  50   1      {dis[3]=0x00;          //通道值清0    
  51   2       for(n<0;n<8;n++)      //8路通道循环8次  
  52   2       {dis[2]=ad_data[n]/51;  //当前 通道数据转换为BCD码    ?
  53   3        dis[4]=ad_data[n]%51;
  54   3        dis[4]=dis[4]*10;
  55   3        dis[1]=dis[4]/51;
C51 COMPILER V7.08   V                                                                     03/08/2009 20:48:41 PAGE 2   

  56   3        dis[4]=dis[4]%51;
  57   3        dis[4]=dis[4]*10;
  58   3        dis[0]=dis[4]/51;
  59   3        for(h=0;h<500;h++)         //每个通道显示时间控制为1s    
  60   3        {
  61   4          for(k=0;k<4;k++)             //4位LED扫描显示    
  62   4        {
  63   5              disdata=dis_7[dis[k]];
  64   5              if(k==2)
  65   5              {DISX=0;}
  66   5              P3=scan_con[k];
  67   5              delay1ms(1);
  68   5              P3=0xff;
  69   5              }
  70   4              }
  71   3              dis[3]++;          //通道值加1   
  72   3              keytest();         //检测按键  
  73   3              }
  74   2      }
  75   1      if(FLAG==1)           //单路显示子程序  
  76   1      {  
  77   2        dis[3]=num;         //当前通道数送通道显示位      
  78   2      for(k=0;k<4;k++)      //4位LED扫描显示    
  79   2      {disdata=dis_7[dis[k]];
  80   3      if(k==2)
  81   3      {DISX=0;}
  82   3      P3=scan_con[k];
  83   3      delay1ms(1);
  84   3      P3=0xff;
  85   3      }
  86   2      keytest();            //检测按键  
  87   2      }
  88   1        }
  89          
  90          test()       //ADC0809转换子函数   
  91          {  uchar m;
  92   1         uchar s=0x00;                                        //初始通道为0;
  93   1         ad_con=s;                                            //第一通道地址送0809控制口     
  94   1         for(m=0;m<8;m++)
  95   1         {ALE=1;_nop_();_nop_();ALE=0;                        //锁存通道地址   
  96   2          START=1;_nop_();_nop_();START=0;                    //启动转换   
  97   2              _nop_();_nop_();_nop_();_nop_();
  98   2              while(EOC==0);                                      //等待转换结束   
  99   2              OE=1;ad_data[m]=addata;OE=0;                        //读取当前通道转换数据   
 100   2              s++;ad_con=s;                                       //改变通道地址   
 101   2              }
 102   1              ad_con=0x00;                                        //通道地址恢复初值    
 103   1              }
 104          
 105          main()                            //主函数   
 106          {P0=0xff;                         //初始化端口   
 107   1       P2=0x00;
 108   1       P1=0xff;
 109   1       P3=0xff;
 110   1       while(1)
 111   1       {test();
 112   2        scan();
 113   2        }
 114   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.08   V                                                                     03/08/2009 20:48:41 PAGE 3   

   CODE SIZE        =    310    ----
   CONSTANT SIZE    =     15    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14       3
   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 + -