ADC0831数模转换器(0-5V数码显示)第一部分:实物及管脚定义1、CS:片选2、正输入端3、Vref:负输入端4、GND:地5、参考电压输入端6、DO:串行数据输出端7、CLK:时钟输入脚8、VCC:电源产品种类ADC0831(模数转换器)转换器数量1ADC输入端数量1分辨率8bit输入类型Voltage(电压)接口类型Serial(串行输出)电压参考5V电源电压(最大值)6.3V电源电压(最小值)4.5V最大功率耗散0.8W最大工作温度+70C输入电压5V第二部分:时序图第三部分:仿真图第四部分:C语言程序/*程序效果:数码管显示0.00-5.00U电压,调节电位器,得到ADC0831的2脚电压值。注:测量时先把电位器调节到中间,也就是2.5U,但切记所测的引脚的电压值不能超过5U,否则会烧坏ADC0831芯片和单片机。*/#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitCS=P1^0;sbitCLK=P1^1;sbitDO=P1^2;ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//共阴数码0-90xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,//共阴带小数0-90x40,0x3e,0x00};//-、U、数码管全灭ucharcodedu[]={0xfe,0xfd,0xfb,0xf7};//动态扫描时控制各个数码管亮与灭uinthuancun[]={0,0,0,0};//数据缓存voiddelay();//延时函数voiddisplay();//数码管显示函数ucharRead_ADC0831();//读取ADC0831转换出的数据,通过串行通信输出//************************************************//voidmain(){uinti,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=500huancun[0]=date/100;//取数据百位huancun[0]+=10;//数据百位带小数点,所以要取带小数的codehuancun[1]=date%100/10;//数据十位,即为小数点第一位huancun[2]=date%10;//数据个位,即为小数点第二位huancun[3]=21;//电压符号“U”}display();}}//************************************************//voiddelay(){uchari;for(i=0;i180;i++);}//*********************************************//voiddisplay(){uchari;for(i=0;i4;i++){P3=du[i];P2=tab[huancun[i]];delay();}}//********************************************//ucharRead_ADC0831()//根据时序图写出的模拟数据输出{uchari,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;i8;i++){CLK=1;_nop_();_nop_();temp=1;if(DO){temp++;}CLK=0;_nop_();_nop_();}CS=1;_nop_();_nop_();return(temp);}