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

📄 adc0831实验.c

📁 这些是自己大学里认为非常宝贵的AVR程序
💻 C
字号:
/*****************************************************************************
程 序 名:51AVR实验板配套程序 - AD转换器实验
开发环境:Keil
编 写 者:www.01mcu.net
功能简述:控制并读取ADC0831测量到的模拟数据,显示到数码管上
硬件说明:P0.2-0.5为数码管显示的位选,拉低为对应位提供电源,P1为数码管数据输出,拉低后点亮对应显示段
          本实验要将实验座的21-28脚(P2.0-2.7)跳线接到内侧DIP0-DIP8上;
          ★注意:ADC0831芯片的  VCC/REF要用杜邦线连接到VCC!VIN+连接到AIN0上;
             更详细见说明书中相关说明和图片★
          将选购件ADC0831 插装到多用8脚IC座 U2 上,ADC0831各脚定义如下:
          |-------\_/-------|
          | 1  cs    VCC  8 |
          | 2  VIN+  CLK  7 |
          | 3  VIN-  DO   6 |
          | 4  GND   REF  5 |
           -----------------
          晶体为12MHz
其它说明:关于ADC0831详情,请参阅实验目录下的器件手册
完成日期:2008.06.23
******************************************************************************/

#include <reg51.h>
//定义位操作--------------------------------
sbit ls1=P0^2;     //个位公共极
sbit ls2=P0^3;     //十位公共极
sbit ls3=P0^4;     //百位公共极
#define Out P1     //数据输出端

//多用8脚IC座脚位分配-----------------------
//  单片机IO       转换器IO    连接情况
sbit CS=P2^0;      //ADC CS,  对应DIP1,片选
// INN             //ADC_IN+, 对应DIP2,◆使用时用杜邦线连接到AIN0模拟信号输入端
sbit INP=P2^2;     //ADC_IN- ,对应DIP3,使用时拉低=接地
sbit GND=P2^3;     //ADC_GND ,对应DIP4,使用时拉低=接地
// REF             //ADC_REF ,对应DIP5,◆使用时用杜邦线连接到VCC,或自定义的参考电压
sbit DAT=P2^5;     //ADC_DO , 对应DIP6,数据输出
sbit CLK=P2^6;     //ADC_CLK ,对应DIP7,时钟
// VCC             //ADC_VCC ,对应DIP8,◆使用时用杜邦线连接到VCC

unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳
unsigned char DS1,DS2,DS3;  //显存

//延时----------------------------
Delay(unsigned int t)
{
 while(t--);
}
//显示----------------------------
void Display(unsigned int mun)
{
  unsigned char i=0,j;
  DS3=mun/100;
  i=mun%100;
  DS2=i/10;
  DS1=i%10;

 for(j=0;j<50;j++)
  {
     Out=tab[DS1];
     ls1=0;
     Delay(100);
     ls1=1;

     Out=tab[DS2];
     ls2=0;
     Delay(100);
     ls2=1;
         
     Out=tab[DS3];
     ls3=0;
     Delay(100);
     ls3=1;
  }
}
//---------------------------------------------
void Del(void) 
{unsigned char i;
   for(i=0;i<10;i++); //与时钟有关,本程序晶体12MHz
}
//ADC采集-----------------------------
unsigned char ReadADC()
{
  unsigned char i,j;
  
  CLK=0;
    Del();
  CS=0;
    Del();            //拉低片选进入转换
  CLK=1;Del();
   CLK=0;Del();
  CLK=1;Del();
   CLK=0;Del();       
   
  for(i=0;i<8;i++)    //循环读8位转换后的数据
    {
     DAT=1;Del();
     j<<=1;
     j|=(bit)DAT;     //读1位
       Del();
     CLK=1;Del();
     CLK=0;Del();       
    }
  CS=1;
  return(j);
}

//主程序--------------------------
main()
{ 
  unsigned int p,d;
  //ADC0831管脚,
  INP=0;   //负端接地,形成单端输入
  GND=0;   //接地

  while(1)
    {
     Display(d);
     p++;
     if(p>3)       //显示3次读一次AD数据
       {p=0;
        d=ReadADC();
       } 
    }
}

⌨️ 快捷键说明

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