news 2026/7/17 5:01:47

51单片机从零到实战(2)——流水灯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
51单片机从零到实战(2)——流水灯

第 2 篇:流水灯——从 1 个 LED 到 8 个 LED

上一篇你点亮了 1 个 LED。这篇来点好玩的——8 个 LED 排队跑起来。


1. 硬件连接

把 8 个 LED 的负极分别接到 P1.0 ~ P1.7,每个 LED 的正极通过 220Ω 电阻接 VCC。

VCC ── 220Ω ── LED0 ── P1.0 VCC ── 220Ω ── LED1 ── P1.1 VCC ── 220Ω ── LED2 ── P1.2 ... VCC ── 220Ω ── LED7 ── P1.7

2. 位操作——sbit 关键字

sbit LED0=P1^0;// 把 P1.0 这个引脚命名为 LED0sbit LED1=P1^1;sbit LED2=P1^2;// ... 以此类推// 现在你可以单独控制每个 LED:LED0=0;// P1.0 输出低电平 → LED0 亮LED0=1;// P1.0 输出高电平 → LED0 灭

3. 单灯左移流水灯

#include<reg52.h>voiddelay(unsignedintms){unsignedinti,j;for(i=ms;i>0;i--)for(j=120;j>0;j--);}voidmain(){unsignedcharled=0xFE;// 1111 1110 → 只有 P1.0 亮while(1){P1=led;delay(200);// 左移一位led=(led<<1)|0x01;// 0xFE << 1 = 0xFC → 1111 1100// 0xFC | 0x01 = 0xFD → 1111 1101// 效果:亮的那个灯往左移动一个位置if(led==0xFF)// 移到最左边了led=0xFE;// 回到最右边,重新开始}}

4. 更多流水灯特效

来回流水灯(乒乓灯)

unsignedcharled=0xFE;chardir=1;// 1 = 左移, -1 = 右移while(1){P1=led;delay(100);if(led==0x7F)dir=-1;// 碰到最左边,回头if(led==0xFE)dir=1;// 碰到最右边,回头if(dir==1)led=(led<<1)|0x01;// 左移elseled=(led>>1)|0x80;// 右移}

跑马灯(4 个灯一起跑)

unsignedcharled=0xF0;// 高 4 位亮,低 4 位灭 → 1111 0000while(1){P1=led;delay(200);led=~led;// 取反 → 0000 1111 → 低 4 位亮,高 4 位灭// 再取反 → 1111 0000 → ... 来回交替}

5. 用数组存花样——更优雅的写法

unsignedcharcode patterns[]={0xFE,0xFD,0xFB,0xF7,// 单灯右移0xEF,0xDF,0xBF,0x7F,0x7F,0xBF,0xDF,0xEF,// 单灯左移(回)0xF7,0xFB,0xFD,0xFE,0x00,0xFF,0x00,0xFF,// 全亮全灭 ×2};voidmain(){unsignedchari;while(1){for(i=0;i<sizeof(patterns);i++){P1=patterns[i];delay(150);}}}

code关键字把数组存到 Flash(程序存储器),不占用宝贵的 512 字节 RAM。


6. 知识点总结

  • sbit让一个引脚变成一个变量名,操作更直观
  • <<>>是左移/右移运算符,流水灯的核心
  • ~是按位取反,0 变 1、1 变 0
  • code关键字把常量存 Flash,省 RAM
  • 用数组存花样,代码简洁漂亮

下一篇:按键——让单片机"听话"


下一篇:按键——让单片机"听话"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 5:00:43

电源工程师核心技能与电路设计实战指南

1. 电源工程师的核心能力图谱作为一名从业15年的电源设计老兵&#xff0c;我经常被问到"电源工程师到底需要掌握哪些核心技能"。与大多数人的想象不同&#xff0c;电源设计绝非简单的电路拼接&#xff0c;而是一个需要多维度知识融合的领域。让我们先拆解电源工程师的…

作者头像 李华
网站建设 2026/7/17 5:00:25

OpenVLA:具身智能端到端闭环控制的工程实践指南

1. 项目概述&#xff1a;OpenVLA不是“又一个大模型”&#xff0c;而是具身智能的工程分水岭 OpenVLA这个标题里藏着三个被严重误读的词&#xff1a;“Open”、“VLA”和“算法”。很多人第一反应是——哦&#xff0c;又一个开源大模型&#xff1f;或者&#xff0c;是不是OpenA…

作者头像 李华
网站建设 2026/7/17 5:00:22

VLA面试核心:感知-语言-动作三层认知与工程落地

1. 这不是“背题手册”&#xff0c;而是VLA面试者必须建立的认知坐标系“VLA大模型 面试指南导读”——看到这个标题&#xff0c;很多人第一反应是&#xff1a;又一份知识点罗列清单&#xff1f;又一套高频题库合集&#xff1f;我实话讲&#xff0c;如果你真这么想&#xff0c;…

作者头像 李华
网站建设 2026/7/17 4:57:11

Havenlon|安全讲人话(十):软件不能永远管住软件

当判断、审批和执行都在同一个软件世界里&#xff0c;攻击者只需要攻破一个世界。 先讲两件真事&#xff0c;它们从两个方向说明了同一个问题。 第一件&#xff0c;2023 年 10 月的 Okta 事件。 Okta 是全球无数企业的身份中枢——员工登录、权限校验、单点登录都靠它。攻击者…

作者头像 李华
网站建设 2026/7/17 4:56:33

C++多线程编程:互斥量、锁与条件变量的核心原理与实战应用

1. 项目概述&#xff1a;为什么我们需要“锁”&#xff1f;如果你写过任何涉及多线程的C程序&#xff0c;大概率遇到过一种令人头疼的bug&#xff1a;程序大部分时间运行正常&#xff0c;但偶尔会莫名其妙地崩溃&#xff0c;或者计算出匪夷所思的错误结果。你反复检查单线程逻辑…

作者头像 李华
网站建设 2026/7/17 4:56:26

macOS系统降级全指南:从原理到实践

1. macOS降级概述与核心需求解析 作为一名长期使用Mac的开发者&#xff0c;我经历过至少7次不同版本的macOS降级操作。每次系统更新后&#xff0c;总会有部分专业软件或开发环境出现兼容性问题&#xff0c;这时候降级就成了刚需。macOS降级本质上是通过抹盘重装的方式将系统回…

作者头像 李华