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就必须安装它,因…...
零基础也能快速上手AI建站工具:手把手教你10分钟生成网站
很多人想建站但一直被技术门槛劝退,觉得需要代码、会设计、能写文案。其实现在用AI建站工具,这些都可以交给机器。这套通用教程不针对某个具体工具,而是拆解任何零基础建站工具都适用的核心操作步骤。跟着做,你也能在10分钟左右从…...
Ostrakon-VL-8B与ComfyUI工作流结合:可视化视觉分析流程搭建
Ostrakon-VL-8B与ComfyUI工作流结合:可视化视觉分析流程搭建 1. 引言:当视觉大模型遇上可视化编程 如果你玩过AI绘画,大概率听说过ComfyUI。这个工具把复杂的AI图像生成过程,变成了一个个可以拖拽、连接的“积木块”,…...
阅读APP书源实战手册:从入门到精通的全方位指南
阅读APP书源实战手册:从入门到精通的全方位指南 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 你是否曾因追更不同平台的小说而频繁切换应用?是否遇到过喜欢的作品突然下架或需要…...
喜马拉雅音频下载器:解决VIP内容离线保存的技术方案
喜马拉雅音频下载器:解决VIP内容离线保存的技术方案 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 你是否曾因网络波动…...
终极指南:告别鼠标!Spectacle窗口动作组合让复杂布局一键生成 [特殊字符]
终极指南:告别鼠标!Spectacle窗口动作组合让复杂布局一键生成 🚀 【免费下载链接】spectacle Spectacle allows you to organize your windows without using a mouse. 项目地址: https://gitcode.com/gh_mirrors/sp/spectacle 想要提…...
4个高效步骤实现HMCL启动器数据无忧迁移全攻略
4个高效步骤实现HMCL启动器数据无忧迁移全攻略 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL 当你终于升级了新电脑,兴冲冲地安装好HMCL启动器准备…...
Qwen3.5-4B模型网络协议分析与故障模拟实践
Qwen3.5-4B模型网络协议分析与故障模拟实践 1. 网络工程师的新助手 最近遇到一个典型的运维场景:某电商平台大促期间,支付接口频繁出现连接超时。运维团队抓包分析后发现TCP重传率异常,但传统方法定位具体原因耗时长达3小时。这正是Qwen3.5…...
Spoon与Gradle插件集成:现代化Android项目的最佳实践指南 [特殊字符]
Spoon与Gradle插件集成:现代化Android项目的最佳实践指南 🚀 【免费下载链接】spoon Distributing instrumentation tests to all your Androids. 项目地址: https://gitcode.com/gh_mirrors/sp/spoon Spoon是一个强大的Android测试分发工具&…...
FlutterApp豆瓣电影模块:复杂列表与详情页性能优化全指南
FlutterApp豆瓣电影模块:复杂列表与详情页性能优化全指南 【免费下载链接】flutter_app 🔥🔥🔥本项目包括各种基本控件使用(Text、TextField、Icon、Image、Listview、Gridview、Picker、Stepper、Dialog、Slider、Row…...
16G内存就够了!GPT-OSS-20B量化版实测,响应速度快人一步
16G内存就够了!GPT-OSS-20B量化版实测,响应速度快人一步 1. 开箱即用的高性能AI体验 在AI大模型遍地开花的今天,找到一个既强大又能在普通设备上流畅运行的模型实属不易。GPT-OSS-20B的出现打破了这一局面——这个由OpenAI开源的210亿参数模…...
