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

📄 标准两用表.c

📁 再分享一个数字万用表的源码
💻 C
字号:
#include<reg51.h>                         
                                           //由Key控制实现数字表与钟的切换
unsigned char sec=0,min=0,hour=0,count=0,count1=0,j=0;
number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //显示数组
number1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
sbit four=P2^0;             //片选端
sbit three=P2^1;
sbit two=P2^2;
sbit one=P2^3;
sbit Key=P3^7;              //功能转换键
sbit k=P1^7;                //秒显示位
sbit ST=P3^0;               //ADC0809设置
sbit OE=P3^1;
sbit EOC=P3^2;
unsigned int adc0[8] ;      //存放A/D的数据
unsigned int avedata();     //求转换后的平均值
unsigned int xd;
unsigned int adcdata1,adcdata2, adcdata3,x;    //A/D相关变量

void delay_2ms();                              //延迟

void show();                                   //显示A/D结果
void showclock();                              //时钟显示方式
void showtest();                               //数字表显示方式
void adcdata();
void main()
{TMOD=0x01;                                    //定时器设置
 TL0=-50000%256;
 TH0=-50000/256;

 EA=1;

 ET0=1;
 TR0=1;



 P2=0xf0;                                       //初始化
 P0=0xff;


 while(1)

 {   while(Key==1)
     {
        for(xd=0;xd<10;xd++) ;
           if(Key==1)
           {
           showclock();
           }
      }
      while(!Key)
      {
        for(xd=0;xd<10;xd++) ;
         if(!Key)
         {
         showtest();
         }
      }
  }
}
 //--------------------------------------
 void dingshi() interrupt 1 using 0
 {   //j++;                                      //
     TL0=-50000%256;
     TH0=-50000/256;

    if((count++)==10)

    {  count=0;

      if(sec==59)
       {sec=0;

        if(min==59)
         {   min=0;

             if(hour==23)
                hour=0;
             else hour++;
         }
         else min++;
        }
       else  sec++ ;
     }
  }

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

  void showclock()
 {
     if(Key)
    {
     for(xd=0;xd<10;xd++) ;
    }
          if(Key)
         {
           one=0;
           P1=number[min%10];
           delay_2ms();

           one=1;
           two=0;
           P1=number[min/10];
           delay_2ms();

           two=1;
           three=0;
                                            //秒显示控制
           if(count==0)

           {
           P1=number1[hour%10];
           }
           else P1=number[hour%10];
           delay_2ms();
           three=1;
           four=0;
           P1=number[hour/10];
           delay_2ms();
           four=1;

          }

  }
   //-------------------------------------

    void delay_2ms()
    {
     unsigned i;
     for(i=0;i<80;i++) ;
    }

 //-------------------------------------------------------------------------------------
 void showtest()
 {
    if(!Key)
   {
    for(xd=0;xd<10;xd++) ;
   }
     if(!Key)
    {
     P2=0xff;

     OE=0;
     ST=0;
     ST=1;

       while(!Key)
      {  for(xd=0;xd<10;xd++) ;


          ST=0;

          while(!EOC);
          OE=1;
          adcdata2=avedata();

          show();
          ST=1;
         }
       }    else OE=0;
  }




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

  void show()
  {
   if(!Key)
   {
    for(xd=0;xd<10;xd++) ;
    }
         if(!Key)
         {
           adcdata1=adcdata2*19;

           four=0;
           P1=number1[adcdata1/1000];
           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;

         }
          else {OE=0;showclock();}

 }


 //------------------------------------------
 unsigned int avedata()             //求平均
{
   unsigned int i,j,max,min,sum=0,a,b,c,d,e,f,g,h;

    if(!Key)
    {
     for(xd=0;xd<10;xd++) ;
    }

   if(!Key)
  {

   for(i=0;i<8;i++)

   {x=P0;

   a=(x&0x01)*128;
   b=(x&0x02)*32;
   c=(x&0x04)*8;
   d=(x&0x08)*2;
   e=(x&0x10)/2;
   f=(x&0x20)/8;
   g=(x&0x40)/32;
   h=(x&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(); } ?            //放数据

    }
   }  else {OE=0;showclock();}
     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) ;
  } //else OE=0;


⌨️ 快捷键说明

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