单片机的8位流水灯的问题,

while(1) //大循环
{
a=0xfe; //赋初值
for(i=0;i<8;i++) //左移
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
那个灯是在P1=0,低电平才亮,为什么上面注释说P1=A=OXfe就点亮小灯了。还有

a=_crol_(a,1); //将a变量循环左移一位,为什么左移一位变量,就变成第二个灯亮了

哥们。你知道0xfe代表什么意思吗?51单片机的P1口有8个端口。0xfe表示最后一位为低电平也就是11111110.小灯当然会亮。然后a变量左移一位就是11111101,表示第二个灯亮其他灭。以此类推,不就是流水灯吗?还有,你的蜂鸣器和灯设置延迟50毫秒?那就相当于一直在响一直再亮。多延迟一会
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-06
P1口共有8个IO控制口,分别控制8个LED灯,你的目的是做流水灯,也就是让其依次循环点亮,第一次点亮第一个灯,即:P1.0=0,其余为1即P=0xfe;第二次点亮第二个灯,即:P1.1=0,其余为1即P=0xfd;依次类推。=_crol_(a,1)实现的功能就是循环左移,相当于汇编语言的RL A;这样就可以实现a的值分别为:0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f。
第2个回答  2013-03-05
你看这样能不能理解,通常是小灯的负极接单片机P1脚,单片机的该引脚为0是,相当于小灯的负极接通了,小灯两端有电源电压。因为小灯的正极固定接在正电源上的。所以小灯亮,如果引脚为1,那为小灯负极也是5V,小灯正负极没有电压,所以不亮了。0Xfe换成二进制为11111110,所以左边第一个小灯亮,当变量左移一位,值变为11111101,所以左边第二个小灯亮。
第3个回答  2021-03-25

花样流水灯的玩法,一个51单片机8位端口轮流输出16颗灯珠,

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网