资源描述
《数字逻辑》
课程设计报告
设计题目:数字电子钟
组员:李堪普、翁现平、郑维坛、叶俏梦
指导老师:麦山
日期:2013/07/01
实习题目
指导教师
职 称
学生姓名
学 号
日 期
摘要 数字电子钟是一种用数字显示秒、分、时的计时装置,本次数字时钟电路设计采用GAL系列芯片来分别实现时、分、秒的24进制和60进制的循环电路,并支持手动校正的功能。
关键词 数字电子钟;计数器;GAL
1设计任务及其工作原理
用集成电路设计一台能自动显示时、分、秒的数字电子钟,只要将开关置于手动位置,可分别对秒、分、时进行手动脉冲输入调整或连续脉冲输入的校正。
1.1工作原理
本数字电子钟的设计是根据时、分、秒各个部分的的功能的不同,分别用GAL16V8D设计成六十进制计数器和用GAL22V10。秒的个位,设计成十进制计数器,十位设计成六进制进制计数器(计数从00到59时清零并向前进位)。分部分的设计与秒部分的设计完全相同;时的个位,设计成二进制计数器,十位设计为四进制计数器,当时钟计数到23时59分59秒时,使计数器的小时部分清零,进而实现整体循环计时的功能。
2电路的组成
2.1 计数器部分:利用GAL16V8D和GAL22V10芯片分别组成二十四进制计数器和六十进制计数器,它们采用同步连接,利用外接标准脉冲信号进行计数。
2.2 显示部分:将三片GAL芯片对应的引脚分别接到实验箱上的七段共阴数码显示管上,根据脉冲的个数显示时间。
3.3 分频器:由于实验箱上提供的时钟脉冲的时间间隔太小,所以使用GAL16V8D和GAL22V10芯片设计一个分频器,使连续输出脉冲信号时间间隔为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和GAL22V10来构建。
图3 分频器设计图
6电路总体说明:
正常显示:
在外接分频器的作用下,将开关1打开,秒加法计数器开始记数,通过七段数码显示管显示秒的数字。当经过60个脉冲信号后,秒计数器完成一次循环。当秒计数器的由59变为00时,co由低电平跳到高电平,致使分加法计数器的cen使能端有效,分加法计数器加一,完成秒向分的进位。分进时和秒进分的原理一样。
手动校正:
原理如下表:
cen adj 状态
1 X 计数
0 0 保持
0 1 校正(不进位)
电路图总体设计如图3所示:
7设计所用器材
序号
作用
器材
件数
1
六十进制计数器
GAL16V8D、GAL22V10
3片
2
分频器
GAL16V8D、GAL22V10
2片
3
导线
若干
8小结
在实验室泡了一个星期,我们小组终于把电子时钟弄出来了,期间遇到了很多问题,但是在我们的努力和老师的指导下都一一攻克了。其中有一个问题我们弄了两三天都没头绪,那就是电子时钟接上单脉冲时,秒进分没问题,但分进时就出现这样的问题:分在0到59的某个期间就向时进位,而且当接分频器时,秒进分,分进时都乱了。一开始我们都觉得代码没问题,应该是实验箱、芯片、导线等硬件问题,后来我们大胆地把异步计数改为同步计数就解决了这个问题。通过现象,让我们学到,考虑问题要周全,即使是一开始认为对的东西,也要用怀疑的心态来看待它,这样才能发现问题,从而解决问题。
计算机系的同学相对偏软件,硬件的东西我们很少接触,所以很多同学很不喜欢数字逻辑这门课。做完这个电子时钟,我们发现自己有点爱上硬件设计了,小时候买的电子表,今天我们却能亲手弄出来,太兴奋了。兴奋的同时,我们初步掌握了abel-hdl语言以及ispEXPERT的使用以及对GAL系列芯片的设计方法有进一步的了解。在这里,我们想说,困难像弹簧,看你强不强,你强它就弱,你弱它就强。
注:电子时钟芯片设计代码见附录一
附录一
秒计数器的代码:
MODULE sec
TITLE 'sec'
declarations
clock PIN 1;
cen PIN 2;
adj PIN 3; //校正
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 !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==9) THEN
{
D0:=0;
WHEN (D1==5) THEN {co:=1;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
分频器代码:
GAL 22V10:
MODULE Cnt10
TITLE '10 bit binary counter'
DECLARATIONS
clock PIN 1;
cen PIN 2;
co PIN 23;
q8..q0 PIN 22..14 ISTYPE 'REG';
D=[q8..q0];
EQUATIONS
D.clk=clock;
WHEN cen THEN D:=D+1;
ELSE D:=D;
co=cen&(D==511);
END
GAL 16V8D:
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
14
展开阅读全文