您的当前位置:首页正文

数模转换ADC0831中文资料

2024-01-16 来源:好走旅游网


ADC0831数模转换器(0-5V数码显示)

第一部分:实物及管脚定义

1、CS:片选 2、正输入端 3、Vref:负输入端

4、GND:地 5、参考电压输入端 6、DO:串行数据输出端

7、CLK:时钟输入脚 8、VCC:电源

产品种类ADC0831(模数转换器)

转换器数量1

ADC 输入端数量1

分辨率8 bit

输入类型Voltage(电压)

接口类型Serial(串行输出)

电压参考5 V

电源电压(最大值)6.3 V

电源电压(最小值)4.5 V

最大功率耗散0.8 W

最大工作温度+ 70 C

输入电压5 V

第二部分: 时序图

第三部分:仿真图

第四部分:C语言程序

/*

程序效果:数码管显示0.00-5.00U电压,调节电位器,得到

ADC0831的2脚电压值。

注:测量时先把电位器调节到中间,也就是2.5U,但切记

所测的引脚的电压值不能超过5U,否则会烧坏ADC0831

芯片和单片机。

*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit CS=P1^0;

sbit CLK=P1^1;

sbit DO=P1^2;

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//共阴数码0-9

0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,//共阴带小数0-9

0x40,0x3e,0x00}; //\"-\"、\"U\"、数码管全灭

uchar code du[]={0xfe,0xfd,0xfb,0xf7};//动态扫描时控制各个数码管亮与灭

uint huancun[]={0,0,0,0}; //数据缓存

void delay();//延时函数

void display(); //数码管显示函数

uchar Read_ADC0831(); //读取ADC0831转换出的数据,通过串行通信输出

//************************************************//

void main()

{

uint i,date;

while(1)

{

i++;

if(i==100)

{i=0;

date=Read_ADC0831()*100;//乘以100是为了保留两位小数,错误的写法date=Read_ADC0831()*100/51

//处理数据时要注意:各变量的数据类型要一致!

date=date/51; //使数码管显示的数值与电压保

//当ADC转换5V电压时,对应255即date=255*100/51=500

huancun[0]=date/100; //取数据百位

huancun[0]+=10; //数据百位带小数点,所以要取带小数的code

huancun[1]=date%100/10; //数据十位,即为小数点第一位

huancun[2]=date%10; //数据个位,即为小数点第二位

huancun[3]=21; //电压符号“U”

}

display();

}

}

//************************************************//

void delay()

{

uchar i;

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

}

//*********************************************//

void display()

{

uchar i;

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

{

P3=du[i];

P2=tab[huancun[i]];

delay();

}

}

//********************************************//

uchar Read_ADC0831()//根据时序图写出的模拟数据输出

{

uchar i,temp;

DO=1;

_nop_();

_nop_();

CS=0;

_nop_();

_nop_();

CLK=0;

_nop_();

_nop_();

CLK=1;

_nop_();

_nop_();

CLK=0;

_nop_();

_nop_();

CLK=1;

_nop_();

_nop_();

CLK=0;

_nop_();

_nop_();

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

{

CLK=1;

_nop_();

_nop_();

temp<<=1;

if(DO)

{

temp++;

}

CLK=0;

_nop_();

_nop_();

}

CS=1;

_nop_();

_nop_();

return(temp);

}

因篇幅问题不能全部显示,请点此查看更多更全内容