完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
--程序显示部分采用八个数码管; --rih,ril日历中天的高低位; --yueh,yuel日历中月的高低位; --nianh,nianl日历中年的高低位,年只设置后两位(如20**); --前面加a为相应缓冲器; --程序功能是在什么键不按时显示时间及星期(如13.06.26.-5); --按下time键设置闹钟,按下day显示日期 library IEEE; use IEEE.std_logic_1164.all; entity timer is port( clk : in std_logic; -- 250KHz naozhong: in std_logic;--闹钟停止键 L : out std_logic_vector(2 downto 0); --LED循环点亮 dled: out std_logic_vector(7 downto 0); -- LED day,time: in std_logic;--time控制闹钟,day控制日历 sound: out std_logic; clk_1: in std_logic;--设置键 clk_2: in std_logic;--加法键? clk_3: in std_logic);--减法键 end timer; architecture display of timer is signal rih,arih:integer range 0 to 3; signal ayueh,yueh: integer range 0 to 1; signal cnt: integer range 0 to 7; -- 8为LED循环 signal ct:integer range 0 to 250000 ; -- 产生1秒 signal hourH,ahourH,alarm_hourH: integer range 0 to 2; signal minuteH,secondH,aminuteH,asecondH,alarm_minuteH,alarm_secondH: integer range 0 to 7; signal anianl,anianh,ril,aril,ayuel,yuel,nianl,nianh, hourL,minuteL,secondL,ahourL,aminuteL,asecondL,alarm_hourL,alarm_minuteL,alarm_secondL: integer range 0 to 10; signal set : integer range 0 to 7; signal d,k,p: std_logic; signal aweek,week: integer range 0 to 6; begin process (clk) begin if clk'event and clk = '1' then sound<='1'; cnt<=cnt+1; ct<=ct+1; if ct=250000 then -- 1 秒 ct<=0; secondL<=secondL+1; end if; if secondL=10 then -- 10 秒 secondL<=0; secondH<=secondH+1; end if; if secondH=6 then -- 60 秒 secondH<=0; minuteL<=minuteL+1; end if; if minuteL=10 then -- 10 分钟 minuteL<=0; minuteH<=minuteH+1; end if; if minuteH=6 then -- 60 分钟 minuteH<=0; hourL<=hourL+1; end if; if hourL=10 then -- 10 小时 hourL<=0; hourH<=hourH+1; end if; if hourH=2 and hourL =4 then -- 24 hours hourH<=0; hourL<=0; end if; if hourh=0 and hourl=0 then week<=week +1; ril<=ril+1; end if; if ril=10 then ril<=0; rih<=rih+1; end if; if rih=3 then rih<=0; yuel<=yuel+1; end if; if yuel=10 then yuel<=0; yueh<=yueh+1; end if ; if yueh=1 and yuel=2 then yueh<=0; yuel<=0; nianl<=nianl+1; end if; if nianl=10 then nianl<=0; nianh<=nianh+1; end if; if nianh=10 then nianh<=0; nianl<=0; end if; if (time='0' or day='0') then ahourH<=hourH; ahourL<=hourL; aminuteH<=minuteH; aminuteL<=minuteL; asecondH<=secondH; asecondL<=secondL; aweek<=week; elsif (time='1')then ahourH<=alarm_hourH; ahourL<= alarm_hourL; aminuteH<= alarm_minuteH; aminuteL<= alarm_minuteL; asecondH<= alarm_secondH; asecondL<= alarm_secondL; aweek<=week; elsif (day='1') then anianh<=nianh; anianl<=nianl; ayueh<=yueh; ayuel<=yuel; arih<=rih; aril<=ril; end if; case cnt is -- 显示时间 when 0 => L<="000"; -- 从左开始第一个LED显示 if day='1' then dled<=x"DA"; --日历键按下显示2 else case ahourH is --日历键没有按下显示小时高位 when 0 => dled<=X"FC"; --0 when 1 => dled<=X"60"; --1 when 2 => dled<=X"DA"; --2 when others => null; end case; end if; when 1 => L<="001"; -- 第二个LED显示 if day='1' then dled<=X"FC"; --日历键按下显示0 else case ahourL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; end if; when 2 => L<="010"; --显示第三个LED if day='1' then case anianh is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; else case aminuteH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; end if; when 3 => L<="011"; -- 第四个LED显示 if day='1' then case anianl is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; else case aminuteL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; end if; when 4 => L<="100"; -- 第五个LED显示 if day='1'then case ayueh is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when others => null; end case; else case asecondH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; end if; when 5 => L<="101"; -- 第六个LED显示 if day='1' then case ayuel is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; else case asecondL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; end if; when 6 => L <="110"; --第七个LED if day='1' then case arih is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when others => null; end case; else dled<=X"01"; --显示'-' end if; when 7 => L <="111"; --显示第八个LED if day='1' then case aril is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; else case aweek is when 0 => dled<=X"E0";--7 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when others => null; end case; end if; end case ; d<=clk_1; k<=clk_2; p<=clk_3; if time='1' then if ( d='0' and clk_1='1')then --判断设置键是否按下 set<=set+1; end if; case set is when 1 => if(k='0' and clk_2='1')then --判断加键是否按下 alarm_hourH<= alarm_hourH+1; elsif( p='0' and clk_3='1')then --判断减键是否按下 alarm_hourH<= alarm_hourH-1; end if; when 2 => if(k='0' and clk_2='1')then alarm_hourL<= alarm_hourL+1; elsif( p='0' and clk_3='1')then alarm_hourL<= alarm_hourL-1; end if; when 3 => if(k='0' and clk_2='1')then alarm_minuteH<= alarm_minuteH +1; elsif( p='0' and clk_3='1')then alarm_minuteH<= alarm_minuteH -1; end if; when 4 => if( k='0' and clk_2='1')then alarm_minuteL<= alarm_minuteL+1; elsif( p='0' and clk_3='1')then alarm_minuteL<= alarm_minuteL-1; end if; when 5 => if(k='0' and clk_2='1')then alarm_secondH<= alarm_secondH +1; elsif(p='0' and clk_3='1')then alarm_secondH<=alarm_secondH-1; end if; when 6 => if( k='0' and clk_2='1')then alarm_secondL<= alarm_secondL +1; elsif( p='0' and clk_3='1')then alarm_secondL<= alarm_secondL-1; end if; when 7 => if( k='0' and clk_2='1')then aweek<=aweek+1; elsif( p='0' and clk_3='1')then aweek<=aweek-1; end if; when others => null; end case; end if; if time='0' or day='0' then if ( d='0' and clk_1='1')then --判断设置键是否按下 set<=set+1; end if; case set is when 1 => if(k='0' and clk_2='1')then hourH<=hourH+1; elsif( p='0' and clk_3='1')then hourH<= hourH-1; end if; when 2 => if( k='0' and clk_2='1')then hourL<= hourL+1; elsif( p='0' and clk_3='1')then hourL<= hourL-1; end if; when 3 => if(k='0' and clk_2='1')then minuteH<= minuteH +1; elsif( p='0' and clk_3='1')then minuteH<= minuteH -1; end if; when 4 => if( k='0' and clk_2='1')then minuteL<= minuteL+1; elsif( p='0' and clk_3='1')then minuteL<= minuteL-1; end if; when 5 => if(k='0' and clk_2='1')then secondH<= secondH +1; elsif(p='0' and clk_3='1')then secondH<= secondH-1; end if; when 6 => if( k='0' and clk_2='1')then secondL<= secondL +1; elsif( p='0' and clk_3='1')then secondL<= secondL-1; end if; when 7 =>if( k='0' and clk_2='1')then week <= week +1; elsif( p='0' and clk_3='1')then week <= week -1; end if; when others => null; end case; end if; if day ='1' then if ( d='0' and clk_1='1')then set<=set+1; end if; case set is when 1=> if(k='0' and clk_2='1')then nianh<=nianH+1; elsif( p='0' and clk_3='1')then nianH<= nianH-1; end if; when 2 => if( k='0' and clk_2='1')then nianL<= nianL+1; elsif( p='0' and clk_3='1')then nianL<= nianL-1; end if; when 3 => if(k='0' and clk_2='1')then yueH<= yueH +1; elsif( p='0' and clk_3='1')then yueH<= yueH -1; end if; when 4 => if( k='0' and clk_2='1')then yueL<= yueL+1; elsif( p='0' and clk_3='1')then yueL<=yueL-1; end if; when 5 => if(k='0' and clk_2='1')then riH<= riH +1; elsif(p='0' and clk_3='1')then riH<= riH-1; end if; when 6 => if( k='0' and clk_2='1')then riL<= riL +1; elsif( p='0' and clk_3='1')then riL<= riL-1; end if; when others=>null; end case; end if; if((hourH = alarm_hourH) and (hourL= alarm_hourL) and (minuteH = alarm_minuteH)and(minuteL=alarm_minuteL))or((minuteH=0)and(minuteL=0) )then sound<='1'; end if; if (secondH=1)or(naozh)then sound<='0'; end if ; end if; end process; end architecture display; |
|
相关推荐
3 个讨论
|
|
求FPGA 驱动控制ltc2271 或者 ltc2180 或者 ltc2190或者 ltc2202 的代码
1241 浏览 0 评论
399 浏览 0 评论
求助:遇见诡异问题,FPGA模块A输出端口连接模块B输入后,模块A不能正常工作的
1395 浏览 1 评论
456 浏览 0 评论
1345 浏览 1 评论
4235 浏览 94 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-14 14:18 , Processed in 0.541304 second(s), Total 38, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191