资源描述:
《adc综合应用实验设计.....新版》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数字电压表1.实验任务利用单片机STC89C52与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示。2.现有元件模数转换器ADC0804,STC89C52单片机,两个共阳极数码管。3.硬件设计3.1模数转换器ADC0809与单片机STC89C52的连接(1)ADC0809规格及引脚分配图如下图3-1所示:图3-1ADC0809引脚图(2)STC89C52各个引脚分布如下图3-2所示:图3-2STC89C52引脚图(3)硬件连线(a)把“单片机系统”区域中的P3.0与”模数转换
2、模块ADC0809“区域中的ST端子用导线相连接。(b)把“单片机系统”区域中的P3.1与”模数转换模块ADC0809“区域中的ALE端子用导线相连接。(c)把“单片机系统”区域中的P3.2与”模数转换模块ADC0809“区域中的OE端子用导线相连接。(d)把“单片机系统”区域中的P3.6与”模数转换模块ADC0809“区域中的EOC端子用导线相连接。(e)把“单片机系统”区域中的P3.7与”模数转换模块ADC0809“区域中的CLK端子用导线相连接。(f)把“模数转换模块ADC0809”区域中的ADDA、
3、ADDB、ADDC端子用导线连接到单片机的VCC端子上。把“模数转换模块ADC0809”区域中IN7与外接输入电压相连。(g)把“单片机系统”区域中的P2.0-P2.7连接到“模数转换模块ADC0809”区域中D0D1D2D3D4D5D6D7端子上。(h)把“单片机系统”区域中的P1.0-P1.7连接到“数码管”区域中ABCDEFG端子上。把“单片机系统”区域中的P0.0-P0.1连接到“数码管”区域中12端口。4.电路原理图图4电路原理图5.程序设计内容由于ADC0809在进行A/D转换时需要CLK信号,
4、而此时ADC0809的CLK是接在单片机的P3.7口,也就是要求从P3.7输出CLK信号供ADC0809使用。因此产生CLK信号的方法就要用软件来产生。6.C语言源程序#includesbitALE=P3^1;sbitST=P3^0;sbitEOC=P3^2;sbitOE=P3^6;sbitCLK=P3^7;sbitwexuan1=P0^0;sbitwexuan2=P0^1;//sbitIN1=P0^5;//sbitIN2=P0^6;//sbitIN3=P0^7;unsignedintco
5、detable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表unsignedintn=0,flag1=1;flag=1,ad_data,num1=0,num2=0;voiddelay(xms){unsignedintx,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}voiddisplay()//2位数码管显示{floata;a=(float)ad_data/256*5*1000;num1=(int)a
6、/1000;num2=(int)a/100-num1*10;P1=table[num1];wexuan1=1;delay(1);wexuan1=0;P1=0xff;P1=0x7f;//小数点wexuan1=1;delay(1);wexuan1=0;P1=0xff;P1=table[num2];wexuan2=1;delay(1);wexuan2=0;P1=0xff;}voidinit(){ST=0;ALE=0;OE=0;CLK=0;//_EOC=1;TMOD=0x12;IP=0x09;TH0=(65536-
7、22)/256;TL0=(65536-22)%256;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;EX0=1;//打开外部中断IT0=1;//从高到低的负跳变有效P0=0x00;}voidstart()//inta,intb,intc)//选择通道{//IN1=a;IN2=b;IN3=c;ALE=0;ALE=1;ST=0;ST=1;ALE=0;ST=0;display();delay(10);}intrea
8、d(){unsignedintdat;P2=0xff;OE=1;display();dat=P2;OE=0;return(dat);}voidmain(){init();while(1){ST=0;ST=1;ST=0;if(n==20){flag=1;//display();//start();//while(EOC==0);//转换结束(EOC=1)读出数据后显示//_EOC=0;ad_data=read();