基于单片机的数字电压表设计
更新时间:2024-06-09 07:41:01 阅读量: 综合文库 文档下载
引言
数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本论文重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。
word文档 可自由编辑
1 实训要求
(1)基本要求:
?实现8路直流电压检测 ?测量电压范围0-5V ?显示指定电压通道和电压值 ④用按键切换显示通道 (2)发挥要求
?测量电压范围为0-25V ?循环显示8路电压
2 实训目的
(1) 进一步熟悉和掌握单片机的结构和工作原理;
(2) 掌握单片机的借口技术及,ADC0809芯片的特性,控制方法;
(3) 通过这次实训设计,掌握以单片机为核心的电路设计的基本方法和技术; (4) 通过实际程序设计和调试,逐步掌握模块化程序设计的方法和调试技术。
3 实训意义
通过完成一个包括电路设计和程序开发的完整过程,使自身了解开发单片机应用系统的全过程,强化巩固所学知识,为以后的学习和工作打下基础。
4 总体实训方案
测量一个0——5V的直流电压,通过输入电路把信号送给AD0809,转换为数字信
号再送至89s52单片机,通过其P1口经数码管显示出测量值。 4.1 结构框图
如图1—1所示
图1—1
word文档 可自由编辑
4.2 原理及功能
8路数字电压表主要利用A/D转换器,其过程为如下:先用A/D转换器对各路电压值进行采样,得到相应的数字量,再按数字量与模拟量成比例关系运算得到相应的模拟电压值,然后把模拟值通过数码管显示出来。设计时假设待测的输入电压为8路,电压值的范围为0——5v,要求能在4位LED数码上轮流显示或单路显示。测量的最小分辨率为0.019v。
根据系统的功能要求,控制系统采用AT89s51单片机,A/D转换器。当输入电压为5V时,输出的数据值为255(0FFH),因此最大分辨率为0.0196V(5/255)。ADC0809具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8路输入电压进行测量。LED数码管显示采用软件译码动态显示。通过按键选择可8路循环显示,也可以单路循环。单路显示可通过按键选择所要显示的通道数。
5 硬件电路设计
8路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显示电路和按键处理电路等组成,电路原理图如图1—2所示。
图1—2
word文档 可自由编辑
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得到。
LED数码管采用动态扫描方式连接,通过AT89S52的P1口和P3.0—P3.3口控制。P1口为LED数码管的字段码输出端,P3.0—P3.3口为LED数码管的位选码输出端,通过三极管驱动并反相。
S1和S2是两个按键开关,分别与单片机的P3.5和P3.6相连接。S1用于单路显示或多路循环显示转换控制,S2用于单路显示时的通道选择。
6 系统软件程序的设计
多路数字电压表的系统软件程序由主程序、A/D转换子程序和显示子程序组成。 6.1 主程序
主程序包含初始化部分、调用A/D转换子程序和调用显示程序,如图1—3所示。初始化部分包含存放通道数据缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H控制。初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示。00H位通过单路/循环按键控制。 6.2 A/D转换子程序
A/D转换子程序用于对ADC0809的8路输入模拟电压进行A/D转换,并将转换的数值存入8个相应的存储单元中,如图1—4所示。A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次。 6.3 显示子程序
LED数码管采用软件译码动态扫描方式。在显示子程序中包含多路循环显示和单路显示程序。多路循环显示把8个存储单元的数值依次取出送到4位数码管上显示,每一路显示1秒。单路显示程序只对当前选中的一路数据进行显示。每路数据显示需经过转换变成十进制BCD码,放于4个数码管的显示缓冲区中。单路显示或多路循环显示通过标志位00H控制。在显示控制程序中加入了对单路或多路循环按键和通道选择按键的判断。
word文档 可自由编辑
图1—3 6.3.1 C语言源程序清单
#include
#include
uchar number=0x00; //存放单通道显示时的当前通道数 sbit ALE=P2^3;
//0809地址锁存信号
sbit START=P2^4; //启动信号 sbit OE=P2^5; //输出允许通道
sbit KEY1=P3^5; //循环或单路选择按键 sbit KEY2=P3^6; //通道选择按键
图1—4
word文档 可自由编辑
sbit EOC=P3^7; //转换结束信号
sbit DISX=disdata^7;//小数点位
sbit FLAG=PSW^0; //循环或单路显示标志位 Uchar code
dis_7[11]={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}; //0809的8个通道转换数据缓冲区
uchar data dis[5]={0x00,0x00,0x00,0x00,0x00};//显示缓冲区 /*主函数*/ main() {
P0=0xff; //初始化端口 P2=0x00; P1=0xff; P3=0xff; while(1)
{test(); //测量转换数据
scan();//显示数据
} } /*1秒延时*/ delay1ms(uint t) {uint i,j; for (i=0;i /*检测按键子程序*/ keytest() { if (KEY1==0) //检测循环或单路选择按键是否按下 {FLAG=!FLAG; //标志位取反,循环,单路显示却换 while(KEY1==0); } if(FLAG==1) //单路循环时,检测通道选择按键是否按下 word文档 可自由编辑 {if(KEY2==0) {number++; if(number==8) {number=0; } while(KEY2==0); } } } /*显示扫描子程序*/ 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]Q; dis[4]=dis[4]*10; dis[1]=dis[4]/51; dis[4]=dis[4]Q; 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循环显示 { disdata=dis_7[dis[k]]; if(k==2) {DISX=0;} P3=scan_con[k]; delay1ms(1); P3=0xff; } word文档 可自由编辑 } dis[3]++; //通道值加1 keytest(); //检测按键 } } if(FLAG==1) //单路显示子程序 { dis[3]=number; for(k=0;k<4;k++)//4位LED扫描显示 { 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++) { 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;//通道地址恢复初值 } word文档 可自由编辑 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 单片机引脚结构及说明 如图1-5所示 图1-5 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校 word文档 可自由编辑 验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下所示: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管 word文档 可自由编辑
正在阅读:
基于单片机的数字电压表设计06-09
在路上作文1000字02-04
第六章汇编语言程序设计05-27
TEM-透射电镜习题答案及总结04-07
云南世珍泉饮用水有限公司《员工手册》05-20
2009年安徽高考满分作文(3篇)12-26
材料类SCI期刊及影响因子04-18
考前色彩感觉的训练与提高09-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 电压表
- 单片机
- 基于
- 数字
- 设计