记录自己学习51单片机的过程,主要是一些顿悟,碎语较多不成篇幅。
一些符号和术语
PXX的含义
原理图:

其中P2代表P2寄存器,P20代表该寄存器的第零位,P21代表第一位,以此类推。
所以可以写出如下代码使得P2接口的0号位处于低电位状态即亮起状态(LED灯是二极管,只有一头为高一头为低时才会通过电流,初始状态时都为高,所以没有电流通过也就都不会亮):
1 2 3 4 5 6 7 8 9
| #include<REGX52.h> int main(){ P2 = 0xFE; while(1) {
} return 0; }
|
如果想让LED模块依次亮起(流水灯),那么就可以写出以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <REGX52.H> #include <stdio.h>
void Delay_ms(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 120; j++) { } } }
int main() { int codes[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; int len = 8; int curIndex = 0; P2 = codes[curIndex]; while (1) { Delay_ms(100); curIndex = (curIndex + 1) % len; P2 = codes[curIndex]; } return 0; }
|
位运算的一些技巧
对二进制数据进行快捷操作,而不需要列举出所有可能,比如对共阴/共阳极的循环设置操作
在八位二进制数中修改其中几位相连的位数时,不用按位操作,可以预先定义目标数,然后用左/右移运算符将目标数移动到八位二进制数中要修改的那几位中即可