首页 测试文本

清翔零基础教你学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集:蜂鸣器(理论+编程)

posted @ 2025-11-08 15:10  BO_S  阅读(22)  评论(0)    收藏  举报
页脚 测试文本