请问第二个流水等实验为什么是MTB先亮?
我认为应该是和第一个流水等试验一样是第一个灯(MTA)先亮,但是利用第二个程序(位操作)都发现是MTB先亮。为什么?谢谢
第一个:对每一个口操作
#include <STC89.h>
sbit mta=P2^4;
sbit mtb=P2^5;
sbit mtc=P2^6;
sbit mtd=P2^7;
void delay(unsigned char n) //延时程序 (n=10--200ms)
{
unsigned char i,j,k;
for(i=n;i>0;i--)
for(j=100;j>0;j--)
for(k=125;k>0;k--);
}
void main()
{
while(1)
{
mta=1;
delay(10);
mta=0;
delay(20);
mtb=1;
delay(30);
mtb=0;
delay(40);
mtc=1;
delay(40);
mtc=0;
delay(30);
mtd=1;
delay(20);
mtd=0;
delay(10);
}
}
第二个:(利用了位操作)
#include<stc89.h>
void delay(unsigned char n)
{
unsigned char i,j,k;
for(i=n;i>0;i--)
for(j=100;j>0;j--)
for(k=125;k>0;k--);
}
void main()
{
unsigned char i;
while(1)
{
for(i=0;i<4;i++)
{
P2=(1<<i+4);
delay(10);
P2&=0x0F;
delay(10);
}
}
}
3楼
P2=(1<<i+4);
里面的 1<<i+4 是有优先级的!!如果你想要左移i位再加4的话应该是:P2=((1<<i)+4);
里面的 1<<i+4 是有优先级的!!如果你想要左移i位再加4的话应该是:P2=((1<<i)+4);
这个是让流水灯MTA先亮200ms,然后灭200ms,然后MTB亮200ms,然后灭200ms,然后MTC。。。 当然要是不写就是中间没有全灭的情况。二者都可以,但是我是试过了,改成P2&=0xF0 MTA照样第一次不亮,先是MTB亮,然后MTC,MTD,MTA,MTB,MTC,MTD,MTA,MTB,MTC,MTD,MTA... 为什么MTA第一次不亮啊,第一次循环i=0啊。
谢谢大家,我的截图如下,我用daumplayer无法截图,只能用wmp截图,无法截清楚,P2.4经过ULN2003A接到了MTA上,P2.5经过 ULN2003A接到了MTB上,P2.6经过ULN2003A接到了MTC上,P2.7经过ULN2003A接到了MTD上,ULN2003A起到了一 个反向的作用,也就是P2.4若是高电平,则ULN2003A输出低电平。谢谢
谢谢大家,我的截图如下,我用daumplayer无法截图,只能用wmp截图,无法截清楚,P2.4经过ULN2003A接到了MTA上,P2.5经过 ULN2003A接到了MTB上,P2.6经过ULN2003A接到了MTC上,P2.7经过ULN2003A接到了MTD上,ULN2003A起到了一 个反向的作用,也就是P2.4若是高电平,则ULN2003A输出低电平。谢谢
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |