单片机学习 4-动态数码管显示
动态数码管显示
动态数码管介绍
数码管动态显示原理
数码管采用动态显示方式连接,则八位数码管每个位的数码管对应相同段的线路连接在一起。而位选线单独连接。
由于三八译码器的特性导致每次只能选择点亮一位数码管,而人肉眼可区分范围是20-50ms(余晖效应),所以控制数码管点亮间隙小于20ms,即想让人眼看见第一个数码管显示1和第二个数码管显示2在一起出现,则将0和1之间的延时时间控制在小于20ms(1显示完后等待小于20ms时间,点亮2)。
74HC245和74HC138芯片介绍
要使单片机能控制开发板上 2 位一体的共阴数码管显示,仅靠单片机 IO 口来驱动是不行的,这里就需要增加外部驱动芯片,开发板上使用的是 74HC245 芯片。2 个 4 位一体的共阴数码管的位选线有 8 根,直接让单片机 IO 口控制是没有任何问题的,但考虑到 51 单片机 IO 口资源的限制,通常我们会使用一种 IO 扩展芯片,比如 74HC138、74HC164、74HC595 芯片等,只需要很少的单片机 IO 口就可以扩展出 8 个控制口,通过级联方式甚至可扩展出更多的控制口(在后面 LED 点阵实验章节中会有详细介绍)。我们开发板上使用的是 74HC138 译码器芯片,只需单片机 3 个 IO 口就可以实现 8 个位选管脚的控制,节省了芯片的 IO 资源。
74HC245芯片
74HC245 是一种三态输出、八路信号收发器,主要应用于大屏显示,以及其它的消费类电子产品中增加驱动。可以增加I/O的电流,通过芯片可以驱动八个数码管。
(1)主要特性
①采用 CMOS 工艺
②宽电压工作范围:3.0V-5.0V
③双向三态输出
④八线双向收发器
⑤封装形式:SOP20、SOP20-2、TSSOP20、DIP20
(2)管脚功能定义
从上面的管脚功能定义说明及真值表可以知道该芯片使用方法很简单,给 OE
使能管脚低电平,DIR 管脚为高电平传输方向是 A->B 输出,DIR 为低电平传输方
向是 B->A,至于输出高电平还是输出低电平取决于输入端的状态,如果输入为
低电平,输出即为低;输入为高电平,输出即为高。如果 OE 使能管脚为高电平,
不论 DIR 管脚是高还是低,输出是高组态。
通常我们使用 74HC245 芯片用作驱动只会让其在一个方向输出,即 DIR 管脚
为高电平,传输方向是 A->B(根据二极管单向导电性DIR为高电平,OE非为低电平)。
74HC138芯片
74HC138D 是一种三通道输入、八通道输出译码器,主要应用于消费类电子产品。
(1)主要特性
①采用 CMOS 工艺
②低功耗
③工作电压:3.0V-5.0V
④封装形式:SOP16
(2)管脚功能定义
从上面的管脚功能定义说明及真值表可以知道该芯片使用方法很简单。首先要使能有效,给E1、E2 使能管脚低电平,E3 管脚为高电平。至于哪个管脚输出有效电平(带非号就为低电平有效),要看 A0,A1,A2 输入管脚的电平状态。如果 A0,A1,A2 都为低电平,则Y0 输出有效电平(低电平),其他管脚均输出高电平。如果 A0 为高电平,A1,A2 都为低电平,则 Y1 输出有效电平(低电平),其他管脚均输出高电平。其他几种输出大家可以对照真值表查看。如果 E1、E2 使能管脚任意一个为高电平或者 E3 为低电平,不论输入是什么,输出都为高电平。
这里给大家总结一个方法:A0、A1、A2 输入就相当于 3 位 2 进制数,A0 是低位,A1 是次高位,A2 是高位。而 Y0-Y7 具体哪一个输出有效电平,就看输入二进制对应的十进制数值。比如输入是 101(A2,A1,A0),其对应的十进制数是 5,所以 Y5 输出有效电平(低电平)。
硬件设计
A2-A4开发板电路图:
A5-A7开发板电路图:
A5-A7开发版输入端加入了下拉电阻,比如输入端连接了P0端口,因为P0内不存在上拉电阻,但是外界了上拉电阻,所以会默认输入高电平,不加入下拉电阻,就会发生自动点亮,产生干扰。
!!!注意A2-A4开放版和A5-A7开发版的位选是相反的。
软件设计
编程
#include"reg52.h"typedef unsigned char u8;
typedef unsigned int u16;#define SMG_A_DP_PORT P0sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x6e,0x79,0x71};//共阴0-Fvoid delay_10us(u16 ten_us)
{while(ten_us--);
}void smg_display()//数码管smg同时显示0—7
{u8 i=0;for(i=0;i<8;i++)//for(i=7;i>=0;i--) //改变位选方向//A2-A4开发板{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; }SMG_A_DP_PORT=gsmg_code[i]; //改变位选值//SMG_A_DP_PORT=gsmg_code[7-i]; A2-A4开发板//delay_10us(100);//1ms //时间越大,数码管动态显示越明显(相当于流水灯)delay_10us(1000);//10msSMG_A_DP_PORT=0x00; //数码管段数据口清零(消隐)}
}
void main()
{SMG_A_DP_PORT=gsmg_code[0];while(1){smg_display();}
}
消除重影!!!
在关闭前一个数码管的显示前要对数码管段的数据口清零。因为每个数码管的段码是并联在一起的,所以当前一个有效位关闭,下一个有效位开启的时候,P0的数据依然会存在前一个有效位(可以理解为电路的延迟,在前一个有效位在关闭前一瞬间,下一个有效位的数据已经影响到前一个有效位了)
实验现象
间隙1ms:
间隙10ms:
单片机学习 4-动态数码管显示相关推荐
- 51单片机学习笔记-2数码管显示
2 数码管显示 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓 ...
- 51单片机入门——动态数码管显示详解
51单片机:动态数码管显示 - 模块图 - 显示原理 – 消抖 静态数码管技术 + 人眼视觉停留 显示原理类似于以前的 胶片机放影视,也就是只要我切换的速度足够快你就看不出来其实我是一次次显示的(滑稽 ...
- 51单片机静态动态数码管显示
51单片机静态动态数码管显示 通过此实训了解动态数码管的显示原理,掌握编码方法.共阴极和其阴极数码管的不同之处及常用设计方法. 实训设备 这里使用的377锁存器模块控制的数码管下面就是电路图 显示内容 ...
- Proteus:单片机动态数码管显示“HELLO”模拟
题目概述: 单片机动态数码管显示"HELLO". 编程: #include <reg51.h> #define uchar unsigned char #define ...
- 单片机C51(STC89C52RC)实现静态、动态数码管显示
目录 1.138译码器原理 2.数码管显示原理 3.静态数码管显示 4.动态数码管显示 5.总结 1.138译码器原理 C B A Y Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 0 0 0 0 ...
- 51单片机动态数码管显示自己学号
实验题目:使用51单片机实现动态数码管显示自己8位学号,例如20220018 在此原理图又分两种连接方式: 第一种是8位数码管接38译码器来减少端口使用. 第二种是,没有端口要求接好就可以那就是,把位 ...
- 【STC单片机学习】第七课:单片机控制静态/动态数码管
[朱老师课程总结 侵删] 第一部分.章节目录 1.7.1.什么是数码管 1.7.2.静态数码管的初步驱动 1.7.3.静态数码管显示数字 1.7.4.让数码管依次显示0到f 1.7.5.动态数码管 1 ...
- 单片机入门——动态数码管显示
前言 在实际应用中通常都需要显示多位数值,如果采用静态数码管显示就不够好,因此就需要采用另外一种显示方式,即数码管动态显示.开发板上板载2 个四位一体的共阴数码管,接下来我们就来介绍下如何使用51 单 ...
- 51单片机 动态数码管显示
本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上 1.首先将上一章节使用子函数方法的代码复制过来 将Nixie( , )移到下方while循 ...
最新文章
- python threading多线程计算
- python批量读取根目录下文件内容并保存
- Android报表库aChartEngine系列
- windows下手把手教你捕获数据包
- 《计算机网络》学习笔记_(2、物理层)
- es管理kabina_小白学ES 05 - 通过Kibana管理集群服务
- 前端学习(1133):正则表达式概述
- BZOJ 2004 公交线路(状压DP+矩阵快速幂)
- java和asp.net core,VS 2019教程:创建ASP.NET Core Web App
- 贪吃蛇代码c语言改分,刚学C语言,想写一个贪吃蛇的代码
- 想接私活收入翻倍,建议根据这几个开源SpringBoot项目(含小程序)改改~
- NOIP2017题解
- 拿R来画画(八):面积图与堆积图
- 普中科技51单片机直流电机控制风扇调速
- 让计算机休眠的命令,电脑怎么取消休眠?关闭休眠命令是什么?
- window.print打印pdf
- 排队叫号医院管理系统源码
- 微信公众平台之CURL应用access_token
- 简单的Dos命令/一行代码实现恶意程序
- 电脑摄像头识别二维码OpenCV程序