欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

三分钟可编程倒计时报警器课程设计

  • 资源ID:32862380       资源大小:3.33MB        全文页数:24页
  • 资源格式: DOC        下载积分:15积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要15积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

三分钟可编程倒计时报警器课程设计

电子课程设计 -三分钟可编程倒计时报警器 目 录一、设计任务与要求 2二、总体框图 2三、选择器件 3四、功能模块41.预置数模块42.倒计时模块52.1 个位模块 52.2 十位模块 72.3 百位模块 93.报警模块 104.数码显示模块134.1分频器模块134.2数码管选择控制模块144.3 3_8译码器模块 164.4 数码管段选模块17 五、总体设计电路图 19六、心得与总结 22三分钟可编程倒计时报警器一、 设计任务与要求设计任务:三分钟可编程倒计时报警器设计要求:1.具有可编程及报时的功能,并能够随时显示计数结果。 2.设有外部操作开关,控制计数器实现直接置数、启动和清零等操作。 3.计数器可设置为03分钟(即180秒)内任意时段的倒计时。 4.计数器递减计数到零时,数码显示管不能灭灯,同时发出持续发光报警信号。二、 总体框图倒计时预置数数码显示报警预置数模块:在开启相应开关(setgw、setsw、setbw)后,通过来脉冲计数分别给个位十位百位预置数,使得在启动开关后从此数开始倒计时。倒计时模块:在启动开关(clk)后,从预置的数开始倒计时,倒计到0时,倒计时结束,此时数码显示管持续不灭灯。另外,可在任意时刻通过控制摁钮实现清零。报警模块:每倒计到整十秒时,发出一次报警。同时,当倒计时结束时会再次发出报警声,以及报警灯亮起。此时,可通过开关(shutalert)关闭报警灯,报警声,以停止报警。数码显示模块:通过对输入信息的判断,选择在哪个数码管上显示哪个图形符号(即数字)。倒计时模块 数码显示模块个位十位百位数码管 选择控制38译码器数码管段选分频器 报警模块 每10秒报时一次计时结束报警方案一:预置数部分,可以借助Quartus II提供的芯片(如:74LS192,74LS190,74LS160等)完成计数功能。倒计时部分,可以借助Quartus II提供的芯片(如:74LS192等)完成有借位的减法运算。但操作较为繁琐,涉及到的元器件较多,涉及到的问题可能会有芯片是否有所损坏使得设计结果不够理想。 方案二:完全用VHDL语言编写程序下指令,实验数据较为准确,设计结果较为理想,但思考量较大,思维过于复杂。方案三:将完整的原理图按照功能需求分成几个不同模块,将各个部分在绘制原理图或者用VHDL语言编写程序后进行编译制成可供使用的模块,再借助各个模块绘制总的原理图。这样,总原理图清晰明了,各个模块的功能清晰,且设计结果较为理想。故选择此方案。三、选择器件EDA实验箱所使用到的芯片为Altera公司的Cyclone系列FPGA芯片EP1C12Q240C8N。外围接口电路为IO5与蜂鸣器接口相连,IO3与IO_CLK相连,IO9与一个红色发光二极管相连。LED灯处于高电平,所以给低电平LED灯亮;数码管共阴,给高电平数码管亮;数码管段选为低电平有效。实验板上的按键常处于高电平,按下为低电平。四、功能模块1.预置数模块。当遇到上升沿后输出将自动加1。若输出是9再遇到上升沿时将自动变为0。符号如右图。 相应程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count is port( clk:in std_logic; co:out std_logic_vector(3 downto 0);end entity count;architecture fun of count is signal count:std_logic_vector(3 downto 0);begin co<=count; process(clk) begin if(clkevent and clk=1)then if(count="1001")then count<="0000" else count<=count+1; end if; end if; end process;end fun;其功能仿真图像为: 根据图像可知,在每次遇到上升沿后输出将自动加1。若输出是9再遇到上升沿时将自动变为0。2.倒计时模块。此模块由个位、十位、百位三部分组成。2.1 个位模块:时钟信号与个位模块相连,当时钟信号给出上升沿时,个位将实现减1的功能,即每次遇到上升沿都将减1,同时借位输出端为低电平,若个位为0时,在遇到上升沿后将自动变为9,同时借位输出端为高电平。在个位、十位、百位均为0时,无论是否有时钟信号都不再进行减法运算。当个位置数端拨向高电平时,预置数中的数将给个位置数。另外,当摁下清零键时,个位将自动清零。其符号如右图。相应程序为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity gww is port( clk,reset,setgw:in std_logic; cogw:in std_logic_vector(3 downto 0); fsw,fgw,fbw:in std_logic_vector(3 downto 0); ensw:out std_logic; daout:out std_logic_vector(3 downto 0); lout:out std_logic);end entity gww;architecture fun of gww is signal count:std_logic_vector(3 downto 0); begin daout<=count; process(clk,reset,setgw,cogw,fgw,fsw,fbw) begin -ensw<=k; if(reset=1)then count<="0000" elsif(setgw=1)then count<=cogw; elsif( fsw="0000"and fbw="0000"and fgw="0000")then count<="0000"lout<=1; else if(clkevent and clk=1)then if(count="0000")then count<="1001"ensw<=1; else count<=count-1;ensw<=0; end if; end if; end if; end process;end fun;其功能仿真图像如下。根据图像可知,当将setgww键置为高电平时,可对个位进行异步置数,使得输出为预置数模块中对个位输出的数(cogw)。当倒计时到0(fgw,fsw,fbw=0)时停止计时,并发送信号lout(用于触发报警)。其他情况时,当遇到上升沿时立即减1,借位输出端为低电平,如果输出为0,且又遇到上升沿,则输出为9,同时借位输出端产生上升沿,触发十位进行减法运算。2.2 十位模块:十位的上升沿由个位的借位输出端提供。当遇到上升沿时,十位将实现减1的功能,即每次遇到上升沿都将减1,同时借位输出端为低电平。若十位为0时,在遇到上升沿后将自动变为9,同时借位输出端产生上升沿,触发百位进行减法运算。当setsw键拨向高电平时,将实现对十位的置数。当摁下reset键时,实现对十位的清零。其符号如左图所示。以下为该模块相应程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sww ISPORT(CLK,RESET,setsw:IN STD_LOGIC; cosw:in std_logic_vector(3 downto 0); enbw:OUT STD_LOGIC; DAOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY sww;ARCHITECTURE fun OF sww ISSIGNAL COUNT:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINDAOUT<=COUNT;PROCESS(CLK,RESET,cosw,setsw) BEGINIF(RESET=0)THENCOUNT<="0000"ELSIF(setsw=1)THENcount<=cosw;ELSIF(CLKEVENT AND CLK=1)THENIF(COUNT="0000")THEN count<="1001"enbw<=1;else count<=count-1;enbw<=0;end if;end if;end process;end fun;其相应功能仿真图如下:根据图像可知,当setsw键拨向高电平时,实现对十位的异步置数。当reset键为低电平时,实现对十位的异步清零。其他情况时,当遇到上升沿时立即减1,借位输出端为低电平,如果输出为0,且又遇到上升沿,则输出为9,同时借位输出端为高电平。2.3 百位模块:百位的上升沿由十位的借位输出端提供。当遇到上升沿时,十位将实现减1的功能,即每次遇到上升沿都将减1,如果输出为0,且又遇到上升沿,则输出为1。当setbw键拨向高电平时,实现对百位的置数。当reset键拨向低电平时时,实现对百位的清零。其符号如右图所示。相应模块的程序如下:lIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY bww ISPORT(CLK,RESET,setbw:IN STD_LOGIC; cobw:in std_logic_vector(3 downto 0); DAOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY bww;ARCHITECTURE FUN OF bww ISSIGNAL COUNT:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINDAOUT<=COUNT;PROCESS(CLK,RESET,setbw,cobw) BEGINIF(RESET=0)THENCOUNT<="0000"elsif(setbw=1)then count<=cobw;ELSe IF(CLKEVENT AND CLK=1)THEN if (count="0000")then count<="0001" else COUNT<="0000" end if; end if; END IF; END PROCESS;END FUN;相应功能仿真图如下: 根据图像可知,当setbw键拨向高电平时,实现对百位的异步置数。当reset键为低电平时,实现对百位的异步清零。其他情况时,当遇到上升沿时立即减1,如果输出为0,且又遇到上升沿,则输出为1。3. 报警模块。报警模块由两部分组成,报警一:每整十秒报警(蜂鸣器工作)一次;报警二:当倒计时到0时,即个位、十位、百位输出均为0时,报警(蜂鸣器和红色发光二极管均工作)一次,此时可通过控制开关关闭报警,同时维持个位、十位、百位输出均为0的状态。其符号分别为: 报警一相应程序: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALERT1 ISPORT(CLK:IN STD_LOGIC; DAINgw:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SPEAK:OUT STD_LOGIC);END ALERT1;ARCHITECTURE FUN OF ALERT1 ISSIGNAL COUNT:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL COUNT1:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINSPEAKER:PROCESS(CLK)BEGINSPEAK<=COUNT1(1);IF(CLKEVENT AND CLK=1)THENIF(DAINgw="0000")THENIF(COUNT1>="10")THENCOUNT1<="00"ELSE COUNT1<=COUNT1+1;END IF;ELSE COUNT1<="00"END IF;END IF;END PROCESS SPEAKER;END FUN;其功能仿真图像为:报警二相应程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALERT2 ISPORT(lin,shut:IN STD_LOGIC; speaker,led:OUT STD_LOGIC);END ALERT2;ARCHITECTURE FUN OF ALERT2 ISbegin process(shut,lin) begin if(lin=1 and shut=0)then speaker<=1;led<=1; elsif(shut=1)then speaker<=0;led<=0; end if;end process;end fun;其相应功能仿真图像为:根据图像可知,当倒计时计到0时,且开关处于低电平时,开始报警,即蜂鸣器和发光二极管处于高电平,开始工作;当控制开关处于高电平时,蜂鸣器和红色发光二极管不再工作。4. 数码显示模块。该模块由分频器模块、数码管选择控制模块、3_8译码器模块和数码管模块组成。4.1 分频器模块:分频器实际上是一个计数器,当计数到预设时间时,输出电平发生一个高低变化,这样就得到了所需要的频率。CLK_IN接试验箱50MHz晶振。其符号如右图。分频器模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DIV_CLK ISPORT(CLK_IN:IN STD_LOGIC; DIV_OUT:OUT STD_LOGIC);END DIV_CLK;ARCHITECTURE A OF DIV_CLK ISSIGNAL FRE_N:INTEGER RANGE 0 TO 100000;SIGNAL CLK_TMP:STD_LOGIC;BEGINDIV_OUT<=CLK_TMP;PROCESS(CLK_IN)BEGINIF FALLING_EDGE(CLK_IN)THENIF FRE_N>=99999 THENFRE_N<=0;CLK_TMP<=NOT CLK_TMP;ELSEFRE_N<=FRE_N+1;END IF;END IF;END PROCESS;END A;其功能仿真图像为:时序仿真分析:当脉冲计到一定值时,div_out发生一个电平变化。4.2 数码管选择控制模块:SEL 1.0端是数码管的位选端,选择哪个数码管亮,本课题需要选择三个数码管;DAOUT3.0控制数码管段选,控制数码管显示0到9十个数字,sw3.0 gw3.0 bw3.0为三个4位二进制数,输入的是要显示三位十进制数的每位二进制编码。数码管选择控制模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL; entity seltime0 isPORT(CLK1,RESET:IN STD_LOGIC; sw,gw,bw:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DAOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END SELTIME0;ARCHITECTURE FUN OF SELTIME0 ISSIGNAL COUNT:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINSEL<=COUNT;PROCESS(CLK1,RESET)BEGINIF(RESET=0)THENCOUNT<="00"ELSIF(CLK1EVENT AND CLK1=1)THENIF(COUNT>="10")THENCOUNT<="00"ELSECOUNT<=COUNT+1;END IF;END IF;CASE COUNT ISWHEN "00"=>DAOUT<=gw(3 DOWNTO 0);WHEN "01"=>DAOUT<=sw(3 DOWNTO 0);WHEN OTHERS=>DAOUT<=bw(3 DOWNTO 0);END CASE;END PROCESS;END FUN;其时序仿真波形为:SEL输出为00时第一个数码管亮显示预置的个位数;SEL输出为01时第二个数码管亮显示预置的十位数;SEL输出为10时第三个数码管亮显示预置的百位数;循环显示。可知仿真图结果正确。4. 3 3_8译码器模块:译码器电路是控制实验箱8个数码管,控制数码管的亮灭。SEL=0时第一个数码管亮;SEL=1时第二个数码管亮;SEL=2时第三个数码管亮。其符号如右图所示。3_8译码器(decode3_8)程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DECODE2_4 ISPORT(SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END DECODE2_4;ARCHITECTURE A OF DECODE2_4 ISBEGINQ<="11111110"WHEN SEL=0 ELSE "11111101"WHEN SEL=1 ELSE "11111011"WHEN SEL=2 ELSE "11111111" END A;3_8译码器时序图如下:时序仿真分析:当SEL=00时,选择了第一个数码管亮,输出为11111110;当 SEL=10时,选择了第三个数码管亮,输出为11111011;当SEL=01时,选择了第二个数码管,输出为11111101。4.4 数码管段选模块:输入端NUM3.0为要编译0到9十进制数的二进制编码,输出对应到数码管显示。数码管段选模块程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DELED ISPORT(NUM:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END DELED;ARCHITECTURE FUN OF DELED ISBEGINLED<="1111110"WHEN NUM="0000"ELSE"0110000"WHEN NUM="0001"ELSE"1101101"WHEN NUM="0010"ELSE"1111001"WHEN NUM="0011"ELSE"0110011"WHEN NUM="0100"ELSE"1011011"WHEN NUM="0101"ELSE"1011111"WHEN NUM="0110"ELSE"1110000"WHEN NUM="0111"ELSE"1111111"WHEN NUM="1000"ELSE"1111011"WHEN NUM="1001"ELSE"1110111"WHEN NUM="1010"ELSE"0011111"WHEN NUM="1011"ELSE"1001110"WHEN NUM="1100"ELSE"0111101"WHEN NUM="1101"ELSE"1001111"WHEN NUM="1110"ELSE"1000111"WHEN NUM="1111"END FUN;时序仿真图如下:时序仿真分析:图中显示了从9到0的数码管对应状态,如下: "1111110"when num="0000" "0110000"when num="0001" "1101101"when num="0010" "1111001"when num="0011" "0110011"when num="0100" "1011011"when num="0101" "1011111"when num="0110" "1110000"when num="0111" "1111111"when num="1000" "1111011"when num="1001"仿真结果正确。五、总体设计电路图1. 整体工作情况:当分别置setgw、setsw、setbw为高电平时,通过coclk输入端口将分别给个位、十位、百位进行异步置数。当通过输入端clk输入秒脉冲时,个位、十位、百位将按照预定的规则进行减法运算,即180秒之内的倒计时。当倒计时到整十秒时报警一发出蜂鸣声进行报时,当倒计时至0时倒计时结束,报警二发出蜂鸣声以及发光二极管发光。此时可以通过开关shutalert关闭报警系统。同时,数码管将持续显示000,直至断电或者重新置数。当摁下摁钮reset时,系统将进行异步清零。2. 连接关系:预置模块分别连接个位、十位、百位进行预置,个位、十位、百位的输出均接入数码管选择控制端的输入端,用以选择输出这三个数位上的数。它们的输出端还将接入个位的输出端,以控制其是否进行减法(倒计时)运算。个位的借位输出端接十位的clk触发端,它的输出端还将控制报警一的工作状态。十位的借位输出端接百位的clk触发端,控制百位的减法运算。Reset键分别接入个位、十位、百位和数码管选择控制端,可进行异步清零。下图为总体原理图。总体原理图3. 管脚分布图如下:在EDA实验箱上验证设计电路的功能,外围接口电路为IO5与蜂鸣器接口相连,IO3与IO_CLK相连,IO9与一个红色发光二极管相连。在多次调试和修改下,功能已趋于完善,与预定的功能已基本一致。以下为部分截图。总体功能仿真图:根据图像可知,通过控制置数端,可分别置数给各位、十位、百位,由置得的数开始倒计时。六、心得与总结经过长达两个星期的设计与思考,最终在Quartus II上完成了对倒计时报警器的设计与制作,其间遇到了许多问题,但最后都一一得到解决。现将心得体会总结如下:(一)软件1设计初期要考虑周到,否则后期改进很困难。应该在初期就多思考几个方案,进行比较论证,选择最合适的方案动手设计。总体设计在整个设计过程中非常重要,应该花较多的时间方案确定后,再开始设计。设计时,多使用已学的方法,如列真值表,化简逻辑表达式,要整体考虑,不可看一步,做一步。在整体设计都正确后,再寻求简化的方法。2在设计某些模块的时候无法把握住整体,这时可以先进行小部分功能的实现,在此基础上进行改进,虽然可能会多花一些时间,但这比空想要有效的多。3通过这次对倒计时报警器的设计与制作,让我受益匪浅。让我更深刻的了解和熟悉了Quartus II软件和VHDL语言以及EDA、数字电子技术课程,也让我了解了倒计时报警器的原理和设计理念。(二)硬件在硬件操作过程中,我按照管脚连实物图,发现并没有仿真时那么容易实现功能,第一次连完后,数码管并没有数字,在检查了芯片无误后,我发现线路中出现了错误, CLK端没有输入脉冲,计数器并没有实现减法功能,在重新接线后,终于得以实现功能。在设计过程中,我更进一步地熟悉了数电课上学过各种芯片的结构、工作原理和其具体的使用方法以及对Quartus II软件的操作。在连接六十进制的进位及十进制中,我对74LS192置数法和清零法也有了更深的了解。在调试电路的过程中出错的主要原因都是程序设定的不够合理以及接线的错误,因此设计的时候要细心,不要出错。我努力将理论中所学的知识灵活地运用起来,并在调试中会遇到各种各样的问题,电路的调试提高了我们解决问题的能力,学会了在设计中独立解决问题,也包括怎样去查找问题。似乎所有的事都得自己新手去操作才会在脑海中留下深刻的印象,这个小小的课程设计让我可以熟练的操作Quartus II软件,也了解了不少器件的功能的应用,也加深了对数字电路和EDA的认识和理解。遇到问题,解决问题,不仅巩固了书本的知识,同时也学到了新的知识,明白了实践的可贵性。动手能力的提高,细心与耐心的培养,品尝自己劳动成果的喜悦,是我们在这次课程设计中最大的收获。最后,还要十分感谢指导此次课程设计的高老师和李老师,耐心的给我们讲解和答疑。

注意事项

本文(三分钟可编程倒计时报警器课程设计)为本站会员(仙***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!