(2)数码管

51单片机模块0-9,A-F 数码管,也称为七数码管,是一种常见的显示器件,主要用于显示数字和某些字母。它由七个LED(a至g)和可选的小数点(dp)组成。通过给特定的施加电压,可以显示0-9的数字、字母A-F以及一些特殊符号。51单片机是一种常用的微控制器,具有高性能、低功耗、高集成度等特点。它广泛应用于各种嵌入式系统中,如智能仪表、工业控制、通信设备等。通过编程,51单片机可以实现各种复杂的控制和数据处理任务。本文介绍了使用51单片机驱动数码管实现0-9AbCdEF显示的方法。通过掌握和位。 阅读详情

LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成"8"字器件

请添加图片描述

请添加图片描述

51单片机是共阴极连接

请添加图片描述

请添加图片描述

请添加图片描述

74HC245这个芯片有什么作用呢?解:这个芯片被称之为双向数据缓冲器这个芯片的作用,用来进行数据缓冲(提高驱动能力)的。那么缓冲这个是什么意思?

假设我们给上二进制,就从A0到达B0这是连接的关系,DIR如果接的是高电平(1)那么就能把左边的数据接到我们右边的数据上。电容(100nf)在这里的作用是:芯片的供电更加稳定叫做电源滤波

静态数码管显示:

确定阴码(选择第几个数字):根据译码器的CBA表示

确定阳码(具体哪个段亮):通过abcdefg(dp)组合出01序列,经过双向数据缓冲器后高位对高位(逆序)

选择第六个数字:
LED3 -> Y2 -> 010 -> P2_4=0;P2_3=1;P2_2=0;
显示"6":
abcdefg(dp) -> 10111110 -逆序-> 0111 1101 -> P0=0x7d;
#include <REGX52.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void Nixie(unsigned char location, Number){
	switch(location){
		case 1: P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
		case 2: P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
		case 3: P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
		case 4: P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
		case 5: P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
		case 6: P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
		case 7: P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
		case 8: P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
	}
	P0 = NixieTable[Number];
}
void main(){
	Nixie(2, 2);
	while(1){}
}

动态数码管显示:

消影:

当我们要显示数码管的时候首先要:位选 段选、还要显示的话就还要 位选、段选,循环。

那么这样就会出现问题:首先是选择"位选端"给上低电平,然后是段选给上数据,然后给上下一位位选的数据。但是:由于我们单片机的速度是很快的,在段选到下一个位选之间就会出现问题。我们选中下一位这个时刻很短的时间内,上一个数据就会串到下一个数据。因为它们是挨着一起的,我在选中下一位之后 上一位的数据自然是会直接过来的。这样就会显示出数据的串位的问题了!

那么我们应该怎么避免这个问题?那我们就需要在上一个段选端给清零,这样即使到下一位它也不会对上一位产生影响!因为以及清零了。所以在子函数上需要优化下,显示完之后我们首先要延迟1ms这个是为了能让程序更加稳定显示,并且 进行清零!

#include <REGX52.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned int xms)
{
	unsigned char i, j;
	i = 2;
	j = 239;
	while(xms--){
		do{
			while (--j);
		} while (--i);
	}
}

void Nixie(unsigned char location, Number, short dp){
	switch(location){
		case 1: P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
		case 2: P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
		case 3: P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
		case 4: P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
		case 5: P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
		case 6: P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
		case 7: P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
		case 8: P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
	}
	P0 = dp ? NixieTable[Number] | 0x80 : NixieTable[Number]; // 可以显示小数点
	Delay(1);
	P0 = 0;
}

void main(){
	while(1){
		Nixie(1, 1, 1);
		Nixie(2, 2, 0);
		Nixie(3, 3, 1);
		Nixie(4, 4, 0);
	}
}

数码管驱动方式:

  • 单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间
  • 专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉她显示什么即可(TM1640)

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个的单片机I/O口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。

  • 静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多。

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。

所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的。

流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的。

  • 动态驱动的优点是能够节省大量的I/O端口,而且功耗更低。缺点是花费cpu占用时间,编程较为复杂。
数码管:3位6脚的数码管分析和编 ▪ 基本简介 一个1位数码管共有8:ABCDEFG+小数点,如下图: 按照我们常规的设计方案一个 IO 口控制一个,一个1位数码管那么就需要8个IO。当然我们也可以使用扩展 IO 芯片(例如 74HC164、74HC595),那么这种方案就占用单片机2~3个IO和一个扩展IO芯片。 现在我们需要控制一个3位的数码管: 采用IO口直控:那么需要单片机 IO 口24个 采用扩展 IO 芯片控制:那么需要单片机 IO 口 2~3 个 但是市面上有些 3 位的数码管只有 6 个接口,如.. 阅读详情

相关推荐

51单片机——八数码管

    在对LED灯的应用有了一定的了解之后,我开始学习了一些关于数码管的应用。     在我的开发板上,有独立共阳管和八位共阴管 。数码管从高位到低位的依次是h(dp),g,f,e,d,c,b,a共八位。共阴管是“1”表示亮,“0”表示灭,而共阳管则是相反的。顺便提一句,若是要检测数码管是否完好,可以用数码管“8”来检测。     若是要在数码管显示0~F,则可以用一套固定的十六进制数表示...

糖炒栗子的博客 8126

共阳极数码管

abcdefg———>由低位到高位 例如:二进制1110 0000对应的gfedcba

nini0831kiki的博客 6673

proteus中仿真51单片系列之--2数码管程序

相比前面我们使用过的单位数码管难点就是要通过片选来输出每一位数码管显示所需要的16进制代信号。 我们知道,多位数码管(包括两位数码管显示的原理就是,每位数码管在不同的时间获得端口输出的信号显示出来,利用人的视觉暂留特点,使观看这感觉是同时显示的。 当然,片选后的闪烁问题也是我们需要解决的难点。 效果如下 上图,我们使用了一个共阴的两位数码管,用P2口做片选,P1口输出显示信号。 代: #include <reg51.h> #include <stdio.h> unsigne

河西~石头 1万+

51单片机(三)数码管(超详细、必会!)

数码管详细总结一、数码管电路1、单个数码管2、多个数码管3、数码管与芯片的连接3.1 为什么要使用锁存器?3.2 锁存器的电路连接二、数码管显示数字时芯片引脚的状态值三、数码管实现动态显示1、一个数码管从0到F动态显示2、多个数码管从0到F动态显示3、一个经典例子 一、数码管电路 1、单个数码管 一个数码管是由a、b、c、d、e、f、g、dp八个二极管组成,八个LED一端接在一起,另一端引脚引出来。二极管如果阳极连在一起,就是共阳极数码管,阴极连在一起,就是共阴极数码管。 如上图,是一个共阴极数码管,要使

Curnane0_0的博客 12万+

Xilinx basys2开发板 数码管动态显示 以及 数码管封装

数码管封装模块 //数码管ip核 module smg_ip_model(clk,data,sm_wei,sm_duan); input clk; input [15:0] data; output [3:0] sm_wei; output [7:0] sm_duan; //---------------------------------------------

溪江☆月ヴ 7618

STM32驱动2数码管

一般我们用的数码管是8位的,其实就是在一个模块中集成了8个LED,分别显示笔划,如下图电路原理如下,若是将所有LED的N极连接到一起,叫共阴,若是将P连接到一起,叫共阳。我用红字标出了每个笔划对应的定义。2数码管,就是有2个8显示,并把它们集成到了一起,其abcdefg和dp脚都连到了一起,2个公共端分别表示左边和右边的选择。......

深圳五月花--老李的森林 9518

basys2数码管共阳还是共阴_单片机第二课——动态数码管显示

一,LED数码管显示的原理数码管的发光原理实际是七LED灯(不包括小数点)或者八LED灯被点亮的结果。八依次是 a,b,c,d,e,f,g,dp(表示点)。LED数码管是常见的显示器件,在很多场合都可以看到,比如,闹钟的显示,家电的显示功能,车站等等。我们看到的数码管为“8”字形,数码管又分为共阴极和共阳极两种。1.共阴极:就是将八数码管的阴极(负极)接地在一起,需要高电平点亮。如下图所示...

weixin_35839384的博客 1558

蓝桥杯篇---IAP15F2K61S2数码管&LED

本文仅仅简单介绍了IAP15F1K61S2数码管、LED的使用。数码管是一种常见的显示设备,用于显示数字、字母和部分符号。IAP15F2K61S2 可以通过 GPIO 控制数码管显示内容,结合扫描技术可以实现多位数码管的动态显示。共阴极数码管:所有的阴极连接在一起,接低电平时点亮。LED(发光二极管)是单片机开发中最基础的外设之一,常用于状态指示、调试信号或用户交互。IAP15F2K61S2 通过GPIO控制 LED 的亮灭,结合定时器和 PWM功能还可以实现呼吸灯、流水灯等复杂效果。

在你不想做的时候,正是应该做的时候。 2008

51单片机控制2位共阳数码管

由于最近做的电子系统设计——心率测试仪要用到数码管,特意买了一个2位的共阳数码管来用,先学习一下怎么使用,2位的数码管只能使用动态显示的方法,下面是仿真图:   用到两个74hc573锁存器来锁存数据,动态显示原理是在很短的时间内轮流向每一个数码管送数据,当频率很大时,又加上人眼有视觉暂留效应,人眼已经无法分辨有没有灭过(如电视剧的每一秒24帧):下面是源代:(由于没有外部中断输入,所以

3788

basys2数码管共阳还是共阴_basys2 数码管动态显示 verilog解决办法

basys2 数码管动态显示 verilog解决办法发布时间:2020-12-21浏览(1504)basys2 数码管动态显示 verilog为什么数码管动态显示定义的管脚顺序和我设计的是反的~~求助啊在线等!!!!!输入x[3:0]显示的是最左边的管子basys2板子~~~~约束文件NET"clk"LOC=B8;NET"x[0]"LOC=P11;开关最右边NET"x[1]"L...

weixin_33119123的博客 487

51单片机--某系统有K1和K2,一个数码管,当按下K1数码管加1,按下K2数码管减1

题目:某系统有K1和K2,一个数码管,当按下K1数码管加1,按下K2数码管减1 程序如下: #include <reg52.h> #define uint unsigned int #define uchar unsigned char #define LED_seg P0 #define LED_com P2 sbit key1=P3^1; sbit key2=P3^0; s...

退休图书管理员的博客 1万+

arduino二位数码管_用arduino和2个74HC595级联控制8位数码管显示

初学者打出来的代,可能不“美观”,希望大家点评,多多留下意见,话不多说上代……下面为8位数码管全部显示#include "Arduino.h"void set(int x);void setup();void loop();void shu();int SH_CP = 12;//595_SH_CP/11 存储寄存器int DS = 13;//595_DS/14 移位寄存器...

weixin_33207144的博客 1613

2.3寸数码管模块的全面硬件与软件开发资料

2.3寸数码管是电子显示设备中常见的一种形式,它具备高亮度、宽视角、长寿命等特点,广泛应用于各类数字仪表、电子显示板等领域。设计一款数码管硬件不仅需要考虑显示效果,还须兼顾电路的稳定性、功耗、成本等因素。ULN2003是一款通用的驱动集成电路,被广泛应用于电子项目中,以驱动高电流负载,如继电器、电机、数码管等。ULN2003包含七个独立的NPN晶体管,每个晶体管能够提供高达500mA的电流,并且每个通道都配备有集电极开路输出,这使得ULN2003能够直接与各种微控制器接口。

weixin_42611177的博客 708

ALTERA DE2 之 verilog HDL 学习笔记02 - 数码管

由于刚上手FPGA,所以刚开始有些兵荒马乱,在网上疯狂的查找资料,结果是迷迷糊糊的。网上的那些教程啊什么的都是抄过来抄过去的,并且大多数都是抄袭的官方的英文文档,今天检查硬盘才发现友晶官方给了好多demo啊,魂淡~ 这第二个文章我就基于友晶的demo修改,来学习DE2上面的数码管吧。 首先是数码管的原理图: 由原理图可知,数码管是共阳极的,所以给一个低电平,数码管点亮。 首先对照上图将

神奇的战士 3173

AT32 2X2矩阵按键控制4位数码管 数码管菜单应用设计参考

第二步:数码管驱动逻辑,4位数码管是共阳极的,4位位选线,每个单独的数码管是8.,具体请查阅数码管的底层原理的资料,数码管采用的是定时中断刷新的,才能彻底有效解一闪一闪的,采用定时中断刷新数码管,肉眼可见数码管是一直显示的。第三步:菜单的设计。菜单的设计思路是什么,怎么设计,怎么才能让对应数码管显示其它字符,这个字符不动,且数值能增减,还有对应的字符有对应的值,还能在一定的范围内限制。完善菜单切换功能,按键2、按键3,能进行对应的数值增加或者减小,以及能够数值能够在一定的范围内增或加,不越界。

m0_70456694的博客 1011

基于ps/2通信的FPGA数码管显示

提示:新手初篇,欢迎指正 文章目录前言一、PS/2通信原理简介二、使用步骤1.数码管显示2.读入数据3.所有代总结 前言 一直以来都想保存自己学习的系统的过程,却也一直没有付诸行动,这次贴一篇基于ps/2通信的FPGA数码管显示。 软件:Vivado2017.2 硬件芯片型号:ARTIX XC7A35T CSG324ABX1645 提示:以下是本篇文章正文内容,下面案例可供参考 一、PS/2通信原理简介 简单来理解就是键盘给主机(板子)发送信号,键盘有一个自己的时钟,这里表示位ps2_

weixin_46410324的博客 654

STC12C5A60S2 8位数码管分别显示1 2 3 4 5 6 7 8

/*******************************************************程序功能:采用动态扫描的方法,在8位数码管显示不同数字开发环境:Keil3硬件环境:CEPARK多功能开发学习板/实验箱(2013版),STC12C5A60S2,11.0592M晶振接线说明:单片机P20-P22接底板JP26。分别为:P20-DS,P21-SHCP,P22-STCP跳...

qq_41975868的博客 5548
上一篇: (1)LED
下一篇: (3)矩阵键盘
Falling_Asteroid
博客等级 码龄5年 48粉丝 88原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值