数字电子表Word格式.docx
《数字电子表Word格式.docx》由会员分享,可在线阅读,更多相关《数字电子表Word格式.docx(34页珍藏版)》请在冰豆网上搜索。
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:
--秒个位输出
CO:
OUTSTD_LOGIC);
--进位输出
ENDMIAO;
ARCHITECTUREBEHAVOFMIAOIS
SIGNALCOUT,COUT1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLR,CLK)
IF(CLR='
1'
)THENCOUT<
="
0000"
;
COUT1<
ELSIF(CLK'
EVENTANDCLK='
)THEN
IF(EN='
IF(COUT="
1001"
)THEN
IF(COUT1="
0101"
CO<
='
ELSECOUT1<
=COUT1+'
COUT<
0'
ENDIF;
ELSECOUT<
=COUT+'
ENDIF;
ENDPROCESS;
GEWEI<
=COUT;
SHIWEI<
=COUT1;
ENDBEHAV;
仿真结果:
Clk为计时脉冲,SHIWEI代表秒的十位,GEWEI代表秒的个位。
CO代表进位。
此模块时一个60进制
2.分钟模块(FEN)
ENTITYFENIS
ENDFEN;
ARCHITECTUREBEHAVOFFENIS
Clk为计时脉冲,SHIWEI代表分的十位,GEWEI代表分的个位。
CO代表进位,此模块是一个60进制。
3.小时模块(XIAOSHI)
ENTITYxiaoshiIS
--小时十位输出
--小时个位输出
ENDxiaoshi;
ARCHITECTUREBEHAVOFxiaoshiIS
PROCESS(CLR,CLK,EN)
0010"
0011"
ELSIF(COUT1="
ORCOUT1="
0001"
Clk为计时脉冲每一个脉冲,小时的个位(GEWEI)就加1,当小时的十位是2时,小时的个位加到3再来一个脉冲,GEWEI和SHIWEI就都清零,co变为高电平,否则当GEWEI加到9时,SHIWEI就加1,个位清零,co仍是低电平。
5.周模块(ZHOU)
ENTITYzhouIS
PORT(EN,CLR,CLK:
ZHOU:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDZHOU;
ARCHITECTUREBEHAVOFZHOUIS
SIGNALCOUT:
ELSIF(RISING_EDGE(CLK))THEN
1000"
ELSIF(COUT="
0110"
=COUT+"
ZHOU<
Clk为计数脉冲,每来一个脉冲周(ZHOU)就加1,如果ZHOU为6,则来一个脉冲后就变为8,如果ZHOU为8,则来一个脉冲后就变为1.(注:
8代表周日)
5.天模块(TIAN)
ENTITYTIANIS
PORT(NIANGE,NIANSHI,NIANBAI,NIANQIAN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
YUEGE,YUESHI:
CLR,CLK:
OUTSTD_LOGIC;
SHIWEI:
ENDTIAN;
ARCHITECTUREBEHAVOFTIANIS
SIGNALA,B,C,D:
INTEGERRANGE0TO9;
SIGNALYEAR:
STD_LOGIC;
SIGNALGEWEI1:
SIGNALSHIWEI1:
=SHIWEI1;
=GEWEI1;
PROCESS(CLK,A,B,C,D)
VARIABLEQ,W:
INTEGERrange0to100:
=0;
VARIABLECOUT:
=0;
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<
='
ELSE
ENDIF;
ELSE
=INTEGER(10*B+1*A);
IF(COUT=W)THEN
ENDPROCESS;
PROCESS(CLK,YEAR)
)THENSHIWEI1<
GEWEI1<
ELSIF(RISING_EDGE(CLK))THEN
IF((YUESHI="
)AND(YUEGE="
))THEN
IF(YEAR='
IF(SHIWEI1="
IF(GEWEI1="
SHIWEI1<
ELSEGEWEI1<
=GEWEI1+'
ELSIF((SHIWEI1="
)OR(SHIWEI1="
))THEN
)THENGEWEI1<
SHIWEI1<
=SHIWEI1+'
ELSIF(YEAR='
ELSIF(((YUESHI="
0100"
))OR((YUESHI="
)))THEN
IF(SHIWEI1="
)OR(SHIWEI1="
ELSE
SHIWEI1<
WITHNIANGESELECT
A<
=1WHEN"
2WHEN"
3WHEN"
4WHEN"
5WHEN"
6WHEN"
7WHEN"
0111"
8WHEN"
9WHEN"
0WHENOTHERS;
WITHNIANSHISELECT
B<
WITHNIANBAISELECT
C<
WITHNIANQIANSELECT
D<
闰年2月
平年2月
1月大
4月小
年的千位、百位、十位、个位(NIANQIAN,NIANBAI,NIANSHI,NIANGE)是用来判断闰年还是平年的,月的十位、个位(YUESHI,YUEGE)是用来判断哪一个月的。
如图所示举了4个例子,第一个是闰年的2月,为29天。
第二个是平年的2月,为28天。
第三个是1月大,为31天,第四个为4月小,为30天。
6.月模块(YUE)
ENTITYYUEIS
co:
ENDYUE;
ARCHITECTUREBEHAVOFYUEIS
Clk为计数脉冲,每来一个脉冲,月的个位(GEWEI)就加1,如果月的十位(SHIWEI)为1,GEWEI加到2时,再来一个脉冲,GEWEI就变为1,SHIWEI变为0.否则GEWEI加到9后,再来一个脉冲,SHIWEI就加1,GEWEI变为0.
7.年模块()
ENTITYNIANIS
PORT(CLR:
EN,CLK:
--始能端和计数脉冲
--年输出
Q:
--进位
ENDNIAN;
ARCHITECTUREBEHAVOFNIANIS
BEGIN
PROCESS(CLR,CLK)
BEGIN
ELSECO<
Q<
Clk为计数脉冲,每来一个脉冲Q就加1,当Q加到9后再来一个脉冲,Q就变为0.
年的千位、百位、十位、个位都是这个程序和这个仿真结果。
8.电子时钟时间预置的控制模块(YUZHI)
ENTITYYUZHIIS
PORT(NUM:
SHOUTIAO:
EN00,EN0,EN1,EN2,EN3,EN4,EN5,EN6,EN7,EN8:
OUTSTD_LOGIC
);
ENDYUZHI;
ARCHITECTUREBEHAVOFYUZHIIS
PROCESS(NUM)
IF(RISING_EDGE(NUM))THEN
ELS