#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到底是什么
总之特殊寄存器是可以直接把名字来操作数据的。