嵌入式实验2--数码管显示(基础+进阶)

一、数码管显示

0.想实现效果:

数码管交替或同时显示数字

图片

1.电路设计

使用proteus 设计电路

1.1 STM32最小系统

搭建STM32工作基础条件

1.2 数码管电路

1.2.1 数码管
a.共阴极

abg dp都是led灯,这些led灯的公共端接地,就是共阴极,这时候控制灯泡亮,就在a上加高电位

b.共阳极

这些led灯的公共端接高电位电源,就是共阳极,这时候控制灯泡灭,就在a上加高电位

c.引脚配置外形图

abcdef分别对应数码管中数字的边,控制灯泡亮灭即可构建不同的形状

例如,使数码管显示6,就控制afedcg亮,b和dp灭,dp代表小数点

1.2.2 晶体管

NPN型晶体管连通,在右上为电源的情况下,B1端需要高电位,也就是基极高电位

PNP型晶体管连通,B1端需要低电位,也就是基极低电位

在proteus中添加晶体管,需要在devices中pick一个NPN或者PNP

1.2.3 排阻

排阻(Network Resistor),即网络电阻器(Wire-wound Resistor)。排阻是将若干个参数完全相同的电阻集中封装在一起,组合制成的。它们的一个引脚都连到一起,作为公共引脚。其余引脚正常引出。

在proteus中添加排阻,在devices 中pick一个RES16DIPIS

2.引脚配置

1.proteus设置

1.1 数码管引脚

由数码管的引脚配置图可知,共需要8个引脚(因为数字需要7个边,再加1个小数点)

设置好八个引脚后再一一对应上面数码管引脚的编号备注命名

1.2 晶体管引脚

如图,在晶体管上添加B1、B2引脚,连接到PA9和PA10.(PA1-PA8一一对应数码管引脚)

由GPIOA控制晶体管和数码管引脚的高低电位,B1接高电位时,晶体管Q1接通,那么P1连接处也就是数码管的左边屏幕就会亮。

2.stm32cubeMX设置

对照图中四步,

1.首先在最右侧芯片依次找到PA1-PA10,鼠标左键选择GPIO_OUTPUT,如图中绿颜色部分

2.最左侧找到GPIO

3.检查一下是否引脚都设置了OUTPUT

4.依次重命名为与proteus中相同的引脚名称

完成后直接创建工程文件,然后打开工程文件跳转到keil5

3.数码管显示数字

在while{}里输入以下代码

1.使能数码管位选信号,这里选择使B1导通,于是最后一位参数填了GPIO_PIN_SET,也就是高电位导通,先不让B2导通,给B2低电位

2.使能数码管段选信号,对应上面提到过的数码管引脚图,这里ABC这些引脚连接的公共端是P1P2,也就是电源,所以是共阳极,那么想让谁亮,就给谁添加低电位。

这里想做成6数字,就使afedcg亮,b和dp灭

      HAL_GPIO_WritePin(B1_GPIO_Port,B1_Pin,GPIO_PIN_SET);      //使能数码管位选信号,NPN型基极高电平导通HAL_GPIO_WritePin(B2_GPIO_Port,B2_Pin,GPIO_PIN_RESET);/* USER CODE END WHILE */HAL_GPIO_WritePin(A_GPIO_Port,A_Pin,GPIO_PIN_RESET);      //使能数码管段选信号HAL_GPIO_WritePin(B_GPIO_Port,B_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(C_GPIO_Port,C_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(D_GPIO_Port,D_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(E_GPIO_Port,E_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(F_GPIO_Port,F_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(G_GPIO_Port,G_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(DP_GPIO_Port,DP_Pin,GPIO_PIN_SET);

效果:

4. 2位数码管显示

想使左右屏幕都亮,不能同时让p1,p2同时为高电平,可以让P1P2相继接通高电平

这里就要用到HAL_DELAY函数,括号内参数是毫秒

若毫秒值够小,那么就能实现左右屏同时亮;若毫秒值够大,就能实现左右屏相继点亮

在P1和P2两端代码中间和结尾各加一个delay效果即可实现左右屏亮屏

      HAL_GPIO_WritePin(B1_GPIO_Port,B1_Pin,GPIO_PIN_SET);      //使能数码管位选信号,NPN型基极高电平导通HAL_GPIO_WritePin(B2_GPIO_Port,B2_Pin,GPIO_PIN_RESET);/* USER CODE END WHILE */HAL_GPIO_WritePin(A_GPIO_Port,A_Pin,GPIO_PIN_RESET);      //使能数码管段选信号HAL_GPIO_WritePin(B_GPIO_Port,B_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(C_GPIO_Port,C_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(D_GPIO_Port,D_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(E_GPIO_Port,E_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(F_GPIO_Port,F_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(G_GPIO_Port,G_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(DP_GPIO_Port,DP_Pin,GPIO_PIN_SET);
​
​HAL_Delay(500);HAL_GPIO_WritePin(B1_GPIO_Port,B1_Pin,GPIO_PIN_RESET);      //使能数码管位选信号,NPN型基极高电平导通HAL_GPIO_WritePin(B2_GPIO_Port,B2_Pin,GPIO_PIN_SET);/* USER CODE END WHILE */HAL_GPIO_WritePin(A_GPIO_Port,A_Pin,GPIO_PIN_RESET);      //使能数码管段选信号HAL_GPIO_WritePin(B_GPIO_Port,B_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(C_GPIO_Port,C_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(D_GPIO_Port,D_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(E_GPIO_Port,E_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(F_GPIO_Port,F_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(G_GPIO_Port,G_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(DP_GPIO_Port,DP_Pin,GPIO_PIN_SET);
​HAL_Delay(500);

二、数码管显示进阶

图片

0.实现效果:

左右两个屏幕一个表示十位数,一个表示个位数,从0遍历到99

1.电路设计

1.1 基本电路

以上面的第一个实验“数码管显示”电路为基础

1.2 修改数码管连线

重新分配数码管连线,如图

1.3 修改STM32芯片频率

仿真模型条件限制,为降低出错率,修改STM32芯片频率为8MHz

2.引脚配置

修改STM32CubeMX中的引脚配置

2.1 分配引脚修改

根据电路设计重新分配引脚

2.2 时钟频率修改

将时钟频率修改为8MHz

3.数码管显示任意数字

3.1 创建数码管断码数组

共阳极数码管段码:

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}

分别对应PA7-PA0上的8个引脚的高低电位,从00000000到11110000,分别表示0-9数字

3.2 编写显示display函数

寄存器调用语句:GPIOA->ODR ,可以直接处理A引脚的输出值

3.3 编写清屏display_clear函数

3.4 编写位选bitsel函数

如图

4.数码管循环显示

4.1 先模拟一个数

定义数值

效果如图:

4.2 添加for循环

代码:

      for(num = 0; num<=99;num++){display_clear();bitsel(1);display(duan[num/10]);HAL_Delay(50);display_clear();bitsel(2);display(duan[num%10]);HAL_Delay(50);}

 

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

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

相关文章

【LeetCode:633. 平方数之和 + 双指针】

在这里插入代码片 &#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕…

SpringCloud-Eureka注册中心

假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f;有多个user-service实例地址&#xff0c;order-service调用…

5. 推导仿真

5.1 DCDC电源(以buck电路为例)相关公式推导计算-电感 (1)计算电感的饱和电流和 电感的感值 三角号I:纹波电流 饱和电流:有条件

MySQL rand()函数、rand(n)、生成不重复随机数

文章目录 一、rand()与rand(n)二、rand()使用示例2.1、rand()与order by/group by使用随机排序分组2.2、round()与rand()的组合使用2.3、rand与ceiling的组合使用2.4、rand与floor组合使用2.5、rand与md5组合使用 三、总结3.1、rand()与rand(n)的区别 有时候我们想要生成一个唯…

告别局域网限制!轻松远程访问本地Paperless-ngx文档管理系统远程办公

前言&#xff1a;本文主要介绍如何在Linux系统本地Docker部署Paperless-ngx开源文档管理系统&#xff0c;并结合cpolar内网穿透工具解决本地部署后因为没有公网IP受到局域网访问限制&#xff0c;在异地也能随时远程访问的困扰。 Paperless-ngx是一个开源的文档管理系统&#x…

koa项目实战 == 实现注册登录鉴权

一. 项目的初始化 1 npm 初始化 npm init -y生成package.json文件: 记录项目的依赖 2 git 初始化 git init生成’.git’隐藏文件夹, git 的本地仓库 3 创建 ReadMe 文件 二. 搭建项目 1 安装 Koa 框架 npm install koa2 编写最基本的 app 创建src/main.js const Koa…

中烟创新:以AI审核平台助力烟草行业高效发展

企业对于高效、准确且标准化的文档审核流程需求日益迫切。传统的人工审核方式&#xff0c;不仅耗时费力&#xff0c;而且易受个人主观因素影响&#xff0c;导致审核标准难以统一&#xff0c;影响了工作效率与审核质量。北京中烟创新科技有限公司&#xff08;简称&#xff1a;“…

SpringBoot框架:作业管理技术新解

4 系统设计 4.1系统概要设计 作业管理系统并没有使用C/S结构&#xff0c;而是基于网络浏览器的方式去访问服务器&#xff0c;进而获取需要的数据信息&#xff0c;这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构&#xff0c…

Chrome 插件怎么安装与下载?超详细

原文链接&#xff1a; https://www.chajianxw.com/tutorial/how-to-install-chrome-plugin.html 前言 国内因为无法访问 Chrome 应用商店的缘故&#xff0c;导致很多优秀的扩展程序无法正常下载与安装。本文将手把手教你如何通过离线安装Chrome 插件&#xff0c;全文图文讲解…

实现图书管理系统

1. 图书管理系统菜单 如上图给用户选项 1. 管理员 2. 普通用户 2. 实现基本框架 右键点src&#xff0c;选择new&#xff0c;选择Package命名三个包 book operation user 1.先选择book包&#xff0c;new两个类 book bookList 在book类中定义书的基本属性&#xff0c;并重写…

黑马官网最新2024前端就业课V8.5笔记---CSS篇(1)

Css 定义 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容) Css 引入方式 内部样式表&#xff1a; CSS 代码写在 style 标签里面 外部样式表: 开发使用 CSS 代码写在单独的 CSS 文件中(.css) 在 HTML 使用 link …

下载pytorch报错:没有发现某个版本

报错如下&#xff1a; 解决&#xff1a; 降级python版本&#xff0c;显卡小于等于 11.3 时&#xff0c;下载pytorch gpu时&#xff0c;python版本选择&#xff1a;3.7即可。

cuda、pytorch-gpu安装踩坑!!!

前提&#xff1a;已经安装了acanoda cuda11.6下载 直接搜索cuda11.6 acanoda操作 python版本3.9 conda create -n pytorch python3.9conda activate pytorch安装Pytorch-gpu版本等包 要使用pip安装&#xff0c;cu116cuda11.6版本 pip install torch1.13.1cu116 torchvi…

音视频入门基础:H.264专题(17)——FFmpeg源码中,获取H.264视频的profile的实现

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

LeetCode --- 421周赛

题目列表 3334. 数组的最大因子得分 3335. 字符串转换后的长度 I 3336. 最大公约数相等的子序列数量 3337. 字符串转换后的长度 II 一、数组的最大因子得分 数据范围足够小&#xff0c;可以用暴力枚举移除的数字&#xff0c;得到答案&#xff0c;时间复杂度为O(n^2)&#…

Linux下Java的多种方式安装

Linux下Java的多种方式安装 博客&#xff1a; www.lstar.icu 开源地址 Gitee 地址&#xff1a; https://gitee.com/lxwise/iris-blog_parent Github 地址&#xff1a; https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言&#xff0c;不仅吸收了…

易灵思fpga pwm生成报错

避免复杂总线 选择正确板子 这个是是全部执行 但是不会自动保存 注意设置 或者使用其他文本显示工具 可能约束会掉 注意复位后没有程序 注意软件不同电脑可能报错 问题未知 尽量简单逻辑

JavaEE初阶--servlet篇(三)HttpServlet/response/request对应方法使用

文章目录 1.总括说明2.httpservlet父类2.1方法介绍2.2dopost方法的演示2.3doput方法的演示 3.HttpServletRequest类3.1方法说明3.2方法使用演示3.3getparameter方法使用3.4使用form表单的方式3.5jackson获取参数 4.HttpResponse类4.1设置状态码4.2自动进行刷新4.3重定向跳转4.3…

矩阵起源 CEO 王龙出席 1024 超互联(苏州)总部节点发布会

10月24日&#xff0c;矩阵起源 CEO & 创始人王龙出席了由中关村超互联新基建产业创新联盟、数字人民币研究院联合主办&#xff0c;世纪互联承办的“超互联&#xff08;苏州&#xff09;总部节点发布会”&#xff0c;并分享了矩阵起源及世纪互联在多模态AI数据智能平台与超互…

大数据-202 数据挖掘 机器学习理论 - 决策树 sklearn 绘制决策树 防止过拟合

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…