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

news2025/1/26 15:47:41

一、数码管模块代码

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

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


由于小数点没有单独占一位,所以这里用到了两个变量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\0

8.53
 8.5\0
由于是4位,前面会加一个空格

如果想让上面的数左对齐,加一个负号
%-4.1f

126.34
126.3\0
虽然是4位,但是不满足条件时,也会超过4位

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2283519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入解析ncnn::Net类——高效部署神经网络的核心组件

最近在学习ncnn推理框架&#xff0c;下面整理了ncnn::Net 的使用方法。 在移动端和嵌入式设备上进行高效的神经网络推理&#xff0c;要求框架具备轻量化、高性能以及灵活的扩展能力。作为腾讯开源的高性能神经网络推理框架&#xff0c;ncnn在这些方面表现出色。而在ncnn的核心…

前端【8】HTML+CSS+javascript实战项目----实现一个简单的待办事项列表 (To-Do List)

目录 一、功能需求 二、 HTML 三、CSS 四、js 1、绑定事件与初始设置 2.、绑定事项 &#xff08;1&#xff09;添加操作&#xff1a; &#xff08;2&#xff09;完成操作 &#xff08;3&#xff09;删除操作 &#xff08;4&#xff09;修改操作 3、完整js代码 总结…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<1>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们来学习指针的相关知识&#xff0c;学习内存和地址&#xff0c;指针变量和地址&#xff0c;包…

積分方程與簡單的泛函分析6.有連續對稱核的弗雷德霍姆積分算子的特徵值

1)def弗雷德霍姆算子的核函數定義 定义: 设 是定义在矩形区域 上的函数。 若满足以下条件,则称 为弗雷德霍姆算子的核函数: 实值性: 是实值函数,即对于任意的 ,。 这是因为在许多实际的物理和数学问题中,所涉及的量往往是实数值,例如在积分方程描述的物理模型中,…

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码

AI编程工具使用技巧&#xff1a;在Visual Studio Code中高效利用阿里云通义灵码 前言一、通义灵码介绍1.1 通义灵码简介1.2 主要功能1.3 版本选择1.4 支持环境 二、Visual Studio Code介绍1.1 VS Code简介1.2 主要特点 三、安装VsCode3.1下载VsCode3.2.安装VsCode3.3 打开VsCod…

kettle与Springboot的集成方法,完整支持大数据组件

目录 概要整体架构流程技术名词解释技术细节小结 概要 在现代数据处理和ETL&#xff08;提取、转换、加载&#xff09;流程中&#xff0c;Kettle&#xff08;Pentaho Data Integration, PDI&#xff09;作为一种强大的开源ETL工具&#xff0c;被广泛应用于各种数据处理场景。…

GitHub Actions 使用需谨慎:深度剖析其痛点与替代方案

在持续集成与持续部署&#xff08;CI/CD&#xff09;领域&#xff0c;GitHub Actions 曾是众多开发者的热门选择&#xff0c;但如今&#xff0c;其弊端逐渐显现&#xff0c;让不少人在使用前不得不深思熟虑。 团队由大约 15 名工程师组成&#xff0c;采用基于主干的开发方式&am…

<iframe>标签和定时调用函数setInterval

iframe 标签和定时调用函数 setInterval 问题描述&#xff1a;解决方法&#xff1a; 问题描述&#xff1a; 今天遇到一个前端问题&#xff0c;在浏览器页面上传Excel文件后&#xff0c;然后点击导入按钮&#xff0c;经后端Java类读取文件内容校验后&#xff0c;将校验结果返回…

Qt——界面优化

一.QSS 1.背景 在网页前端开发领域中&#xff0c; CSS 是⼀个至关重要的部分。 描述了⼀个网页的 "样式"。 从而起到对网页美化的作用。 所谓样式&#xff0c;包括不限于大小&#xff0c;位置&#xff0c;颜色&#xff0c;背景&#xff0c;间距&#xff0c;字体等等…

java基础学习——jdbc基础知识详细介绍

引言 数据的存储 我们在开发 java 程序时&#xff0c;数据都是存储在内存中的&#xff0c;属于临时存储&#xff0c;当程序停止或重启时&#xff0c;内存中的数据就会丢失&#xff0c;我们为了解决数据的长期存储问题&#xff0c;有以下解决方案&#xff1a; 通过 IO流书记&…

CukeTest使用 | 1 CukeTest是什么?如何下载安装?

CukeTest使用 | 1 CukeTest是什么&#xff1f;如何下载安装&#xff1f; 1 CukeTest是什么&#xff1f;2 关于开发者3 CukeTest有哪些特性&#xff1f;4 都支持哪些自动化技术类型&#xff1f;5 版本区别6 下载安装 特殊说明&#xff1a;学习内容主要来自官网的教程、以及网上公…

An OpenGL Toolbox

3.An OpenGL Toolbox 声明&#xff1a;该代码来自&#xff1a;Computer Graphics Through OpenGL From Theory to Experiments&#xff0c;仅用作学习参考 3.1 Vertex Arrays and Their Drawing Commands 顶点数组及其绘制命令&#xff1a;将几何数据存储在一个位置&#xff0c…

R语言学习笔记之高效数据操作

一、概要 数据操作是R语言的一大优势&#xff0c;用户可以利用基本包或者拓展包在R语言中进行复杂的数据操作&#xff0c;包括排序、更新、分组汇总等。R数据操作包&#xff1a;data.table和tidyfst两个扩展包。 data.table是当前R中处理数据最快的工具&#xff0c;可以实现快…

Linux的权限和一些shell原理

目录 shell的原理 Linux权限 sudo命令提权 权限 文件的属性 ⽂件类型&#xff1a; 基本权限&#xff1a; chmod改权限 umask chown 该拥有者 chgrp 改所属组 最后&#xff1a; 目录权限 粘滞位 shell的原理 我们广义上的Linux系统 Linux内核Linux外壳 Linux严格…

LearnOpenGL——光照

教程地址&#xff1a;简介 - LearnOpenGL CN 前言 这篇开始光照的学习。 颜色 原文链接&#xff1a; 颜色 - LearnOpenGL CN总结&#xff1a; 重新搭建了一个简单场景&#xff0c;为后面的学习做准备。 现实世界中有无数种颜色&#xff0c;每一个物体都有它们自己的颜色。我…

步入响应式编程篇(二)之Reactor API

步入响应式编程篇&#xff08;二&#xff09;之Reactor API 前言回顾响应式编程Reactor API的使用Stream引入依赖Reactor API的使用流源头的创建 reactor api的背压模式发布者与订阅者使用的线程查看弹珠图查看形成新流的日志 前言 对于响应式编程的基于概念&#xff0c;以及J…

利用Redis实现数据缓存

目录 1 为啥要缓存捏&#xff1f; 2 基本流程&#xff08;以查询商铺信息为例&#xff09; 3 实现数据库与缓存双写一致 3.1 内存淘汰 3.2 超时剔除&#xff08;半自动&#xff09; 3.3 主动更新&#xff08;手动&#xff09; 3.3.1 双写方案 3.3.2 读写穿透方案 3.3.…

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey &#x1f3e0; 第N个泰波那契数模型 &#x1f4cc; 题目解析 第N个泰波那契数 题目要求的是泰波那契数&#xff0c;并非斐波那契数。 &…

php-phar打包避坑指南2025

有很多php脚本工具都是打包成phar形式&#xff0c;使用起来就很方便&#xff0c;那么如何自己做一个呢&#xff1f;也找了很多文档&#xff0c;也遇到很多坑&#xff0c;这里就来总结一下 phar安装 现在直接装yum php-cli包就有phar文件&#xff0c;很方便 可通过phar help查看…

java提取系统应用的日志中的sql获取表之间的关系

为了获取到对应的sql数据&#xff0c;分了三步骤 第一步&#xff0c;获取日志文件&#xff0c;解析日志文件中的查询sql&#xff0c;递归解析sql&#xff0c;获取表关系集合 递归解析sql&#xff0c;获取表与表之间的关系 输出得到的对应关联关系数据 第二步&#xff0c;根据获…