发布时间:2026/8/18 19:09:44
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站江协科技。以后也会继续更新学习内容谢谢大家。求三连

相关新闻

2026/8/18 19:09:44

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

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

2026/8/18 19:04:43

小红书作品怎么下载?免费开源工具三步搞定无水印批量下载

小红书作品怎么下载?免费开源工具三步搞定无水印批量下载 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&…

2026/8/18 19:59:52

WOA-HKELM混合算法在多变量回归预测中的应用

1. 项目概述:WOA-HKELM多变量回归预测系统 这个项目实现了一个完整的机器学习解决方案,将鲸鱼优化算法(WOA)与混合核极限学习机(HKELM)相结合,用于解决复杂的多变量回归预测问题。作为一名长期从事机器学习工程实践的开发者,我认为…

2026/8/18 19:59:52

Unity引擎开发民俗文化数字漫游项目全流程实践指南

这次我们来看一个名为“Unity漫游莆禧‘十九日’”的个人独立开发项目。这是一个使用Unity引擎开发的、以莆田地区传统民俗活动“十九日”为主题的沉浸式漫游体验应用。对于关注地方文化数字化、Unity实时渲染技术应用以及个人独立游戏开发流程的开发者而言,这个项目…

2026/8/18 19:59:52

RocketMQ介绍学习

简介Apache RocketMQ 是一款由阿里巴巴集团开源的分布式消息中间件,目前是Apache基金会的顶级项目。它起源于阿里内部,旨在解决高并发场景下的消息通信问题,并经过“双11”等万亿级消息流转场景的严苛考验。RocketMQ 已从最初的消息队列&…

2026/8/18 19:54:51

Weblogic+iframe解析问题

方法 A&#xff1a;在父页面加 <meta> 标签<head><meta http-equiv"Connection" content"close"> </head>⚠️ 这个 meta 标签会被浏览器忽略——HTTP/1.1 规范不允许用 meta 控制 Connection 头。方法 B&#xff1a;在父页面用 J…

2026/8/17 10:49:52

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

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

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/18 0:02:05

Qwen3.8-27B本地部署实战:17GB内存运行270亿参数大模型

1. 这篇文章真正要解决的问题 你是否曾对动辄需要上百GB显存才能运行的百亿参数大模型望而却步&#xff1f;是否觉得在个人电脑上部署一个功能强大的语言模型是天方夜谭&#xff1f;最近&#xff0c;通义千问团队发布的 Qwen3.8-27B 模型&#xff0c;宣称仅需 17GB 内存即可在本…

2026/8/18 0:02:05

ME3169 36V,8A,180KHz 恒压Buck DC-DC 转换器

概述ME3169 是一款180KHz&#xff0c;PWM 模式恒压Buck DC-DC 转换器&#xff0c;8V 到36V 宽工作电压范围&#xff0c;低纹波&#xff0c;内置低导通电阻功率MOS。ME3169 内置环路补偿电路&#xff0c;可以减少外围元器件数量。内部设计有恒压环路&#xff0c;可以通过外部电阻…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/17 17:27:06

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版等核心场景&#xff0c;真正帮你高效搞定论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首…