A digital voltmeter is designed by using single chip microcomputer AT89S51 and ADC0809. It can measure the DC voltage between 0-5V and display it in four digits, but it requires the least number of components.

1. Circuit schematic diagram

Design of digital voltmeter based on AT89S51 single chip microcomputer

Figure 1.28.1

2. Hardware connection on the system board

a) Connect p1.0-p1.7 in the “single chip microcomputer system” area with abcdefgh port in the “dynamic digital display” area with 8-core flat cable.

b) Connect p2.0-p2.7 in the “single chip microcomputer system” area with s1s2s3s4s5s6s7s8 port in the “dynamic digital display” area with 8-core flat cable.

c) Connect P3.0 in the area of “single chip microcomputer system” with ST terminal in the area of “analog-to-digital conversion module” with wires.

d) Connect P3.1 in the area of “single chip microcomputer system” with OE terminal in the area of “analog-to-digital conversion module” with wires.

e) Connect p3.2 in the area of “single chip microcomputer system” with EOC terminal in the area of “analog-to-digital conversion module” with wires.

f) Connect p3.3 in the area of “single chip microcomputer system” with CLK terminal in the area of “analog-to-digital conversion module” with wires.

g) Connect the a2a1a0 terminal in the “analog-to-digital conversion module” area to the GND terminal in the “power module” area.

h) Connect the IN0 terminal in the area of “analog-to-digital conversion module” to the VR1 terminal in the area of “three-way adjustable voltage module”.

i) Connect p0.0-p0.7 in the area of “single chip microcomputer system” to d0d1d2d3d4d5d6d7 terminal in the area of “analog-to-digital conversion module” with 8-core flat cable.

3. Program design content

i. Because ADC0809 needs CLK signal during a / D conversion, the CLK of ADC0809 is connected to p3.3 port of AT89S51 single chip microcomputer, that is, it is required to output CLK signal from p3.3 for ADC0809. Therefore, the method of generating CLK signal has to be generated by software.

II. Since the reference voltage Vref of ADC0809 = VCC, the converted data shall be processed and the voltage value shall be displayed on the nixie tube. Actual displayed voltage value (D / 256 * VREF)

4. Assemble source program

(omitted)

5. C language source program

#include

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};

unsigned char dispcount;

unsigned char getdata;

unsigned int temp;

unsigned char i;

sbit ST=P3^0;

sbit OE=P3^1;

sbit EOC=P3^2;

sbit CLK=P3^3;

void main(void)

{

ST=0;

OE=0;

ET0=1;

ET1=1;

EA=1;

TMOD=0x12;

TH0=216;

TL0=216;

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

TR1=1;

TR0=1;

ST=1;

ST=0;

while(1)

{

if(EOC==1)

{

OE=1;

getdata=P0;

OE=0;

temp=getdata*235;

temp=temp/128;

i=5;

dispbuf[0]=10;

dispbuf[1]=10;

dispbuf[2]=10;

dispbuf[3]=10;

dispbuf[4]=10;

dispbuf[5]=0;

dispbuf[6]=0;

dispbuf[7]=0;

while(temp/10)

{

dispbuf=temp%10;

temp=temp/10;

i++;

}

dispbuf=temp;

ST=1;

ST=0;

}

}

}

void t0(void) interrupt 1 using 0

{

CLK=~CLK;

}

void t1(void) interrupt 3 using 0

{

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

if(dispcount==7)

{

P1=P1 | 0x80;

}

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

Leave a Reply

Your email address will not be published. Required fields are marked *