74HC595在单片机电子时钟拓展IO口设计中的应用

2021-09-22 07:44肖海玲
电子技术与软件工程 2021年13期
关键词:数码管级联按键

肖海玲

(广州科技职业技术大学 广东省广州市 510550)

1 系统整体方案设计

综合应用在8位数码管的万年钟系统设计,完成可调式的时分秒、年月日和闹钟等功能设计。该系统主要由4个模块组成:单片机控制芯片、外部晶振、外部按键、闹钟、8位数码管等。

硬件设计过程中,采用74HC595级联的方式设计单片机电子时钟电路,系统使用过程中,采用AT89C52单片控制器外接的方式,其中时间、日期、闹钟由3个按键来实现,满足单片机的时钟与复位电路的设计。如图1所示。

2 系统硬件设计

从电路图分析得知,8位数码管如果按照动态扫描的方法接线,需要提供8个位选口和8个段码口,直接占用单片机16个IO口,占用了单片机太多的IO口资源了。为了解决这个问题,利用74HC595的目的就是减少I/O口的使用数量,直接利用74HC595的3个数字I/O口连接单片机就足以控制8个数码管。

2.1 具体的模块及功能

硬件设计是关键,也是软件设计的基础。单片机向74HC595发送一个字节数据,数据是通过DS串行数据输入端进入74HC595,在SHCP产生一个上升沿作用下,将DS上的数据从高到低按位移入74HC595中,需要SHCP产生8次上升沿;当移位结束后,就会全部进入到移位寄存器,最后在STCP的一个上升沿作用下,移位寄存器里的数据送入到输出锁存器并进行Q0—Q7引脚并行输出[1]。

图1:74HC595级联在单片机电子时钟拓展IO口设计应用的整体结构图

图2:74HC595芯片运行的流程图

图3:数码管设计的可调式电子钟

利用74HC595在运行IO拓展应用中,实际只占用到单片机的IO口,这样设计的思路也可运用到其他嵌入式的控制芯片领域,可大大减少单片机IO口占用资源的问题。如果需要完成更多引脚的功能实现,需级联接入多个74HC595,本文的实现是需要将第一片的74HC595的Q7’脚的串行数据输出端级联到下一片74HC595芯片的串行输入DS数据输入端。同时,电路的实现还需要设置这两个控制端,低电平时/MR(10脚)将移位寄存器的数据清零,所以将其接Vcc电源;高电平时OE(13脚)将禁止输出,将其接GND电源。

74HC595芯片依次读入8位数据运行的流程图如图2。

2.2 硬件系统整体功能

74HC595芯片是一个8位串行输入/8位串行或并行输出的移位缓存器,可以直接驱动8个IO口,为控制数码管的8个段码与8个位选码的电路搭接,需采用2片74HC595进行级联。在74HC595电路搭建的过程中,通过单片机的一个I0口直接控制74HC595的DS数据端口,之后将数据进行8位数据并行输出[2]。需考虑74HC595串行输出数据的先后顺序问题,这里的前后级主要依据是:74HC595的3个控制端与单片机直接连接的U2作为后级,而前级的U1的串行DS数据输入端是通过后级U2的Q7’脚的串行数据输出端输出得到。其中,两片的STCP和SHCP端是连接在一起,这样两片的芯片都具有相同移位脉冲源和相同的锁存信号,最后一起输出数据到并口Q0-Q7。在编程8位数码管时,需优先考虑输出段选还是位选信号。位选信号是选中8位中一个数码管,然后选择输出段选码信号,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替,这样动态扫描克服了人眼余辉的闪烁现象。

3 系统软件设计

3.1 驱动软件设计

单片机的软件设计依据电路的搭接方式而编程,以下是单片机向74HC595发送一个字节数据的功能代码send_595()和并行输出数据的代码out_595()设计,采用C语言编程:

上述代码过程中,假设单片机要发送一个字节的数据0XFC,展开的二进制数据是1111 1100,执行的DS=ucData&0x80后,将字节的最高位1给到74HC595的Q0引脚,在时钟线作用下进行左移8次[4]结束后的结果是Q0- Q7的结果是0011 1111。

第三步:/完成并行数据输出

3.2 级联软件设计

在编程的时候就会遇到到底是选择先发送位选信号,还是先发送段选码信号的问题,需结合电路设计的搭接。若先传位选信号,在电路图中将先准备输出位选码信号数据端的74HC595必须设置在前级U1的位置,后级U2位置放置传送段选码信号的74HC595,若搭接的电路优先传送段选码信号,则74HC595芯片的对应位置的功能就相反,如图1所示。若顺序不正确会导致错误结果,主要因为74HC595是一个字节一个字节传送数据的芯片。

下面是以先传段选信号编程的逻辑顺序:

send_595(a[i]);//先传段选码,显示的数据

send_595(b[i]);//再传位选码.显示在哪一个数码管上

out_595();

其中,send_595()函数里的参数由一维数组提供,可设置多个一维数组,用于存放传输的数据。这里有将所有的段选信号码和位选信号码分别放在a[i]和b[i]一维数组里,需注意一维数组里存放段选码的数据主要依据8位数码管是共阴极或者共阳极笔形码的问题。

3.3 按键消抖软件设计

对于独立按键,按键在闭合和断开时,触点会存在抖动现象。按键闭合和断开过程中存在抖动期,一般为5~10 ms之间,为了保证CPU对键的闭合做一次处理,必须去除抖动,在键的稳定闭合或断开时,才读键的状态。可从硬件设计和软件设计两个方面解决按键抖动问题:在硬件方面,采用两个“与非”门构成一个RS触发器只能消除一个按键消抖的问题,而本文的万年钟可调式设计需涉及到4个按键,如果采用硬件的RS触发器消抖的方法就会占用太多的电路空间问题和过多的成本问题,建议采用软件消抖的方法。软件消抖方法:当判别到键盘上有键闭合后,延时一段时间再判别键盘的状态,若仍有键闭合,则认为键盘上有一个键处于稳定的闭合状态,否则认为键抖动,除了按键消抖的问题,软件上还要解决等键释放问题,要保证无论按键按下多久,只执行一次。以下代码就是软件消抖的方法:

代码中的按键处理程序可选择按键按下一次修改秒,再按一次修改分,再按一次修改时;

再按一次修改日期,再按一次修改月份,再按一次修改年,重复上述过程,日期与时间可以转换。

4 运行结果

通过数码管与按键设计的调式电子钟,显示13点02分08秒,如图3所示。

5 结束语

通过基于74HC595芯片在单片机电子时钟拓展IO口设计中应用,不仅能解决单片机IO口紧张资源问题,实现了对IO口的充分利用,比通过单片机数据端口省时省力,还解决了硬件成本开销问题,还有利于单片机加入更多模块,方便拓展更多应用系统功能领域。

猜你喜欢
数码管级联按键
基于有限状态机的按键检测程序设计
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
基于Qt的数码管数字编码系统的设计与实现
级联LDPC码的STBC-OFDM系统
一种多方向导光按键结构设计
基于级联MUSIC的面阵中的二维DOA估计算法
LCL滤波器在6kV级联STATCOM中的应用
H桥级联型STATCOM的控制策略研究