流水灯有问题
时间:10-02
整理:3721RD
点击:
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while(1)
{
P2 = LED;
delayms(250);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if(P2 == 0x00 ) {LED = 0xfe; } // 0xfe = 1111 1110
}
}
不明白最后一个if的作用是什么呢 为什么去了if以后流水灯就不流水了呢 明明是while 死循环啊?
#include <intrins.h>
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while(1)
{
P2 = LED;
delayms(250);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if(P2 == 0x00 ) {LED = 0xfe; } // 0xfe = 1111 1110
}
}
不明白最后一个if的作用是什么呢 为什么去了if以后流水灯就不流水了呢 明明是while 死循环啊?
另外这个ms 是什么意思
while(1);才是死循环,最后if的语句不是说了如果P2口的灯都亮了,再从第一个亮起,这不就实现循环了
ms是定义了一个延时变量,通过改变ms的数值来决定延时时间的大小。while()循环是根据括号中的表达式的真(1)或假(0)来判断是否循环的,所以如果括号中的表达式直接为1的话while(1){函数体}中函数体一直循环进行,或者while(1);之前的函数一直进行。<<左移运算符是原来的数向左移一位,且低位补0,所以当运行7次后LED=0000 0000B(即00H)所以要想重复流水灯,就要在7次之后将LED赋值原先的数1111 1110B(fe H)
哦 对哈 谢谢
正解!