1.从零开始的单片机生活-LED篇
目录1.前言2.51单片机介绍3.LED模块介绍4.点亮一个LED5.LED闪烁6.LED流水灯7.独立按键控制LED亮灭8.独立按键控制LED状态9.独立按键控制LED显示二进制10. 独立按键控制LED移位11.后记1.前言《关于没洗杯子在便利店门口穿越异世界学习51单片机这回事》 分享学习过程和感悟。2.51单片机介绍使用普中51-实验板Keil5写代码STC-ISP进行烧录。下面介绍开发板各部分。1.动态数码管模块2.接口3.接口4.8*8LED点阵模块5.LED模块本期主角6.矩阵按键模块7.红外接收模块8.DS18B20数字温度传感器将环境温度转化为数字信号9.NRF24L01无线通信模块实现2.4GHz频段的低功耗、短距离无线数据传输10.独立按键模块11.USB转TTL下载模块12.CH340C芯片实现USB下载和串口通信功能13.AMS1117低压差线性稳压器将USB提供的5V电源转换为单片机系统所需的3.3V电压14.电源开关15.ADC模块16.存储数据17.复位按键18.蜂鸣器模块19.DS1302时钟模块为单片机系统提供精准的实时时钟RTC功能20.五线四相步进电机21.STC89C52RC单片机芯片22.接口23.74HC595D芯片扩展I/O输入/输出口控制8x8 LED点阵模块24.74HC245KA芯片:驱动数码管段选驱动点阵屏/LED双向传输控制25.扩展芯片3.LED模块介绍1LED在生活中很常见它具有单向导通性只有施加正向电压时才会发光。2在单片机上是8个LED组成的LED模块。编号由D1到D8下面是两个限流电阻左上方的P20-P27就是LED所对应的端口引脚下面看看这一部分的原理图。3从电源正极出发经过LED再串联了限流电阻接到P2引脚。4那么我们怎样控制LED呢如图LED左端电源已经提供了高电平要使LED发光那么P2端口就要输出低电平。规定输出高电平为5V低电平为0V所以当P2输出0V,电路就会导通。5那么接下来的问题就是如何控制P2输出高低电平也就是单片机怎样控制外设。首先要了解寄存器寄存器是一种存储器以8个为一组单片机通过控制寄存器来控制外部设备。CPU向P2寄存器写入0/1连接驱动器后放大电流最后就再在输入/输出端口输出高低电平1对应5V高电平0对应0V低电平。所以只需要在P2端口的寄存器写入0/1就可以控制LED。4.点亮一个LED实现如图效果只点亮D1 LED,其余LED熄灭。代码如下#includeSTC89C5xRC.Hvoidmain(){while(1){P20xF0;}}首先引入头文件因为P2定义在这个头文件中不然keil5不知道P2是什么。#includeSTC89C5xRC.H接着是主函数P2的寄存器以8位为一组刚好对应D1-D8八个LED,所以用二进制的八位分别对应不过规定低位是D1高位是D8(如下图所示)。这样 P21111 1110 就可以点亮D1了。而while(1)的循环使程序一直运行。voidmain(){while(1){P211111110;}}用十六进制表示#includeSTC89C5xRC.Hvoidmain(){while(1){P20xFE;}}5.LED闪烁先看实现效果LED闪烁我们已经点亮了LED要实现LED闪烁那么LED的状态是亮—灭— 亮—灭……代码如下P21111 1111熄灭所有的LED,也就是D1的熄灭状态。P20xFE)#includeSTC89C5xRC.Hvoidmain(){while(1){P20xFE;P20xFF;}}看起来perfect但是实际在单片机上运行这个程序时会发现D1LED一直是亮的这是因为单片机的运行速度非常快熄灭的时间太短导致看起来“没有熄灭”所以我们要加一个“延时”来实现闪烁效果。这是一个500ms的延时函数:#includeINTRINS.HvoidDelay500ms(void)//11.0592MHz{unsignedchardata i,j,k;_nop_();i4;j129;k119;do{do{while(--k);}while(--j);}while(--i);}加上延时函数之后LED闪烁的过程变成了亮—延时—灭—延时……周期为一秒的闪烁完整代码如下#includeSTC89C5xRC.HvoidDelay500ms(void)//11.0592MHz{unsignedchardata i,j,k;_nop_();i4;j129;k119;do{do{while(--k);}while(--j);}while(--i);}voidmain(){while(1){P20xFE;Delay500ms();P20xFF;Delay500ms();}}6.LED流水灯先看实现效果LED流水灯我们已经点亮了一个LED那么依次点亮D1~D8同时使其余的LED熄灭再重复这个过程就得到了流水灯。得到了以下代码#includeSTC89C5xRC.Hvoidmain(){while(1){P20xFE;P20xFD;P20xFB;P20xF7;P20xEF;P20xDF;P20xBF;P20x7F;}}对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗对吗下面是结果因为单片机的运行速度非常快快速的执行循环代码 使所有的LED看起来一直保持点亮所以必须增加延时函数。代码如下#includeSTC89C5xRC.HvoidDelay500ms(void)//11.0592MHz{unsignedchardata i,j,k;i4;j129;k119;do{do{while(--k);}while(--j);}while(--i);}voidmain(){while(1){P20xFE;Delay500ms();P20xFD;Delay500ms();P20xFB;Delay500ms();P20xF7;Delay500ms();P20xEF;Delay500ms();P20xDF;Delay500ms();P20xBF;Delay500ms();P20x7F;Delay500ms();}}7.独立按键控制LED亮灭先看实现效果独立按键控制LED亮灭首先介绍独立按键这里用到的是独立按键模块10电路原理图如图四个按键共地另一端连接P3端口要实现按下按键时LED点亮松手时熄灭就要检测按键什么时候被按下。寄存器不仅能发出指令还能检测端口的电平再放到寄存器中所以只需要读取按键对应端口的电平高低就知道了按键什么时候被按下。由于单片机上电时是高电平1按键一端是地按键按下电路导通变为低电平0。1代表按键没有被按下0代表按键被按下。我们来分析整个过程端口电平为1——按键按下——端口电平为0——点亮LED——松开按键——熄灭LED。代码如下#includeSTC89C5xRC.Hvoidmain(){while(1){if(P310){P200;}else{P201;}}}其中P31对应k1按键P20对应第一个LED(D1)。既可以像P20xFE来控制P2端口的八个寄存器也可以用P200/1来单独控制单个寄存器。8.独立按键控制LED状态先看演示独立按键控制LED状态要实现按下按键来点亮/熄灭LED 本质上是检测到按下一次按键后来LED端口在0/1之间进行切换那么就要讲到按键抖动。也就是说按键没有被按下时是高电平1按下时是低电平0松开又回到高电平1但在按下和松开的瞬间按键抖动会造成电平在0/1之间不断切换5~10毫秒后才会稳定。按下一次按键对应1——0——1的变化但是按键抖动造成随机次数的变化也就是会判断为多次按下按键所以我们要添加延时来消除抖动分别加在检测到按下和松手的时候。代码如下#includeSTC89C5xRC.HvoidDelay(intx)//11.0592MHz{unsignedchardata i,j;while(x--){_nop_();i2;j199;do{while(--j);}while(--i);}}voidmain(){while(1){if(P310)//1.检测到按键按下{Delay(20);//2.延时消除按下时的抖动while(P310);//3。等待按键松开Delay(20);//4.延时消除松开时的抖动P20~P20;//5.取反实现LED亮灭转换}}}第三步为什么不用#includeSTC89C5xRC.HvoidDelay(intx)//11.0592MHz{unsignedchardata i,j;while(x--){_nop_();i2;j199;do{while(--j);}while(--i);}}voidmain(){while(1){if(P310){Delay(20);if(P311){Delay(20);P20~P20;}}}}当按住按键时会跳过**if(P31 1)并循环执行整个程序松手后P31变为高电平1被if(P31 0)的判断卡住不能进入内层判断出现按下按键被忽略的情况而while(P31 0);**会卡住不放行不管你按多久松手后才继续往下执行翻转。9.独立按键控制LED显示二进制先看演示独立按键控制LED显示二进制来举个例子我们用八个二进制代表LED八个寄存器模拟二进制计数8765432100000000//初始 //000000001//每按键一次加1 //100000010//200000011//300000100//400000101//500000110//600000111//700001000//8~~~~~~发现LED的点亮就是按键按下次数的二进制表示再取反即可所以只需要记录按键次数每按下一次次数加一再将次数赋给P2端口即可。代码如下#includeSTC89C5xRC.HvoidDelay(intx)//11.0592MHz{unsignedchardata i,j;while(x--){_nop_();i2;j199;do{while(--j);}while(--i);}}voidmain(){charlednum0;while(1){if(P310){Delay(20);while(P310);Delay(20);lednum;P2~lednum;}}}10. 独立按键控制LED移位先看演示:独立按键控制LED移位要实现用两个按键控制LED左右移动先来举个例子这里我们用1表现LED点亮87654321寄存器00000001//假设初始电平状态00000010//左移00000100//左移00001000//左移00000100//右移~发现左右移动是初始情况左移位/右移位按键按下次数而次数由两个按键的加减得到再取反就得到点亮LED的寄存器表示。实现变量记录按键按下次数右移加左移减实际LED移动判断LED移动到边界的情况。代码如下#includeSTC89C5xRC.HvoidDelay(intx)//11.0592MHz{unsignedchardata i,j;while(x--){_nop_();i2;j199;do{while(--j);}while(--i);}}voidmain(){charlednum0;P2~0x01;while(1){if(P300){Delay(20);while(P300);Delay(20);lednum;if(lednum8){lednum0;}P2~(0x01lednum);}if(P310){Delay(20);while(P310);Delay(20);if(lednum0){lednum7;}else{lednum--;}P2~(0x01lednum);}}}11.后记拖延症陆陆续续写了很久第一次写这种文章内容格式不好之处请见谅。文章中有些图片截自B站江协科技。以后也会继续更新学习内容谢谢大家。求三连

相关新闻

微信记账小程序的设计与实现|Spring Boot + MySQL 收支、预算与统计-----附源码77633

微信记账小程序的设计与实现|Spring Boot + MySQL 收支、预算与统计-----附源码77633

“微信记账小程序的设计与实现”,以一笔 38 元支出作为联调实验,并增加小程序端和后台管理界面。文章定位实验教程推荐标签微信小程序、Spring Boot、MySQL摘要通过一笔 38 元支出逐步验证交易事务、预算计算、提醒幂等、图表聚合和数据隐私,…

2026/8/18 19:09:26 阅读更多 →
企业级RAG性能优化与质量治理(8):在线反馈、失败样本回流与持续优化闭环

企业级RAG性能优化与质量治理(8):在线反馈、失败样本回流与持续优化闭环

文章摘要 前七篇已经完成文档解析、混合召回、索引版本治理、质量评测、查询增强、可信证据和缓存一致性。系统已经具备较完整的离线工程能力,但只依赖上线前数据集仍然不够。真实用户会带来开发团队从未考虑的口语表达、长文档、权限组合、动态数据、多轮指代、缓存…

2026/8/18 19:09:26 阅读更多 →
数组元素积的符号——(LeetCode1822)

数组元素积的符号——(LeetCode1822)

这几天一直写难题,搞点简单的,这道数组元素积返回符号题目,这里我就不放示例图了,想一想也就知道个大概例子。这里唯一要考虑的是乘积会出现数据溢出,这个一定要考虑,比如:int型存储的大小是-2^…

2026/8/18 19:08:26 阅读更多 →

最新新闻

保时捷Cayenne E-Hybrid:混动技术如何重塑高性能SUV驾驶体验

保时捷Cayenne E-Hybrid:混动技术如何重塑高性能SUV驾驶体验

1. 从“混动”到“性能”:Cayenne E-Hybrid的定位重塑 当“Cayenne”和“E-Hybrid”这两个词组合在一起时,很多人的第一反应可能是“省油”、“环保”或者“城市通勤利器”。这确实是保时捷推出插电式混合动力车型的初衷之一,尤其是在像卡宴这…

2026/8/18 23:24:11 阅读更多 →
彻底卸载Chrome浏览器:解决重装后白屏问题的完整指南

彻底卸载Chrome浏览器:解决重装后白屏问题的完整指南

1. 问题缘起:当卸载变成一场“捉迷藏” 最近帮朋友处理一台电脑,遇到了一个挺典型的麻烦:他想彻底卸载Google Chrome浏览器,但无论是通过控制面板的“卸载程序”,还是用系统自带的卸载向导走一遍流程,甚至重…

2026/8/18 23:24:11 阅读更多 →
Spring Boot集成Apache Dubbo 3.x:构建高效微服务通信与治理架构

Spring Boot集成Apache Dubbo 3.x:构建高效微服务通信与治理架构

1. 项目背景与核心价值 如果你正在构建一个微服务架构,或者想把一个单体应用拆分成多个独立部署的服务,那么服务间的通信就是你绕不开的核心问题。过去我们可能用HTTP API,简单直接,但在高并发、服务治理、链路追踪这些复杂场景下…

2026/8/18 23:23:10 阅读更多 →
基于Ollama与Milvus的Java版RAG知识库搭建指南

基于Ollama与Milvus的Java版RAG知识库搭建指南

1. 项目概述 最近在本地搭建了一个基于Ollama和Milvus的RAG知识库助手,整个过程踩了不少坑,也积累了一些经验。这个方案特别适合需要私有化部署的企业或个人开发者,既能保证数据安全,又能利用大语言模型的能力。下面我就把完整的搭…

2026/8/18 23:23:10 阅读更多 →
Blender 3MF 插件免费安装全指南:如何把模型的颜色、尺寸与打印参数完整送进切片软件

Blender 3MF 插件免费安装全指南:如何把模型的颜色、尺寸与打印参数完整送进切片软件

Blender 3MF 插件免费安装全指南:如何把模型的颜色、尺寸与打印参数完整送进切片软件 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 在 Blender 里花一下午调…

2026/8/18 23:23:10 阅读更多 →
Cookie全流程实战:从编码原理到安全实践,解决中文乱码与跨域传递

Cookie全流程实战:从编码原理到安全实践,解决中文乱码与跨域传递

1. 项目概述:从“Cookie中文”说起,一个被误解的实战话题 最近在和一些刚入行的朋友交流时,发现一个挺有意思的现象:很多人一看到“Cookie的发送、获取、Cookie传递中文”这个标题,第一反应是去研究Cookie里怎么存中文…

2026/8/18 23:23:10 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →