鸣器报时。
2.2 电路联系框图
模式选择模块 闹钟模块 计时模块 秒表模块 分频模块 显示模块
图 2
图2是各个模块之间的联系框图。通过模式选择模块来控制计时模块的工作,最开始的时候是最基本的计时电路,然后就是校时模式,在然后是闹钟模式,最后是秒表模式。而分频模块跟每个电路模块都有关系,在此我就没有将其与其他模块一起连接起来。计时模块输出BCD码给显示模块,再在编码之后来控制数码管的显示。秒表模式是当切到了秒表模式就开始计时。闹钟模式类似于校时模式,当调好闹钟时间后,转换模式就是表示已经输入了闹钟时间。
3设计实现
3.1 分频模块
6
图 3
图3为分频模块的顶层图,输入的clk为50MHZ的系统时钟频率,通过分频模块,可以分成1KHZ、100HZ、10HZ、2HZ、1HZ的频率。这几种不同的频率将会为不同的模块提供时钟信号。
50MHZ分频为1HZ的流程图可表示如下,其他的分频类似。如果要分出其他频率信号,只需要改变计算值的临界值即可,通过改变计数临界值就可以获得不同的频率。
7
3.2 消抖模块
图 4
图4为消抖模块的顶层路图。按键在按下时会产生抖动,释放时也会产生抖动,所以在设计键盘扫描程序时必须考虑按键的消抖,一般只考虑按下时的抖动,而放弃对释放时抖动的消抖。抖动时间一般为20ms左右。按下的最终结果是低电平。
按键按下时会有抖动,也就是说我们其实只按一次,但是实际产生的“按下”却是许多次的,这些许多次集中在这20ms里。按的只是一次,而实际却产生了许多次,那么就必须滤除其他的次数。为了得到真正的“按下”,通过延时20ms,把其他的“按下”(也就是抖动)给滤除了。然后再次判断是否有按下。
在FPGA中,程序里检测按键是否按下的方法是脉冲边沿检法。FPGA过20ms检测按键是否按下,存储检测到的值,并且按位取反与前一个20ms检测的值相与,得到一个值,如果为1,则判断按键按下,否则则无按下。 消抖的流程图可表示为
8
3.3秒表模块
图 5
图5为秒表模块的顶层图。从图中可以看出,由CLK1HZ和key[1..0]两个输入,CLK1HZ是时钟信号,用于计时,即秒表的形成。而key[1..0]是按键的输入,也即只有当特定按键按下时,秒表才启动。输出进位信号co1、秒的地位cl、秒的高位ch。当cl=9时。产生进位信号,使秒的高位加1。在此处设计中,并没有设计秒向分进位。
秒表流程图可表示为
9
3.4 闹钟、整点报时模块
图 6
图6是闹钟、整点报时模块顶层图,通过自己设置的闹钟时间与当前的时间进行比较,当当前的时间和设置的闹钟时间相同时,就会输出特定的频率给蜂鸣
10