📄 adc0831实验.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 + -