如何使用8051单片机制作一个简单的0-5V电压表

2023-10-30  

在本文中,使用8051单片机制作一个简单的0-5V电压表。该数字电压表的灵敏度为200mV,这有点低,但该项目旨在演示如何将ADC和七段显示器连接到8051单片机以获得输入电压的数字读数。


在这个案例中,ADC0804是ADC,使用的单片机是AT89S51。在尝试这个案例之前,请先了解怎么将ADC连接到8051单片机和将七段显示器连接到8051单片机,这将使您对基础知识有一个很好的了解。


一、数字电压表电路图

在电路中,ADC的Vref/2(pin9)保持开路,这意味着输入电压跨度可以是o到5V,步长将为5/255=19.6mV。ADC0804数字输出的公式为Dout=Vin/步长。在该电路中,对于1V的输入电压,数字输出将是1/19.6mV=51,因此51的二进制等效值,即00110011。ADC的数字输出连接到微控制器的P1.0。ADC的控制信号,即CS、RD、WR和INTR分别来自微控制器的P3.7、P3.6、P3.5和P3.4引脚。2位多路复用七段显示器连接到微控制器的端口0。显示驱动晶体管Q1和Q2的控制信号从微控制器的P3.2和P3.1获得。按钮开关为S1。

0-5-voltmeter.jpg

首先,程序控制ADC产生与输入电压相对应的数字输出。该数字输出通过P1.0扫描并加载到累加器。然后将累加器中的值除以10以省略最后一位。例如,让输入电压为4V。那么ADC对应的数字输出将是204D(D代表十进制)。除以10后,累加器中剩下的值为20D。然后将该20D乘以2D,结果为40D。该程序的下一个目标是操纵这个40D并在显示器上进行4.0读数。为此,将40D再次除以10D。这导致累加器内部为4,B寄存器内部为0。然后程序使用查找表获取4的数字驱动模式,将此模式放在端口0上并激活Q1。在1ms延迟后,10000000B被加载到P0,这就是点。再经过1ms延迟Q1停用后,B中的内容(即0)移至A,使用查找表获取0的正确数字驱动模式,将此模式放在端口0上并激活Q2。再经过1ms延迟后,Q2将停用,并重复整个周期。


二、基于8051数字电压表程序

ORG 00H

MOV P1,#11111111B

MOV P0,#00000000B

MOV P3,#00000000B

MOV DPTR,#LABEL

MAIN: CLR P3.7

SETB P3.6

CLR P3.5

SETB P3.5

WAIT: JB P3.4,WAIT

CLR P3.7

CLR P3.6

MOV A,P1

MOV B,#10D

DIV AB

MOV B,#2D

MUL AB

MOV B,#10D

DIV AB

SETB P3.2

ACALL DISPLAY

MOV P0,A

ACALL DELAY

MOV P0,#10000000B

ACALL DELAY

MOV A,B

CLR P3.2

SETB P3.1

ACALL DISPLAY

MOV P0,A

ACALL DELAY

CLR P3.1

SJMP MAIN

DELAY: MOV R3,#02H

DEL1: MOV R2,#0FAH

DEL2: DJNZ R2,DEL2

DJNZ R3,DEL1

RET

DISPLAY: MOVC A,@A+DPTR

RET

LABEL: DB 3FH

DB 06H

DB 5BH

DB 4FH

DB 66H

DB 6DH

DB 7DH

DB 07H

DB 7FH

DB 6FH


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。