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就必须安装它,因…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...