您的当前位置:首页正文

数字电压表

2022-08-03 来源:爱站旅游
导读数字电压表


设计要求与目的:

本课题实验主要采用AT89C51芯片和ADC0809芯片来完成一个简易的数字电压表,能够对输入的0~5 V的模拟直流电压进行测量,并通过一个3位一体的7段LED数码管进行显示,测量误差约为0.025 V。

一、 硬件方案的选择:

该电压表的测量电路主要由三个模块组成:A/D转换模块、数据处理模块及显示控制模块。A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。数据处理则由芯片AT89S51来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进行显示;另外它还控制着ADC0809芯片的工作。显示模块主要由7段数码管及相应的驱动芯片(74HC245)组成,显示测量到的电压值,

二、 硬件方案的实现:

本实验采用AT89C51单片机芯片配合ADC0809模/数转换芯片构成一个数字电压表,该电路通过在ADC0809芯片采样输入口IN0前加入低通滤波器(可以提高测量的精度)使输入的0~5 V的模拟量电压经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给AT89C51芯片的P0口。AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给数码管。同时它还通过其三位I/O口P3.0、P3.1、P3.2产生位选信号,并通过其P3口驱动芯片74HC245驱动控制数码管的亮灭。另外,AT89C51还控制着ADC0809的工作。其ALE管脚为ADC0809提供工作时钟脉冲;P2.3控制ADC0809的地址锁存端(ALE);P2.4控制ADC0809的启动端(START);P2.5控制ADC0809的输出允许端(OE);P3.7控制ADC0809的转换结束信号(EOC)。系统框图如图1-1示。

显示模块三位LED数码管 数据处理及控制模块 P0 P1 A 输出显示 数字量输入 数据采集模块 LED 位控制信T 8 9 C 5 1 P3 P2 控制信号 A D C 0 8 0 9 低通滤波器 模拟量输入 系统框图1-1

(1)、本实验所需元器件:

1. AT89C51芯片 1块 2. ADC0809芯片 1块 3. 74HC245芯片 1块 4. 共阳极数码管 3个 5. 12MHz晶振 1个 6. 33pF电容 2个 7. 0.1uF滤波电容 2个 8. 10uF电解电容 1个 11. 4.7KΩ精密电位器 1个 12. 510Ω电阻 12个 13. 8.2KΩ电阻 1个 14. 10KΩ电阻 1个 15. 导线 若干

(2)、AT89C51与ADC0809的连接电路如图1-2所示。

图1-2

(3)、 驱动芯片74HC245

74HC245为三态输出的八组总线收发器,在本实验中作为驱动芯片使用,用于驱动数

码管的点亮。图1-11和图1-12分别为其实物图和引脚图。

(1)A:A总线端; (2)B:B总线端;

(3)/G:三态允许端(低电平有效); (4)DIR:方向控制端; (5)Vcc:电源; (6)GND:地。

(4. )、3位一体7段LED数码管

本实验的显示模块主要由一个3位一体的7段LED数码管(SM410564)构成,用于显示测量到的电压值。它是一个共阳极的数码管,每一位数码管的原理图如图1-13所示。每一位数码管的a,b,c,d,e,f,g和dp端都各自连接在一起,用于接收AT89C51的P1口产生的显示段码。1,2,3,4引脚端为其位选端,用于接收AT89C51的P3口产生的位选码。图1-14和图1-15分别为其实物图和引脚图。

(6)、AT89C51的复位电路

AT89C51的复位电路如图1-9所示。当单片机一上电,立即复位;另外,如果在运行中,外界干扰等因素使单片机的程序陷入死循环状态或“跑飞”,就可以通过按键使其复位。复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。

图1-9 复位电路 电容C和电阻R1实现上电自动复位。增加按键开关S和电阻R2又可实现按键复位功能。R2的作用是在S按下的时候,防止电容C放电电流过大烧坏开关S的触点。因保证R1/R2 >10。一般取C=10uF,R2=100Ω,R1=8.2KΩ。

(5)、 硬件电路原理图,见图1-4

图1-4

三、 程序设计

1.主程序设计

初始化中主要对AT89C51,ADC0809的管脚和数码管的位选及所用到的内

存单元70H,78H,79H,7AH 进行初始化设置。

准备工作做好后便启动ADC0809对IN0脚输入进的0~5V电压模拟信号进

行数据采集并转换成相对应的0~255十进制数字量。

在数据处理子程序中,运用标度变换知识,编写算法将0~255十进制数字量

转换成0.00~5.00V的数据,输出到显示子程序进行显示。

整个主程序就是在A/D转换,数据处理及显示程序循环执行。整个程序流程

框图如图1-5所示。 图1-5

2.各子程序设计

1)A/D转换子程序(数据采集)

启动ADC0809对模拟量输入信号进行转换,通过判断EOC(P3.1引脚)

来确定转换是否完成,若EOC为0,则继续等待;若EOC为1,则把OE置位,将转换完成的数据存储到70H中。程序流程图如图1-6所示。

图1-6

2)数据处理子程序

程序流程图如图1-7所示

图1-7

3)显示子程序

显示子程序采用动态扫描法实现三位数码管的数值显示。测量所得的A/D转换数据放在70H内存单元中,测量数据在显示时需转换成10进制BCD码放在78H~7AH单元中。寄存器R1用作显示数据地址指针。程序流程图如图1-8所示。

3.源程序

ORG 0000H LJMP START ORG 0003H RETI

ORG 000BH RETI

ORG 0013H RETI

ORG 001BH RETI

ORG 0023H RETI

ORG 002BH RETI

ORG 0030H

;初始化参数 START: CLR A

SETB P3.7 CLR P3.0 CLR P3.1

图1-8

;初始化EOC

;初始化LED位选,全不选中。

CLR P3.2

MOV P2 , A ;初始化P2口,清除对ADC0809的控制信号。 MOV 70H , A ;初始化数据采样后存储空间。

MOV 78H , A ;初始化数据处理后3位有效数字的存储空间(78H最高位,7AH最低位)。

MOV 79H , A MOV 7AH , A

MOV A , #0FFH ;初始化P0,P1口,写入高电平。 MOV P0 , A MOV P1 , A

;主程序

MAIN: LCALL AD_SUB ;调用A/D转换子程序,开始采样并转换。

LCALL TURN_SUB ;调用数码转换子程序,将采样转换来的0-255转换成一一对应的 ;0.00-5.00

LCALL DISP_SUB ;调用显示子程序。 LJMP MAIN

;==============================================================================

;A/D转换子程序 AD_SUB: CLR A

MOV P2 , A ;初始化P2口,清除对ADC0809的控制信号。 MOV R0 , #70H

LCALL AD_ST ;调用采样转换子程序

WAIT: JB P3.7 , DATASAVE ;判断采样转换是否完毕,完毕则跳转到DATASAVE进行存储。

AJMP WAIT ;否则继续等待。

;启动采样,送脉冲时序

AD_ST: SETB P2.3 ;ALE 脉冲时序 NOP NOP

CLR P2.3

SETB P2.4 ;START 脉冲时序(上跳清零,下跳开始转换) NOP NOP

CLR P2.4 NOP NOP RET

;采样转换的数据存储

DATASAVE: SETB P2.5 ;置位OE端,允许ADC0809输出数据 MOV A , P0 ;将转换的数据存储到70H中

MOV @R0 , A CLR P2.5

CLR A ;初始化P0,P1,P2口(P0,P1高电平,P2低电平) MOV P2 , A MOV A , #0FFH MOV P0 , A MOV P1 , A RET

;将0~255转换为0.00~5.00

TURN_SUB: MOV A , @R0 MOV B , #51 DIV AB

MOV 78H , A ;以上这一段是整数部分(个位)放入78H MOV A , B ;余数部分放入A CLR F0

SUBB A , #1AH ;余数和51的一半即1AH比较,以便四舍五入 MOV F0 , C MOV A , #10

MUL AB ;余数乘以10,以便再除以51 MOV B , #51 DIV AB

JB F0 , LOOP1 ;判断四舍五入,跳到LOOP1是“四舍” ADD A , #5 ;这是“五入” LOOP1: MOV 79H , A ;十分位 MOV A , B CLR F0

SUBB A , #1AH MOV F0,C MOV A , #10 MUL AB MOV B , #51 DIV AB

JB F0 , LOOP2 ADD A , #5

LOOP2: MOV 7AH , A ;百分位 RET

;============================================================================== ;显示子程序

DISP_SUB: MOV R1 , #78H ;R1辅助寄存器,用于存放要显示的数据的地址(初始为最高位78H) CLR A

MOV P1 , #0FFH ;初始化P1,P2口(P1高电平,P2低电平) ANL P2 , A

LCALL PLAY ;调用显示位码子程序

CLR P1.7 ;显示最高位(个位)后的小数点 SETB P3.2 ;选中最高位LED数码管 LCALL DELAY ;调用延迟子程序 CLR P3.2 ;取消最高位位选

INC R1 ;提取第二位有效数字(十分位)的数据地址(79H) LCALL PLAY ;调用显示位码子程序 SETB P3.1 ;选中第二位LED数码管 LCALL DELAY ;调用延迟子程序

CLR P3.1 ;取消第二位位选

INC R1 ;提取最低位(百分位)的数据地址(7AH) LCALL PLAY ;调用显示位码子程序

SETB P3.0 ;选中最低位LED数码管 LCALL DELAY ;调用延迟子程序

CLR P3.0 ;取消最低位位选 RET ;位码显示

PLAY: MOV A , @R1 ;送偏移量 MOV DPTR , #TAB ;送表首地址

MOVC A , @A+DPTR ;查表得出相应LED段码 MOV P1 , A ;输出显示 RET

;============================================================================== ;延时程序

DELAY: MOV R6 , #10H DL1: MOV R7 , #10H DL2: DJNZ R7 , DL2 DJNZ R6 , DL1 RET

;============================================================================== ;0-9段码

TAB: DB 0C0H , 0F9H , 0A4H , 0B0H , 99H , 92H , 82H , 0F8H , 80H , 90H END

四、 系统测试结果

测试仪器、连线图、

1. 测试仪器: 数字电压表,稳压电源 2.测量结果

样本值(V) 0.68 1.37 1.95 2.37 3.03 3.37 3.93 4.13 4.26 4.52

实测值 (V) 0.688 1.376 1.953 2.372 3.05 3.38 3.95 4.15 4.25 4.54 表1 误差(V) 0.008 0.006 0.003 0.002 0.02 0.01 0.02 0.02 0.01 0.02 五、 系统调试中遇到的问题及解决的方法

七、参考文献

1.( ISBN 978-7-301-10760-7/TN.0032) 魏立峰 王宝兴、《单片机原理及应用技术》、2006年8月、第一版、北京大学出版社、P165~P169。

因篇幅问题不能全部显示,请点此查看更多更全内容