基于fpga的vhdl编写的电子时钟内容摘要:

end if。 end if。 disp=’1’。 elsif stop=’1’ and ok=’1’then down counting if a_sec=0 then if a_min=0 then if a_hour=0 then index=’1’。 disp=’0’。 else a_hour=a_hour 1。 a_min=59。 a_sec=59。 end if。 else a_min=a_min 1。 a_sec=59。 end if。 else a_sec=a_sec 1。 index=’0’。 disp=’1’。 end if。 else disp=’0’。 end if。 end if。 end process。 stop_sec=a_sec。 stop_min=a_min。 stop_hour=a_hour。 end arch。 在1Hz的触发信号下,若拨动开关stop=’1’,且按住调秒键sec_tune不放,则计时器定时一直到切换拨动开关ok=’1’时,定时10秒钟,接着自动计时到0,再送出index=’1’的指针信号。 信号仿真结果如图46所示。 图4-6 i60bcd组件 为了计算方便,前面都以整数形式来处理时间,但在一般电路中,数值均以二进制的形式存储,所以需要设计一个查表程序来将秒数或分数的0~59共60个整数转换成二进制编码的十进制(BCD)表示法,以便将来转换成七段显示器格式输出。 i60bcd组件程序代码 the ieee standard 1164 package, declares std_logic, rising_edge(), etc. library ieee。 use。 use。 use。 entity i60bcd is port (interg : in integer range 0 to 59。 interger number ten : out std_logic_vector (3 downto 0)。 decimal bit one : out std_logic_vector (3 downto 0) )。 ndividual bit end i60bcd。 architecture arch of i60bcd is begin process(interg) begin case interg is when 0|10|20|30|40|50 = one=0000。 when 1|11|21|31|41|51 = one=0001。 when 2|12|22|32|42|52 = one=0010。 when 3|13|23|33|43|53 = one=0011。 when 4|14|24|34|44|54 = one=0100。 when 5|15|25|35|45|55 = one=0101。 when 6|16|26|36|46|56 = one=0110。 when 7|17|27|37|47|57 = one=0111。 when 8|18|28|38|48|58 = one=1000。 when 9|19|29|39|49|59 = one=1001。 when others = one=1110。 end case。 case interg is when 0|1|2|3|4|5|6|7|8|9 = ten=0000。 when 10|11|12|13|14|15|16|17|18|19 = ten=0001。 when 20|21|22|23|24|25|26|27|28|29 = ten=0010。 when 30|31|32|33|34|35|36|37|38|39 = ten=0011。 when 40|41|42|43|44|45|46|47|48|49 = ten=0100。 when 50|51|52|53|54|55|56|57|58|59 = ten=0101。 when others = ten=1110。 end case。 end process。 end arch。 信号仿真结果如图47所示。 由图47可知,当输入整数在0~59的范围时,个位数与十位数的值均正确;而超出范围时,个位数与十位数的值则显示“E”以警告错误。 图4-7 i24bcd组件 同理,设计一个查表程序来将小时数0~23共24个整数转换成二进制编码的十进制(BCD)表示,以便将来转换成七段显示器格式输出。 组件的程序代码。 i24bcd组件程序代码 the ieee standard 1164 package, declares std_logic, rising_edge(), etc. library ieee。 use。 use。 use。 entity i24bcd is port (interg : in integer range 0 to 23。 interger number ten : out std_logic_vector (3 downto 0)。 decimal bit one : out std_logic_vector (3 downto 0) )。 individual bit end i24bcd。 architecture arch of i24bcd is begin process(interg) begin case interg is when 0|10|20 = one=0000。 when 1|11|21 = one=0001。 when 2|12|22 = one=0010。 when 3|13|23 = one=0011。 when 4|14 = one=0100。 when 5|15 = one=0101。 when 6|16 = one=0110。 when 7|17 = one=0111。 when 8|18 = one=1000。 when 9|19 = one=1001。 when others = one=1110。 end case。 case interg is when 0|1|2|3|4|5|6|7|8|9 = ten=0000。 when 10|11|12|13|14|15|16|17|18|19 = ten=0001。 when 20|21|22|23 = ten=0010。 when others = ten=1110。 end case。 end process。 end arch。 信号仿真结果如图48所示。 由图48可知,当输入整数在0~23的范围时,个位数与十位数的值均正确;而超出范围时,个位数与十位数的值则显示“E”以警告错误。 图4-8 bin2led组件 在一般电路中,数值均以二进制的形式存储与计算,但是要将其输出至七段显示器显示时,则必须提供一个电路模块专门将二进制转换成十进制供输出使用。 此处我们以查表方式来设计转换电路,使用并行语句with_select列出0~9等10种对照数值状况。 若为10及其以上的数字,则显示错误信息“E”。 组件的程序代码。 bin2led 组件程序代码library ieee。 use。 use。 use。 entity bin2led is port (bin : in std_logic_vector (3 downto 0)。 internal binary number led : out std_logic_vector (6 downto 0) )。 7_segments led display end bin2led。 architecture arch of bin2led is begin segment encoding 0 5 | | 1 6 4 | | 2 3 anode_mon 7_segment led with bin select led=1111001 when 0001,1 0100100 when 0010,2 0110000 when 0011,3 0011001 when 0100,4 0010010 when 0101,5 0000010 when 0110,6 1111000 when 0111,7 0000000 when 1000,8 0010000 when 1001,9 1000000 when 0000,0 0000110 when others。 e for error display end arch。 信号仿真结果如图49所示。 七段显示器可显示0~9共10个数字,其他数字则显示“E”,表示输出错误。 图4-9 七段显示器扫描输出电路模块(display) 为了节省6个七段显示器显示所需的电流消耗,我们将利用视觉暂留原理来让七段显示器轮流显示。 市面上卖的4个串联在一起的四合一七段显示器组,有7个端口a,b,c,d,e,f,g,另外4个电源引脚分别决定哪一个七段显示器亮,另一只引脚接Vcc。 因此将分与秒4个数字共享一组七段显示器组,其中必须使用同步扫描电路,将各个数字的7个信号分别接至 a,b,c,d,e,f,g端口,同时触发该数字所对应的七段显示器的电源引脚。 视觉暂留原理要求每一数字在1s内必须亮32次。 换句话说,在(1/32)s内,4个数字要轮流亮一次,故每一个数字最多可连续亮(1/128)s,然后等待(3/128)s后再亮一次,因此节省了3/4的电能消耗。 视觉暂留效应让我们感觉到,相隔(1/32)s亮一次的灯似乎一直都亮着。 同理,显示小时的2个数字,仍然使用四合一七段显示器组。 只是放弃其中的2个七段显示器不用即可。 列出scan4组件的程序代码。 scan4组件程序代码 the ieee standard 1164 package, declares std_logic, rising_edge(), etc. library ieee。 use。 use。 use。 entity scan4 is port (rst,clk : in std_logic。 a,b,c,d: in st。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。