STC单片机 闪烁灯,LED流水灯 程序讲解
闪烁灯
所谓的闪烁灯就像警车一样,哔哩哔哩闪烁。
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流水灯 程序讲解相关推荐
- c51单片机学习笔记-LED流水灯实验
目的:实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮. 方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1. D3-D8 熄灭,延时一段时间后再点亮 D3 ...
- 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简介 三.硬件 ...
- 51单片机C语言led流水灯及数码管实现秒表
51单片机C语言练习题 单片机型号 普中科技的 led练习题 led小灯闪烁 #include<reg52.h> sbit LED = P0^0; void main() {unsigne ...
- LED闪烁与LED流水灯
目录 一.LED闪烁 二.LED流水灯 一.LED闪烁 让LED以1s为周期闪烁 单片机的速度是MHZ等级,我现在想让它亮灭亮灭,两行代码执行的特别快,LED就闪的特别快. 现在我想给它执行一行之后, ...
- 20220907_C52单片机学习笔记 | LED流水灯
1.C52单片机和LED原理图 2.思路分析 如何实现流水灯? 流水灯,顾名思义像水一样流过去,寄存器P2有8颗灯,按照顺序一个亮跳到下一个亮,OK ,我们先写二进制编码. 如上图所示,D1亮-延 ...
- 51单片机 按键控制LED流水灯模式
本章博客实现按键控制LED流水灯模式的功能 1.将之前文件中Delay.c.h复制过来,进行添加 2.模块化编程 3.main.c #include <REGX52.H> #include ...
- verilog 8位流水灯_用单片机控制的LED流水灯设计
1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代.单片机具有体积小.功能强.成 ...
- 51单片机入门学习--LED流水灯呼吸灯
LED led:发光二极管,Light Emitting Diode,可用万用表测量正负极 二极管电路图 直插式led,长的一端是正极,短的一端是负极 贴片式led,三角形的尖指向的是负极,有颜色的是 ...
- STC15单片机 线性按键控制LED流水灯位移
目录 1.现象 2.代码 3.LED模块原理图 4.线性键盘原理图 1.现象 程序下载完成后: 首先,由最右边的 LED1 点亮.当按下线性按键 S1 后,LED1 熄灭,LED2 点亮.其次,每按下 ...
- 流水灯c语言程序tm,51单片机LED流水灯课程设计任务书+论文
郑州工程技术学院课程设计 设计题目:LED流水灯设计 学 院:机电与车辆工程学院 专 业:16电气自动化技术专业班 级普招二班 姓 名:王*&刘* 指导教师:李* 日 ...
最新文章
- 安卓导航车机root方法_安卓手机设置充电提示音教程来了!教你三种方法,无需 ROOT!...
- 妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种
- 翻版“永恒之蓝”入侵手机 信息安全再临大考
- 自定义 Git - Git 钩子 (自动部署)
- 【实践】面向广告主的猜你喜欢推荐与B端用户增长实践.pdf(附下载链接)
- C# 如何 保存对config文件的修改
- VS2013、VS2015中,新建项目没有看到解决方案的问题(已解决)
- 64位整数乘法(类快速幂)
- [VOSViewer] 合并同义词、删除指定词语
- linux蚂蚁矿池教程,蚂蚁矿机Z9使用教程
- FFMPEG详解(完整版)
- Tortoise SVN Clean up失败的解决方法
- java中使用MD5验证文件的完整性
- Duplicate class com.xxx.xxx found in modules
- c语言中的下标变量是什么,c语言引用数组元素时其数组下标的允许的数据类型是什么...
- 快速修复 bug 的技巧?初学者的痛点,教你一招搞定!
- 对Numpy库ndarray对象(矩阵)中的数据元素的访问、选取操作示例
- Android各版本特性
- Python Turtle 小项目11 玫瑰曲线
- 磁盘配额管理disk quotas