我这个51单片机AD转换电路错在哪里呢,怎么老是运行不起
#include<reg51.h>#defineucharunsignedcharsbitST=P2^0;sbitEOC=P2^1;sbitOE=P2^2;sbitLED...
#include<reg51.h>
#define uchar unsigned char
sbit ST=P2^0;
sbit EOC=P2^1;
sbit OE=P2^2;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;
uchar DATA;
uchar h1;
void delay(uchar i)
{
uchar j;
while(i--)
{
for(j=125;j>0;j--);
}
}
uchar AD(void)
{
ST=0;
delay(10);
ST=1;
delay(10);
ST=0;
while(0==EOC);
OE=1;
DATA=P0;
OE=0;
return DATA;
}
void penquan()
{
h1=AD();
delay(h1);
if(h1>30) LED1=0; else LED1=1;
if(h1>70) LED2=0; else LED2=1;
if(h1>100) LED3=0; else LED3=1;
if(h1>130) LED4=0; else LED4=1;
if(h1>160) LED5=0; else LED5=1;
if(h1>180) LED6=0; else LED6=1;
if(h1>200) LED7=0; else LED7=1;
if(h1>230) LED8=0; else LED8=1;
delay(h1);
}
void main()
{
while(1)
{
penquan();
}
} 展开
#define uchar unsigned char
sbit ST=P2^0;
sbit EOC=P2^1;
sbit OE=P2^2;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;
uchar DATA;
uchar h1;
void delay(uchar i)
{
uchar j;
while(i--)
{
for(j=125;j>0;j--);
}
}
uchar AD(void)
{
ST=0;
delay(10);
ST=1;
delay(10);
ST=0;
while(0==EOC);
OE=1;
DATA=P0;
OE=0;
return DATA;
}
void penquan()
{
h1=AD();
delay(h1);
if(h1>30) LED1=0; else LED1=1;
if(h1>70) LED2=0; else LED2=1;
if(h1>100) LED3=0; else LED3=1;
if(h1>130) LED4=0; else LED4=1;
if(h1>160) LED5=0; else LED5=1;
if(h1>180) LED6=0; else LED6=1;
if(h1>200) LED7=0; else LED7=1;
if(h1>230) LED8=0; else LED8=1;
delay(h1);
}
void main()
{
while(1)
{
penquan();
}
} 展开
2个回答
展开全部
仿真图中,用单片机的ALE输出信号,又用D触发器分频后送到ADC0809上,要是实物这种做法还可以。但是,用proteus 仿真就不行了,单片机的ALE是没有信号输出的,所以ADC电路无时钟信号。其实,仿真时,可以直接用时钟信号的,在proteus 左边工具栏中选信号源,就是S字母那个,从中选DCLOCK,就是时钟脉冲信号,放到仿真图中后与ADC0809的CLOCK连接,并把信号频率改为500K即可。把分频的D触发器都删掉,这样,仿真图就简单多了,而且也是对的。最后,顺便说一句,那程序要显示出标准的英文字母,看得清楚,别弄些乱七八糟的英文字体,显示的像鸟文,实在是看不清楚。
更多追问追答
追问
不好意思 真没想到字体。。仿真中我用的是0808,那个频率我根据网友提示也弄出来了输出500khz,我用频率计测了的。但P0口始终接收不了数据,我把软件重发一下,麻烦你帮我看看嘛。拜托了
展开全部
硬件电路而言,AD电路没有问题,要说有点问题的话,你的复位电路可能会有,看你的电压在1.3V左右。这是仿真,所以我觉得如果无法仿真出结果的话,更大的可能是你的软件有问题,你仔细检查软件吧,看看时序控制上是不是写的不对,这是难免的,软件编译没有error,没有alarm了,就认为OK,那是大错特错的,这只能说明软件没有语法错误,其他的说明不了什么,真正的还是要看是否达到预期的效果。所以目前你最好的办法是查找软件的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询