数字电子表.docx
- 文档编号:5613711
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:34
- 大小:706.59KB
数字电子表.docx
《数字电子表.docx》由会员分享,可在线阅读,更多相关《数字电子表.docx(34页珍藏版)》请在冰豆网上搜索。
数字电子表
EDA课程设计报告
学院:
电气学院
专业班级:
电科0802
姓名:
杨军
学号:
3080504042
设计流程图;
秒
电子时钟功能
1.计时功能:
可进行年、月、天、周、时、分、秒的计时,并显示。
2.时间预置功能:
可以随时重新设置电子钟的时间。
3.闹钟功能:
如果当前时间与设置的闹钟时间相同,则闹铃响。
4.闹钟时间和闹铃时间长短都可以自己设置。
功能介绍:
此电子时钟有7个输入,EN控制控制电子时钟暂停,CLR用来清零,CLK是时钟脉冲。
NUM和SHOUTIAO用来控制时间的预置,NUM按一下(按一下代表输入一个脉冲),开始设置年的千位,SHOUTIAO再按几下,年的千位就被设置为几;NUM再按一下,开始设置年的百位,SHOUTIAO再按几下,年的百位就被设置为几;NUM再按一下,开始设置年的十位,SHOUTIAO再按几下,年的十位就被设置为几;NUM再按一下,开始设置年的个位,SHOUTIAO再按几下,年的个位就被设置为几;NUM再按一下,开始设置月,SHOUTIAO再按几下,与就被设置为几;NUM再按一下开始设置天,SHOUTIAO再按几下,天就被设置为几;NUM再按一下,开始设置ZHOU,SHOUTIAO再按几下,ZHOU就被设置为几;NUM再按一下,开始设置小时,SHOUTIAO再按几下,时就被设置为几;NUM再按一下,开始设置分,SHOUTIAO再按几下,分就被设置为几;NUM再按一下,电子时间预置结束,处于正常计时状态。
NUM1和SHOUTIAO1是用来设置闹铃时间以及闹铃时间长短的。
NUM1按一下,开始设置闹铃的时,SHOUTIAO1再按几下,闹铃的时就被设置为几;NUM1再按一下,开始设置闹铃的分,SHOUTIAO1再按几下,闹铃的分就被设置为几;NUM1再按一下,开始设置闹铃时间的长短,SHOUTIAO1再按几下,闹铃的时间就被设置为几分钟;NUM1再按一下,闹铃预置结束。
一.模块及程序
1.秒模块(MIAO)
程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYMIAOIS
PORT(SHIWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--秒十位输出
EN,CLR,CLK:
INSTD_LOGIC;--使能、清零、计数脉冲
GEWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--秒个位输出
CO:
OUTSTD_LOGIC);--进位输出
ENDMIAO;
ARCHITECTUREBEHAVOFMIAOIS
SIGNALCOUT,COUT1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLR,CLK)
BEGIN
IF(CLR='1')THENCOUT<="0000";COUT1<="0000";
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(EN='1')THEN
IF(COUT="1001")THEN
IF(COUT1="0101")THENCOUT<="0000";COUT1<="0000";CO<='1';
ELSECOUT1<=COUT1+'1';COUT<="0000";CO<='0';
ENDIF;
ELSECOUT<=COUT+'1';CO<='0';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
GEWEI<=COUT;
SHIWEI<=COUT1;
ENDBEHAV;
仿真结果:
Clk为计时脉冲,SHIWEI代表秒的十位,GEWEI代表秒的个位。
CO代表进位。
此模块时一个60进制
2.分钟模块(FEN)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFENIS
PORT(SHIWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
EN,CLR,CLK:
INSTD_LOGIC;
GEWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CO:
OUTSTD_LOGIC);
ENDFEN;
ARCHITECTUREBEHAVOFFENIS
SIGNALCOUT,COUT1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLR,CLK)
BEGIN
IF(CLR='1')THENCOUT<="0000";COUT1<="0000";
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(EN='1')THEN
IF(COUT="1001")THEN
IF(COUT1="0101")THENCOUT<="0000";COUT1<="0000";CO<='1';
ELSECOUT1<=COUT1+'1';COUT<="0000";CO<='0';
ENDIF;
ELSECOUT<=COUT+'1';CO<='0';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
GEWEI<=COUT;
SHIWEI<=COUT1;
ENDBEHAV;
仿真结果:
Clk为计时脉冲,SHIWEI代表分的十位,GEWEI代表分的个位。
CO代表进位,此模块是一个60进制。
2.分钟模块(FEN)
3.小时模块(XIAOSHI)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYxiaoshiIS
PORT(SHIWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--小时十位输出
EN,CLR,CLK:
INSTD_LOGIC;--使能、清零、计数脉冲
GEWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--小时个位输出
CO:
OUTSTD_LOGIC);--进位输出
ENDxiaoshi;
ARCHITECTUREBEHAVOFxiaoshiIS
SIGNALCOUT,COUT1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLR,CLK,EN)
BEGIN
IF(CLR='1')THENCOUT<="0000";COUT1<="0000";
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(EN='1')THEN
IF(COUT1="0010")THEN
IF(COUT="0011")THENCOUT<="0000";COUT1<="0000";CO<='1';
ELSECOUT<=COUT+'1';CO<='0';
ENDIF;
ELSIF(COUT1="0000"ORCOUT1="0001")THEN
IF(COUT="1001")THENCOUT<="0000";COUT1<=COUT1+'1';CO<='0';
ELSECOUT<=COUT+'1';CO<='0';
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
GEWEI<=COUT;
SHIWEI<=COUT1;
ENDBEHAV;
仿真结果:
Clk为计时脉冲每一个脉冲,小时的个位(GEWEI)就加1,当小时的十位是2时,小时的个位加到3再来一个脉冲,GEWEI和SHIWEI就都清零,co变为高电平,否则当GEWEI加到9时,SHIWEI就加1,个位清零,co仍是低电平。
2.分钟模块(FEN)
5.周模块(ZHOU)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYzhouIS
PORT(EN,CLR,CLK:
INSTD_LOGIC;
ZHOU:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDZHOU;
ARCHITECTUREBEHAVOFZHOUIS
SIGNALCOUT:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLR,CLK,EN)
BEGIN
IF(CLR='1')THENCOUT<="0001";
ELSIF(RISING_EDGE(CLK))THEN
IF(EN='1')THEN
IF(COUT="1000")THENCOUT<="0001";
ELSIF(COUT="0110")THENCOUT<=COUT+"0010";
ELSECOUT<=COUT+"0001";
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ZHOU<=COUT;
ENDBEHAV;
仿真结果:
Clk为计数脉冲,每来一个脉冲周(ZHOU)就加1,如果ZHOU为6,则来一个脉冲后就变为8,如果ZHOU为8,则来一个脉冲后就变为1.(注:
8代表周日)
5.天模块(TIAN)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYTIANIS
PORT(NIANGE,NIANSHI,NIANBAI,NIANQIAN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
YUEGE,YUESHI:
INSTD_LOGIC_VECTOR(3DOWNTO0);
CLR,CLK:
INSTD_LOGIC;
CO:
OUTSTD_LOGIC;
SHIWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
GEWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDTIAN;
ARCHITECTUREBEHAVOFTIANIS
SIGNALA,B,C,D:
INTEGERRANGE0TO9;
SIGNALYEAR:
STD_LOGIC;
SIGNALGEWEI1:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSHIWEI1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
SHIWEI<=SHIWEI1;
GEWEI<=GEWEI1;
PROCESS(CLK,A,B,C,D)
VARIABLEQ,W:
INTEGERrange0to100:
=0;
VARIABLECOUT:
INTEGERrange0to100:
=0;
BEGIN
IF(A=0)AND(B=0)THEN
COUT:
=INTEGER(10*D+1*C);
Q:
=INTEGER(COUT/4);
W:
=INTEGER(4*Q);
IF(COUT=W)THEN
YEAR<='0';
ELSE
YEAR<='1';
ENDIF;
ELSE
COUT:
=INTEGER(10*B+1*A);
Q:
=INTEGER(COUT/4);
W:
=INTEGER(4*Q);
IF(COUT=W)THEN
YEAR<='0';
ELSE
YEAR<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK,YEAR)
BEGIN
IF(CLR='1')THENSHIWEI1<="0000";GEWEI1<="0001";CO<='0';
ELSIF(RISING_EDGE(CLK))THEN
IF((YUESHI="0000")AND(YUEGE="0010"))THEN
IF(YEAR='0')THEN
IF(SHIWEI1="0010")THEN
IF(GEWEI1="1001")THEN
SHIWEI1<="0000";GEWEI1<="0001";CO<='1';
ELSEGEWEI1<=GEWEI1+'1';CO<='0';
ENDIF;
ELSIF((SHIWEI1="0000")OR(SHIWEI1="0001"))THEN
IF(GEWEI1="1001")THENGEWEI1<="0000";SHIWEI1<=SHIWEI1+'1';CO<='0';
ELSEGEWEI1<=GEWEI1+'1';CO<='0';
ENDIF;
ENDIF;
ELSIF(YEAR='1')THEN
IF(SHIWEI1="0010")THEN
IF(GEWEI1="1000")THEN
SHIWEI1<="0000";GEWEI1<="0001";CO<='1';
ELSEGEWEI1<=GEWEI1+'1';CO<='0';
ENDIF;
ELSIF((SHIWEI1="0000")OR(SHIWEI1="0001"))THEN
IF(GEWEI1="1001")THENGEWEI1<="0000";SHIWEI1<=SHIWEI1+'1';CO<='0';
ELSEGEWEI1<=GEWEI1+'1';CO<='0';
ENDIF;
ENDIF;
ENDIF;
ELSIF(((YUESHI="0000")AND(YUEGE="0100"))OR((YUESHI="0000")AND(YUEGE="0110"))OR((YUESHI="0000")AND(YUEGE="1001"))OR((YUESHI="0001")AND(YUEGE="0001")))THEN
IF(SHIWEI1="0011")THENSHIWEI1<="0000";GEWEI1<="0001";CO<='1';
ELSIF((SHIWEI1="0000")OR(SHIWEI1="0001")OR(SHIWEI1="0010"))THEN
IF(GEWEI1="1001")THENGEWEI1<="0000";SHIWEI1<=SHIWEI1+'1';CO<='0';
ELSEGEWEI1<=GEWEI1+'1';CO<='0';
ENDIF;
ENDIF;
ELSE
IF(SHIWEI1="0011")THEN
IF(GEWEI1="0001")THEN
SHIWEI1<="0000";GEWEI1<="0001";CO<='1';
ELSEGEWEI1<=GEWEI1+'1';CO<='0';
ENDIF;
ELSIF((SHIWEI1="0000")OR(SHIWEI1="0001")OR(SHIWEI1="0010"))THEN
IF(GEWEI1="1001")THENGEWEI1<="0000";SHIWEI1<=SHIWEI1+'1';CO<='0';
ELSEGEWEI1<=GEWEI1+'1';CO<='0';
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
WITHNIANGESELECT
A<=1WHEN"0001",
2WHEN"0010",
3WHEN"0011",
4WHEN"0100",
5WHEN"0101",
6WHEN"0110",
7WHEN"0111",
8WHEN"1000",
9WHEN"1001",
0WHENOTHERS;
WITHNIANSHISELECT
B<=1WHEN"0001",
2WHEN"0010",
3WHEN"0011",
4WHEN"0100",
5WHEN"0101",
6WHEN"0110",
7WHEN"0111",
8WHEN"1000",
9WHEN"1001",
0WHENOTHERS;
WITHNIANBAISELECT
C<=1WHEN"0001",
2WHEN"0010",
3WHEN"0011",
4WHEN"0100",
5WHEN"0101",
6WHEN"0110",
7WHEN"0111",
8WHEN"1000",
9WHEN"1001",
0WHENOTHERS;
WITHNIANQIANSELECT
D<=1WHEN"0001",
2WHEN"0010",
3WHEN"0011",
4WHEN"0100",
5WHEN"0101",
6WHEN"0110",
7WHEN"0111",
8WHEN"1000",
9WHEN"1001",
0WHENOTHERS;
ENDBEHAV;
仿真结果:
闰年2月
平年2月
1月大
4月小
年的千位、百位、十位、个位(NIANQIAN,NIANBAI,NIANSHI,NIANGE)是用来判断闰年还是平年的,月的十位、个位(YUESHI,YUEGE)是用来判断哪一个月的。
如图所示举了4个例子,第一个是闰年的2月,为29天。
第二个是平年的2月,为28天。
第三个是1月大,为31天,第四个为4月小,为30天。
6.月模块(YUE)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYUEIS
PORT(SHIWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
EN,CLR,CLK:
INSTD_LOGIC;
GEWEI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
co:
OUTSTD_LOGIC);
ENDYUE;
ARCHITECTUREBEHAVOFYUEIS
SIGNALCOUT,COUT1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLR,CLK)
BEGIN
IF(CLR='1')THENCOUT<="0000";COUT1<="0001";CO<='0';
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(EN='1')THEN
IF(COUT1="0001")THEN
IF(COUT="0010")THENCOUT<="0001";COUT1<="0000";CO<='1';
ELSECOUT<=COUT+'1';CO<='0';
ENDIF;
ELSIF(COUT1="0000")THEN
IF(COUT="1001")THENCOUT<="0000";COUT1<=COUT1+'1';CO<='0';
ELSECOUT<=COUT+'1';CO<='0';
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
GEWEI<=COUT;
SHIWEI<=COUT1;
ENDBEHAV;
仿真结果:
Clk为计数脉冲,每来一个脉冲,月的个位(GEWEI)就加1,如果月的十位(SHIWEI)为1,GEWEI加到2时,再来一个脉冲,GEWEI就变为1,SHIWEI变为0.否则GEWEI加到9后,再来一个脉冲,SHIWEI就加1,GEWEI变为0.
7.年模块()
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYNIANIS
PORT(CLR:
INSTD_LOGIC;
EN,CLK:
INSTD_LOGIC;--始能端和计数脉冲
CO:
OUTSTD_LOGIC;--年输出
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));--进位
ENDNIAN;
ARCHITECTUREBEHAVOFNIANIS
SIGNALCOUT:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLR,CLK)
BEGIN
IF(CLR='1')THEN
COUT<="0000";CO<='0';
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(EN='1')THEN
IF(COUT="1001")THENCOUT<="0000";CO<='1';
ELSECO<='0';COUT<=COUT+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
Q<=COUT;
ENDBEHAV;
仿真结果:
Clk为计数脉冲,每来一个脉冲Q就加1,当Q加到9后再来一个脉冲,Q就变为0.
年的千位、百位、十位、个位都是这个程序和这个仿真结果。
8.电子时钟时间预置的控制模块(YUZHI)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYUZHIIS
PORT(NUM:
INSTD_LOGIC;
SHOUTIAO:
INSTD_LOGIC;
EN00,EN0,EN1,EN2,EN3,EN4,EN5,EN6,EN7,EN8:
OUTSTD_LOGIC;
CO:
OUTSTD_LOGIC
);
ENDYUZHI;
ARCHITECTUREBEHAVOFYUZHIIS
SIGNALCOUT:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(NUM)
BEGIN
IF(RISING_EDGE(NUM))THEN
IF(COUT="1001")THENCOUT<="0000";
ELS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电子表