51单片机学习笔记——点亮数码管、模块化编程

devtools/2024/12/22 0:39:38/
  • 工作原理图

138译码器

G1、G2A、G2B为138译码器的使能端

P22、P23、P24为输入口控制Y0-Y7的动作,以二进制的算法

具体如下:

P22    P23    P24

0       0      0      Y0为1其余为0

0       0      1      Y1为1其余为0

0       1      0      Y2为1其余为0

0       1      1      Y3为1其余为0

那么138译码器有什么用呢?138译码器可以用来控制数码管显示的位数

如当Y0为1时第一个数码管亮,因此可以节省IO口.

数码管模块

74HC245为双向数据缓冲器,主要作用就是数据缓冲。

左边的P口就是用来给数码管传送段码控制亮的数码管内容的。

练习:让指定的位置输出指定的数字

P0=Numall[Num]的意思是时P0口等于Numall数组里第[Num]位的值

然后在主程序的直接调用xuan函数,函数的值(数码管的位置,要显示的数);

数码管要显示的值我们已经用数组全部列出了

动态数码管显示

如果想要多个数码管同时显示应该怎么做?

我们知道程序是在不断刷新的,当刷新的速度够快达到肉眼不可见的速度时,即可一同显示

关于消隐:由于上一位的数据提前来到下一位所以造成阴影,导致数码管显示不清晰,需要加一段延时即可。

模块化编程

传统方式编程:所有的函数均放在main.c里,若使用的模块比较多则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include“XXX.h“文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。

.c文件:函数、变量的定义

可被外部调用的函数、变量的声明.h文件:

任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)使用到的自定义函数的.c文件必须添加到工程参与编译使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)

利用模块化的思路来做上面的程序

Main

Nixie



http://www.ppmy.cn/devtools/2224.html

相关文章

[阅读笔记1][GPT-3]Language Models are Few-Shot Learners

首先讲一下GPT3这篇论文,文章标题是语言模型是小样本学习者,openai于2020年发表的。 这篇是在GPT2的基础上写的,由于GPT2还存在一些局限,这篇对之前的GPT2进行了一些完善。GPT2提出了多任务学习,也就是可以零样本地用在…

正则表达式中?=、?!、?<=、?<!、?:的理解与应用举例

正则表达式就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串表达对字符串的一种过滤逻辑,这篇文章主要给大家介绍了关于正则表达式中?、?!、?<、?<!、?:的理解与应用举例的相关资料,需要的朋友可以参考下 …

什么是XXE攻击?如何进行防护

安全性很难做到正确,即使在当今具有安全意识的世界中,也存在一些严重的漏洞,例如 XML 外部实体 (XXE),它们被忽视并最终成为破坏的原因。 XML 外部实体 (XXE) 攻击是一种计算机安全漏洞,通常存在于 Web 应用程序中&…

Day37|贪心算法part06:738.单调递增的数字、968. 监控二叉树、贪心总结

738. 单调递增的数字 总体思想就是从后往前遍历,比较第i位和第i1位的大小,不符合顺序char[i]减1,i1位填9,找到需要填9的最先位置,然后填9。 class Solution {public int monotoneIncreasingDigits(int n) {String s …

WEB前端-笔记(二)

一、事件 1.1类型 focus 获取焦点事件 ipt.addEventListener("focus", () > {.log("") }) blue 失去焦点事件 ipt.addEventListener("blur", () > {console.log("") }) inout 文本输入事件 txt.addEventListener("i…

Elasticsearch克隆索引

我所使用的Elasticsearch的版本是基于7.17.7。 需求是将某个ES的索引进行克隆。例如我要将索引test_0419_1克隆一份新的索引test_0419_2。步骤如下: 首先将源索引进行修改PUT /test_0419_1/_block/write,即禁止对这个索引进行写数据操作。然后执行克隆…

ArrayList的基本使用

我们知道,在java当中,当我们需要将一些相同数据放入一块时,需要使用数组,但是它有个弊端,数组在创建时必须声明长度,也就是数组长度不可变。但是,当我们使用ArrayList时,它相当于一个…

ASP.NET MVC中Filter过滤器的使用

MVC Filter是典型的AOP(面向切面编程)应用,在ASP.NET MVC中的4个过滤器类型,如下: 但是默认实现它们的过滤器只有三种,分别是ActionFilter(方法),Authorize(授…