LED与流水灯
1、GPIO控制
控制P2.0口,使LED点亮,以下是代码:
#include "reg52.h" sbit led = P2^0; void main() { led = 0; while(1) { } }
知识点
-
^ 用于异或操作,这里P2^0表示GPIO口的P2.0。
-
while(1); 这里用于无限循环,因为单片机一般就是一个一直循环的程序。
-
这里的led = 0;用于给P2.0口施加低电平,根据电路图来看,低电平会有电势差,才使得led点亮。
2、LED闪烁
原理:使LED处于高低电平的变化的状态当中。(还得加以肉眼可分辨的延时)
下面直接给出代码:
#include "reg52.h" sbit led = P2^0; typedef unsigned int u16; void delay(u16 i) { while(i--); } void main() { while(1) { led = 0; delay(50000); led = 1; delay(50000); } }
知识点
-
使用到了while(i--); 实现有限次循环的方式进行延时,每次运行时间大约10微秒(不准确)。
-
这里数据类型用的是unsigned int,取值范围为0~65535,在这里,可以将i取到50000(大约450毫秒)。
3、LED流水灯
轮流在P2.0-7 所在的LED闪烁,代码如下:
#include "reg52.h" #include <intrins.h> #define led P2 typedef unsigned int u16; typedef unsigned char u8; void delay(u16 i) { while(i--); } void main() { u8 i; led = ~0x01; delay(50000); while(1) { for(i = 0; i < 7; i++) { led = _crol_(led, 1); delay(50000); } for(i = 0; i < 7; i++) { led = _cror_(led, 1); delay(50000); } } }
知识点
-
_crol_ 、_cror_ :用于位的左移、右移,这里所用的库为 intrins.h