单片机学习笔记 3. LED灯流水灯

更多单片机学习笔记:
单片机学习笔记 1. 点亮一个LED灯
单片机学习笔记 2. LED灯闪烁


目录

0、实现的功能

1、Keil工程

[1-1 宏定义](#1-1 宏定义)

[1-2 延时函数](#1-2 延时函数)

[1-3 标准库函数中的循环移位函数](#1-3 标准库函数中的循环移位函数)

[1-4 Keil中Debug用法](#1-4 Keil中Debug用法)

2、代码实现


0、实现的功能

实现LED灯依次闪烁,形成流水灯效果

1、Keil工程

1-1 宏定义

c语言中的宏定义简单来说就是化繁为简,也可对数据类型命为新的名字

1-2 延时函数

Keil中的函数分为标准库函数和自定义函数

下面给出一种延时函数,该板子的晶振频率为11.0592MHz,这个频率虽然机器周期不是整数,12MHz的机器周期是1us,但是它的波特率不好算,会导致传输数据的时候可能出错:

cpp 复制代码
//自定义函数:延时函数Delay(毫秒级)

void Delay(unsigned int z)
{
    unsigned int x, y;
    for(x = z; x > 0; x--)
        for(y = 114; y > 0; y--);
}

//直接给形参z赋值,如延时100ms的话,直接调用函数Delay(100)
//函数自己循环了100*114 = 11400次,根据晶振频率对应的时钟周期,算出为100毫秒

或者使用烧录软件的附带功能,输入晶振频率11.0592MHz和延时时间100ms

1-3 标准库函数中的循环移位函数

Keil中对应的标准库函数为:intrins.h,是一个内部函数

字符型循环左移:crol

字符型循环右移:cror

【注意:】该函数只适合于char型,int不可以

cpp 复制代码
#include<intrins.h>
void test_crol(void)
{
    unsigned char a;
    unsigned char b;
    a = 0xFE; // 1111 1110
    b = _crol_(a,1); //循环左移一位,b现在是0xFD 1111 1101
}
//循环左移是把最高位移到了最低位上

而左移运算符也可以实现移位操作,但是是把高位移除,最低位补0

cpp 复制代码
a = 0xFE;    //1111 1110
b = a<<1;    //b现在是1111 1100
//左移运算符是把高位移除,最低位补上0

1-4 Keil中Debug用法

界面最右边点击Debug图标,或者快捷键ctrl+F5,进入Debug模式

点击P1口,实时观察P1口的接口导通情况;单步进行调试,观察状态,左下角的sec还可以显示用时时间,可以验证延时函数的准确性

2、代码实现

cpp 复制代码
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

uchar temp;    //LED灯闪烁过程变量

void delay(uint z)
{
	uint x;
	uint y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0; y--);
}

void main()
{
	temp = 0xfe;
	P1 = temp;    //初始时只亮第一个灯
	delay(100);
	while(1)
	{
		temp = _crol_(temp, 1);    
		P1 = temp;
		delay(100);	    //亮一次就延时100ms,再左移一位,亮下一盏灯
	}	
}

效果展示:

相关推荐
wuyk55543 分钟前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无1 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
不会代码的小猴2 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
恒锐丰-罗生2 小时前
国产 H 桥驱动 SS6289|18V/4A 有刷电机驱动芯片性与应用分析 内置采样 + 多保护,门锁 / 机器人优选器件
驱动开发·嵌入式硬件·硬件工程
疯狂打码的少年3 小时前
【数据结构】图的存储结构:邻接矩阵与邻接表
数据结构·笔记
蒸蒸yyyyzwd4 小时前
cpp 选手准备秋招学习笔记 day10
笔记·面试·求职招聘
haerapicom5 小时前
欠定方程里藏着哪几个非零项:OMP 稀疏恢复侦探笔记
笔记
程思扬5 小时前
Android ANR实战排查:主线程SystemClock.sleep导致页面启动偶现无响应
android·笔记
zcmodeltech6 小时前
工程机械与矿山机械沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的露天开采-井下掘进-智慧矿山全场景联动方案
数据库·stm32·单片机·嵌入式硬件·制造·多分类
zjnlswd6 小时前
C#学习笔记4
笔记·学习·c#