0.LED基础控制

news/2025/1/16 14:58:53/文章来源:https://www.cnblogs.com/surime/p/18674989

典中典之发光二极管,我从小学到大

长脚是正级,断脚是负极 里面大块的是负级,小块的是正极

电阻标注:

  • 若标注102 -> 代表着为1K电阻(10^2)
  • 若标注473 -> 代表着为47K电阻(47 * 10^3)
    以此类推 其他器件标注也为类似模式

RP7 RP9模块为限流电阻
此单片机使用TTL规范(高电平5V 低电平0V)
要让上图LED亮,则引脚端要为低电平

单片机通过CPU访问寄存器,寄存器通过驱动器控制引脚,进而控制LED
单片机控制电路实则就是玩弄寄存器

C语言位运算

1. 点亮一个LED

#include <REGX52.H>void main()
{//P2 = 0xFE;		// 1111 1110 P2 = 0x55;	// 0101 0101// 对变量进行赋值时使用16进制// 相当于终止对引脚的操作while(1){}
}

其中0x代表16进制

2. 使LED闪烁

#include <REGX52.H>
#include <INTRINS.H>// 使程序休眠500ms
void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){P2 = 0xFE;Delay500ms();P2 = 0XFF;Delay500ms();}
}

3. 流水灯设计

#include <REGX52.H>
#include <INTRINS.H>void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main()
{unsigned char i = 0x01;  // 初始化为0x01,即二进制的0000 0001,表示第一个LED先点亮while(1){P2 = ~i;  // 将i的值输出到P2端口,控制LED灯的状态Delay500ms();  // 延时500msi <<= 1;  // 将i左移一位,使下一个LED点亮if(i == 0x00)  // 如果i左移后变为0x00,说明已经循环了一圈{i = 0x01;  // 重新设置为0x01,从第一个LED开始}}
}

4. 使用独立按键控制LED亮灭

一个按键控制一个:

#include <REGX52.H>void main()
{while(1){if(P3_1 == 0){P2_0 = 0;}else{P2_0 = 1;}}
}

5. 独立按键控制LED状态

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int xms)		//@11.0592MHz
{unsigned char i, j;while(xms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){if(P3_1 == 0){Delay(10);while(P3_1 == 0);Delay(10);P2_0 = ~P2_0;}}
}

在触发按键前后加上延时,可以去除按键抖动,使按键更加跟手
(低延迟男孩)

实现二进制计数

按一下按键记一次数

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int xms)		//@11.0592MHz
{unsigned char i, j;while(xms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}void main()
{unsigned int ledNum = 0;while(1){if(P3_1 == 0){Delay(20);while(P3_1 == 0);Delay(20);ledNum++;P2 = ~ledNum;}		}	
}

6.实现按键控制LED移动

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int xms)		//@11.0592MHz
{unsigned char i, j;while(xms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}void main()
{unsigned int ledNum = 0x01;while(1){if(P3_1 == 0){Delay(20);while(P3_1 == 0);Delay(20);P2 = ~ledNum;ledNum <<= 1;// 移至超出时复位// 0000 0001 -> 1000 0000 -> 0000 0001if(ledNum > 0x80){ledNum = 0x01;	}}		}	
}

长脚是正级,断脚是负极 里面大块的是负级,小块的是正极

电阻标注:

  • 若标注102 -> 代表着为1K电阻(10^2)
  • 若标注473 -> 代表着为47K电阻(47 * 10^3)
    以此类推 其他器件标注也为类似模式

![[Pasted image 20250114171745.png]]
RP7 RP9模块为限流电阻
此单片机使用TTL规范(高电平5V 低电平0V)
要让上图LED亮,则引脚端要为低电平

单片机通过CPU访问寄存器,寄存器通过驱动器控制引脚,进而控制LED
单片机控制电路实则就是玩弄寄存器

C语言位运算

![[Pasted image 20250115111820.png]]

1. 点亮一个LED

#include <REGX52.H>void main()
{//P2 = 0xFE;		// 1111 1110 P2 = 0x55;	// 0101 0101// 对变量进行赋值时使用16进制// 相当于终止对引脚的操作while(1){}
}

其中0x代表16进制

2. 使LED闪烁

#include <REGX52.H>
#include <INTRINS.H>// 使程序休眠500ms
void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){P2 = 0xFE;Delay500ms();P2 = 0XFF;Delay500ms();}
}

3. 流水灯设计

#include <REGX52.H>
#include <INTRINS.H>void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main()
{unsigned char i = 0x01;  // 初始化为0x01,即二进制的0000 0001,表示第一个LED先点亮while(1){P2 = ~i;  // 将i的值输出到P2端口,控制LED灯的状态Delay500ms();  // 延时500msi <<= 1;  // 将i左移一位,使下一个LED点亮if(i == 0x00)  // 如果i左移后变为0x00,说明已经循环了一圈{i = 0x01;  // 重新设置为0x01,从第一个LED开始}}
}

4. 使用独立按键控制LED亮灭

一个按键控制一个:

#include <REGX52.H>void main()
{while(1){if(P3_1 == 0){P2_0 = 0;}else{P2_0 = 1;}}
}

5. 独立按键控制LED状态

![[Pasted image 20250115113351.png]]

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int xms)		//@11.0592MHz
{unsigned char i, j;while(xms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){if(P3_1 == 0){Delay(10);while(P3_1 == 0);Delay(10);P2_0 = ~P2_0;}}
}

在触发按键前后加上延时,可以去除按键抖动,使按键更加跟手
(低延迟男孩)

实现二进制计数

按一下按键记一次数

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int xms)		//@11.0592MHz
{unsigned char i, j;while(xms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}void main()
{unsigned int ledNum = 0;while(1){if(P3_1 == 0){Delay(20);while(P3_1 == 0);Delay(20);ledNum++;P2 = ~ledNum;}		}	
}

6.实现按键控制LED移动

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int xms)		//@11.0592MHz
{unsigned char i, j;while(xms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}void main()
{unsigned int ledNum = 0x01;while(1){if(P3_1 == 0){Delay(20);while(P3_1 == 0);Delay(20);P2 = ~ledNum;ledNum <<= 1;// 移至超出时复位// 0000 0001 -> 1000 0000 -> 0000 0001if(ledNum > 0x80){ledNum = 0x01;	}}		}	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870134.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ITIL 4的4个维度

ITIL 4 于 2019 年推出,其中包含 ITIL 的一些新方面,例如服务价值体系和四个维度(后者是本文的主题)。ITIL 的大部分价值和可信度在于 缺乏原创性:ITIL 中的想法和建议基于常识、经过验证的有效性和悠久的使用历史。这四个维度是经过充分验证和广泛使用的概念的完美示例 阐…

小红书已被TikTok“难民”攻占!谁能接住这泼天富贵?

谁都不会想到,美国即将对Tiktok发出的禁令会让故事发生这样的转向,小红书竟成最后“赢家”。 小红书首页的“国际范” 一夜之间,小红书的首页被大量英文帖子“攻占”。中国网友纷纷表示:“一觉醒来,我成外国人了?”。这些新用户自称“TikTok难民”,并迅速在小红书上开设…

elasticsearch之DSL查询结果处理

搜索的结果可以按照用户指定的方式去处理或展示。排序 分页 搜索关键词高亮排序 elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。 普通字段排序 keyword、数…

倍增求lca

非常重要的东西 我甚至模拟赛都不打了来打笔记 很简单啊,朴素lca是这样,两个节点,先令深度相等,然后一个一个往上跳直到跳到相同的位置则那个点为两点的lca 但是令深度相等与往上跳的过程都要一个一个慢慢跳所以时间复杂度拉满了 那么我们能以什么方式优化呢 我们可以发现,…

可视化管理:并行开发的必备工具

随着软件开发复杂度的提升,如何在并行开发模式中有效管理资源与进度成为团队面临的重要挑战。而看板工具以其对瓶颈的直观展示与管理能力,成为解决这一问题的关键手段。一、并行开发中的典型瓶颈问题 并行开发是一种高效但复杂的模式,其主要瓶颈包括: 1. 资源分配不均:各模…

C# NAudio 获取控制系统音量

https://github.com/naudio/NAudio NAudio 是一个开源的 .NET 音频库,由 Mark Heath 开发,开源地址:https://github.com/naudio/NAudio 支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效…

DBeaver随笔(1)——如何生成改表sql语句

用习惯了Navicat,非常喜欢改完表之后点击SQL预览直接查看改表sql的功能一图看懂,只需要新增或修改字段后点击保存就弹出改表sql了。

初识ES ---倒排索引

正向索引: mysql 倒排索引: elasticsearch采用倒排索引:文档(document):每条数据就是一个文档。 词条(term): 文档按照语义分成的词语(中文按照中文语义分)。词条不能重复。 eg: 会对用户输入的关键字数据进行分词 华为手机-》分词: 华为 手机 可以看出: 正向索引:…

构造刷题记录

[AGC001D] Arrays and Palindrome 首先观察发现奇数的个数看起来很重要,然后手玩一会发现最多只能有两个奇数,然后再分讨构造就可以了。[AT_hitachi2020_c] ThREE 观察到 \(3\mid a\times b\) 要求 \(a,b\) 中至少一个 3 的倍数。 发现如果两个点的距离为 3 的话他们的深度的…

【Python安全】Python .pth 文件作为后门持久化机制的分析

引言 update.py 脚本的目的是在以下路径部署后门:/usr/lib/python3.6/site-packages/system.pth。这个用 Python 编写的后门从一个导入语句开始,其主要内容以 base64 编码的 blob 形式存储。.pth 扩展名用于向 Python 模块添加额外的路径。从 Python 3.5 版本开始,在.pth 文件…

如何禁止外网通过IP和端口访问特定站点?

当您希望禁止外网通过IP和端口直接访问某个特定站点时,可以通过配置服务器的安全组规则和防火墙设置来实现。以下是详细的步骤和注意事项:理解安全组和防火墙的区别:安全组规则主要作用于云服务器层面,控制进出服务器的流量;而防火墙则是在操作系统级别进行流量过滤。两者…

如何解决宝塔面板升级后无法访问的问题?

您好,根据您的描述,宝塔面板在升级后无法正常访问。以下是详细的分析和解决方案:确认升级过程:确保升级过程中没有中断或异常,所有文件均已正确下载并安装。有时网络不稳定可能导致升级失败。 检查宝塔面板的日志文件(通常位于/www/server/panel/logs),查看是否有报错信…