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

📄 标准数字表c程序.c

📁 再分享一个数字万用表的源码
💻 C
字号:
#include<reg52.h>
#include<math.h>                             
#include<absacc.h>
                                      //使用共阳数码管,ADC0809  0-5V量程
number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示数字0-9
number1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//显示数字0-9和dp
sbit four=P2^0;          //数码管位控端接口
sbit three=P2^1;
sbit two=P2^2;
sbit one=P2^3;
sbit ST=P3^0;            //ADC0809  Start(开始转换模拟信号)控制端,下降沿有效
sbit OE=P3^1;            //允许输出(ADC0809向单片机传送已转换好的数字信号)
sbit EOC=P3^2;           //ADC0832转换结束(转换开始为0,转换结束为1)标志
unsigned int adcdata, adcdata3; 
unsigned int i;
unsigned int adc0[8];        
unsigned int k;

unsigned int avedata();
void show();
void delay_2ms();




void main()
{

  P2=0xff;                                  //初始化
  P3=0xff; 
 
  OE=0;
  ST=0;


   ST=1;
 while(1)
 {
  ST=0;                                      //启动ADC0809,ST下降沿有效

  
   while(!EOC);                              //等待转换结束
   OE=1;                                     //输出使能
   adcdata=avedata();                        //取0809转换后的平均数字量

   show();
  ST=1;
 }
}


 //----------------------------------

 void show()                                        //动态显示
 {
  unsigned int adcdata1;
  adcdata1=adcdata*19;            //adcdata1=1000*(adcdata*5/255)(转换数字量与模拟量的换算关系)   ,adcdata1是转换的实际电压值扩大1000倍

   four=0;                               
      P1=number1[adcdata1/1000];  //点亮了dp
      adcdata1%=1000;
      delay_2ms();

    four=1;
    three=0;
      P1=number[adcdata1/100];
       
      adcdata1%=100;
       delay_2ms();


     three=1;
     two=0;
        P1=number[adcdata1/10];
      

       delay_2ms();

     two=1;
     one=0   ;
     P1=number[adcdata1%10];
        delay_2ms();
        one=1;
  }

 //------------------------------------------
  void delay_2ms()
  { unsigned int i;
   for(i=0;i<111;i++);
  }
 //------------------------------------------
 unsigned int avedata()             //求采样平均,可多次采样,注意系统处理数字上限65535

  {
   unsigned int i,j,max,min,sum=0,a,b,c,d,e,f,g,h;
   for(i=0;i<8;i++)                 //采样8次
  { k=P0;                           //采样值赋值给k   
   for(j=0;j<20;j++);               //缓冲,隔段采样 
   a=(k&0x01)*128;                  //由于0809输出端与单片机高低位接反(硬件),下列程序高低位调换
   b=(k&0x02)*32;
   c=(k&0x04)*8;
   d=(k&0x08)*2;
   e=(k&0x10)/2;
   f=(k&0x20)/8;
   g=(k&0x40)/32;
   h=(k&0x80)/128;
   adc0[i]=a+b+c+d+e+f+g+h;         
 //adc0[i]=(k&0x01)*128+(k&0x02)*32+(k&0x04)*8+(k&0x08)*2+(k&0x10)/2+(k&0x20)/8+(k&0x40)/32+(k&0x80)/128;         //{ adc0[i]=P0; delay_2ms(); } ?            //放数据
   }
  
   for(i=0;i<7;i++)            //求数组中最大值
    {
    if(adc0[i+1]>adc0[i])
         max=adc0[i+1];
    else max=adc0[i];
    }
   
    for(j=0;j<7;j++)           //求数组中最小值
    {
     if(adc0[j+1]>adc0[j])
          min=adc0[j];
     else min=adc0[j+1];
    }
    
    for(i=0;i<8;i++)
    sum=sum+adc0[i];          //求和
    adcdata3=(sum-max-min)/6; //求平均,丢掉最大和最小值
    return(adcdata3) ;        
  }

⌨️ 快捷键说明

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