ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:255.80KB ,
资源ID:4538149      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4538149.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(出租车计费器课程设计报告VHDL语言.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

出租车计费器课程设计报告VHDL语言.docx

1、出租车计费器课程设计报告VHDL语言电子技术课程设计出租车计费器的设计 学院:电子信息工程学院班级:姓名:学号:指导教师:日期:年月日出租车计费器设计一、设计任务与要求设计并制作一台出租车计费系统,要求如下:1实现计费功能,计费标准为:按行程里程收费,起步价为700元,在车行3公里后再按22元/公里计费,当计费器达到或超过20元时,每公里加收50的车费。2实现模拟功能:能模拟汽车启动、停止、暂停、加速的状态3设计动态扫描电路,将车费和里程显示出来,各有两位小数。二、总体框图(1)系统总体结构出租车计费器的组成如上图所示,各部分主要功能包括输入信号模块对车轮传感器传送的脉冲信号进行计数,并以高低

2、脉冲模拟出租汽车启动,停止,暂停,加速按钮,具有输入信号作用;数据转换器模块将计费模块输出的车费和路程转换成4位的十进制数据;译码/动态扫描模块将路程与费用的数值译码后用动态扫描的方式驱动数码管;数码管显示模块将公里数和计费金额均用4位LED数码管显示 。(2)其流程图如下图所示:(3)各模块设计功能及设计思路 信号输入模块该模块主要实现计费功能和现场模拟功能。计费标准为:按行驶里程计费,起步价为7.00元,并在车行3 km后按2.20元km计费,当计费器达到或超过20元时,每公里加收50的车费,车停止不计费。并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号的作用。 数据转换模

3、块数据转换模块是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。 显示模块显示模块是由七段LED数码管译码和动态扫描显示两部分组成。采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的dp。这段程序所示的是在数码管的第二、第六个后面显示小数点,实现了路程和车费都用2位小数点表示的功能。数码管控制及译码显示模块将十进制的输入信号用七段数码管显示,由七段发光二极管组成数码显示器,利用字段的不同组合。可分别显示09十个数字。 片选信号产生模块片选信号产生模块是对数码管进行片

4、选并让其能够按照要求显示数据的模块三、选择器件设计开发软件:Quartus II6.0EDA实验箱 :EL教学实验箱四、功能模块(1)jifei模块 此模块为计费模块(即总体结构中的信号输入模块),实现计费功能,计费标准为:按行驶里程计费,起步价为7.00元,并在车行3公里后按2.20元/km计费,当计数器达到或超过20元时,每公里加收50%的车费,即按3.30元/km计费。CLK、START、STOP、PAUSE、JS为输入信号,分别代表汽车的起动、停止、暂停和加速,CLK为扫描时钟,硬件实现时加入时钟信号,另有两个输出,即CHEFEI和LUC,分别代表车费和路程,当车处于行驶状态时,此模块

5、会自动记录下路程与车费状况并作为转换模块的输入。jifei模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jfmk is port(clk,start,stop,pause,js:in std_logic; chefei,luc:out integer range 0 to 8000);end jfmk;architecture one of jfmk isbegin process(clk,start,stop,pause,js) variable a,b:std_log

6、ic; variable aa:integer range 0 to 100; variable chf,lc:integer range 0 to 8000; variable num:integer range 0 to 9; begin if(clkevent and clk=1)then if(stop=0) then chf:=0; num:=0; b:=1; aa:=0; lc:=0; elsif(start=0) then b:=0; chf:=700; lc:=0; elsif(start=1 and js=1 and pause=1) then if(b=0)then num

7、:=num+1; end if; if(num=9)then lc:=lc+5; num:=0; aa:=aa+5; end if; elsif(start=1 and js=0 and pause=1)then lc:=lc+1; aa:=aa+1; end if; if(aa=100)then a:=1; aa:=0; else a:=0; end if; if(lc300)then null; elsif(chf=2000 and a=1)then chf:=chf+330; end if; end if; chefei=chf; luc=100则a:=1,aa:=0,否则a:=0,如果

8、chf2000 and a=1则chf:=chf+330;以上各状态表示汽车在三公里以外车费在二十元以内的状态、车费在二十元以外的状态。结束进程,结束结构体。jifei模块的时序仿真图:时序仿真图分析: 图中的stop为汽车停止输入端,上升沿有效;start为汽车启动输入端,上升沿有效;pause为汽车暂停输入端,上升沿有效;js为汽车加速输入端,上升沿有效。CLK为时钟源信号;chefei为汽车车费输出端,luc为汽车路程输出端。由图可知:当stop,Start,pause,js全为高电平时路程按5的速度增加,车费为700.当路程增加到300时,车费变为920,以后路程每增加100,车费增加

9、220。模块生成图 : (2)x模块此模块为数据转换模块,功能是将计费模块产生的车费与路程的模拟量转换成数字量并输出,它是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。其中DACLK为时钟信号,ASCORE、BSCORE连接计费模块的CHEFEI和LUC,输出为2个4位的十进制数,可以分别表示路程和车费情况。当车运行于不同状况时,此模块会将不同的车费与路程状况转换为数字量并输出。x模块的源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity x is p

10、ort(daclk:in std_logic; ascore,bscore:in integer range 0 to 8000; age,ashi,abai,aqian,bge,bshi,bbai,bqian:out std_logic_vector(3 downto 0);end x;architecture rt1 of x isbegin process(daclk,ascore) variable comb1:integer range 0 to 8000; variable comb1a,comb1b,comb1c,comb1d:std_logic_vector(3 downto

11、0); begin if (daclkevent and daclk=1)then if(comb1ascore)then if(comb1a=9 and comb1b=9 and comb1c=9)then comb1a:=0000; comb1b:=0000; comb1c:=0000; comb1d:=comb1d+1; comb1:=comb1+1; elsif(comb1a=9 and comb1b=9)then comb1a:=0000; comb1b:=0000; comb1:=comb1+1; comb1c:=comb1c+1; elsif(comb1a=9)then comb

12、1a:=0000; comb1b:=comb1b+1; comb1:=comb1+1; else comb1a:=comb1a+1; comb1:=comb1+1; end if; else ashi=comb1b; age=comb1a; abai=comb1c; aqian=comb1d; comb1:=0; comb1a:=0000; comb1b:=0000; comb1c:=0000; comb1d:=0000; end if; end if; end process; process(daclk,bscore) variable comb2:integer range 0 to 8

13、000; variable comb2a,comb2b,comb2c,comb2d:std_logic_vector(3 downto 0); begin if(daclkevent and daclk=1)then if(comb2bscore)then if(comb2a=9 and comb2b=9 and comb2c=9)then comb2a:=0000; comb2b:=0000; comb2c:=0000; comb2d:=comb2d+1; comb2:=comb2+1; elsif(comb2a=9 and comb2b=9)then comb2a:=0000; comb2

14、b:=0000; comb2:=comb2+1; comb2c:=comb2c+1; elsif(comb2a=9)then comb2a:=0000; comb2b:=comb2b+1; comb2:=comb2+1; else comb2a:=comb2a+1; comb2:=comb2+1; end if; else bshi=comb2b; bge=comb2a; bbai=comb2c; bqian=comb2d; comb2:=0; comb2a:=0000; comb2b:=0000; comb2c:=0000; comb2d:=0000; end if; end if; end

15、 process;end rt1;程序分析:首先打开ieee库,用use语句声明使用std_logic_1164和std_logic_unsigned程序包。定义实体,daclk、ascore、bscore为输入,age、ashi、abai、aqian、bge、bshi、bbai、bqian为输出位矢量。然后定义结构体,daclk、ascore、bscore为敏感信号,定义变量comb1a,comb1b,comb1c,comb1d为位矢量,变量comb1为0到7000范围。当时钟上升沿到来时,各个变量分别实现个、十、百、千的进位。然后实现一个循环。然后再将各个变量付给各个位矢量。模块生成图 :

16、X模块的时序仿真图时序仿真图的分析转换模块的时序仿真图如下图所示:可见能将路程和车费转换为4位的十进制数,便于8位数码管显示。由图可知:当ascore,bscore为13位二进制数,当ascore为0-9时age从0到9变化,当ascore为10时age等于0,ashi等于1。 当bscore为0-9时bge从0到9变化,当bscore为10时bge等于0,bshi等于1。(3)sel模块此模块为片选信号产生模块,功能是选择八段数码管按照设计要求进行正确的显示。其具体的对应关系如下表所示:接口序号数码管SEL2SEL1SEL0状态111第1位亮110第2位亮101第3位亮100第4位亮011第

17、5位亮010第6位亮001第7位亮0XX第8位亮在该模块中CLK为时钟信号,A2.0为片选输出,用于选择数码管,连接译码显示模块的片选端C2.0。se模块的源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sel is port(clk:in std_logic; a:out std_logic_vector(2 downto 0);end sel;architecture rt1 of sel isbegin process(clk) variable b:std_log

18、ic_vector(2 downto 0); begin if(clkevent and clk=1)then if(b=111)then b:=000; else b:=b+1; end if; end if; ad=a1;dpd=a2;dpd=a3;dpd=a4;dpd=b1;dpd=b2;dpd=b3;dpd=b4;dpnull;end case;end process;end rtl;生成模块: xxx1模块的时序仿真图:由上图可知,输入信号C为3位片选信号其变化范围为0到7,输入信号c从0到7逐个变化时,输出d逐个输a1,a2,a3,a4,b1,b2,b3,b4的输入信号。(5)di

19、模块 此模块为数码管控制模块,功能是控制七段数码管对转换后的数字量进行显示,使其完成路程和车费的显示。其中D3.0连接动态扫描/译码/数码管显示模块的D3.0端,Q6.0连接七段数码管,利用其控制特性在数码管上显示出车费和路程。di模块的源程序:library ieee;use ieee.std_logic_1164.all;entity di isport(d:in std_logic _vector(3 downto 0); q:out std_logic_vector(6 downto 0);end di;architecture rtl of di isbegin process(d)

20、 begin case d is when0000=qqqqqqqqqq=99999 thencnt:=0;tmp:=not tmp;else cnt:=cnt+1;end if;end if;clkout=tmp;end process;end one;div生成模块图:div模块时序仿真波形:div将时钟信号分频,使频率减小。(7) decode3_8模块 sel通过decode3_8模块选择数码管decode3_8模块源程序: LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY d

21、ecode3_8 IS PORT(SEL:IN std_logic_vector(2 downto 0); Q:OUT std_logic_vector(7 downto 0);END decode3_8;ARCHITECTURE a OF decode3_8 ISBEGIN Q=11111110when sel=0 else 11111101when sel=1 else 11111011when sel=2 else 11110111when sel=3 else 11101111when sel=4 else 11011111when sel=5 else 10111111when se

22、l=6 else 01111111when sel=7 else 11111111; END a;decode3_8生成模块图: decode3_8模块时序仿真波形图:decode3_8模块选择数码管,当sel信号从0-7变化时,依次选择1-8八个数码管。五、总体设计电路图整体工作情况:(1)模块连接:计费模块的clk、start、stop、pause和js端连接输入,chefei12.0和luc12.0连接转换模块的ascore12.0与bscore12.0;转换模块的daclk端连接输入,age3.0至bqian3.0连接动态扫描/译码/数码管显示模块的a13.0至b43.0;动态扫描/译码/数码管显示模块的C2.0连接片选输出SEL2.0,DP端连接输出DP,D3.0连接数码管控制模块的D3.0;片选信号产生模块的CLK端与输入信号相连,并连接转换模块的DACLK端,A2.0连接片选输出SEL2.0,并与动态扫描/译码/数码管显示模块的C2.0相连;数码管控制模块的D3.0端与动

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1