ADC0809数字电压表数码管
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*********************************************
adc0809
ALE,START P34;EOC P3.3反相器;OE P35 ;CLK ALE ;D0....7 P0. (7)
******************************************/
#include<reg52.h>
#define DUDAT P1
#define WEDAT P2
unsigned char code Duma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83}; unsigned char code Wema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char ADDAT[4];
unsigned int temp;
unsigned char getdata;
sbit EOC=P3^3;
sbit ST=P3^4;
sbit OE=P3^5;
sbit dot=P1^7;//小数点
sbit add1=P0^0;
sbit add2=P0^1;
sbit add3=P0^2;
void Delayms(unsigned int z)
{
unsigned int x,y;
for(x=z;z>0;z--)
for(y=110;y>0;y--);
}
void Display()
{
DUDAT=Duma[ADDAT[3]];
WEDAT=Wema[3]; //显示第四位
Delayms(2);
DUDAT=0x00;
DUDAT=Duma[ADDAT[2]];
dot=0;
WEDAT=Wema[2]; //显示第三位
Delayms(2);
DUDAT=0x00;
DUDAT=Duma[ADDAT[1]];
WEDAT=Wema[1]; //显示第二位
Delayms(2);
DUDAT=0x00;
DUDAT=Duma[ADDAT[0]];
WEDAT=Wema[0]; //显示第一位
Delayms(2);
DUDAT=0x00;
}
void main()
{
unsigned int i;
while(1)
{
ST=0;
OE=0;
ST=1;
ST=0;
add1=0;add2=0;add3=0;
while(!EOC);
OE=1;
getdata=P0; //读取AD采样值
OE=0;
temp=getdata*1.0/255*500; //AD转换VIN=Vref*getdata/(2^8-1) ,显示为三位,故扩大100倍,参考电压5V
ADDAT[0]=temp%10;
ADDAT[1]=temp/10%10;
ADDAT[2]=temp/100%10;
ADDAT[3]=temp/1000;
for(i=0;i<100;i++) //扫描时间决定采样更换数据时间
{
Display();
}
}
}。