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

单片机基础模块学习——数码管(二)

一、数码管模块代码

这部分包括将数码管想要显示的字符转换成对应段码的函数,另外还包括数码管显示函数

值得注意的是对于小数点不显示部分的处理方式


由于小数点没有单独占一位,所以这里用到了两个变量i,j用于跳过小数点导致的占据其他字符显示在数码管上的位置


不想让某一位数码管显示的时候,用空格来代替,根据共阳数码管原理图,应将P0引脚全部设为高电平才可熄灭

#include "seg.h"//段码转换函数
//0xc0
//1100 0000  
//以上分别对应这8位dp g f e d c b a
//共阳数码管为低电平时被点亮
//传入两个数组,第一个为传入的想要转换的数,第二个为相对应的转换后的段码
//之所以为*,因为传进来的不只是一个字符,而是一个字符串或者是一个字符数组
void Seg_Tran(unsigned char *pucSeg_Buf,unsigned char *pucSeg_Code)
{unsigned char i,j;for(i=0,j=0;i<=7;i++,j++){switch(pucSeg_Buf[j]){case '0':pucSeg_Code[i]=0xc0;break;case '1':pucSeg_Code[i]=0xf9;break;case '2':pucSeg_Code[i]=0xa4;break;case '3':pucSeg_Code[i]=0xb0;break;case '4':pucSeg_Code[i]=0x99;break;case '5':pucSeg_Code[i]=0x92;break;case '6':pucSeg_Code[i]=0x82;break;case '7':pucSeg_Code[i]=0xf8;break;case '8':pucSeg_Code[i]=0x80;break;case '9':pucSeg_Code[i]=0x90;break;case 'A':pucSeg_Code[i]=0x88;break;case 'b':pucSeg_Code[i]=0x83;break;case 'C':pucSeg_Code[i]=0xc6;break;case 'd':pucSeg_Code[i]=0xa1;break;case 'E':pucSeg_Code[i]=0x86;break;case 'F':pucSeg_Code[i]=0x8e;break;case ' ':pucSeg_Code[i]=0xff;break;}if(pucSeg_Buf[j+1] =='.'){pucSeg_Code[i]&=0x7F;//0111 1111l与运算,与1不变,与0取反j++;}}
}void Seg_Disp(unsigned char *pucSeg_Code,unsigned char ucSeg_Pos)
{P0 =pucSeg_Code[ucSeg_Pos];	P2=P2&0x1F|0xE0;	P2=P2&0x1F;P0 =1<<ucSeg_Pos;//根据ucSeg_Pos的值,只有对应位置为1,实现了对任一个想要点亮的数码管的控制P2=P2&0x1F|0xC0;	P2=P2&0x1F;}

 二、主函数代码

注意这里面的pucSeg_Buf最保险应该开到17位,因为还包括8个小数点

#include "seg.h"
#include "tim.h"
#include "led.h"
#include "init.h"//Seg
unsigned char pucSeg_Buf[12],pucSeg_Code[9],pucSeg_Pos=0;//字符数组以/0结尾,所以要有9位
void Seg_Proc(void);//Timer
unsigned long ulms =0;
unsigned int uiSeg_Dly=0;void main(void)
{Cls_Peripheral();Timer0Init();EA=1;while(1){Seg_Proc();}}void Seg_Proc(void)
{if(uiSeg_Dly<200)return;uiSeg_Dly =0;sprintf(pucSeg_Buf,"12345678");//将指定的内容打印到字符数组里Seg_Tran(pucSeg_Buf,pucSeg_Code);
}void Time_0(void) interrupt 1
{ulms++;uiSeg_Dly++;if(ulms % 2==0){pucSeg_Pos=(pucSeg_Pos+1)%8;//实现pucSeg_Pos从0-7循环的操作Seg_Disp(pucSeg_Code,pucSeg_Pos);}
}

知识点

%4.1f

25.654  
25.7\08.538.5\0
由于是4位,前面会加一个空格如果想让上面的数左对齐,加一个负号
%-4.1f126.34
126.3\0
虽然是4位,但是不满足条件时,也会超过4位

相关文章:

单片机基础模块学习——数码管(二)

一、数码管模块代码 这部分包括将数码管想要显示的字符转换成对应段码的函数&#xff0c;另外还包括数码管显示函数 值得注意的是对于小数点和不显示部分的处理方式 由于小数点没有单独占一位&#xff0c;所以这里用到了两个变量i,j用于跳过小数点导致的占据其他字符显示在数…...

【大数据】机器学习----------强化学习机器学习阶段尾声

一、强化学习的基本概念 注&#xff1a; 圈图与折线图引用知乎博主斜杠青年 1. 任务与奖赏 任务&#xff1a;强化学习的目标是让智能体&#xff08;agent&#xff09;在一个环境&#xff08;environment&#xff09;中采取一系列行动&#xff08;actions&#xff09;以完成一个…...

flink写parquet解决timestamp时间格式字段问题

背景 Apache Parquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。 在我们通过flink写入parquet文件的时候,会遇到timestamp时间格式写入的问题。…...

redis实现lamp架构缓存

redis服务器环境下mysql实现lamp架构缓存 ip角色环境192.168.242.49缓存服务器Redis2.2.7192.168.242.50mysql服务器mysql192.168.242.51web端php ***默认已安装好redis&#xff0c;mysql 三台服务器时间同步&#xff08;非常重要&#xff09; # 下载ntpdate yum -y install…...

正则表达式中常见的贪婪词

1. * 含义&#xff1a;匹配前面的元素零次或者多次。示例&#xff1a;对于正则表达式 a*&#xff0c;在字符串 "aaaa" 中&#xff0c;它会匹配整个 "aaaa"&#xff0c;因为它会尽可能多地匹配 a 字符。代码示例&#xff08;Python&#xff09;&#xff1a…...

CF 339A.Helpful Maths(Java实现)

题目分析 输入一串式子&#xff0c;输出从小到大排列的式子 思路分析 如上所说核心思路&#xff0c;但是我要使用笨方法&#xff0c;输入一串式子用split分割开&#xff0c;但是此时需要用到转义字符&#xff0c;即函数内参数不能直接使用“”&#xff0c;而是“\\”。分割开后…...

SQL 指南

SQL 指南 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的标准计算机语言。自1970年代问世以来,SQL已经成为了数据库管理和数据操作的事实标准。本文旨在为初学者和有经验的数据库用户提供一个全面的SQL指南,涵盖SQL的基础知识、高级…...

DDD架构实战第七讲总结:分层模型和代码组织

云架构师系列课程之DDD架构实战第七讲总结:分层模型和代码组织 一、引言 在前几讲中,我们介绍了领域驱动设计(DDD)的基本构造块和生命周期模型中的聚合。本讲将重点讨论如何将这些构造块和代码组织起来,探讨分层架构和六边形模型,以及如何组织代码结构。 二、工厂和资…...

Python “字典” 实战案例:5个项目开发实例

Python “字典” 实战案例&#xff1a;5个项目开发实例 内容摘要 本文包括 5 个使用 Python 字典的综合应用实例。具体是&#xff1a; 电影推荐系统配置文件解析器选票统计与排序电话黄页管理系统缓存系统&#xff08;LRU 缓存&#xff09; 以上每一个实例均有完整的程序代…...

(一)QT的简介与环境配置WIN11

目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt&#xff08;发音&#xff1a;[kjuːt]&#xff0c;类似“cute”&#xff09;是一个跨平台的开发库&#xff0c;主要用于开发图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;…...

在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘

在 Windows 系统上&#xff0c;如果你使用的是 WSL&#xff08;Windows Subsystem for Linux&#xff09;并安装了 Ubuntu&#xff0c;你可以将 Ubuntu 从 C 盘 迁移到 D 盘。迁移过程涉及导出当前的 Ubuntu 发行版&#xff0c;然后将其导入到 D 盘的目标目录。以下是详细的步骤…...

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了&#xff0c;不建议在项目中这样操作&#xff0c;不过我是在vue2升级vue3的时候遇到的&#xff0c;是以前同事写的代码&#xff0c;也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例&#xff0c;并且…...

GPSd定时检测保活TCP GPS源

为了在 TCP GPS 源丢失连接时自动重新连接&#xff0c;可以编写一个监控脚本&#xff0c;定期检查 gpspipe 输出中的 TCP 源数据是否存在。如果检测到丢失&#xff0c;则使用 gpsdctl 或直接命令重新添加 TCP 源。 1、工具 检查并安装必要工具&#xff0c;本例需要使用 gpspi…...

IDEA中Maven使用的踩坑与最佳实践

文章目录 IDEA中Maven使用的踩坑与最佳实践一、环境配置类问题1. Maven环境配置2. IDEA中Maven配置建议 二、常见问题与解决方案1. 依赖下载失败2. 依赖冲突解决3. 编译问题修复 三、效率提升技巧1. IDEA Maven Helper插件使用2. 常用Maven命令配置3. 多模块项目配置4. 资源文件…...

使用 Python 调用 OpenAI 的接口初识

使用 Python 调用 OpenAI 的接口非常简单&#xff0c;以下将结合实际代码示例和使用场景进行详细讲解&#xff0c;步骤如下&#xff1a; 文章目录 1. 安装 OpenAI 官方库2. 准备 API Key3. 基本使用示例&#xff1a;调用 ChatGPT**代码示例&#xff1a;****运行结果&#xff1a…...

2025 最新flutter面试总结

目录 1.Dart是值传递还是引用传递&#xff1f; 2.Flutter 是单引擎还是双引擎 3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别&#xff1f; 4.简述Dart语音特性 5. Navigator 是什么&#xff1f;在 Flutter 中 Routes 是什么&#xff1f; 6、Dart 是不是…...

【MQ】RabbitMq的可靠性保证

消息队列中的可靠性主要是分为三部分&#xff1a; 消息不丢失&#xff1a;确保消息从生产者发送到消费者消息不丢失消息不重复&#xff1a;确保消息不被重复消费消息顺序性&#xff1a;确保消费的顺序性 解决方案主要有以下几部分&#xff1a; 消息不丢失 生产者确认机制持久…...

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置&#xff0c;实现点灯实验。 新建文件 LED.c、LED.h文件&#xff0c;将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件&#xff0c;这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…...

Flink把kafa数据写入Doris的N种方法及对比。

用Flink+Doris来开发实时数仓,首要解决是如何接入kafka实时流,下面是参考Doris官方文档和代码,在自己项目开发的实践中总结,包括一些容易踩坑的细节。 目录 Routine Load方法 接入kafka实时数据 踩坑的问题细节 Flink Doris Connector方法 完整示例 Routine Load方法…...

Vue - 标签中 ref 属性的使用

在 Vue 3 中&#xff0c;ref 属性用于在模板中引用 DOM 元素或组件实例。通过 ref&#xff0c;可以直接访问这些元素或组件的实例&#xff0c;从而进行更复杂的操作&#xff0c;比如获取元素的尺寸、调用组件的方法等。 基本语法&#xff1a; <template><div ref&qu…...

JavaSec-RCE

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

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...