请问第二个流水等实验为什么是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输出低电平。谢谢
回复
有奖活动 | |
---|---|
有需要电子工程师的单位吗(不坐班) | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 |
打赏帖 | |
---|---|
【换取手持数字示波器】+精英板温度采集被打赏2分 | |
【换取手持数字示波器】滞回比较电路分析被打赏30分 | |
【换取手持数字示波器】方波自激电路仿真及分析被打赏5分 | |
【换取手持数字示波器】电流镜电路分析被打赏20分 | |
【换取手持数字示波器】基于状态变量推导实现有源滤波器被打赏20分 | |
【换取手持数字示波器】XPT2046的iMX.RT1021的驱动方法被打赏5分 | |
【换取手持数字示波器】如何实现基于NXPiMx.RT1021的NSHT30的通讯方法被打赏5分 | |
如何实现基于NXPiMX.RT1021的BH1730采集被打赏5分 | |
玩转“DFRobot盖革计数器模块”准备工作认识模块知识分享被打赏30分 | |
【换取手持数字示波器】AHT10温度检测分享被打赏40分 |