
首先,你的第一个SM00没用
当T39计时到了,触点T39导通,Q02置位,然后下面的T107开始计时,T107计时到了,T107触点导通,执行Q02复位。可是这时,上面的T39还是导通,而常闭的Q02也是导通的,Q02又被置位了,就导致你的Q02在反复的置位复位。其他的输出也存在这个毛病。
还有就是当网络1中Q00被置位后,网络2中的Q00触点就导通了,T109就开始计时了,也就是T38和T109基本上是同步的,因此当Q01置位时,Q00就已经被复位了。
望采纳。。。。
10S不知道你为什么要这么长延时,如果只是单纯的10S延时别的什么都不做的话那一般的延时函数是这样的(单片机晶振12M情况下,12T周期):
void Delay_MS(unsigned int x)
{
unsigned int a,b;
for(a = x; a > 0; a--)
for(b = 110; b > 0;b--);
}
你只需要用Delay_MS(10000);就可以,但是这么久的延时是很不科学的,这个思路也很不可取。要10S的时间可以用定时器,这样既准确又不会影响主程序的运行。祝成功~
首先,R1取200mΩ、C1取47F实在太夸张。电容的基本单位F是一个很大的单位,一般常用的电容量范围是数皮法(pF)~数千纳法(nF),对于电容器,其容量越大,则意味着其体积越大、价格越贵、稳定性越差;在电源电压一定的情况下,电路中的电阻值越小,其电流就越大,功耗(功率消耗)也越大。在本电路中,R1C1决定单稳延时时间,一般是取较大的阻值、较小的容量(当然是在一定的范围内。对于555,电阻值不宜超过数百千欧,否则电路的工作情况就不稳定了)。
其次,开关的用法不合理。
第三,发光二极管应接有限流电阻。
第四,仿真时C1可以取小一些,只要功能正确就行。在实际电路中再以计算值就行调测。
下图供参考。
#include<reg52h>
unsigned char t;
sbit P1_7=P1^7;
void main()
{
t=0;
P1_7=0;
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(t==200)
{
t=0;
P1_7=1;
}
}
}
void dingshi0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
t++;
}
以上就是关于如图,Q0.0~Q0.2顺序延时10S启动,逆序延时10S关闭,此程序无法运行,请问错在哪里全部的内容,包括:如图,Q0.0~Q0.2顺序延时10S启动,逆序延时10S关闭,此程序无法运行,请问错在哪里、求触51单片机10S延时、用555定时器设计一个延时10s的电路 要求按下开关没有输出 断开开关输出十秒等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)