51单片机测量5V电压

2020-05-05 13:43

数字电压表

1. 实验任务

利用单片机STC89C52与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示。

2. 现有元件

模数转换器ADC0804,STC89C52单片机,两个共阳极数码管。

3. 硬件设计

3.1 模数转换器ADC0809与单片机STC89C52的连接 (1) ADC0809规格及引脚分配图如下图3-1所示:

图3-1 ADC0809引脚图

(2) STC89C52各个引脚分布如下图3-2所示:

图3-2 STC89C52引脚图

(3) 硬件连线

(a) 把“单片机系统”区域中的P3.0与”模数转换模块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、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信号,而此时ADC0809的CLK是接在单片机的P3.7口,也就是要求从P3.7输出CLK信号供ADC0809使用。因此产生CLK信号的方法就要用软件来产生。

6. C语言源程序

#include sbit ALE = P3^1; sbit ST = P3^0; sbit EOC = P3^2;

sbit OE = P3^6; sbit CLK = P3^7;

sbit wexuan1=P0^0; sbit wexuan2=P0^1;

//sbit IN1 = P0^5; //sbit IN2 = P0^6; //sbit IN3 = P0^7;

unsigned int code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; //段码表

unsigned int n=0,flag1=1;flag=1,ad_data,num1=0,num2=0;

void delay(xms) { unsigned int x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); }

void display()//2位数码管显示 { float a; a=(float)ad_data/256*5*1000; num1=(int)a/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; }

void init() { ST = 0; ALE = 0; OE = 0; CLK = 0; // _EOC= 1; TMOD=0x12;IP=0x09; TH0=(65536-22)/256; TL0=(65536-22)%6; TH1=(65536-45872)/256; TL1=(65536-45872)%6; EA=1; ET0=1;ET1=1; TR0=1;TR1=1; EX0=1;//打开外部中断 IT0=1;//从高到低的负跳变有效 P0=0x00; }

void start() //int a,int b,int c) //选择通道 {

// IN1 = a;IN2 = b;IN3 = c; ALE = 0;ALE = 1; ST = 0;ST = 1; ALE = 0;ST = 0; display(); delay(10); }

int read() { unsigned int dat; P2 = 0xff; OE = 1; display();

dat = P2; OE = 0; return (dat); }

void main() { 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(); flag=0; display(); // n = 0; // display(); // _EOC = 1; } display();//显示的是if中的电压值 } }

void INTR_0() interrupt 0 {

while(1){ ad_data = read(); flag = 0; display();}

}

void timer0() interrupt 1 // 输出500kHz 方波 { CLK=~CLK; }

void timer1() interrupt 3 { TH1=(65536-45872)/256; TL1=(65536-45872)%6; n++; flag1=0; }


51单片机测量5V电压.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2010年山东省属事业单位招聘真题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: