LED灯随机亮起几个灯

#include "reg52.h"
#include "stdlib.h"

typedef unsigned int u16;
void delay(u16 i)
{
    while(i--)
    {};

}
void main()
{
          srand(0);

          while(1)
          {
            P2=rand()&0xff;
            delay(60000);
          
          }                  

}

rand的结果为什么要和0xff与一下,因为rand的结果可能会超过0xff,而我们P2最大值就是0xff,所以与一下就能拿到随机数的低八位,一个16进制位是4个二进制位。

我刚开始没想清楚,觉得应该是和0xff或一下,一测试发现D1到D8全灭,完全不是我想要的结果。后来才反应过来,任何数和0xff或之后的结果都是0xff

那么对应的二进制就是1111 1111 可不就是8个灯都灭吗。和0xff与才对,哈哈。

这篇还有一个东西要说就是 P2 以及之前的sbit,今天找到了资料,明天写一写。

http://www.keil.com/support/man/docs/c51/c51_le_sbit.htm

这里有个特殊的用法P2=XX

可以参考我写的一篇文章。sbit和sfr到底是什么

总之特殊寄存器是可以直接把名字来操作数据的。

原文地址:https://www.cnblogs.com/yfish/p/10854043.html