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); } 因篇幅问题不能全部显示,请点此查看更多更全内容