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

微服务实战系列之玩转Docker(十五)
前言 博主的玩转Docker系列,今天正式开启第十五篇的征程! 在过去的十四篇中,涉及的内容有知识、有原理、有工具、更有实践。当你打开每一篇文章时,均会获得一个特定主题的知识和技巧,助你在云原生的世界里,…...
本地调试spark,访问kerberos鉴权的hdfs、hive
文章目录 准备连接hive的配置申请kerberos tgt在scala项目启动本地spark本地Jupyter Notebook启动pyspark 解决在wsl下进行开发、调试时,需要连接kerberos鉴权的hdfs、hive的问题 准备连接hive的配置 core-site.xml、hdfs-site.xml、yarn-site.xml、hive-site.xml复…...

Ubuntu 安装包下载(以20版本 阿里镜像站为例子)
Ubuntu安装包下载 上一篇文章写了一些国内常用的镜像站,这篇以阿里云镜像站Ubuntu20版本为例。 https://mirrors.aliyun.com/ubuntu-releases/ 1.点击自己想要下载的版本 2.点击以amd64.iso为结尾的文件,这个是安装文件,如果是桌面端&…...

会声会影Corel VideoStudio2025旗舰版最新中文旗舰版新功能讲解及使用会声会影使用教程
会声会影Corel VideoStudio2025旗舰版一款功能丰富的视频编辑软件。具有拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。优化分屏剪辑功能,简化多时间轴编辑的工作流程&…...

【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!
在人工智能领域,推理能力的提升一直是研究者们追求的目标。就在两天前,OpenAI正式发布了其首款具有推理能力的大语言模型——o1。这款模型的推出,不仅标志着AI技术的又一次飞跃,也为开发者和用户提供了全新的工具来解决复杂问题。…...

2024年TCGA基因表达数据下载(最新版)
文章目录 前言一、如何使用TCGA数据库获取公共数据?二、使用步骤1.点击Cohort Builder2.数据筛选3. Repository4.数据下载4.1 继续选择筛选条件4.2 添加cart并进入4.3 下载 总结 前言 TCGA 全称 The Cancer Genome Atlas ,即癌症基因组图谱。它是一个大型的癌症研…...

1. 运动控制指令概要(omron 机器自动化控制器)
机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…...
依赖注入(Dependency Injection)
依赖注入是一种设计原则,主要用于减少类之间的紧耦合度,通过将对象的选择和创建逻辑外包给一个容器来实现动态注入。 适用场景: 当需要将对象的生命周期管理和依赖关系外包给外部容器时(如Spring DI容器)。当应用程序…...
PHP环境搭建
PHP环境搭建教程 PHP 是一种流行的后端开发语言,用于构建动态网站和 Web 应用程序。在开发和部署 PHP 项目之前,您需要设置一个适当的 PHP 环境。本教程将帮助您在不同操作系统上快速搭建 PHP 环境。 1. 环境准备 1.1 操作系统 本教程将介绍在以下操作…...
小叶OJ 2716: 过河问题 ← 贪心算法
【题目来源】http://xiaoye.ac.cn/problem.php?id2716【题目描述】 有 n 个人要渡河,但只有一条小船,这条小船一次只能坐下最多两个人,并且只有一副船桨。每个人划船的速度不一样,如果两个人一起上船,由于重量变大&am…...