51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash in rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。
那么问题来了,一个用51单片机和ADC0808做的电压采集的proteus仿真原理图和程序你知道吗?
一个用51sb 单片机和ADC0808做的电压采集的proteus仿真,下面是仿真原理图
#include《reg51.h》
#include《intrins.h》
#include《stdio.h》
#define uint unsigned int
#define uchar unsigned char
sbit CLK=P2^0;
sbit ST=P2^1;
sbit EOC=P2^2;
sbit OE=P2^3;
sbit ADDA=P2^5;
sbit ADDB=P2^6;
sbit ADDC=P2^7;
sbit X1=P3^4;
sbit X2=P3^5;
sbit X3=P3^6;
sbit P07=P0^7;
sbit LED=P3^7;
uint temp;
uchar getdata;
uchar b;
uchar s;
uchar g;
uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};id
void delayus(uchar us){
uchar i;
while(us--)
for(i=0;i《120;i++)
;
}
void init(){
TMOD=0x21;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
TH1=0XFD;
TL1=0XFD;
PCON=0X00;
SCON=0X50;
ES=1;
ET0=1;
EA=1;
TR1=1;
TR0=1;
}
void TImer0()interrupt 1
{ TH0=(65535-200)/256;
TL0=(65535-200)%256;
CLK=~CLK;
}
void disp(){
X1=1;
X2=0;
X3=0;
P0=table[b];
P07=0;
X1=1;
X2=0;
X3=0;
delayus(5);
P0=0XFF;
P0=table[s];
X1=0;
X2=1;
X3=0;
delayus(5);
P0=0XFF;
P0=table[g];
X1=0;
X2=0;
X3=1;
delayus(5);
P0=0XFF;
}
void adda(uchar z,uchar x,uchar c){
ADDA=z;
ADDB=x;
ADDC=c;
}
void send(uchar x){
EA=0;
SBUF=x;
while(TI==0);
TI=0;
EA=1;
}
void 仿真main(){
P1=0XFF;
init();
LED=0;
P2=0XFF;
adda(0,0,1);
while(1){
ST=0;
OE=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P1;
send(getdata);
OE=0;
temp=getdata*1.0/255*500;
b=temp/100;
s=temp/10%10;
g=temp%10;
disp();
}
}
void ser()interrupt 4
{
if(RI==1){
RI=0;
if(SBUF==‘A’){
LED=~LED;
}
}
}