AT89C52+ADC0809构成的量程0-5V电压表

这是一款用ADC0809作为A/D转换、显示用四位共阴数码管、单片机为AT89C52构成的量程的0-5V电压测量表电子小制作。这个ADC0809(在proteus里是用ADC0808来仿真,和ADC0809是一样的)基本上能够做出一个比较正确的电压表,量程是0-5V。这里只是做了一个仿真,来验证程序的正确性,这个电子小制作没有做出实物,对这个单片机制作感兴趣的爱好都,可以进行实物的制作。做这个仿真最要注意的问题是ADC0808(ADC0809)的输出脚千万不能接反,实际制作中有很多爱好者都是接反的,造成得不到正确的仿真。下面是:AT89C52+ADC0809构成的量程0-5V电压表电子小制作源程序。

 

#include "reg52.h"

unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char dispbuf[4];

unsigned int i;

unsigned int j;

unsigned char getdata;

unsigned int temp;

unsigned int temp1;

unsigned char count;

unsigned char d;

sbit ST=P3^0;

sbit OE=P3^1;

sbit EOC=P3^2;

sbit CLK=P3^3;

sbit P34=P3^4;

sbit P35=P3^5;

sbit P36=P3^6;

sbit P20=P2^0;

sbit P21=P2^1;

sbit P22=P2^2;

sbit P23=P2^3;

sbit P17=P1^7;

void TimeInitial();

void Delay(unsigned int i);

void t1(void) interrupt 3 using 0

{

TH1=(65536-200)/256;

TL1=(65536-200)%6;

CLK=~CLK;

}

void TimeInitial()

{

TMOD=0x10;

TH1=(65536-200)/256;

TL1=(65536-200)%6;

EA=1;

ET1=1;

TR1=1;

}

void Delay(unsigned int i)

{

unsigned int j;

for(;i>0;i--)

{

for(j=0;j<125;j++)

{;}

}

}

void Display()

{

P1=dispbitcode[dispbuf[3]];

P20=0;

P21=1;

P22=1;

P23=1;

Delay(10);

P1=0x00;

P1=dispbitcode[dispbuf[2]];

P17=1;

P20=1;

P21=0;

P22=1;

P23=1;

Delay(10);

P1=0x00;

P1=dispbitcode[dispbuf[1]];

P20=1;

P21=1;

P22=0;

P23=1;

Delay(10);

P1=0x00;

P1=dispbitcode[dispbuf[0]];

P20=1;

P21=1;

P22=1;

P23=0;

Delay(10);

P1=0x00;

}

void main()

{

TimeInitial();

while(1)

{

ST=0;

OE=0;

ST=1;

ST=0;

P34=0;

P35=0;

P36=0;

while(EOC==0);

OE=1;

getdata=P0;

OE=0;

temp=getdata*1.0/255*500;

dispbuf[0]=temp;

dispbuf[1]=temp/10;

dispbuf[2]=temp/100;

dispbuf[3]=temp/1000;

Display();

}

}

版权声明:aysz01 发表于 2024-06-11 21:22:52。
转载请注明:AT89C52+ADC0809构成的量程0-5V电压表 | 电工学习网

暂无评论

暂无评论...