黄绾
设计思路~电子课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。 在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒时器,交通信号灯、红绿灯、行人灯、交通纤毫控制机、还可以用来做为各种药丸,药片,胶囊在指定时间提醒用药等等,由此可见计时器在现代社会是何其重要的。 一、设计任务(数字钟的功能): 1.具有时、分、秒、计数显示功能,以24小时循环计时; 2.具有清零,调节小时、分钟功能; 3.具有整点报时功能,整点报时的同时LED灯花样显示。 扩展部分:在基础功能上添加以下几个功能:秒表,倒计时和闹钟。 目的是:掌握多位计数器相连的设计方法;掌握十进制,六进制,二十四进制计数器的设计方法;继续巩固多位共用级扫描显示数码管的驱动及编码;掌握扬声器的驱动;LED灯的花样显示;掌握EPLD技术的层次化设计方法。 而且需要以下硬件条件:1,主芯片 EPF10K10LC84-4; 2 ,8个 LED灯; 3,扬声器; 4,8位八段扫描共阴极数码显示管; 5,三个按键开关(清零,调小时,调分钟) 二、实现方案: 把整个实验分成如下电路模块: 1.时钟计数: 秒——60进制BCD码计数: 分——60进制BCD码计数: 时——24进制BCD码计数: 模块说明: 各种进制的计数及时钟控制模块( 10进制、 6进制、 24进制); 同时获个计数器有清零,调分,调时功能。在接近整数时间能提供报时信号。 2.具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。 3.具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间当重新接通电源或走时出现误差时都需要对时间进行校正。通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可。 4.计时过程具有报时功能,当时间到达整点前10秒进行蜂鸣报时 5.LED灯按个人爱好在整点时有花样显示信号产生。 三、实现设计过程:. 秒个位计数单元为10进制计数器,无需进制转换,我们采用的是VHDL语言编程实现的. 秒十位计数单元为6进制计数器,需要进制转换。将10进制计数器的程序稍微修改为6进制计数器 分个位和分十位计数单元电路结构分别与秒个位和秒十位计数单元完全相同,只不过分个位计数单元的Q3作为向上的进位信号应与分十位计数单元的CPA相连,分十位计数单元的Q2作为向上的进位信号应与时个位计数单元的CPA相连。 时个位计数单元电路结构仍与秒或个位计数单元相同,但是要求,整个时计数单元应为24进制计数器,不是10的整数倍,因此需将个位和十位计数单元合并为一个整体才能进行 24进制转换. 1、十进制BCD码计数器 library ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all; ENTITY c6 IS port(clk,clr : in std_logic; q : out std_logic_vector(2 downto 0)); end c6; architecture one of c6 is signal count :std_logic_vector(2 downto 0); begin process(clk,clr) begin if clr='1' then count<="000"; elsif clk'event and clk='1' then if count="1001" then count<="000"; else count<=count+1; end if;--for count end if; --for clr end process; q<=count; end ; 2、二十四进BCD制码计数器: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTITY count IS port( clk,clr,count_en : in std_logic; dout1,dout2 : out std_logic_vector(3 downto 0); car:out std_logic);=count2+'1'; end if; if count2="0010"and count1="0011" then count2<="0000";car<='1'; else car<='0'; end if; end if; end if; end process; dout1<=count1;dout2<=count2 ; end; 3、六十进制计数器: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_UNSIGNED.all; entity c60 is port(clk,clr,count_en:in std_logic; dout1,dout2:out std_logic_vector(3 downto 0); car:out std_logic); end c60; count1<="0000";count2<="0000"; elsif clk'event and clk='1' then if count_en='0' then count1<=count1+'1'; if count1 ="1001" then count1<="0000";count2<=count2+1; end if ; if count2 ="0101" and count1 ="1001" then count2<="0000";car<='1'; else car<='0'; end if ; end if ; end if ; end process; dout1<=count1;dout2<=count2; end ; 4、实现报时器功能的程序: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_UNSIGNED.all; entity bijiaoqi is port(minu1,minu2,hour1,hour2,fen0,fen1,shi0,shi1:in std_logic_vector(3 downto 0); baoshi:out std_logic); end ; architecture rtl of bijiaoqi is begin process(minu1,minu2,hour1,hour2,fen0,fen1,shi0,shi1) begin if hour1=shi0 and hour2=shi1 and minu1=fen0 and minu2=fen1 then baoshi<='1'; else baoshi<='0'; end if; end process; end; 6、实现定时功能的程序: library ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTITY dingshi IS PORT (hour,SET: IN STD_LOGIC; hour0,hour1 : out std_logic_vector(3 downto 0)); END dingshi; architecture rtl of dingshi is signal n:std_logic; signal count3,count4 :std_logic_vector(3 downto 0); begin process(set,hour,n) begin n<=hour and set; if n' EVENT AND n='1' THEN if count4>="0010" and count3="0011" then count4<="0000";count3<="0000"; else count3<=count3+1; if count3="1001" then count4<=count4+1; count3<="0000"; end if; end if; end if; end process; hour0<=count3;hour1<=count4; end;