中山大学数字电路实验时钟设计大作业

中山大学数字电路实验时钟设计大作业

一、实验题目

Proteus设计时钟

二、实验目的

  1. 使用Proteus实现具有分、秒计时的计数器,计数结果要求在7段数码管(7SEG-MPX4-CC-RED)上显示,并检查结果

  2. 在Proteus设计上给计时器添加调整当前时间功能,即添加进入调整计时模式(MOD)按键和分/秒计数循环加一(ADJ)按键。

  3. 使用Proteus实现具有年、月、日、时、分、秒计时的计时器,计时结果要求显示在7段数码管上,要求年、月、日、时、分、秒均可调节。

三、实验内容

实验步骤

  1. 根据老师提示的CLOCK设计图,使MODE能调节每个位置而不只是秒
  2. 加上时,天,月,年的显示而不只是分,秒
  3. 协调好每级数据之间的关系(进位,置位,运行等等)
  4. 加上固定显示的20数字(年只在2000年到2099年调节)

实验原理

1. 按键模块:
用197实现一个八进制的计数器,然后接到一个八选一的数据选择器138上,输出分别为

标号 0 S0 M0 H0 D0 MO0 Y0
代表状态 正常状态 调节秒数 调节分钟 调节小时 调节天数 调节月数 调节年数

当按下MODE按键时,CLK2由高向低变化,Q1,Q2,Q3就会按照八进制加法计数器的变化而变化就会调节各个位置的数值,因为只有七个状态,所以把最后一个状态接197的清零端
而CHANGE按键的两端分别标号为ADJ1,ADJ2,没有按下按键时,ADJ1是高电平,ADJ2是低电平,按下按键后,ADJ1变为低电平,ADJ2还是低电平,这会关系到后面的切换模块
至于为什么要放一个电阻,是为了防止按下按键之后高电平直接接地会造成短路
这里写图片描述

2. 切换模块
其实每个都是差不多的,只是控制的数据不一样。都是利用一个157选择器,
选择器接按键模块中各个标号的非;
1A,1B,2A,2B分别接CLK1,ADJ1,ADJ2,CLK1;
1Y,2Y分别接对应的计数模块的CLK和对应的显示扫描模块的CLK。
当正常显示时,S0为高电平,经过非门为低电平,说明各个Y的输出为A,此时1Y就是CLK1,可以使每个计数模块正常工作,2Y为低电平,可使扫描显示模块正常扫描显示而不至于闪烁。
按下MODE按键改变工作状态后,对应调整的计数模块1Y的输出就会ADJ1,而2Y就会成为CLK1而变化,这就会造成后面的扫描显示模块控制的数字闪烁
这里写图片描述
3. 显示扫描模块
这里主要讨论显示管的1234切换状态的功能
同样的一个频率比较高的脉冲接着197然后正好接到选择器138的输入端,因为这里只有四个数字,所以只用了Q1和Q2。然后把138的输出0到3的端口分别接着显示管的1到4端口,就可以实现扫描显示四个数字了。不过这里涉及到一个闪烁的问题,所以没有直接接上去,而是每两个数字(两个数字代表同一级别,如代表天数,代表月数等)都接一个或门接上代表该级别的控制闪烁的脉冲,就是在切换模块中讨论的CLK2到CLK7,这样当此级别的数据没有被控制时其为低电平,最后接到显示管上的也为低电平,便可显示数字。而被控制时,CLK2到CLK7中的某一个就会为连续的变化脉冲,就会在某些时段为高电平,这样接到显示管上也为高电平,显示管就会空一段时间,就实现了数字闪烁。
这里写图片描述
4. 计数模块
这是最麻烦也是最核心的模块,主要利用的是160十进制计数器。
用十进制改装成六十进制,二十四进制,三十进制,十二进制比较简单,主要问题在于ENP,ENT接口和LOAD接口和CLK接口的设计

  • ENP,ENT控制计数器的启动,只有当该数字以下的所有级别都到了准备LOAD的时刻才会为高电平或者正在控制该数字。比如只有30号23点59分59秒的时候且始终处于正常运行状态(非调节状态)月数才会为高电平,另外控制月数的时候也应该要它处于启动状态,不然没法调节大小。

  • LOAD控制计数器的置位,有两种情况。第一是包括自己在内的所有级别都准备LOAD的时候为有效电平(低电平),即12月30号23点59分59秒月数才会重置为1;第二是处于调节状态并且本级别数据处于要LOAD的状态,如调节到12月时不管其他数据如何再加数也应该能够回到1月。不过还有一种情况如月数和天数是从一开始,所以要设置初始值为1,而且最初启动的时候是0,所以也要把所有位数为0的情况接到LOAD,在最开始初始化一下。

    1. CLK控制计数器的变化,正常情况下应该跟着CLK1运作,调节时候应该能够跟着ADJ变化,而该功能在切换模块已经实现,直接接上就好了
      这里写图片描述

    5. 显示选择模块
    主要是利用两个153分别控制四个数字的四个位置(高低位),而控制端就接上显示扫描模块的197产生的两个变化信号,这样就可以让这两个模块的变化信号同步变化了
    这里写图片描述
    6. 显示模块
    并没有很大的难点。
    这里写图片描述

四、实验结果

  1. 初始状态
    这里写图片描述
  2. 这才是喜闻乐见的初始状态
    这里写图片描述
  3. 闪烁状态(秒钟闪烁)截不了动图,所以只能这样表示了
    这里写图片描述
  4. 紧张刺激的跨年时刻
    这里写图片描述
    系统时间作证,中间是截图花费的时间,可以理解。
  5. 高速运转模式(700kHZ)
    这里写图片描述

五、实验感想

这是这个学期的大作业,所以还是花了一番功夫的。不过非常得益与老师的提示,花了很久参透了老师的clock文件,学到了一些东西。比如用按钮控制状态变化,用选择器控制CLK的变化还有用手动调节代替CLK的自动变化。
当然也遇到了很多问题,最开始调节到了秒数为59的时候,分钟数就一直在走,这当然是不正常的,于是就把分钟数的计数器启动设置为当正常运行或者调节分钟时才会为有效电平。还有就是正常运行时到了59分时小时数就会变化,其实应该是到了59分59秒才会变化,而这也引发了后续关于天,月和年的一系列相同问题,这在前面介绍中其实已经解决了。
还有就是一个BUG,因为调节数字是通过手动模拟时钟信号使某个位置的计数器按照自己的想法走动,有时候到了时钟边缘的时候调向更高一级的数字很可能直接就加了一位,暂时还没有确定具体的情况,也没能得到解决,不过影响不是很大。
最后附上整个proteus的图片

还有下载dsn文件的传送门 点这里

这里写图片描述

猜你喜欢

转载自blog.csdn.net/jankingmeaning/article/details/78868077