继上一篇学会点灯之后,我们就可以做‘流水灯’了。
首先我们要准备一块51开发板,我的是这样的。
软件方面就按照我上一篇文章的来。https://blog.csdn.net/qq_58675272/article/details/165239903?spm=1001.2014.3001.5501
然后一定要看自己的原理图,看看led是都接在GND(共阴极)还是vcc上(共阳极)。看看led到底接在哪个口,我的是P2口,共阳极的
所以我的是给低电平,led亮,共阴极就反着来给1就行。
好了我们开始具体操作。
这是完整代码:
#include <REGX52.H>//头文件 void delay( unsigned int ms){ //延时函数 unsigned int i, j; for( i = 0; i < ms; i++) for(j = 0; j < 120; j++); } void main(){ //主函数 while(1){ P2_0 = 0; //第一个灯亮 delay(100);//让第一个灯亮100ms P2_0 = 1;//第一个灯灭 P2_1 = 0;//第二个灯亮 delay(100);让第二个灯亮100ms P2_1 = 1;//第二个灯灭 P2_2 = 0;//...... delay(100); P2_2 = 1; P2_3 = 0; delay(100); P2_3 = 1; P2_4 = 0; delay(100); P2_4 = 1; P2_5 = 0; delay(100); P2_5 = 1; P2_6 = 0; delay(100); P2_6 = 1; P2_7 = 0; delay(100); P2_7 = 1; } }然后我来说说为什么这么写,这些代码都是干啥的。
- 先引入头文件,因为我们需要头文件里的定义。
大白话来说就是代码里的P2_0,P2_1等等这些东西,是在头文件里定义的,如果你不引用头文件,编译器压根不认识这些东西,就会报错说你没定义。也就是说我们需要引入头文件给他们做‘自我介绍’,让编译器‘认识认识’。
2写一个函数用来延时,我这里讲一下啥叫软件延时,就是说我们写代码实际上是让cpu去执行命令的,软件延时就是用代码让cpu去跑空循环来达到延时的目的。
3然后写主函数,一个程序是一定要有主函数的。
4写个while的死循环,一定要写不然会出问题。
5然后循环里面就这样写就行。然后是共阴极,1和0反过来就行。
如果没出现理想的现象,先看看你的代码写没写错,然后看看你的hex文件是不是成功生成了,以及你烧录的是不是那个正确的hex文件,最后检查一下原理图,看看是否有误。
最后,这是现象。
51单片机流水灯