当前位置: 首页 > news >正文

51单片机入门 - 驱动多位数码管

我使用的是普中51单片机开发板A2套件(2022),驱动数码管可能需要参考电路原理图。开发环境的搭建教程在本专栏的 51单片机开发环境搭建 - VS Code 从编写到烧录 有过介绍。

关于我的软硬件环境信息:

  • Windows 10
  • STC89C52RC
  • SDCC (构建HEX文件)
  • stcgal 1.6 (向STC单片机烧录)

点亮 1 位数码管

写个 python 脚本把驱动数字段选转换成 16 进制:

d = ["abcdef", "bc", "abged", "abcdg", "fgbc", "afgcd", "afedcg", "abc", "abcdefg", "abcdfg"] # 0-9def solve(seg):ans = 0for i in seg:ans ^= (1 << (ord(i) - ord("a")))return ansa = "{" + ", ".join([hex(solve(seg)) for seg in d]) + "}"
print(a)
# {0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f}

这样就得到了驱动一位数码管显示0-9的映射表:{0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f},也就是给 P0 置 0x3f 时,数码管会显示数字 0 (段选)。

先选择一位数码管进行点亮(选择第 8 位数码管,显示数字 6):

#include <8051.h>#define decoder_in_1 P2_2 // 译码器的 3 位输入,用于位选
#define decoder_in_2 P2_3
#define decoder_in_3 P2_4
#define NUMBER P0unsigned int LED_MAP[11] = {0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f};void send_to_decoder(unsigned int position) {  // position: 1 ~ 8 position--;                          // position: 0 ~ 7 (000 ~ 111)decoder_in_1 = position & 1;         // low    bit of position (position & 001)decoder_in_2 = position & 2;         // middle bit of position (position & 010)decoder_in_3 = position & 4;         // high   bit of position (position & 100)
}void main() {send_to_decoder(8);NUMBER = LED_MAP[6];
}

点亮多位数码管

由于位选是通过 38 译码器来让 3 个引脚来控制 8 个引脚(23=82^3=823=8),所以同一时间只能亮起1位,但是单片机可以快速切换亮起的数码管,利用视觉暂留可以让其看起来像是同时亮起。

#include <8051.h>#define decoder_in_1 P2_2 // 译码器的 3 位输入,用于位选
#define decoder_in_2 P2_3
#define decoder_in_3 P2_4
#define NUMBER P0unsigned int LED_MAP[11] = {0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f};void send_to_decoder(unsigned int position) {  // position: 1 ~ 8 position--;                          // position: 0 ~ 7 (000 ~ 111)decoder_in_1 = position & 1;         // low    bit of position (position & 001)decoder_in_2 = position & 2;         // middle bit of position (position & 010)decoder_in_3 = position & 4;         // high   bit of position (position & 100)
}void main() {unsigned int i;while (1) {for (i = 0; i < 8; i++) {NUMBER = 0x00;send_to_decoder(8 - i);NUMBER = LED_MAP[i];}}
}

下一次位选之前,要先给段选清零(熄灭数码管),不然上次段选的值还没更改,导致这次新的一次位选还在显示上一次显示的内容。

同时点亮多个数码管

相关文章:

51单片机入门 - 驱动多位数码管

我使用的是普中51单片机开发板A2套件&#xff08;2022&#xff09;&#xff0c;驱动数码管可能需要参考电路原理图。开发环境的搭建教程在本专栏的 51单片机开发环境搭建 - VS Code 从编写到烧录 有过介绍。 关于我的软硬件环境信息&#xff1a; Windows 10STC89C52RCSDCC &am…...

Java进击框架:Spring(一)

Java进击框架&#xff1a;Spring&#xff08;一&#xff09;前言创建Spring项目Spring IoC容器和Beans介绍Bean的概述Spring IoC配置元数据实例化Bean依赖注入循环依赖详细配置生命周期回调Bean定义继承基于注解的容器配置Component和进一步的原型注解自动检测类和注册Bean定义…...

Java笔记(18)

目录 什么是mvc? 什么是SpringMVC Spring MVC的特点: 原理: 什么是Thymeleaf? thymeleaf依赖包:...

【免费教程】地下水环境监测技术规范HJ/T164-2020解读使用教程

地下水环境监测技术规范依据《中华人民共和国环境保护法》第十一条“国务院环境保护行政主管部门建立监测制度、制订监测规范”和《中华人民共和国水污染防治法》的要求&#xff0c;积极开展地下水环境监测&#xff0c;掌握地下水环境质量&#xff0c;保护地下水水质&#xff0…...

Html 代码学习

场景:在页面中插入音频 代码 常见属性: src 音频的路径 controls 显示播放的控件 autoplay 自动播放 loop 循环播放 场景:在页面中插入视频 代码 常见属性: src 路径 controls 显示播放的控件 autoplay 自动播放 要配合muted 例如 autoplay muted loop 循环播放 链接 /…...

如何通过IP找到地址?

在我们印象中&#xff0c;我们都知道可以通过 IP 地址找到某个人。但当我们细想一下&#xff0c;我们会发现其实 IP 地址与地理位置并不是直接相关的。那我们到底是如何通过 IP 地址找到地址的呢&#xff1f;答案是&#xff1a;通过自治系统&#xff08;Autonomous System&…...

业务单据堆积如山?如何提升会计做账效率?

某集团以“创建现代能源体系、提高人民生活品质”为使命&#xff0c;形成了贯通下游分销、中游贸易储运、上游生产的清洁能源产业链和涵盖健康、文化、旅游、置业的生命健康产品链。目前&#xff0c;某集团在全国21个省&#xff0c;为超过2681万个家庭用户、21万家企业提供能源…...

华为OD机试题,用 Java 解【VLAN 资源池】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

面试加分项:JVM 锁优化和逃逸分析详解

1 锁优化JVM 在加锁的过程中&#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。1.1 自旋锁和自适应自旋现在大多的处理器都是多核处理器 &#xff0c;如果在多核心处理器&#xff0c;有让两个或者以上的线程并行执行&#xff0c;我们可以让一个等待…...

C++继承、构造函数和析构函数

构造函数 与 析构函数 构造函数代表一个对象的生成&#xff0c;主要作用是初始化类的成员变量&#xff0c;可以被重载 如果没有显式构造函数&#xff0c;则实例化对象时&#xff0c;系统会自动生成一个无参的构造函数 构造函数的名称与类名相同 析构函数代表的是一个对象的销…...

Python如何实现异步并发之async(1)

前言 本文是该专栏的第14篇,后面会持续分享python的各种干货知识,值得关注。 在python中使用async方式,实现异步并发,而本文笔者提到的代码案例仅支持python3.7及以上版本,这主要在于不同的版本之间都更新了异步的使用方法,这点暂时不详述了。 而所谓的异步,通常就是程…...

震撼!阿里首次开源 Java 10万字题库,Github仅一天星标就超60K

程序员面试 现在是程序员找工作、跳槽最重要的月份。随着行业的发展程序员面试也越来越难&#xff0c;面试中都是7分的能力&#xff0c;再加上3分的技巧&#xff1b; 对于应聘者&#xff0c;重中之重的就是简历&#xff0c;面试前一定要将最拿手和最能吸引面试官的技能在简历…...

十三、RESTful API

RESTful API 什么是RESTful REST一词&#xff0c;是Roy Thomas Fielding在他2000年的博士论文中提出的。 Fielding是一个非常重要的人&#xff0c;他是HTTP协议&#xff08;1.0版和1.1版&#xff09;的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所…...

路由器防火墙配置(14)

实验目的 通过本实验&#xff0c;理解路由器的防火墙工作原理&#xff0c;掌握路由器的防火墙功能配置方法&#xff0c;主要包括网络地址转换功能和数据包过滤功能的配置。 培养根据具体环境与实际需求进行网络地址转换及数据包过滤的能力。 预备知识网络地址转换 网络地址转…...

灰狼算法优化VMD对时序信号分析python

VMD算法变分模态分解(VMD)算法是一种根据变分方程计算,将信号分析过程转换成求解变分方程的过程,具体分析过程可见前面写的另外一篇博客VMD,这里不多介绍。 VMD算法在进行信号分析时,将一段时序信号分解成不同频段的几个子信号,但其分解效果的好坏由其两个参数影响较大—…...

微服务架构中的多级缓存设计还有人不懂?

今天我们来聊聊缓存这个话题&#xff0c;看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容&#xff1a; Web 应用的客户端缓存&#xff1b;应用层静态资源缓存&#xff1b;服务层多级缓存。 首先&#xff0c;咱们先讲解微服务架构的多级缓存设计。 微服务…...

【图神经网络 医学/药物/目标/分子/(结构/相互作用)预测】用于药物-目标相互作用预测的元集合(Metapath)异构图神经网络(MHGNN)

May the immensity of the universe, guide us to meet again. 我个人觉得这篇Paper很好。哈哈! 本次学习的Paper于2023年1月15日索引于 Web of Science,是比较新的。 作者:中国天津,南开大学计算机科学学院。 本篇Paper的研究方向(类别/分类):生物化学 & 分子生物学…...

《Java核心技术》笔记——第六章

文章目录CH6.接口、lambda表达式与内部类1.接口基本2.常用接口3.lambda表达式4.内部类5.服务加载器与代理前章&#xff1a; 第三章~第五章的学习笔记CH6.接口、lambda表达式与内部类 1.接口基本 接口基本——interface声明&#xff0c;方法无需指明public&#xff08;默认都是…...

假设检验的基本思想

假设检验 首先了解参数估计&#xff0c;比如有服从正态分布的数据集X∼N(μ,σ2)X\sim N(\mu,\sigma^{2})X∼N(μ,σ2)&#xff0c;我们希望根据样本x1,...xnx_{1},...x_{n}x1​,...xn​估计出参数μ,σ\mu,\sigmaμ,σ&#xff0c;这些参数可以是一个具体值&#xff0c;也可以…...

c语言机试练习

1.打印日期 给出年分m和一年中的第n天&#xff0c;算出第n天是几月几号。 输入描述&#xff1a; 输入包括两个整数y(1<y<3000)&#xff0c;n(1<n<366)。 输出描述&#xff1a; 可能有多组测试数据&#xff0c;对于每组数据&#xff0c; 按 yyyy-mm-dd的格式将输入中…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...