本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sfr p0=0x80;
sfr p1=0x90;
sfr p2=0xa0;
sfr p3=0xb0;
sbit st=p2^7;
sbit oe=p2^5;
sbit eoc=p2^6;
sbit p0_7=p0^7;
sbit ge=p2^0;
sbit shi=p2^1;
sbit bai=p2^2; //定义
uint a_data1,a_data2,a_data3,temp;
uchar getdata;
uchar codetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delaynms(uint x);//nms延时程序
void zh_display();//先转换后显示程序
void adcst_0809();//adc启动程序
void main()
{
p1=0x00;
while(1)
{
adcst_0809();//调adc启动程序
zh_display();//调显示程序
}
}
//adc启动程序
void adcst_0809()
{ oe=0;
st=0;
st=1;
st=0;
delaynms(1);
while(!eoc);
oe=1;
getdata=p1;
oe=0;
}
void delaynms(uint x)
{ uchar i;
while(x-->0)
{ for(i=0;i<125;i++)
{;}
}
}
//数据处理并送显程序
void zh_display()
{ uchar a;
temp=getdata*151;
temp=temp/128;
a_data1=temp/100;
a_data2=temp%100/10; //数据处理
a_data3=temp%10;
for(a=0;a<10;a++)
{
bai=0;
shi=1;
ge=1;
p0=codetab[a_data1]; //点亮百位
delaynms(2);
p0=0x00;
bai=1;
shi=0;
ge=1;
p0=codetab[a_data2];//点亮十位
p0_7=0;//点亮第二位的小数点
delaynms(2);
p0=0x00;
bai=1;
shi=1;
ge=0;
p0=codetab[a_data3];//点亮个位
delaynms(2);
}
}
我是用的ADC0809与单片机AT89C51对5伏电压进行采样,并放大6倍后送显,我采用的通0,只对一路信号进行采样,所以我把ADC0809的三个通道选择直接接地,但在实验时,只显示00.0,我在通道0接的是3V电池,照理说应该有显示呀,但还是显示00.0,我采用的是74LS74进行分频,而且也用示波器没了分频后的频率是500KHZ,也没有错,但就是不知道问题在哪儿,我怀疑是程序有问题,我的通道选择是直接接地的,我只对一路信号进行采样,不知道这样有没有问题。由于第一次做这个,真诚的请教高手 |