I/O输出

您所在的位置:网站首页 fpga数码管动态扫描 I/O输出

I/O输出

2024-07-17 20:08| 来源: 网络整理| 查看: 265

 I/O输出—— 实例3:数码管动态扫描显示 一、实例目的       通过本实例,我们应:       1. 了解多位数码管的结构及引脚;       2. 了解多位数码管驱动电路;       3.掌握数码管动态扫描程序设计。       本例重点介绍多位数码管的驱动电路和程序设计,关于单个数码管的结构和驱动原理,请参见《 I/O输出——实例2:数码管静态驱动 》。 二、多位数码管结构及引脚       多位数码管用于显示更多的数值信息,其由多个数码管组成,这些数码管的段(a~h)一一对应连接在一起,公共极独立。4位数码管外观如图1所示。                                 图1   4位数码管     注:图1来源自Wikipedia,原文链接: https://en.wikipedia.org/wiki/Seven-segment_display      四位数码管引脚见表1。    表1 四位数码管引脚 引脚 功能 a~h 多位数码管的段控制端,输入,决定数码管的显示内容 com0~com3 数码管的公共端,即共阴极或共阳极,又称位选 二、多位数码管驱动原理         因为多位数码管的a~h段在内部连接在一起,为了让数码管显示不同的内容,只能采用动态扫描方式,即按照一定方向(例如从左到右)逐一选中数码管,单片机输出相应的显示数据,并保持一定的时间,如此循环。由于人眼的视觉暂留效应,我们看到多位显示内容是同时显示的,这与动画由一幅幅图片动态快速切换的原理是类似的。 根据经验,当帧率为15fps以上,则动画是连贯的(一帧就是一幅图像)。帧率越高动画越流畅,一般动画要求帧数在24帧以上。对于四位数码管,显示四位数字为一帧,按25fps计算,则每位数字的显示时间为10ms左右(1s/25/4)(帧率取25fps,4为数码管的位数)。 但是,经过实测,每位数字显示10ms,明显看到辉光闪烁,刷新频率不够,改为5ms则稳定显示。          8位数码管的驱动电路如图2所示。一个74HC573锁存器用于提供数码管 驱动 电流,一个74LS138译码器用于片选8位数码管,任意时刻仅有一个数码管是选中的。                                                                     图2 8位数码管动态扫描驱动电路        下面简单介绍74HC573和74LS138芯片的功能和引脚。        74HC573是8位锁存器(时序电路,输出不仅仅取决于输入,还与电路之前的状态有关,具有记忆(存储)功能),用于锁存8位数据,其引脚见表2。                                                        表2  74HC573引脚 引脚 功能 D0~D7 输入,8位待锁存的数据 Q0~Q7 输出,三态,内部8位锁存器的输出 提示:三态指高电平、低电平和高阻态。高阻态相当于与其它电路断开。通常总线(地址线、数据线都是三态的) 输入,输出使能,低电平有效 输入高电平时,Q0~Q7呈高阻态;输入低电平时,Q0~Q7为内部8位锁存器输出 提示:如果管脚带帽(名称上有一个横线),表示该引脚低电平有效,否则为高电平有效。 LE 输入,锁存使能端,高电平有效。 LE = 1时,D0~D7能够进入到内部的8位锁存器 LE = 0时, 内部的8位锁存器保持,即D0~D7无法进入到锁存器内部 74LS138是38译码器(组合电路,输出由输入决定,无记忆(存储)功能),其引脚见表3,功能表见表4。 表3 74LS138引脚 引脚 功能 C,B,A 输入,译码输入,C为最高位,A为最低位,共8种状态 Y0~Y7 输出,38译码器输出,低电平有效 提示:如果管脚后有一个圆圈。,表示该引脚有效时,输出低电平。 E1 输入,使能端,高电平有效 E2、E3 输入,使能端,低电平有效 提示:如果管脚前有一个圆圈。且引脚名称未带帽(—),表示该引脚低电平有效,否则为高电平有效。 表4   74LS138 引脚功能表 注:  G2=E2+E3, G1=E1                                             三、多位数码管动态扫描程序设计        下面以使用4位数码管显示“2016”为例进行介绍。  动态扫描程序主流程图如图3所示。          图3   4位数码管动态扫描显示流程图        采用结构式编程,将数码管动态扫描相关的函数写在一个7seg.h头文件里,便于移植和嵌入。当工程用到数码管动态扫描时,仅需引用7seg.h和修改相关的硬件接口定义即可。 新建一个工程LEDDynamic。 新建两个文件,一个main.c,一个7seg.h,添加到本工程。文件内容如下:      //main.c #include"7seg.h" //显示数据存在一个数组里 unsigned char num[] = {2,0,1,6}; /**************************** *函数:delayMS *功能:ms级延时函数@12MHz主频 *参数:ms:unsinged int,延时时间,单位:ms *返回值:无 *****************************/ void delayMS(unsigned int ms) {    unsigned int i,j;    for(i=0;i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3