闪烁灯

所谓的闪烁灯就像警车一样,哔哩哔哩闪烁。

LED闪烁首先你先得看懂我上一篇文章 :https://liwangjiang.blog.csdn.net/article/details/110355725

LED闪烁其实就是将一个灯开一下,关一下。

在循环中不断的进行开关,这就是逻辑其实挺简单的,但是中间需要有一个延时,如果不延时就不会看到效果。

在这里需要用到C语言里面的一个重定义关键字:

unsigned and signed

int 分为无符号 unsigned 和有符号 signed 两种类型,默认为signed。二者的区别就是无符号类型能保存2倍于有符号类型的数据。32位下,signed int 的表示范围为:-2147483648 ~ 2147483647 (最高位做符号位)。unsigned int 的表示范围为:0 ~ 4294967295 (不保留符号位)。我们都知道,两个不同的数据类型在进行混合使用时,会自动进行类型转换

typedef使用

我们这里采用一个unsigned进行命名范围在0~429496... 之间

typedef重定义一些常用的关键字,可以增强程序的可移植性,因为在不同的编译软件上,C语言的数据类型的关键字的位宽是不一样的。

typedef unsigned char u8;   //表示将char重定义一下   u8表示char类型

开始程序

向上面所说中间需要加入一个delay()函数

coding:

#include "reg51.h"sbit ledP20 = P2^0;//D1 LED等的拐脚
typedef unsigned int u16;//重定义一个int类型//延迟函数
void delay(u16 delay){//大约减少10us的样子while(--delay){}
}main(){while(1){ledP20 = 1;//关灯delay(50000);//延迟ledP20 = 0;//开灯delay(50000);//延迟 }
}

效果:

设置断点查看闪烁时间

首先双击代码左侧的数码栏:

进入断点,这我们打断的的位置需要注意,关灯,然后开灯。中间会延迟,我们可以通过开始的时间和结束时间来计算中间花了多少时间。

断点窗口:

我们可以看到当前时间点

下一步进入延迟

我们这一步还没有进入延迟方法可以记住时间 0.00019500而后下一步

通过0.20029550 - 0.00019500 = 0.200毫秒

这个速度也跟开发工具有关如果设置Xtal(MHz) = 12.0时间就会慢,如果我们设置成12 会从开始计算到结束会显示大约0.4.50毫秒左右,这个不确定的。

流水灯

流水灯就是从D1-D8

其实流水灯也是围绕着闪烁灯这个逻辑继续跟踪的。

首先我们需要动的 ,循环左移右移函数

可以通过C语音的预处理命令来定义 #define A P2(不需要加分号)

通过定义如果我们使用了P2拐脚我们可以通过define A P2 来代替P2拐脚,通过调用A来处理P0拐脚

循环左移循环右移函数

方法 描述
_crol_(a,b)

循环左移函数,a是左移的值,b是左移的位数。包含在intrins.h函数库里面,left

_cror_(a,b)

循环右移函数,a是右移的值,b是右移的位数。包含在intrins.h函数库里面,right

开始程序

这里有一个点非常重要,一个16进制转2进制的一个操作。

流水灯从左开始

先看代码吧:

#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16; //重定义一个int类型
#define led P2 //表示所有的P2口//延迟函数
void delay(u16 delay){//大约减少10us的样子while(--delay){}
}void main(){int i;led = 0xfe; //1111 1110  //这里表示点亮第一个D1灯 可以看出这个16进制 while(1){for(i = 0;i <7;i++){/***当 i = 0 crol 右移一位   1111 1101*当 i = 1 crol 右移一位   1111 1011*当 i = 1 crol 右移一位   1111 0111*..以此类推到7的时候就完了01111 111*/led = _crol_(led,1);//左移delay(50000);} }
}

效果:

从下面留出可以看出流水灯的一个流程

流水灯从左右开始

这个程序流程是往回跑

代码:

#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16; //重定义一个int类型
#define led P2 //表示所有的P2口//延迟函数
void delay(u16 delay){//大约减少10us的样子while(--delay){}
}void main(){int i;led = 0xfe; //1111 1110  //这里表示点亮第一个D1灯 可以看出这个16进制 while(1){for(i = 0;i <7;i++){/***当 i = 0 crol 右移一位   1111 1101*当 i = 1 crol 右移一位   1111 1011*当 i = 1 crol 右移一位   1111 0111*..以此类推到7的时候就完了0111 1111*/led = _crol_(led,1);//左移delay(50000);}for(i = 0;i <7;i++){/***当 i = 0 crol 右移一位   0111 1111*当 i = 1 crol 右移一位   1011 1111*当 i = 1 crol 右移一位   1101 1111*..以此类推到7的时候就完了1111 1110*/led = _cror_(led,1);//右移delay(50000);}      }
}

效果:

STC单片机 闪烁灯,LED流水灯 程序讲解相关推荐

  1. c51单片机学习笔记-LED流水灯实验

    目的:实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮. 方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1. D3-D8 熄灭,延时一段时间后再点亮 D3 ...

  2. 51单片机 | 点亮第一个LED | LED 闪烁实验 | LED流水灯实验

    文章目录 一.51单片机GPIO介绍 1.GPIO概念 2.GPIO 结构框图与工作原理 2.1 P0端口 2.2 P1端口 2.3 P2端口 2.4 P3端口 2.5 要点 二.LED简介 三.硬件 ...

  3. 51单片机C语言led流水灯及数码管实现秒表

    51单片机C语言练习题 单片机型号 普中科技的 led练习题 led小灯闪烁 #include<reg52.h> sbit LED = P0^0; void main() {unsigne ...

  4. LED闪烁与LED流水灯

    目录 一.LED闪烁 二.LED流水灯 一.LED闪烁 让LED以1s为周期闪烁 单片机的速度是MHZ等级,我现在想让它亮灭亮灭,两行代码执行的特别快,LED就闪的特别快. 现在我想给它执行一行之后, ...

  5. 20220907_C52单片机学习笔记 | LED流水灯

    1.C52单片机和LED原理图   2.思路分析 如何实现流水灯? 流水灯,顾名思义像水一样流过去,寄存器P2有8颗灯,按照顺序一个亮跳到下一个亮,OK ,我们先写二进制编码. 如上图所示,D1亮-延 ...

  6. 51单片机 按键控制LED流水灯模式

    本章博客实现按键控制LED流水灯模式的功能 1.将之前文件中Delay.c.h复制过来,进行添加 2.模块化编程 3.main.c #include <REGX52.H> #include ...

  7. verilog 8位流水灯_用单片机控制的LED流水灯设计

    1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代.单片机具有体积小.功能强.成 ...

  8. 51单片机入门学习--LED流水灯呼吸灯

    LED led:发光二极管,Light Emitting Diode,可用万用表测量正负极 二极管电路图 直插式led,长的一端是正极,短的一端是负极 贴片式led,三角形的尖指向的是负极,有颜色的是 ...

  9. STC15单片机 线性按键控制LED流水灯位移

    目录 1.现象 2.代码 3.LED模块原理图 4.线性键盘原理图 1.现象 程序下载完成后: 首先,由最右边的 LED1 点亮.当按下线性按键 S1 后,LED1 熄灭,LED2 点亮.其次,每按下 ...

  10. 流水灯c语言程序tm,51单片机LED流水灯课程设计任务书+论文

    郑州工程技术学院课程设计 设计题目:LED流水灯设计 学    院:机电与车辆工程学院 专    业:16电气自动化技术专业班 级普招二班 姓    名:王*&刘* 指导教师:李* 日    ...

最新文章

  1. 安卓导航车机root方法_安卓手机设置充电提示音教程来了!教你三种方法,无需 ROOT!...
  2. 妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种
  3. 翻版“永恒之蓝”入侵手机 信息安全再临大考
  4. 自定义 Git - Git 钩子 (自动部署)
  5. 【实践】面向广告主的猜你喜欢推荐与B端用户增长实践.pdf(附下载链接)
  6. C# 如何 保存对config文件的修改
  7. VS2013、VS2015中,新建项目没有看到解决方案的问题(已解决)
  8. 64位整数乘法(类快速幂)
  9. [VOSViewer] 合并同义词、删除指定词语
  10. linux蚂蚁矿池教程,蚂蚁矿机Z9使用教程
  11. FFMPEG详解(完整版)
  12. Tortoise SVN Clean up失败的解决方法
  13. java中使用MD5验证文件的完整性
  14. Duplicate class com.xxx.xxx found in modules
  15. c语言中的下标变量是什么,c语言引用数组元素时其数组下标的允许的数据类型是什么...
  16. 快速修复 bug 的技巧?初学者的痛点,教你一招搞定!
  17. 对Numpy库ndarray对象(矩阵)中的数据元素的访问、选取操作示例
  18. Android各版本特性
  19. Python Turtle 小项目11 玫瑰曲线
  20. 磁盘配额管理disk quotas

热门文章

  1. python plt pyplot matplotlib绘图时形状异常
  2. 实现文件及文件批量改名的工具(包含未确定盘符的情况下)
  3. 浅谈软件测试测试策略几点总结内容
  4. MySQL ERROR 1698 (28000) 错误
  5. 概率论-小记录(矩估计)
  6. Windows系统下布置Redis服务器
  7. 姿态识别+校准|视觉技术新突破
  8. 微信公众号---收货地址共享接口
  9. Maya2022安装教程
  10. MySQL轻快入门2021.3.18(事务)