数字电压表设计

  • 格式:pdf
  • 大小:597.04 KB
  • 文档页数:20

下载文档原格式

  / 20
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如图1-5所示
图1-5 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电 流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部 程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程 时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0 外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器 能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作 输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的 缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接
图1—3 图1—4 6.3.1 C语言源程序清单
#include <stdio.h>
#include <AT89x52.h>
#include <intrins.h> //调用_nop_()延时函数
#define ad_con P2 //0809控制口
#define addata P0 //0809数据入口
/*1秒延时*/ delay1ms(uint t) {uint i,j; for (i=0;i<t;i++) for (j=0;j<120;j++); } /*检测按键子程序*/ keytest() { if (KEY1==0) //检测循环或单路选择按键是否按下 {FLAG=!FLAG; //标志位取反,循环,单路显示却换 while(KEY1==0); } if(FLAG==1) //单路循环时,检测通道选择按键是否按下 {if(KEY2==0) {number++; if(number==8) {number=0; } while(KEY2==0); } } }
根据系统的功能要求,控制系统采用AT89s51单片机,A/D转换器。 当输入电压为5V时,输出的数据值为255(0FFH),因此最大分辨率为 0.0196V(5/255)。ADC0809具有8路模拟量输入端口,通过3位地址输 入端能从8路中选择一路进行转换。如每隔一段时间依次轮流改变3位地 址输入端的地址,就能依次对8路输入电压进行测量。LED数码管显示采 用软件译码动态显示。通过按键选择可8路循环显示,也可以单路循 环。单路显示可通过按键选择所要显示的通道数。
LED数码管采用动态扫描方式连接,通过AT89S52的P1口和P3.0— P3.3口控制。P1口为LED数码管的字段码输出端,P3.0—P3.3口为LED数 码管的位选码输出端,通过三极管驱动并反相。
S1和S2是两个按键开关,分别与单片机的P3.5和P3.6相连接。S1用 于单路显示或多路循环显示转换控制,S2用于单路显示时的通道选择。
引言
数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量 技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形 式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满 足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能 力强,可扩展性强、集成方便。目前,由各种单片A/D 转换器构成的数 字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试 系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而 成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到 崭新水平。本论文重点介绍单片A/D 转换器以及由它们构成的基于单片 机的数字电压表的工作原理。
/*显示扫描子程序*/ scan()
{ uchar k,n; int h; if(FLAG==0) //循环显示子程序 { dis[3]=0x00; //通道值清零 for(n=0;n<8;n++) //循环8次
{ dis[2]=ad_data[n]/51; //转换为BCD码 dis[4]=ad_data[n]%51; dis[4]=dis[4]*10; dis[1]=dis[4]/51; dis[4]=dis[4]%51; dis[4]=dis[4]*10; dis[0]=dis[4]/51; for(h=0;h<500;h++) //每个通道显示时间控制为1s { for(k=0;k<4;k++) //4位LED循环显示
6 系统软件程序的设计
多路数字电压表的系统软件程序由主程序、A/D转换子程序和显示 子程序组成。 6.1 主程序
主程序包含初始化部分、调用A/D转换子程序和调用显示程序,如 图1—3所示。初始化部分包含存放通道数据缓冲区初始化和显示缓冲区 初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H 控制。初始化时00H位设置为0,默认为循环显示,当它为1时改变为单 路显示。00H位通过单路/循环按键控制。 6.2 A/D转换子程序
如图1—1所示
图1—1 4.2 原理及功能
8路数字电压表主要利用A/D转换器,其过程为如下:先用A/D转换 器对各路电压值进行采样,得到相应的数字量,再按数字量与模拟量成 比例关系运算得到相应的模拟电压值,然后把模拟值通过数码管显示出 来。设计时假设待测的输入电压为8路,电压值的范围为0——5v,要求 能在4位LED数码上轮流显示或单路显示。测量的最小分辨率为0.019v。
//0809的8个通道转换数据缓冲区
uchar data dis[5]={0x00,0x00,0x00,0x00,0x00};//显示缓冲区
/*主函数*/
main()
{
P0=0xff; //初始化端口
P2=0x00;
P1=0xff;
P3=0xff;
while(1)
{test(); //测量转换数据
scan();//显示数据 } }
3 实训意义
通过完成一个包括电路设计和程序开发的完整过程,使自身了解开 发单片机应用系统的全过程,强化巩固所学知识,为以后的学习和工作 打下基础。
4 总体实训方案
测量一个0——5V的直流电压,通过输入电路把信号送给AD0809, 转换为数字信号再送至89s52单片机,通过其P1口经数码管显示出测量 值。 4.1 结构框图
A/D转换子程序用于对ADC0809的8路输入模拟电压进行A/D转换,并 将转换的数值存入8个相应的存储单元中,如图1—4所示。A/D转换子程 序每隔一定时间调用一次,即隔一段时间对输入电压采样一次。 6.3 显示子程序
LED数码管采用软件译码动态扫描方式。在显示子程序中包含多路 循环显示和单路显示程序。多路循环显示把8个存储单元的数值依次取 出送到4位数码管上显示,每一路显示1秒。单路显示程序只对当前选中 的一路数据进行显示。每路数据显示需经过转换变成十进制BCD码,放 于4个数码管的显示缓冲区中。单路显示或多路循环显示通过标志位00H 控制。在显示控制程序中加入了对单路或多路循环按键和通道选择按键 的判断。
ALE=1;_nop_();_nop_();ALE=0;//锁存通道地址 START=1;_nop_();_nop_();START=0;//启动转换 _nop_();_nop_();_nop_();_nop_(); while(EOC==0);//等待转换结束 OE=1;ad_data[m]=addata;OE=0;//读取当前通道转换数 据 s++;ad_con=s;//改变通道地址 } ad_con=0x00;//通道地址恢复初值 }
{ disdata=dis_7[dis[k]]; if(k==2) {DISX=0;} P3=scan_con[k]; delay1ms(1); P3=0xff;
} } dis[3]++; //通道值加1 keytest(); //检测按键 }
} if(FLAG==1) //单路显示子程序 { dis[3]=number; for(k=0;k<4;k++)//4位LED扫描显示 {
1 实训要求
(1)基本要求: 实现8路直流电压检测 测量电压范围0-5V 显示指定电压通道和电压值 ④用按键切换显示通道
(2)发挥要求 测量电压范围为0-25V 循环显示8路电压
2 实训目的
(1) 进一步熟悉和掌握单片机的结构和工作原理; (2) 掌握单片机的借口技术及,ADC0809芯片的特性,控制方法; (3) 通过这次实训设计,掌握以单片机为核心的电路设计的基本方 法和技术; (4) 通过实际程序设计和调试,逐步掌握模块化程序设计的方法和 调试技术。
5 硬件电路设计
8路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显 示电路和按键处理电路等组成,电路原理图如图1—2所示。
图1—2
ADC0809具有8路模拟量输入通道IN0---IN7,通过3位地址输入端C、 B、A(引脚23--25)进行选择。引脚22为地址锁存控制端ALE,当输入为 高电平时,C、B、A引脚输入的地址锁存于ADC0809内部是锁存器中,经 内部译码电路译码选中相应的模拟通道。引脚6为启动转换控制端 START,当输入一个2μs宽的高电平脉冲时,就启动ADC0809开始对输入 通道的模拟量进行转换。引脚7为A/D转换器,当开始转换时,EOC信号 为低电平,经过一段时间,转换结束,转换结束信号EOC输出高电平, 转换结果存放于ADC0809内部的输出数据寄存器中。引脚9脚为A/D转换 数据输出允许控制端OE,当OE为高电平时,存放于输出数据锁存器中的 数据通过ADC0809的数据线D0—D7输出。引脚10为ADC0809的时钟信号输 入端CLOCK。在连接时,ADC0809的数据线D0—D7与AT89S52的P0口相连 接,ADC0809的地址引脚、地址锁存端ALE、启动信号START、数据输出 允许控制端OE分别与AT89S52的P2口相连接,转换结束信号EOC与 AT89S52的P3.7相连接。时钟信号输入端CLOCK信号,由单片机的地址锁 存信号ALE得到。
disdata=dis_7[dis[k]]; if(k==2) {DISX=0;} P3=scan_con[k];
delay1ms(1);P3=0xff;
} keytest(); //检测按键 } } /*转换子函数*/ test() { uchar m; uchar s=0x00; //初始通道位0 ad_con=s;//第一通道地址送0809控制口 for(m=0;m<8;m++) {
sbit OE=P2^5;
//输出允许通道
sbit KEY1=P3^5;
//循环或单路选择按键
sbit KEY2=P3^6;
//通道选择按键
sbit EOC=P3^7;
//转换结束信号
sbit DISX=disdata^7;//小数点位
sbit FLAG=PSW^0; //循环或单路显示标志位
Uchar code dis_7[11]=
7 单片机概述
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有 8K在系统 可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造, 与工业80C51 产品指令和引脚完全兼容。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32位I/O 口线,2个数据指针,三个16位 定时器/计数器,5个中断优先级2层中断嵌套中断,全双工串行口, 片 内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种 软件,可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时 器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存, 振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为 止。 7.1 单片机引脚结构及说明
百度文库
{0x3F,0x06,0x5B,0X4F,0x66,0x6D,0x7D,0x07,0x7E,0x6F,0x00};
//数码管的字段码
uchar code scan_con[4]={0xF1,0xF2,0xF4,0xF8};//4个LED数码
管的位选
Uchar
data
ad_data[8]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
#define disdata P1 //数码管显示
#define uchar unsigned char
#define uint unsigned int
uchar number=0x00; //存放单通道显示时的当前通道数
sbit ALE=P2^3;
//0809地址锁存信号
sbit START=P2^4; //启动信号