请问第二个流水等实验为什么是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输出低电平。谢谢
回复
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
如何实现基于NXPiMX.RT1021的BH1730采集被打赏50分 | |
【换取手持数字示波器】AHT10温度检测分享被打赏40分 | |
【换取手持数字示波器】ACM32F070开发板点亮LCD屏和触控按键,串口,ADC被打赏40分 | |
【换取手持数字示波器】ACM32F070LCD屏和触控按键功驱动蜂鸣器分享被打赏40分 | |
【换取手持数字示波器】国民技术PWM功能知识分享被打赏40分 | |
【换取手持数字示波器】放大器运放知识分享被打赏40分 | |
【分享评测,赢取加热台】+开关电源AC输入知识分享被打赏30分 | |
【换取手持数字示波器】N32G430点亮数码管与串口打印、ADC被打赏40分 | |
老胖子聊电路--分析一个反馈电路被打赏50分 | |
【换取手持数字示波器】+点亮WS2812RGB灯被打赏50分 |