清翔零基础教你学51单片机_个人学习笔记(3)_流水灯
说明
本人使用的是清翔的51单片机开发板,如果型号相同最方便,但是如果型号不同也可以参考,因为芯片都是一样的,只是外设不同而已,使用时只需要对照自己的开发板原理图稍微修改下引脚即可。
本次笔记对应清翔视频教程的第13集
一、写延时函数
复制工程模板并改名为“3.流水灯”,打开工程,添加头问件和main函数,编写毫秒延时函数
不关心具体是怎么得出的,先用着
#include <reg52.h>
void delay(unsigned int i)
{
unsigned int j;
for (; i > 0; i--)
for (j = 114; j > 0; j--);
}
void main()
{
}
延时函数里面有2个for循环,并且没有{},说明这是一个嵌套循环,并且循环语句只有1行。第一个for的第一个参数为空,是因为在输入参数的时候已经有i的值了,不需要再初始化函数值了。
如果把delay函数的定义放在main函数后面,需要在main函数前面进行函数声明
#include <reg52.h>
void delay(unsigned int i); //函数声明
void main()
{
}
void delay(unsigned int i)
{
unsigned int j;
for (; i > 0; i--)
for (j = 114; j > 0; j--);
}
1.1 自定义变量类型
如果觉得unsigned int 、unsigned char等太长,可以使用#define 原名称 自定义名称 来替换,比如
#define unsigned int uint //注意后面没有分号#define unsigned char uchar
也可以用typedef 原名称 自定义名称;来替换,比如
typedef unsigned char uchar; //注意这个有分号typedef unsigned int uint;
替换之后就可以直接用自定义名称来代替比较长的原名称,自定义名称可以任意取,不过最好用有意义的单词来表示
二、循环移位函数与位移操作
循环移位函数需要引用头文件:intrins.h
字符型循环左移:_crol_(要循环的变量,循环的位数)
字符型循环右移:_cror_(要循环的变量,循环的位数)
左移运算:变量 << 左移位数
右移运算:变量 >> 右移位数
例如
#include <intrins.h>
unsigned char a;
unsigned char b;
a = 0xc1; //1100 0001
b = _crol_(a,1); //b就变成了1000 0011
b = cror_(a,1); //b就变成了1110 0000
b = a >> 1; //b = b0110 0000
b = a << 1; //b = b1000 0010
三、原理图分析

只需要让某一位为0并且循环移动,其余位为1就可以实现流水灯效果
四、代码
#include <reg52.h>
#include <intrins.h>
void delay(unsigned int i)
{
unsigned int j;
for (; i > 0; i--)
for (j = 114; j > 0; j--);
}
typedef unsigned char uchar;
typedef unsigned int uint;
uchar temp;
void main()
{
temp = 0xfe; //11111110
while(1)
{
P1 = temp;
delay(200);
temp = _crol_(temp,1);
}
}
五、编译下载
打开stc-isp软件,点击“打开程序文件”,在弹出的文件浏览窗口中进入“2.LED闪烁”,在Objects文件夹下选中.hex文件,再点击下载即可,详见清翔零基础教你学51单片机_个人学习笔记(1)_点亮开发板上的LED灯
3.3 点击编译 3.4 下载 这两个章节的内容
六、简单介绍debug
debug按钮
注意,需要编译之后才能进入debug
在Peripherals > I/O-Ports里面可以查看置顶端口的电平,比我们现在使用的是P1,那么就选择P1
会出现一个小弹窗
打钩表示高点评,没有打钩表示低电平,再看左上方几个图标

分别是复位、运行、停止、单步运行、运行到下一行、跳出当前函数 、运行到光标所在行
左侧边栏可以看到寄存器的值,变量的值以及运行时间等。
下图中刚进入delay时运行时间是0.42643ms,运行完delay之后时间变成201.17839ms,时间差是200.75196ms,约等于设定的200ms。其他功能可以自行探索一下
也可以使用“单片机精灵”软件来生成延时代码,不过一般刚才的毫秒延时就够用了

本次笔记对应清翔视频教程的第13集,到此结束。下一个笔记将对应视频的15集:蜂鸣器(理论+编程)

浙公网安备 33010602011771号