资源简介

用的51+AD0809(仿真只能是0808),里面包含了驱动代码,用proteus仿真实现, 实现的功能: K1 启动电压采集,在数码管上显示。K2是停止电压采集 电压计算公式: Vout=Vin*(基准电压)/(2的N次方) *1000. 说明:Vout:是要显示的电压。 Vin :采集外部的电压,就是模拟电压,需要转换成数字电压的。 N : 几位AD就是几,比如0809是8位 他就是256. 1000 : 是采集的扩大了1000倍,为了在数码管上显示,这个具体有无都可以,只是为了好计算

资源截图

代码片段和文件信息

 #include
unsigned char code dispbitcode[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
unsigned char dispbuf[4];
unsigned int i;
unsigned int j;
unsigned char getdataV1  getdataV2;
bit flag;
unsigned int temp;
sbit ST=P3^0;  //启动信号  一个下下降沿
sbit OE=P3^1; //OE=1的时候 取数据
sbit EOC=P3^2;  //判断是否转换完毕
sbit CLK=P3^3;   //时钟脉冲

sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6; //A B C  通道选择

sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;  //数码管选择

sbit P17=P1^7; //数码管的DP

sbit K1=P2^6;
sbit K2=P2^7;
void TimeInitial();
void Delay(unsigned int i);

void TimeInitial()
{   
    TMOD=0x10;
    TH1=(65536-200)/256;     //0.2ms
    TL1=(65536-200)%256;
    EA=1;
    ET1=1;
    TR1=1;
 }
void Delay(unsigned int i)
{
     unsigned int j;
     for(;i>0;i--)
     for(j=0;j<125;j++);
}
 
void Display()


    P1=dispbitcode[dispbuf[3]];
P17=1;    //小数点
//P2=0X0E;
P20=0;
P21=1;
P22=1;
P23=1;
Delay(5);
    P1=0x00; 
    
P1=dispbitcode[dispbuf[2]];
// P2=0X0D;
P20=1;
P21=0;
P22=1;
P23=1;
    Delay(5); 
    P1=0x00;
    
P1=dispbitcode[dispbuf[1]];
   // P2=0X0B;
P20=1;
P21=1;
P22=0;
P23=1;
    Delay(5);
    P1=0x00;
    
P1=dispbitcode[dispbuf[0]];
    //P2=0X07;
P20=1;
P21=1;
P22=1;
P23=0;
    Delay(5);
    P1=0x00;
}

void ADC0808_Start()
{
      P34=0;
      P35=0;
      P36=0;

  OE=0;
  ST=1;
  ST=0;
  Delay(1);

  while(EOC==0);
  OE=1;
  getdataV1=P0;
  OE=0;
}
void main()
{
     TimeInitial();
 K1=1K2=1;
 ST=1;
     while(1)
    {
  if(K1==0)
   {
    flag=1;
   }   
  if(K2==0)  
  {
    flag=0;   
  }
   Display();  //为了屏幕上有显示。
  if(flag==1)
  {
   ADC0808_Start();  
   temp=getdataV1*5.0/255*1000;   //获得电压。  //要和参考电压一致        
   dispbuf[0]=temp%10;       //个位
       dispbuf[1]=temp/10%10;    //十位
       dispbuf[2]=temp/100%10;   //百位     
       dispbuf[3]=temp/1000;     //千位
       //Display();    //放到这里不可以的
  } 
  else
  {
   ST=1;  //停止AD启动
  }
    }
}

void t1(void) interrupt 3 using 0
 {
     TH1=(65536-200)/256;
     TL1=(65536-200)%256;
     CLK=~CLK;
  }

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-11-23 23:38  ADC0809单通道电压采集\
     文件        6921  2011-11-24 11:24  ADC0809单通道电压采集\0809测试
     文件        2321  2011-11-24 11:29  ADC0809单通道电压采集\0809测试.c
     文件        3071  2011-11-24 11:24  ADC0809单通道电压采集\0809测试.hex
     文件          48  2011-11-24 11:24  ADC0809单通道电压采集\0809测试.lnp
     文件        5902  2011-11-24 11:24  ADC0809单通道电压采集\0809测试.LST
     文件       10312  2011-11-24 11:24  ADC0809单通道电压采集\0809测试.M51
     文件        6806  2011-11-24 11:24  ADC0809单通道电压采集\0809测试.OBJ
     文件         978  2010-07-03 13:03  ADC0809单通道电压采集\0809测试.opt.bak
     文件        5642  2011-11-24 11:30  ADC0809单通道电压采集\0809测试.plg
     文件        2113  2010-07-03 11:05  ADC0809单通道电压采集\0809测试.Uv2.bak
     文件       55713  2011-11-24 11:30  ADC0809单通道电压采集\0809测试.uvopt
     文件       13244  2011-11-23 23:37  ADC0809单通道电压采集\0809测试.uvproj
     文件         978  2010-07-03 11:05  ADC0809单通道电压采集\0809测试_Opt.Bak
     文件           0  2010-07-03 09:29  ADC0809单通道电压采集\0809测试_Uv2.Bak
     文件       55709  2011-11-23 23:37  ADC0809单通道电压采集\0809测试_uvopt.bak
     文件       13245  2011-11-22 21:23  ADC0809单通道电压采集\0809测试_uvproj.bak
     文件      138722  2011-11-23 23:38  ADC0809单通道电压采集\Last Loaded 数据采集.DBK
     文件      159672  2011-11-24 11:28  ADC0809单通道电压采集\数据采集.DSN
     文件         742  2011-11-24 11:28  ADC0809单通道电压采集\数据采集.PWI

评论

共有 条评论