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

📄 08092.c

📁 自制完全成功!!!!ADC0809时钟直接使用AT89C51的ALE信号2MHz P1口段码,P2.0-3位码(P2.0为最右边数码管的位码) P0口数据输入 通道0输入,ADC0809中ST和A
💻 C
字号:
/*ADC0809时钟直接使用AT89C51的ALE信号2MHz;P1口段码,P2.0-3位码(P2.0为最右边数码管的位码)
  P0口数据输入;通道0输入,ADC0809中ST和ALE---P3.0,EOC---P3.2,CLK---ALE.OE---P3.1*/

#include <reg52.H> 
#include <intrins.h>
#define _Nop() _nop_()
unsigned char code seg7code[]={0x3f,0x06,0x5b,0x4f,0x66, 
                               0x6d,0x7d,0x07,0x7f,0x6f}; //显示共阴数码管0~9 段码
unsigned data dis[5]={0x00,0x00,0x00,0x00,0x00};//前四个依次存从右到左的显示数据,最后一位存中间结果
unsigned scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //从最右面数码管开始扫描,共四个数码管
sbit ST=P3^0; //ADC0809启动转换
sbit OE=P3^1; //允许ADC0809输出数据
sbit EOC=P3^2; //ADC0809转换结束信号

/*延时*/
void Delay(unsigned int tc)
{while(tc!=0)
 {unsigned int i;
  for(i=0;i<100;i++);
  tc--;
 }
}

/*ADC0809转换子程序*/
unsigned char adc0809() //读AD0809子程序
{
 unsigned char adda;
  ST=0; 
  OE=0; //读AD0809准备 
  P0=0xff;
  ST=1;_Nop();_Nop(); ST=0; //启动转换
  _Nop();_Nop();_Nop();_Nop();
  while(EOC==0);
       OE=1; 
      adda=P0;
       _Nop();
       OE=0;          
    return(adda);//返回最后读出数据
        
}

/*ADC0809转换数据处理*/
unsigned int dacl() //AD0809读出数据处理
{unsigned char x;
 unsigned int dady=0;
 for(x=0;x<10;x++)
  {dady=adc0809()+dady;}
  dady=dady/10; //求平均值,提高精度
  return(dady);//返回处理结果
}

/*显示数码处理*/
void Led()
{  unsigned int date;
   unsigned char k;
   date=dacl();  //调用最后数据处理结果

dis[3]=date/51;  //Vin=D*Vref/255=D/51,四个数码管显示
   dis[4]=date%51;
   dis[4]=dis[4]*10;
dis[2]=dis[4]/51;
   dis[4]=dis[4]%51;
   dis[4]=dis[4]*10;
dis[1]=dis[4]/51;
   dis[4]=dis[4]%51;
   dis[4]=dis[4]*10;
dis[0]=dis[4]/51;
   for(k=0;k<4;k++)//从最右边数码管开始扫描
   {P1=seg7code[dis[k]];
   if(k==3){P1=P1|0x80;}  //小数点
    P2=scan_con[k];Delay(8);P2=0x0f;//先从最右边扫描,延时,消隐
    }  
}
 
void main(void) 
{ 
  while(1)
  {Led();} 
} 
  
  

⌨️ 快捷键说明

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