用AT89S52和ADC0809做一个模数转换的最小系统
#include< reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa,qian,bai,shi,ge;
uint temp,h;
sbit led1=P1^6;
sbit led2=P1^7;
sbit led3=P3^6;
sbit led4=P3^7;
sbit clock=P3^0;
sbit start=P3^1;
sbit eoc=P3^2;
sbit oe=P3^3;
//sbit ale=P2^4;
sbit adda=P2^5;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
//void display(uchar bai,uchar shi,uchar ge);
void delay(uint z);
void main()
{
TMOD=0x20; //设置定时器1为工作方式2
TH1=0x216; //216
TL1=0x216; //216
EA=1; //开总中断
ET1=1; //开t1中断
TR1=1;
start=0; //复位
oe=0; //输出
//adda=0;
//eoc=0;
// ale=0; //关闭地址选择
while(1)
{
start=0;
///delay(10);
start=1; // 复位
//ale=1; // 打开地址选择
// adda=0;
///delay(10);
start=0; // 开始转换
// ale=0; // 关地址
//delay(1);
while(eoc==0); // 等待eoc变为1
//delay(1);
oe=1; // 打开输出
//delay(1);
//P1=0xff;
temp=P2; // 取p1到p3
oe=0; // 关输出
temp=temp*50;
temp=temp/256;
qian=temp/1000;
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;
P0=table[qian];
h=0;
led1=0;
delay(110);
led1=1;
P0=table[bai];
led2=0;
delay(110);
led2=1;
P0=table[shi];
led3=0;
delay(110);
led3=1;
P0=table[ge];
led4=0;
delay(110);
led4=1;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1;y>0;y--);
}
void cl() interrupt 3
{
clock=!clock;
}
这个是程序
仿真和实物是有区别的