|
本人用C语言和汇编写的流水灯,可是现象本人很难理解,希望有哪位大虾路过指点一下:
程序:
//用右移运算流水点亮P1口8位LED
#include<reg51.h> void delay(void)
{
/*unsigned int n;
for(n=0;n<30000;n++)
;*/
#pragma asm
MOV R0,#100
LOOP:
DJNZ R0,LOOP
#pragma endasm
}
/*****************************
函数功能:主函数
*****************************/
void main(void)
{
unsigned char i;
while(1)
{
P1=0xff;
delay();
for(i=0;i<8;i++)//设置循环次数为8
{
P1=P1>>1; //每次循环P1的各二进位右移1位,高位补0
delay(); //调用延时函数
}
}
}
这样的话只有第一盏灯亮,也就是P1^7的亮
如果吧P1=0xff;去掉的话P1口8位LED顺序亮下去
这是为什么呢?
第二种现象还好解决,第一种就不知道怎么理解了。
不求甚解、 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|