51单片机应用开发---二进制、十六进制与单片机寄存器之间的关系(跑马灯、流水灯实例)
实现目标
1、掌握二进制与十六进制之间的转换
2、掌握单片机寄存器与二进制、十六进制之间的转换
3、掌握单片机驱动跑马灯、流水灯的原理
一、二进制与十六进制之间的转换
1、二进制
二进制(binary), 是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。
2、十六进制
十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的进位制。通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,其中:A~F表示10~15,这些称作十六进制数字。单片机开发中用0x或0X 表示。
3.常用四种进制对照表

4.二进制转十六进制的转换方法
对一个多位二进制数,可先取出其后四位,转为一位十六进制数。对剩下的部分以同样方法进行转换,直到该串只剩下最后四位,就转换完毕。若是最后串的长度不足四位且不为零时,在串的前面加‘0’补齐位数,再进行转换,如图所示:

实例1:
二进制: 0101 0011
十六进制: 5 3
如上图二进制0101转换到十六进制后为5,为什么是5呢?这个时候就用到8421法则了,详细如下:
0 1 0 1 0 0 1 1
x x x x x x x x
8 4 2 1 8 4 2 1
= = = = = = = =
0 4 0 1 0 0 2 1
0+4+0+1 = 5 0+0+2+1 = 3
注:图中的”x“代表乘法的乘号
由上图计算可得知:
二进制0101转换到十六进制后为5,二进制0011转换到十六进制后为3
额外的知识点:四个二进制的数 = 一位的十六进制的数
5.十六进制转二进制的转换方法
十六进制: B 7
二进制: 1011 0111
用到8421法则,详细如下:
B 7
11 7
8+2+1 4+ 2+1
1 0 1 1 0 1 1 1
由上图计算可得知:
十六进制B转换二进制 1011,十六进制7转换二进制0111
额外的知识点: 一位的十六进制的数 = 四个二进制的数
二、单片机寄存器与二进制十六进制的关系
1.单片机P2寄存器与管脚
| P2寄存器 | |||||||
| P27 | P26 | P25 | P24 | P23 | P22 | P21 | P20 |
| 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 | 1/0 |


2.P2操作实例
由上面原理图可知,单片机管脚输出低电平时,LED点亮。现在要让LED5-LED8 亮,LED1-LED4灭,可将要点亮的管脚置0(低电平),灭的管脚置1(高电平),如下表格所示:
| P27 | P26 | P25 | P24 | P23 | P22 | P21 | P20 |
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
P2 = 0x0f; // 0000 1111 0X0f LED5-LED8 亮,LED1-LED4灭
3.跑马灯实例
3.1 管脚、寄存器、LED状态对照表
| 跑马灯原理分析 | |||||||||
| LED灯 | LED8 | LED7 | LED6 | LED5 | LED4 | LED3 | LED2 | LED1 | P2寄存器值 |
| 对应管脚 | P27 | P26 | P25 | P24 | P23 | P22 | P21 | P20 | |
| 灯状态1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0xfe |
| 延时500ms | |||||||||
| 灯状态2 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0xfd |
| 延时500ms | |||||||||
| 灯状态3 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0xfb |
| 延时500ms | |||||||||
| 灯状态4 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0xf7 |
| 延时500ms | |||||||||
| 灯状态5 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0xef |
| 延时500ms | |||||||||
| 灯状态6 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0xdf |
| 延时500ms | |||||||||
| 灯状态7 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0xbf |
| 延时500ms | |||||||||
| 灯状态8 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x7f |
| 延时500ms | |||||||||
| 灯状态9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0xff |
| 延时500ms | |||||||||
3.2 对应程序
(1)延时函数软件自动生成

(2)跑马灯操作程序
while(1)
{
P2 = 0xfe; //LED1亮
Delay500ms();
P2 = 0xfd; //LED2亮
Delay500ms();
P2 = 0xfb; //LED3亮
Delay500ms();
P2 = 0xf7; //LED4亮
Delay500ms();
P2 = 0xef; //LED5亮
Delay500ms();
P2 = 0xdf; //LED6亮
Delay500ms();
P2 = 0xbf; //LED7亮
Delay500ms();
P2 = 0x7f; //LED8亮
Delay500ms();P2 = 0xff; //关闭8个LED
Delay500ms();
}
(3)完整代码
#include <REGX52.H>sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;void Delay500ms() //@11.0592MHz
{unsigned char i, j, k;i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main(){ while(1){P2 = 0xfe; //LED1亮Delay500ms(); P2 = 0xfd; //LED2亮-Delay500ms(); P2 = 0xfb; //LED3亮Delay500ms(); P2 = 0xf7; //LED4亮Delay500ms(); P2 = 0xef; //LED5亮Delay500ms(); P2 = 0xdf; //LED6亮Delay500ms(); P2 = 0xbf; //LED7亮Delay500ms(); P2 = 0x7f; //LED8亮Delay500ms(); P2 = 0xff; //关闭8个LEDDelay500ms(); }}
4.流水灯实例
4.1 管脚、寄存器、LED状态对照表
| 流水灯原理分析 | |||||||||
| LED灯 | LED8 | LED7 | LED6 | LED5 | LED4 | LED3 | LED2 | LED1 | P2寄存器值 |
| 对应管脚 | P27 | P26 | P25 | P24 | P23 | P22 | P21 | P20 | |
| 灯状态1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0xfe |
| 延时500ms | |||||||||
| 灯状态2 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0xfc |
| 延时500ms | |||||||||
| 灯状态3 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0xf8 |
| 延时500ms | |||||||||
| 灯状态4 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0xf0 |
| 延时500ms | |||||||||
| 灯状态5 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0xe0 |
| 延时500ms | |||||||||
| 灯状态6 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0xc0 |
| 延时500ms | |||||||||
| 灯状态7 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x80 |
| 延时500ms | |||||||||
| 灯状态8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 |
| 延时500ms | |||||||||
| 灯状态9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0xff |
| 延时500ms | |||||||||
4.2 流水灯程序
#include <REGX52.H>sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;void Delay500ms() //@11.0592MHz
{unsigned char i, j, k;i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main(){ while(1){P2 = 0xfe; //LED1亮Delay500ms(); P2 = 0xfc; //LED1亮,LED2亮-Delay500ms(); P2 = 0xf8; //LED1亮,LED2亮-,LED3亮Delay500ms(); P2 = 0xf0; //LED1亮,LED2亮-,LED3亮,LED4亮Delay500ms(); P2 = 0xe0; //LED1亮,LED2亮-,LED3亮,LED4亮,LED5亮Delay500ms(); P2 = 0xc0; //LED1亮,LED2亮-,LED3亮,LED4亮,LED5亮,LED6亮Delay500ms(); P2 = 0x80; //LED1亮,LED2亮-,LED3亮,LED4亮,LED5亮,LED6亮,LED7亮Delay500ms(); P2 = 0x00; //全亮Delay500ms(); P2 = 0xff; //关闭8个LEDDelay500ms(); }}
总结
相关文章:
51单片机应用开发---二进制、十六进制与单片机寄存器之间的关系(跑马灯、流水灯实例)
实现目标 1、掌握二进制与十六进制之间的转换 2、掌握单片机寄存器与二进制、十六进制之间的转换 3、掌握单片机驱动跑马灯、流水灯的原理 一、二进制与十六进制之间的转换 1、二进制 二进制(binary), 是在数学和数字电路中以2为基数的…...
信息安全工程师(6)网络信息安全现状与问题
一、网络信息安全现状 威胁日益多样化:网络攻击手段不断翻新,从传统的病毒、木马、蠕虫等恶意软件,到勒索软件、钓鱼攻击、DDoS攻击、供应链攻击等,威胁形式多种多样。这些攻击不仅针对个人用户,还广泛影响企业、政府等…...
亚数TrustAsia亮相第十四届智慧城市与智能经济博览会,入围“2024数据要素创新应用优秀成果”!
智博会 2024年9月6日至8日,由宁波市人民政府、浙江省经济和信息化厅、中国信息通信研究院、中国电子信息行业联合会、中国电信、中国移动、中国联通主办的2024世界数字经济大会暨第十四届智慧城市与智能经济博览会(以下简称“智博会”)在宁波…...
Linux基础开发环境(git的使用)
1.账号注册 git 只是一个工具,要想实现便捷的代码管理,就需要借助第三方平台进行操作,当然第三平台也是基于git 开发的 github 与 gitee 代码托管平台有很多,这里我们首选 Github ,理由很简单,全球开发者…...
VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found
VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found。 如下图(vscode终端中): 解决方案: 1、vim ~/.bashrc 2、在~/.bashrc里面加入命令:unset PROMPT_COMMAND 3、source ~/.bashrc...
春天(Spring Spring Boot)
基本概念 春天 Spring 是用于开发 Java 应用程序的开源框架,为解决企业应用开发的复杂性而创建。 Spring 的基本设计思想是利用 IOC(依赖注入)和 AOP (面向切面)解耦应用组件,降低应用程序各组件之间的耦…...
Oracle EBS AP预付款行分配行剩余预付金额数据修复
系统环境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题情况 AP预付款已验证和自动审批但是未过账已经AP付款但是又撤消付款并且未过账问题症状 AP预付款暂挂: AP预付款行金额(等于发票金额)与分配行金额不相等: 取消AP预付款提示如下:...
【鸿蒙】HarmonyOS NEXT星河入门到实战7-ArkTS语法进阶
目录 1、Class类 1.1 Class类 实例属性 1.2 Class类 构造函数 1.3 Class类 定义方法 1.4 静态属性 和 静态方法 1.5 继承 extends 和 super 关键字 1.6 instanceof 检测是否实例 1.7.修饰符(readonly、private、protected 、public) 1.7.1 readonly 1.7.2 Private …...
Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)
文章目录 3.6 合成复用原则(CRP)3.6.1 概述3.6.2 案列 3.6 合成复用原则(CRP) 合成复用原则(CRP):Composite Reuse Principle,CRP 又叫: 组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)…...
java坏境搭建
目录 安装 步骤1 步骤2 步骤3 步骤4 环境变量 1、在桌面“计算机”或“此电脑”图标上右键,选择“属性”,进入控制面板的计算机系统页面后,点击“高级系统设置”,不同操作系统可能界面不同: 2、点击“环境变量”…...
C#中判断socket是否已断开的方法
代码如下: Socket s new Socket(..); if (s.Poll(-1, SelectMode.SelectRead)) {int nRead s.Receive();if (nRead 0){//socket连接已断开} }参考:C#中判断socket是否已断开的方法...
Python编程 - 异常处理与文件读写
目录 前言 一、异常处理 (一)关键字 (二)捕获多个异常 (三)自定义异常 (四)抛出异常 (五)总结 二、文件读写 (一)打开文件 &…...
【C++】c++ 11
目录 前言 列表初始化 std::initializer_list 右值引用和移动拷贝 左值和右值 左值引用和右值引用的区别 万能引用(引用折叠) 完美转发 默认成员函数控制 列表初始化 在C98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列…...
uni-app 应用名称 跟随系统语言 改变
官方已确认BUG::https://ask.dcloud.net.cn/question/164804 { "name" : "%app.name%",//这里随便写,配置了 locales,name 就不生效了 "appid" : "", "description" : "", "versi…...
【大模型实战篇】高质量数据过滤及一种BoostedBaggingFilter处理方法的介绍
1. 高质量数据过滤 1.1 背景介绍 数据质量对于大模型的训练至关重要,经常会听到一句话:数据决定模型的上限。模型的性能上限通常受到训练数据的质量限制。如果数据集不够好,模型可能无法学习到泛化的特征,导致其在新数据上的表…...
使用Python和Proxy302代理IP高效采集Bing图片
目录 项目背景一、项目准备环境配置 二、爬虫设计与实现爬虫设计思路目标网站分析数据获取流程 代码实现1. 初始化爬虫类(BingImageSpider)2. 创建存储文件夹3. 获取图像链接4. 下载图片5. 使用Proxy302代理IP6. 主运行函数 运行截图 三、总结 项目背景 …...
Python酷库之旅-第三方库Pandas(118)
目录 一、用法精讲 521、pandas.DataFrame.drop_duplicates方法 521-1、语法 521-2、参数 521-3、功能 521-4、返回值 521-5、说明 521-6、用法 521-6-1、数据准备 521-6-2、代码示例 521-6-3、结果输出 522、pandas.DataFrame.duplicated方法 522-1、语法 522-2…...
讨论人机交互研究中大语言模型的整合与伦理问题
概述 论文地址:https://arxiv.org/pdf/2403.19876.pdf 近年来,大规模语言模型发展迅速。它们给研究和教育领域带来了许多变化。这些模型也是对人机交互(HCI)研究过程的有力补充,可以分析定性和定量数据,再…...
OpenCV结构分析与形状描述符(23)确定一个点是否位于多边形内的函数pointPolygonTest()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 进行点在轮廓内的测试。 该函数确定点是在轮廓内、轮廓外,还是位于一条边上(或与顶点重合)。它返回正值&…...
GitLab CI_CD 从入门到实战笔记
第1章 认识GitLab CI/CD 1.3 GitLab CI/CD的几个基本概念 GitLab CI/CD由以下两部分构成。 (1)运行流水线的环境。它是由GitLab Runner提供的,这是一个由GitLab开发的开源软件包,要搭建GitLab CI/CD就必须安装它,因…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
