前言
该程序源代码是在Windows XP操作系统上的Quartus II 6.0软件中编写调试。程序运行所依托的数字电路板为Cyclone 2系列,EP2C35F672C6序列的开发板。
在这个环境下,实现了数字电路课程设计,一个基于FPGA开放板的多功能数字时钟。
1. 设计要求
此多功能数字时钟使用LCD1602
,数码管
,LED
等模块,用 SW[i] 和 KEY[i] 按键和开关控制,实现了数字时钟,闹钟和计时器功能。
具体功能有:
- 具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)数字钟。秒的计数频率为1Hz,由系统脉冲50MHZ分频得到,其余位数值由模60和模24的计数器实现进位触发增加。利用SW0来清零时、分、秒数字时钟,利用SW1实现时钟暂停功能。
- 整点报时。从每个小时的59分50秒起,每隔2秒钟发出一次信号,连续5次,最后一次信号结束即达到整点。通过LED闪烁(LED: 0-6)和蜂鸣器闹铃实现。
- 校时功能。利用SW1实现时钟暂停后,也同时触发校时功能,使用KEY[0], KEY[1]和KEY[2]分别修改秒钟,分钟和时钟。
- 闹钟功能。在设定的时间通过蜂鸣器发出闹铃声,同时LEDG8闪烁。
- 倒计时功能。显示小时、分钟、秒。
- 用LCD1602自定义来显示当前时间和额外文字。
2. 设计分析及系统方案设计
该系统整体包含四个功能:数字时钟自定义显示、数字时钟校时、闹钟设置、倒计时设置,根据SW0、SW1、SW9和SW17这4个开关的0和1状态,实现功能间的切换。
整个系统由分频器、模60计数器、模23计数器、校时电路、LCD1602显示、数码管显示、闹钟控制、蜂鸣器驱动多模块组成。
时钟:时钟利用的是cyclone2开发板上提供的50MHz晶振的系统频率,采用分频器,分别得到1Hz, 0.5Hz两个频率时钟信号。1Hz频率信号用来作为系统的主时钟,触发秒的进位;0.5Hz频率信号整点报时,作为音频输出的节拍频率。
计数器:主计时模块由60秒计数器,60分钟计数器,24小时计数器构成,每个计数器分别有时钟或进位时钟作为输入,有清零端口SW0用于清零,此外,有端口SW1组构成了手动时钟信号,作为置数开关使用,实现手动校时功能。
校时模块:通过按键来模拟下降沿触发,促使时间的变化。
显示模块:译码器模块有4-7译码器和4-8译码器,分别对数据进行处理输入给数码管,和LCD显示屏,实现数据显示。
闹钟模块 & 整点报时模块:整点报时模块由60秒和60分钟计数器的输出控制,满足条件时候开始闪烁,闹钟模块在满足小时和分钟设定值的时候会亮灯,倒计时模块可以手动输入起始时间,之后打开使能端会开始输出,当计时结束后会亮灯提醒。
系统结构框图:
3. 系统以及模块硬件电路设计:
3.1 SW开关与KEY按键电路
按键松开状态为输入高电平,按下状态为输入低电平,逻辑开关向上,输入高电平,向下,输入低电平;按键经过消抖处理,而逻辑开关没有,所以在边沿触发应用上,常用按键来实现。
3.2 LED硬件电路
LED共阴极,编码逻辑电平与输出显示相同,置高电平灯亮,置低电平灯灭。
3.3 数码管硬件电路
共阳极数码管,编码逻辑电平与输出显示相反,显示的数字和对应的七段LED所置高低电平情况如下:
- 0:HEX[6]到HEX[0]为1000000
- 1:HEX[6]到HEX[0]为1111001
- 2:HEX[6]到HEX[0]为0100100
- 3:HEX[6]到HEX[0]为0110000
- 4:HEX[6]到HEX[0]为0011001
- 5:HEX[6]到HEX[0]为0010010
- 6:HEX[6]到HEX[0]为0000010
- 7:HEX[6]到HEX[0]为1111000
- 8:HEX[6]到HEX[0]为0000000
- 9:HEX[6]到HEX[0]为0010000
3.4 50MHz时钟硬件电路
3.5 蜂鸣器驱动电路
3.6 LCD1602液晶显示屏硬件电路以及其时序图
LCD1602的内部引脚:
3.7 管脚图
4. 系统的Verilog HDL设计
1 | module fzyDigital( |
1 | module clock(clk_1,en,out_Hh,out_Hl,out_mh,out_ml,A,B,C,D,Hh,Hl,Mh,Ml); |
1 | module backclock(clr,clk,H_SET,M_SET,S_SET,EN,H_h,H_l,M_h,M_l,S_h,S_l,out); |
1 | module clk_s2(clk,clk_2);//2秒分频器 |
1 | module decorder(a,Y);//4,7译码器 |
1 | module LCD1602(clk,rst,LCD_EN,RS,RW,DB8,LCD_ON,/*,data_row1*/out_Hhlcd,out_Hllcd,out_mhlcd,out_mllcd,out_shlcd,out_sllcd); |
1 | module LcdWord(X,Y); |
1 | module LED_1(clk,clk_2,en,led1,led2,led3,led4,led5,led6,led7,led8);//使能后按照额定显示 |
1 | module m_24(clk,rst,ql,qh,count);//模24计数器 |
1 | module m_60(clk,rst,ql,qh,count);//模60计数器 |
1 | module s_1(clk,out_1,cset);//50M分频器 |
5. 结论以及结果说明
程序源代码是在Windows XP操作系统上的Quartus II 6.0软件中编写调试。程序运行所依托的数字电路板为Cyclone 2系列,EP2C35F672C6序列的开发板。
操作说明:
开机时,SW1=0,SW0=0,进入数字时钟自定义显示模式。数码管能够正常记录时间,LCD屏上显示日期及时间,能够正常产生进位。拨动SW0,时间清零,每当时钟到达整时位置,LED灯闪烁,进行整点报时。数字时钟及万年历显示模式功能正常。
功能切换,SW1=1,SW0=0,进入数字时钟调时模式。数码管依旧正产显示计时时间,按下按键KEY2,增大时的数值,始终处于00至23之间,按下按键KEY1,增大分的数值,始终处于00至59之间,并且能够正常进位,按下按键KEY0,增大秒的数值,始终处于00至59之间,并且能够正常进位。在满足调时触发同时,也满足计时触发。直至数字时钟校时准确。
功能切换,SW17=0,进入闹钟设置模式。数码管依旧正常显示闹钟时间。拨动SW2,设置分钟,个位每次进1;拨动SW3,十位每次进1;拨动SW4,设置时钟,个位每次进1;拨动SW5,十位每次进1。直至闹钟设置满意。
功能切换,进入倒计时器模式。拨动SW6,设置秒钟,个位每次进1;拨动SW7,设置分钟,个位每次进1;拨动SW8,设置时钟,个位每次进1。数码管显示所设定的倒计时时间,拨动SW9,启动倒计时功能,数码管上显示数字按照时钟规律进行倒计时。
6. 参考文献
- 戚金清,王兢,王开宇,等.数字电路与系统(第三版)[M].电子工业出版社.2016
- 赵权科,陈景,韩延义.数字电路与系统实验.2017年1月