版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子课程设计 -三分钟可编程倒计时报警器 目 录一、设计任务与要求 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.设有外部操作开关,控制计数器实现直接置数、启动和清零等操作
2、。 3.计数器可设置为03分钟(即180秒)内任意时段的倒计时。 4.计数器递减计数到零时,数码显示管不能灭灯,同时发出持续发光报警信号。二、 总体框图倒计时预置数数码显示报警预置数模块:在开启相应开关(setgw、setsw、setbw)后,通过来脉冲计数分别给个位十位百位预置数,使得在启动开关后从此数开始倒计时。倒计时模块:在启动开关(clk)后,从预置的数开始倒计时,倒计到0时,倒计时结束,此时数码显示管持续不灭灯。另外,可在任意时刻通过控制摁钮实现清零。报警模块:每倒计到整十秒时,发出一次报警。同时,当倒计时结束时会再次发出报警声,以及报警灯亮起。此时,可通过开关(shutalert)
3、关闭报警灯,报警声,以停止报警。数码显示模块:通过对输入信息的判断,选择在哪个数码管上显示哪个图形符号(即数字)。倒计时模块 数码显示模块个位十位百位数码管 选择控制38译码器数码管段选分频器 报警模块 每10秒报时一次计时结束报警方案一:预置数部分,可以借助quartus ii提供的芯片(如:74ls192,74ls190,74ls160等)完成计数功能。倒计时部分,可以借助quartus ii提供的芯片(如:74ls192等)完成有借位的减法运算。但操作较为繁琐,涉及到的元器件较多,涉及到的问题可能会有芯片是否有所损坏使得设计结果不够理想。 方案二:完全用vhdl语言编写程序下指令,实验数
4、据较为准确,设计结果较为理想,但思考量较大,思维过于复杂。方案三:将完整的原理图按照功能需求分成几个不同模块,将各个部分在绘制原理图或者用vhdl语言编写程序后进行编译制成可供使用的模块,再借助各个模块绘制总的原理图。这样,总原理图清晰明了,各个模块的功能清晰,且设计结果较为理想。故选择此方案。三、选择器件eda实验箱所使用到的芯片为altera公司的cyclone系列fpga芯片ep1c12q240c8n。外围接口电路为io5与蜂鸣器接口相连,io3与io_clk相连,io9与一个红色发光二极管相连。led灯处于高电平,所以给低电平led灯亮;数码管共阴,给高电平数码管亮;数码管段选为低电平
5、有效。实验板上的按键常处于高电平,按下为低电平。四、功能模块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_lo
6、gic_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的功能,即每次遇到
7、上升沿都将减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
8、 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=
9、1)then count=0000; elsif(setgw=1)then count=cogw; elsif( fsw=0000and fbw=0000and 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键置为高电平时,可对个位进行异步置数,使
10、得输出为预置数模块中对个位输出的数(cogw)。当倒计时到0(fgw,fsw,fbw=0)时停止计时,并发送信号lout(用于触发报警)。其他情况时,当遇到上升沿时立即减1,借位输出端为低电平,如果输出为0,且又遇到上升沿,则输出为9,同时借位输出端产生上升沿,触发十位进行减法运算。2.2 十位模块:十位的上升沿由个位的借位输出端提供。当遇到上升沿时,十位将实现减1的功能,即每次遇到上升沿都将减1,同时借位输出端为低电平。若十位为0时,在遇到上升沿后将自动变为9,同时借位输出端产生上升沿,触发百位进行减法运算。当setsw键拨向高电平时,将实现对十位的置数。当摁下reset键时,实现对十位的清
11、零。其符号如左图所示。以下为该模块相应程序: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_lo
12、gic_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键拨向高电平时,实现对十位的异步置数。当
13、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.a
14、ll;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
15、=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时
16、,即个位、十位、百位输出均为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
17、 issignal count:std_logic_vector(1 downto 0);signal count1:std_logic_vector(1 downto 0);beginspeaker:process(clk)beginspeak=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_log
18、ic_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时,且开关处于低电平时,开始
19、报警,即蜂鸣器和发光二极管处于高电平,开始工作;当控制开关处于高电平时,蜂鸣器和红色发光二极管不再工作。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 st
20、d_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=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
21、端是数码管的位选端,选择哪个数码管亮,本课题需要选择三个数码管;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_v
22、ector(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=10)thencount=00;elsecountdaoutdaoutdaout=bw(3 downto 0);en
23、d 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_uns
24、igned.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=11111110when sel=0 else 11111101when sel=1 else 11111011when sel=2 else 11111111; end a;3_8译码器时序图如下:时序仿真分析:当sel=00时,选择了第一个数码管亮,输出为11111110;当 se
25、l=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;arc
26、hitecture fun of deled isbeginled=1111110when num=0000else0110000when num=0001else1101101when num=0010else1111001when num=0011else0110011when num=0100else1011011when num=0101else1011111when num=0110else1110000when num=0111else1111111when num=1000else1111011when num=1001else1110111when num=1010else00
27、11111when num=1011else1001110when num=1100else0111101when num=1101else1001111when num=1110else1000111when num=1111;end fun;时序仿真图如下:时序仿真分析:图中显示了从9到0的数码管对应状态,如下: 1111110when num=0000 0110000when num=0001 1101101when num=0010 1111001when num=0011 0110011when num=0100 1011011when num=0101 1011111when nu
28、m=0110 1110000when num=0111 1111111when num=1000 1111011when num=1001仿真结果正确。五、总体设计电路图1. 整体工作情况:当分别置setgw、setsw、setbw为高电平时,通过coclk输入端口将分别给个位、十位、百位进行异步置数。当通过输入端clk输入秒脉冲时,个位、十位、百位将按照预定的规则进行减法运算,即180秒之内的倒计时。当倒计时到整十秒时报警一发出蜂鸣声进行报时,当倒计时至0时倒计时结束,报警二发出蜂鸣声以及发光二极管发光。此时可以通过开关shutalert关闭报警系统。同时,数码管将持续显示000,直至断电或
29、者重新置数。当摁下摁钮reset时,系统将进行异步清零。2. 连接关系:预置模块分别连接个位、十位、百位进行预置,个位、十位、百位的输出均接入数码管选择控制端的输入端,用以选择输出这三个数位上的数。它们的输出端还将接入个位的输出端,以控制其是否进行减法(倒计时)运算。个位的借位输出端接十位的clk触发端,它的输出端还将控制报警一的工作状态。十位的借位输出端接百位的clk触发端,控制百位的减法运算。reset键分别接入个位、十位、百位和数码管选择控制端,可进行异步清零。下图为总体原理图。总体原理图3. 管脚分布图如下:在eda实验箱上验证设计电路的功能,外围接口电路为io5与蜂鸣器接口相连,io3与io_clk相连,io9与一个红色发光二极管相连。在多次调试和修改下,功能已趋于完善,与预定的功能已基本一致。以下为部分截图。总体功能仿真图:根据图像可知,通过控制置数端,可分别置数给各位、十位、百位,由置得的数开始倒计时。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小班学习成就展示与分享会计划
- 开封职业学院《光电检测与传感技术》2023-2024学年第一学期期末试卷
- 喀什职业技术学院《田径二》2023-2024学年第一学期期末试卷
- 消防工程承包合同范例
- 2024年涉外居间贸易合同
- 2025喜达屋皇家艾美酒店管理合同
- 2025电气工程施工合同书
- 2025解除劳动合同证明格式范文
- 2025学校食堂承包合同书的
- 书柜玻璃采购合同范例
- 工具移交表模板
- 变更索赔成功案例-某工程窝工变更索赔报告
- GB 19517-2004国家电气设备安全技术规范
- 模具定期保养点检表
- 山西省太原市市药品零售药店企业药房名单目录
- 工程部长桥梁工程施工技术(PPT116)
- 全面设备保养TPM培训教材课件
- 茶叶企业营销课件
- 高炉无料钟炉顶设备安装与调试技术
- 初中语文人教九年级上册如何分析环境描写的作用 教案
- 压力容器壁厚快速计算
评论
0/150
提交评论