《数字逻辑》
课程设计报告
设计题目:数字电子钟
组员:黄土标黄维超蔡荣达孙清玉
指导老师:麦山
日期:2013/12/27
摘要数字电子钟是一种用数字显示秒、分、时的计时装置,本次数字时钟电路设计采用GAL系列芯片来分别实现时、分、秒的24进制和60进制的循环电路,并支持手动清零和校正的功能。
关键词数字电子钟;计数器;GAL;4040芯片;M74LS125AP三态门
1设计任务及其工作原理
1.1设计任务
设计一台能显示时,分,秒的数字电子钟。
技术要求:
(1)秒、分为00~59六十进制计数器。
(2)时为00~23二十四进制计数器。
(3)可手动校正:能分别进行秒、分、时的校正。只要将开关置于手动位置,可分别对秒、分、时进行手动脉冲输入调整或连续脉冲输入校正。并且可以手动按下脉冲进行清零。
1.2工作原理
本数字电子钟的设计是根据时、分、秒各个部分的的功能的不同,分别用
GAL16V8D设计成六十进制计数器和用GAL22V10。秒的个位,设计成十进制计数器,十位设计成六进制进制计数器(计数从00到59时清零并向前进位)。分部分的设计与秒部分的设计完全相同;时的个位,设计成二进制计数器,十位设计为四进制计数器,当时钟计数到23时59分59秒时,使计数器的小时部分清零,进而实现整体循环计时的功能。
2电路的组成
2.1 计数器部分:利用GAL16V8D和GAL22V10芯片分别组成二十四进制计数器和六十进制计数器,它们采用同步连接,利用外接标准脉冲信号进行计数。
2.2 显示部分:将三片GAL芯片对应的引脚分别接到实验箱上的七段共阴数码显示管上,根据脉冲的个数显示时间。
3.3 分频器:由于实验箱上提供的时钟脉冲的时间间隔太小,所以使用GAL16V8D和GAL16V8D、4040芯片和M74LS125AP三态门芯片设计一个分频器,使连续输出脉冲信号时间间隔为0.5s
3设计步骤及方法
3.1 分和秒部分的设计:
分和秒部分的设计是采用GAL16V8D芯片来设计的60进制计数器,具体设计如图1示:
图1 分和秒部分设计图
秒部分的设计是秒的个位部分为逢十进一,十位部分为逢六进一,从而共同完成从00-59的六十进制计数器。当计数到59时清零并重新开始计数。
3.2 小时的设计:
具体设计如图2示:
图2 小时部分设计图
小时部分的设计是二十四进制的计数器,由00到23的二十四进制循环计数。
3.3 分频器的设计
分频器的设计原理是通过计数器把时钟源脉冲的频率降低。
因T = 1/f,f=0.1M
要使T=0.5s,则有f = 2
所以0.1M / X = 2,得X=50000
所以得做一个模为50000的计数器,这里用GAL16V8D、4040和M74LS125AP三态门来构建。
图3 分频器设计图
6电路总体说明:
正常显示:
首先手动按下脉冲,进行手动清零。然后在外接分频器的作用下,将开关1打开,秒加法计数器开始记数,通过七段数码显示管显示秒的数字。当经过60个脉冲信号后,秒计数器完成一次循环。当秒计数器的由59变为00时,co由低电平跳到高电平,致使分加法计数器的cen使能端有效,分加法计数器加一,完成秒向分的进位。分进时和秒进分的原理一样。
手动清零:按下脉冲。
手动校正:
原理如下表:
cen adj 状态
1 X 计数
0 0 保持
0 1 校正(不进位)
电路图总体设计如图3所示:
7设计所用器材
1、六十进制计数器 GAL16V8D、GAL22V10 3片
2、分频器 GAL16V8D、4040 2片
3、三态门 M74LS125AP 1片
8小结
通过这一周的设计学习,我感觉有很大的收获:首先,通过这次课程设计使自己对课本上的知识可以应用于实际,使理论与实际相结合,加深自己对课本知识的更好理解,同时也段练了我个人的动手能力,充分利用图书馆网络去查阅资料,增加了许多课本以外的知识。更加了解了时序逻辑电路的设计步骤及方法,对时序逻辑电路的触发方式的理解更加深刻即同步连接方式和异步连接方式的了解。掌握了abel-hdl语言以及ispEXPERT的使用以及对GAL系列芯片的设计方法有进一步的了解,和4040、M74LS125AP 三态门芯片引脚结构和功能的理解及运用。其次就是考虑问题要周全,即使是一开始认为对的东西,也要用怀疑的心态来看待它,这样才能发现问题,从而解决问题。
在这个过程中,锻炼了我的细心和耐性。通过本次实验充分体现了我们的团结,细心和耐性。
在课程设计过程中得到了麦山老师的精心指导,解决了课程设计中的很多疑难,再次对老师表示衷心的感谢!
三态门,是在一般的逻辑门输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路。在高阻态时,输入输出相互隔断,输出端处于悬空状态(高阻态),这里输出端电位取决于各它相连接的外电路。三态门都有一个EN控制使能端,来控制门电路的通断。因此利用三态门可心方便地将输出端连接到总线。
如果你的多个设备端口要挂在一个总线上, 必须通过三态缓冲器。因为在一个总线上同时只能有一个端口作输出, 这时其他端口必须在高阻态, 同时可以输入这个输出端口的数据. 所以你还需要有总线控制管理, 访问到哪个端口, 那个端口的三态缓冲器才可以转入输出状态. 这是典型的三态门应用, 如果在线上没有两个以上的输出设备, 当然用不到三态门, 而线或逻辑又另当别论了
秒计数器的代码:
MODULE SEC
TITLE 'SEC'
declarations
clock PIN 1;
cen PIN 2;
adj PIN 3; //校正
CE PIN 4;
co PIN 19 istype 'reg'; //进位 q6..q4 PIN 18..16 istype 'reg'; q3..q0 PIN 15..12 istype 'reg'; D1=[q6..q4];
D0=[q3..q0];
equations
D1.clk=clock;
D0.clk=clock;
WHEN CE THEN
{D1:=0;D0:=0;}
ELSE
{
WHEN !cen THEN
{
when !adj then
{
D1:=D1; D0:=D0; }
else
{
WHEN (D0==9) THEN {
D0:=0;
WHEN (D1==5) THEN {D1:=0;} ELSE D1:=D1+1;
}
ELSE
{D0:=D0+1; D1:=D1;}
}
}
ELSE
{
WHEN (D0==8)&(D1==5) THEN
{
co:=1;
}
WHEN (D0==9) THEN
{
D0:=0;
WHEN (D1==5) THEN {D1:=0;} ELSE D1:=D1+1;
}
ELSE
{ D0:=D0+1; D1:=D1; }
}
}
END
分计数器的代码:
MODULE min
TITLE 'min'
declarations
clock PIN 1;
cen PIN 2;
adj PIN 3;
q6..q4 PIN 18..16 istype 'reg';
q3..q0 PIN 15..12 istype 'reg'; co PIN 19 istype 'reg';
D1=[q6..q4];
D0=[q3..q0];
equations
D1.clk=clock;
D0.clk=clock;
WHEN !cen THEN
{
when !adj then
{
D1:=D1; D0:=D0;
}
else
{
WHEN (D0==9) THEN
{
D0:=0;
WHEN (D1==5) THEN {
co:=0;D1:=0;
}
ELSE D1:=D1+1;
}
ELSE
{
D0:=D0+1;
D1:=D1;
}
}
}
ELSE
when(adj # !adj)then
{
WHEN (D0==9) THEN
{
D0:=0;
WHEN (D1==5) THEN {
D1:=0;
co:=1;
}
ELSE D1:=D1+1;
}
ELSE
{ D0:=D0+1; D1:=D1; } }
END
时计数器的代码:
MODULE hou
TITLE 'hou'
declarations
clock PIN 1;
cen PIN 2;
adj PIN 3;
q6..q4 PIN 22..20 istype 'reg'; q3..q0 PIN 19..16 istype 'reg'; D1=[q6..q4];
D0=[q3..q0];
equations
D1.clk=clock;
D0.clk=clock;
WHEN !cen THEN
{
when !adj then
{
D1:=D1; D0:=D0;
}
else
{
when(D1==2)&(D0==3) then {
D1:=0;
D0:=0;
}
else
{
when(D0==9) then
{
D0:=0;
D1:=D1+1;
}
}
}
}
ELSE
{WHEN (adj # !adj) then{
WHEN (D1==2)&(D0==3) THEN {
D1:=0;
D0:=0;
}
ELSE
{
WHEN (D0==9) THEN
{
D0:=0;
D1:=D1+1;
}
ELSE
{
D0:=D0+1;
D1:=D1;
}
}
} }
END
分频器代码:
MODULE Cnt_98
TITLE 'mode 98 binary counter'
DECLARATIONS
clock PIN 1;
cen PIN 2;
co PIN 19;
q6..q0 PIN 18..12 ISTYPE 'REG'; D=[q6..q0];
EQUATIONS
D.clk=clock;
WHEN cen&(D==97) THEN D:=0;
ELSE D:=D+1;
co=cen&(D==97);
END