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

51单片机教程(八)- 数码管的静态显示

1、项目分析

  • 使用数码管显示指定的字符、数字和符号。

2、技术准备

1、显示器及其接口

  • 单片机系统中常用的显示器有:
    • 发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。
    • LED、LCD显示器有两种显示结构:
      • 段显示(7段、米字型等)
      • 点阵显示(5×8、8×8点阵等)

2、数码管实物

  • 数码管是一种半导体发光器件,其基本单元是发光二极管。



3、数码管特点

  • 可显示内容

    • 数字、小数点(0-9)和部分英文字符(A、C、E、F、L)、符号(.)。
  • 特点:

    1. 自发光、亮度高,特别适合环境亮度低的场合使用。

    2. 牢固,不怕冲击。


4、数码管结构与原理

  1. 数码管结构

    • LED显示器(数码管)系发光器件的一种。常用的LED发光器件有两类:数码管和点阵。
    • 数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。根据内部发光二极管的接线形式可分为共阴极和共阳极两种。
    • 使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。每段发光二极管需5~10mA的驱动电流才能正常发光,一般需加限流电阻控制电流的大小。
  2. 数码管原理

    • LED数码管的a~g七个发光二极管。加正电压的发光,加零电压的不能发光,不同亮暗的组合就能形成不同的字型,这种组合称为字型码。共阳极和共阴极的字型码是不同的。

      在这里插入图片描述


5、数码管驱动电路

  • 要驱动1个四位数码管常见的有以下几种数码管驱动电路(本电路是使用:共阴极数码管):

    1. 使用12个IO口
    2. P2.4-P2.7驱动位选,IO口直接驱动位选
    3. P0驱动段选,IO口直接驱动段选

    在这里插入图片描述


6、数码管显示分析

  • LED数码管的结构:共阳与共阴

    在这里插入图片描述

  • 显示设置

    • 设置位选,设置 P2.4 - P2.7 对应位为高电平,即可选择第1 ~ 4 位数码管工作
    • 设置段选:设置 P0.0 - P0.7 对应位为高电平,即可控制显示的字符、数字内容

3、项目实施

实验1 第1位数码管显示字符:b

/************************************
*实验名:数码管静态显示
*实验效果:第一个数码管显示字符“b”
************************************/
  • 分析

    在这里插入图片描述

方式1:单独设置

```c
#include <reg52.h>#define par P0sbit pos1 = P2^4;
sbit pos2 = P2^5;
sbit pos3 = P2^6;
sbit pos4 = P2^7;void main()
{pos1 = 1;pos2 = 0;pos3 = 0;pos4 = 0;par = 0x7C;while (1);
}
```

方式2:整体设置

```c
#include <reg52.h>#define par P0
#define pos P2 void main()
{pos = 0x18;par = 0x7C;while (1);
}
```

实验2 4位数码管显示数值:12.34

  • 实验需求

    • 让四位数码管显示 12.34
  • 实验分析:

    • 第1位数码管显示 1,第2位数码管显示 2. ,第3位数码管显示 3,第4位数码管显示 4

      | 字符 |  h   |  g   |  f   |  e   |  d   |  c   |  b   |  a   | 十六进制 |
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :------: |
|  1   |  0   |  0   |  0   |  0   |  0   |  1   |  1   |  0   |   0x06   |
|  2.  |  1   |  1   |  0   |  1   |  1   |  0   |  1   |  1   |   0xdb   |
|  3   |  0   |  1   |  0   |  0   |  1   |  1   |  1   |  1   |   0x4f   |
|  4   |  0   |  1   |  1   |  0   |  0   |  1   |  1   |  0   |   0x66   |

方式1:逐位设置

  #include <reg52.h>void delay(unsigned int t);void main3(){while(1){//  第1个数码管显示:1P2 = 0x18;P0 = 0x06;delay(100);//	第2个数码管显示:2.P2 = 0x28;P0 = 0xdb;delay(100);//	第3个数码管显示:3P2 = 0x48;P0 = 0x4f;delay(100);//	第4个数码管显示:4P2 = 0x88;P0 = 0x66;delay(100);}}// 延迟函数void delay(unsigned int t){while(t--);}

方式2:遍历数组设置

```c
#include <reg52.h>// 定义位选:P2 表示设置数码管的位数
#define wei P2// 定义段选:P0 表示设置要显示的内容
#define duan P0// 定义数组:分别存储位选或段选的值
unsigned int wValue[] = {0x18,0x28,0x48,0x88};
unsigned int dValue[] = {0x06,0xdb,0x4f,0x66};void delays(unsigned int i);void main()
{	unsigned int idx;while(1){for(idx =0; idx<4; idx++){// 第idx位显示P2 = wValue[idx];P0 = dValue[idx];delays(50);}}
}void delays(unsigned int i)
{while(--i);
}
```

方式3:左移+数组遍历

```c
#include <reg52.h>void delays(unsigned int t);unsigned int dValue[] = {0x06, 0xdb, 0x4f, 0x66};void main()
{unsigned int idx;while(1){for(idx=0; idx<4; idx++){//  第idx个数码管显示:1 2. 3 4P2 = 0x10 << idx | 0x08;P0 = dValue[idx];delays(100);}}
}// 延迟函数
void delays(unsigned int t)
{while(t--);
}```
  • 说明
    • 在位选切换时,需要增加扫描延时,延迟时间太长会闪烁,太短则会造成重影。

实验3 选择对应的位显示内容

  • 需求

    • 选择指定的位显示指定的内容
  • 分析

    在这里插入图片描述

  • 实现

      #include <reg52.h>#define uint unsigned int// 定义位选:P2 表示设置数码管的位数#define pos P2// 定义段选:P0 表示设置要显示的内容#define par P0// 定义显示字符:0-9 C D E F Luint parValue[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x39, 0x79, 0x71};// 函数声明void delay_s(unsigned int i);void smgShow(uint postion, uint letter);void main(){uint idx;while(1){// 函数测试for(idx=1; idx<17; idx++){smgShow(4, idx);delay_s(90000);}}}/*** 指定对应位的数码管显示对应的内容** @param postion 第几位数码管* @param letter 要显示的字符内容** @return 无*/void smgShow(uint postion, uint letter){if((postion > 0 && postion < 5) && (letter > 0 && letter < 14)){switch(postion){case 1:pos = 0x18;par = parValue[letter-1];break;case 2:pos = 0x28;par = parValue[letter-1];break;case 3:pos = 0x48;par = parValue[letter-1];break;case 4:pos = 0x88;par = parValue[letter-1];break;}}}/*** 延迟函数:让CPU重复执行从指定的值一直减到0** @param i 初值** @return 无*/void delay_s(uint i){while(--i);}
    

相关文章:

51单片机教程(八)- 数码管的静态显示

1、项目分析 使用数码管显示指定的字符、数字和符号。 2、技术准备 1、显示器及其接口 单片机系统中常用的显示器有&#xff1a; 发光二极管LED&#xff08;Light Emitting Diode&#xff09;显示器、液晶LCD&#xff08;Liquid Crystal Display&#xff09;显示器、CRT显…...

案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索

河北省某检察院是当地重要的法律监督机构&#xff0c;肩负着维护法律尊严和社会公平正义的重要职责。该机构依法独立行使检察权&#xff0c;负责对犯罪行为提起公诉&#xff0c;并监督整个诉讼过程&#xff0c;同时积极参与社会治理&#xff0c;保护公民权益&#xff0c;推动法…...

clickhouse自增id的处理

msyql 中创建数据表的时候可以通过AUTO_INCREMENT 来实现&#xff0c;clickhouse中可以通过其他方式来处理 一、 默认值 创建表时可以实用默认值&#xff0c;该列值可以自动递增。如下所示 CREATE TABLE my_table ( id UInt32 DEFAULT IDENTITY(AUTO_INCREMENT), name Strin…...

国内读新加坡公立大学在职博士是一种怎样的体验?还中文授课

国内读新加坡公立大学在职博士是一种怎样的体验&#xff1f;还中文授课 在国内享受国际化教育体系&#xff0c;这样的优势无论在学术和职业发展上&#xff0c;还是在个人综合素质和拓宽国际视野方面&#xff0c;都是无法抗拒的诱惑。当下这所新加坡公立大学就给了国内在职人员…...

linux 配置core

在Linux系统中&#xff0c;当一个程序崩溃时&#xff0c;系统可以生成一个名为"core dump"的文件。这个文件包含了程序崩溃时的内存映像&#xff0c;可以用来调试和确定程序崩溃的原因。生成core dump文件的功能是由内核配置的&#xff0c;可以通过多种方式来控制这个…...

postcss-loader运行报错

解决方案&#xff1a; 1、检查postcss和postcss-cssloader相关依赖 npm list postcss postcss-loader 2、原因&#xff1a; 你的依赖中存在 PostCSS 的版本冲突&#xff1a; 3、结局方案&#xff1a; 升级整个工具链到新版本&#xff08;推荐&#xff09;&#xff1a; npm…...

智能存储解决方案:探索 TDengine 的多级存储功能

在当今数据驱动的时代&#xff0c;如何高效地存储和管理海量数据已成为企业面临的一大挑战。为了应对这一需求&#xff0c;TDengine Enterprise 不仅支持使用对象存储&#xff08;S3&#xff09;&#xff0c;还早已引入了独特的多级存储功能。这一功能不仅能够降低存储成本&…...

Vue 3 中Pinia状态管理库的使用方法总结

Pinia 是 Vue 3 的状态管理库&#xff0c;旨在替代 Vuex&#xff0c;提供更简洁和更灵活的 API。以下是如何在 Vue 3 项目中使用 Pinia 的详细步骤。 1. 安装 Pinia 首先&#xff0c;你需要在你的 Vue 3 项目中安装 Pinia。你可以使用 npm 或 yarn 进行安装&#xff1a; npm…...

劫持微信聊天记录并分析还原 —— 访问数据库并查看聊天记录(五)

本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以 Python 语言开发&#xff0c;可读取、解密、还原微信数据库并帮助用户查看聊天记录&#xff0c;还可以将其聊天记录导出为csv、html等格式用于AI训练&#xff0c;自动回复或备份等等作用。下面我们…...

vue3+vite 前端打包不缓存配置

最近遇到前端部署后浏览器得清缓存才能出现最新页面效果得问题 所以…按以下方式配置完打包就没啥问题了&#xff0c;原理很简单就是加个时间戳 /* eslint-disable no-undef */ import {defineConfig, loadEnv} from vite import path from path import createVitePlugins from…...

Dinky控制台:利用SSE技术实现实时日志监控与操作

1、前置知识 1.1 Dinky介绍 实时即未来,Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑。 Dinky 是一个开箱即用、易扩展,以 Apache Flink 为基础,连接 OLAP 和数据湖等众多框架的一站式实时计算平台,致力于流批一体和湖仓一体的探索与实践。 致力于简化Flink任务开…...

cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_

编译正常&#xff0c;运行报错&#xff1a;cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_ 简单记录&#xff1a; 1、编译ffmpeg so库&#xff0c;编译正常&#xff1b; 2、AndroidStudio建立项目&#xff0c;引用so库&#xff0c;编译正常&#xff0c;运行…...

SwiftUI开发教程系列 - 第4章:数据与状态管理

在 SwiftUI 中,数据与视图的绑定可以自动响应数据变化,实时更新 UI。SwiftUI 提供了多种数据管理方式,包括 @State、@Binding、@ObservedObject 和 @EnvironmentObject 等属性包装器。本章将逐一介绍这些属性包装器的用途及其最佳实践。 4.1 使用 @State 进行本地状态管理 …...

API接口:助力汽车管理与安全应用

随着汽车行业的飞速发展&#xff0c;越来越多的汽车管理技术被应用到交通安全和智慧交通系统中。在这一过程中&#xff0c;API接口起到了至关重要的作用。通过API接口&#xff0c;我们可以实现诸如车主身份验核、车辆信息查询等功能&#xff0c;从而为汽车智慧交通发展与安全应…...

聊一聊在字节跳动做项目质量改进的经验

引言 那一年&#xff0c;我刚毕业一年多&#xff0c;在第一家公司依然到了成长瓶颈期&#xff0c;一是不愿意频繁出差&#xff08;做乙方的无奈&#xff09;&#xff1b;二是疲于每天重复的手工测试&#xff08;团队缺乏技术氛围&#xff09;&#xff0c;技术上难有突破的机会…...

CSS基础概念:什么是 CSS ? CSS 的组成

什么是 CSS&#xff1f; CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于控制网页外观的样式表语言。通过定义样式规则&#xff0c;CSS 可以指定 HTML 页面中各个元素的显示方式&#xff0c;包括颜色、布局、字体、间距等。 与 HTML 专注…...

鸿蒙next版开发:ArkTS组件自定义事件分发详解

在HarmonyOS 5.0中&#xff0c;ArkTS提供了灵活的自定义事件分发机制&#xff0c;允许开发者对组件的事件进行细粒度的控制。自定义事件分发对于实现复杂的用户界面交互和提升用户体验至关重要。本文将详细解读如何在ArkTS中实现自定义事件分发&#xff0c;并提供示例代码进行说…...

计算机图形学论文 | 多边形中的点可见性快速算法

&#x1f98c;&#x1f98c;&#x1f98c;读论文 &#x1f428;&#x1f428;摘要 针对点的可见性计算这一计算几何中的基础问题&#xff0c;提出一种支持任意查询点的可见多边形快速计算的基于多边形Voronoi图的点可见性算法。以与Voronoi骨架路径对应的Voronoi通道概念&…...

程序员输入问题

题目描述 程序员输入程序出现差错时&#xff0c;可以采取以下的补救措施&#xff1a;按错了一个键时&#xff0c;可以补按一个退格符“#”&#xff0c;以表示前一个字符无效&#xff1b;发现当前一行有错&#xff0c;可以按一个退行符“”&#xff0c;以表示“”与它之前的字符…...

雨晨 23H2 Windows 11 企业版 IE VCDX 适度 22631.4445 (VIP有限开放版本)

雨晨 23H2 Windows 11 企业版 IE VCDX 适度 22631.4445 &#xff08;VIP有限开放版本&#xff09; 文 件: 雨晨 23H2 Windows 11 企业版 适度 22631.4445 install.wim 提 取 码: ZZLR 大 小: 2824999564 字节 修改时间: 2024年11月9日, 星期六, 05:33:05 MD5 : 9C88…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...