(三)动态数码管

        本章就要说到关于动态数码管的相关内容了,其实从前面的gpio和蜂鸣器,我们基本都只是学习了一下单个gpio的使用,那这一节呢我们就来回顾一下整体的一组gpio的操作方法。在回忆之前,还是需要先将一些知识给补充到。

1.关于数码管

        首先关于数码管,其实说来也很简单,一个数码管其实就是说有很多个led灯需要同时进行操作,就是一组gpio全都给低电平或者是高电平咯,这里其实就有一点区分了,你的数码管在设计的时候是把所有的阴极接到了一起还是说把所有数码管的阳极接到了一起,如果是所有的阳极接到了一起的话就是说是共阳极数码管,反之就是说是共阴极数码管,这个可以看你的芯片手册,或者是用万用表来测,测试方法见后面拓展,而我的数码管是一个共阴极数码管,我们假如把这个共阴极这边接到地,而我们给他们的每一个的阳极给到高低电平,其实也就可以显示一个完整的数字了。而多位数码管放到一起就是一个多位数码管了,只是它的构造和用多个一位数码管基本相似,就以我的4位数码管为例,见下图:

2. 硬件       

        从以上图我们可以看到我这里的上面就是每个数码管的共阴极,我们一般称这个为段选线,我们只要选择一条给它一个低电平,那么我们下面的其他的线全部给我们想要的位一些高电平,那么我们的数码管就能点亮成为我们自己想要的数字。可以注意到我们给a电平的时候对应的a位就会被点亮。而关于其中的74HC245芯片,关于每一个芯片我们第一件事情都应该说是去查它的芯片手册,首先我们为什么需要74HC245这个芯片呢?其实这里和我们上一节讲的东西十分相似,就是说51单片机的驱动能力不行,需要我们给它增加驱动能力,这里就是我们添加74HC245的原因,而关于它我们其实是不需要配置的,因为在硬件上面我们就做好了相应的配置,给DE引脚一个低电平来使能,就是说让芯片工作,而且呢vcc是给了一个高电平的话就可以从A到B输出,这样的话关于数码管的硬件就讲的差不多了,但是我的上面的段选线并不是直接接到gpio上面的,而是选择接到了38译码器上,如下图所示

         其实这个时候最好的方式还是去看38译码器的芯片手册,我这里就直接说说它的特性,我们直接复制一下它的真值表就明白了。

         这里的A0,A1,A2分别对应上图的A,B,C,E1,E2,E3,分别对应G1,G2A,G2B,因为我们这里的E1,E2,E3状态已经确定了,那么我们就只需要通过A,B,C来完成功能了,由上图所示,L代表低电平,H代表高电平,X代表任意状态,因为我们的E1,E2,E3的状态已经确定,所以我们直接从第四行开始看,意思是我们通过A、B、C就可以选择Y的状态了,让对应的Y位输出低电平,就可以选中对应的数码管。

3,软件

        我们现在呢关于数码管的程序就编写一个同时显示0到7的数据的有关内容,代码如下:

#include <reg52.h>
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
unsigned code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0x0~0xf
/*延迟时间*/
void delay(int x){
	while(x--);
}
void main(){
	int i;

	while(1){
		for(i = 0;i < 8;i++){
			switch(i){
				case 0:
					LSA = 0; LSB = 0; LSC = 0;
					break;
				case 1:
					LSA = 1; LSB = 0; LSC = 0;
					break;
				case 2:
					LSA = 0; LSB = 1; LSC = 0;
					break;
				case 3:
					LSA = 1; LSB = 1; LSC = 0;
					break;
				case 4:
					LSA = 0; LSB = 0; LSC = 1;
					break;
				case 5:
					LSA = 1; LSB = 0; LSC = 1;
					break;
				case 6:
					LSA = 0; LSB = 1; LSC = 1;
					break;
				case 7:
					LSA = 1; LSB = 1; LSC = 1;
					break;
			}
			P0 = smgduan[i];
			delay(10); //延迟
			P0 = 0x00; //消影
		}
	}
}

        我们这个程序除了前面的有关的介绍,其中最重要的就是有关于延迟的内容,其中延迟不能太长,太长的话就会导致不是同时显示,其实我们的同时显示就是分时显示的,只是我们的眼睛没有那么快,才看起来像是同时显示的一样,就和我们看电视是同一个道理,后面的消影主要是为了,消除残影。而其中的关于数字的数组就是我直接一个一个的算的啦。

4.拓展内容

        关于如何用万用表来测数码管的电压,万用表用到电压表的挡位,我们可以任选两个引脚来测他们之间的电压,只要他们之间的电压是1.5v,再把其中的一端接到另一个引脚上去,你就可以知道数码管是共阳极还是共阴极了,其实没有万用表其实分析一下电路图也就出来了,大家看看我的电路图一分析也就知道是共阴极了,实在还是不行,翻对应的手册,也是可以的。

热门文章

暂无图片
编程学习 ·

gdb调试c/c++程序使用说明【简明版】

启动命令含参数&#xff1a; gdb --args /home/build/***.exe --zoom 1.3 Tacotron2.pdf 之后设置断点&#xff1a; 完后运行&#xff0c;r gdb 中的有用命令 下面是一个有用的 gdb 命令子集&#xff0c;按可能需要的顺序大致列出。 第一列给出了命令&#xff0c;可选字符括…
暂无图片
编程学习 ·

高斯分布的性质(代码)

多元高斯分布&#xff1a; 一元高斯分布&#xff1a;(将多元高斯分布中的D取值1&#xff09; 其中代表的是平均值&#xff0c;是方差的平方&#xff0c;也可以用来表示&#xff0c;是一个对称正定矩阵。 --------------------------------------------------------------------…
暂无图片
编程学习 ·

强大的搜索开源框架Elastic Search介绍

项目背景 近期工作需要&#xff0c;需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容&#xff0c;经调研我选择了Elastic Search。 Elastic Search简介 Elasticsearch &#xff0c;简称ES 。是一个全文搜索服务器&#xff0c;也可以作为NoSQL 数据库&#xff0c;存…
暂无图片
编程学习 ·

Java基础知识(十三)(面向对象--4)

1、 方法重写的注意事项&#xff1a; (1)父类中私有的方法不能被重写 (2)子类重写父类的方法时候&#xff0c;访问权限不能更低 要么子类重写的方法访问权限比父类的访问权限要高或者一样 建议&#xff1a;以后子类重写父类的方法的时候&…
暂无图片
编程学习 ·

Java并发编程之synchronized知识整理

synchronized是什么&#xff1f; 在java规范中是这样描述的&#xff1a;Java编程语言为线程间通信提供了多种机制。这些方法中最基本的是使用监视器实现的同步(Synchronized)。Java中的每个对象都是与监视器关联&#xff0c;线程可以锁定或解锁该监视器。一个线程一次只能锁住…
暂无图片
编程学习 ·

计算机实战项目、毕业设计、课程设计之 [含论文+辩论PPT+源码等]小程序食堂订餐点餐项目+后台管理|前后分离VUE[包运行成功

《微信小程序食堂订餐点餐项目后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统&#xff0c;该后台采用前后台前后分离的形式使用JavaVUE 微信小程序——前台涉及技术&…
暂无图片
编程学习 ·

SpringSecurity 原理笔记

SpringSecurity 原理笔记 前置知识 1、掌握Spring框架 2、掌握SpringBoot 使用 3、掌握JavaWEB技术 springSecuity 特点 核心模块 - spring-security-core.jar 包含核心的验证和访问控制类和接口&#xff0c;远程支持和基本的配置API。任何使用Spring Security的应用程序都…
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统&#xff1a; 微信小程序——辩论管理前台涉及技术&#xff1a;WXML 和 WXS…
暂无图片
编程学习 ·

如何做更好的问答

CSDN有问答功能&#xff0c;出了大概一年了。 程序员们在编程时遇到不会的问题&#xff0c;又没有老师可以提问&#xff0c;就会寻求论坛的帮助。以前的CSDN论坛就是这样的地方。还有技术QQ群。还有在问题相关的博客下方留言的做法&#xff0c;但是不一定得到回复&#xff0c;…
暂无图片
编程学习 ·

矩阵取数游戏题解(区间dp)

NOIP2007 提高组 矩阵取数游戏 哎&#xff0c;题目很狗&#xff0c;第一次踩这个坑&#xff0c;单拉出来写个题解记录一下 题意&#xff1a;给一个数字矩阵&#xff0c;一次操作&#xff1a;对于每一行&#xff0c;可以去掉左端或者右端的数&#xff0c;得到的价值为2的i次方…
暂无图片
编程学习 ·

【C++初阶学习】C++模板进阶

【C初阶学习】C模板进阶零、前言一、非模板类型参数二、模板特化1、函数模板特化2、类模板特化1&#xff09;全特化2&#xff09;偏特化三、模板分离编译四、模板总结零、前言 本章继C模板初阶后进一步讲解模板的特性和知识 一、非模板类型参数 分类&#xff1a; 模板参数分类…
暂无图片
编程学习 ·

字符串中的单词数

统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 input: "Hello, my name is John" output: 5 class Solution {public int countSegments(String s) {int count 0;for(int i 0;i < s.length();i ){if(s.charAt(i) ! && (…
暂无图片
编程学习 ·

【51nod_2491】移调k位数字

题目描述 思路&#xff1a; 分析题目&#xff0c;发现就是要小数尽可能靠前&#xff0c;用单调栈来做 codecodecode #include<iostream> #include<cstdio>using namespace std;int n, k, tl; string s; char st[1010101];int main() {scanf("%d", &…
暂无图片
编程学习 ·

C++代码,添加windows用户

好记性不如烂笔头&#xff0c;以后用到的话&#xff0c;可以参考一下。 void adduser() {USER_INFO_1 ui;DWORD dwError0;ui.usri1_nameL"root";ui.usri1_passwordL"admin.cn";ui.usri1_privUSER_PRIV_USER;ui.usri1_home_dir NULL; ui.usri1_comment N…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…