EDA课程设计 出租车计价器_第1页
EDA课程设计 出租车计价器_第2页
EDA课程设计 出租车计价器_第3页
EDA课程设计 出租车计价器_第4页
EDA课程设计 出租车计价器_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 EDA课程设计专题实践 题目:出租车自动计费器 名: 姓 学 院: 电子与信息工程学院 专 业: 电子信息科学与技术 班 级: 电信1204班 出租车自动计费器 设计题目: 一、 设计目标:二、 设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及 1、 元;起价三部分,用四位数码管显示总金额,最大值为99.993元(分钟,起价8公里,等候时间单价1.7元/5、2 行车里程单价1.7元/ 。公里起价)行车里程的计费电路将汽车行驶的里程数转换成与之成正比的脉冲数,、 3实验中以一个脉冲模拟汽车前进十米比例然后由计数译码电路转换成收费金额, 系数,从而计算出具体费用。 LED显示行驶公里

2、数,四个数码管显示收费金额。4、 用 设计原理: 三、 然后将里将汽车行驶的里程数和等候时间分别转换成与之成正比的脉冲数,得到最程脉冲和等待脉冲乘以分别的单价得到具体的费用,再将几项收费相加, 终的金额。再用分码器将钱的每一位分开,用四个数码管表示总的计费结果。本次设计的模块包括:分频器、计数器、比例乘法器、分码器、数码管扫频,(等待)(行驶)、STOP)、EN(启动)、STARTRST(电路。另设4个按键:停止模拟汽车的发动此时计价器显示起步EN通过按下RST模拟汽车的停止,按下键STOPSTART键时模拟汽车在行驶,此时开始计公里数,按下价8元,按下 时,模拟出租车在等待,计数器计等待时间

3、。总设计的实验框图如下: 分 频 器里程计 数1)原理框图BT7.0Y23.0Y33.0Y63.0Y73.0CLK 费用 计算 分码 inst7 费 用 显 示 输 入 时 钟 时间计 数图(inst11 分 码 器 四、 设计内容: (1) 分频器模块 其功能是将实验室的48MH的频率分别分成1HZ、10HZ、1HZ。将1HZ作为等待时间计数的脉冲,每一个脉冲代表1s。10HZ的脉冲作为里程计数的输入脉冲,每一个脉冲代表10m。1KHZ用于数码管扫频电路的扫频中。 TypeParameterValueSigned IntegerF_DIV2Signed IntegerF_DIV_WIDTH3

4、2int_divclock_outclockinst14 图(2) 分频器 程序代码: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.NUMERIC_BIT.ALL;-包含移位函数等. ENTITY int_div IS GENERIC ( F_DIV:Integer:=4800000;-分频系数 F_DIV_WIDTH:Integer:=32-分频计数器宽度 ); PORT( clock : IN STD_LO

5、GIC; clock_out: OUT STD_LOGIC ); END; ARCHITECTURE one OF int_div IS SIGNAL clk_p_r: STD_LOGIC;-上升沿输出时钟 SIGNAL clk_n_r: STD_LOGIC;-下降沿输出时钟 SIGNAL count_p: STD_LOGIC_VECTOR(f_div_width-1 DOWNTO 0);-上升沿脉冲计数 器SIGNAL count_n: STD_LOGIC_VECTOR(f_div_width-1 DOWNTO 0);-下降沿脉冲计数器 -SIGNAL f_div_width_r:STD_L

6、OGIC_VECTOR(f_div_width-1 DOWNTO 0); SIGNAL clock_out_r:STD_LOGIC; SIGNAL full_div_p: STD_LOGIC;-上升沿计数满标志 SIGNAL half_div_p: STD_LOGIC;-上升沿计数半满标志 SIGNAL full_div_n: STD_LOGIC;-下降沿计数满标志 SIGNAL half_div_n: STD_LOGIC;-下降沿计数半满标志 BEGIN clock_out=clock_out_r; -clock_out=clock WHEN (F_DIV=1) ELSE (clk_p_r=

7、1 AND clk_n_r=1) WHEN . 判断计数标志位置位与否 -(F_DIV(0)=1) clk_p_r); ELSE 0; full_div_p=1 WHEN (count_pF_DIV-1) half_div_p=1 WHEN (count_p(F_DIV/2 )-1) ELSE 0; ELSE 0; full_div_n=1 WHEN (count_nF_DIV -1) ELSE 0; half_div_n=1 WHEN (count_n(F_DIV/2)-1) PROCESS(clock)-上升沿脉冲计数i:Integer RANGE 0 TO 31; -VARIABLE B

8、EGIN RISING_EDGE(clock)THEN IF IF full_div_p=1 THEN count_p=count_p+1; IF (half_div_p=1) THEN clk_p_r=0; ELSE clk_p_r=1; END IF; ELSE count_p0); clk_p_r= 0; END IF; END IF; END PROCESS; 下降沿脉冲计数PROCESS(clock)-BEGIN FALLING_EDGE(clock)THEN IF THEN full_div_n=1 IF count_n=count_n+1; IF half_div_n=1 THE

9、N clk_n_r=0; ELSE clk_n_r=1; END IF; ELSE count_n0); clk_n_r = 0; END IF; END IF; END PROCESS; PROCESS(clock) BEGIN IF RISING_EDGE(clock)THEN IF F_DIV= 1 THEN clock_out_r=clock; ELSE IF (F_DIV REM 2) =1 THEN clock_out_r= clk_p_r AND clk_n_r; ELSE clock_out_r=clk_p_r; END IF; END IF; END IF; END PROC

10、ESS; END; (2) 里程计数模块 其功能是得到出租车行驶的公里数。每一个脉冲模拟的是10m,所以100个脉冲为1km,需要两个一百进制计数器,第一个计数器计满数后进位输出作为高位计数器的输入时钟,高位100计数器输出的是里程公里数。 当按下REST键时计数器清零。按下EN键后,再按下START键,此时里程计数器开始计数,来一个脉冲加1,到99时为1公里,高位100进制计数器 ,并输出公里数。1计数加 CNT0100clkkilo6.0startstoprstENinst2 里程计数器) 图(3 程序代码:library ieee; use ieee.std_logic_1164.all

11、; use ieee.std_logic_unsigned.all; entity CNT0100 is port (clk,start,stop,rst,EN:in std_logic; kilo:out integer range 0 to 100); end; architecture behav of CNT0100 is begin process(clk,rst,start,stop,en) variable cqi,k: integer range 0 to 100; flag2控制计数是否计数variable flag1,flag2:std_logic:=0; -flag1控制

12、计数器是否清零,begin if rst=0 then cqi:=0;flag2:=0;flag1:=0;k:=0; elsif clk event and clk=1 then if en=0 then flag2:=1; else flag2:=flag2; end if; if stop=0and flag2=1 then flag1:=0; else flag1:=flag1; end if; 计数器开始计数 - if start=0and flag2=1 then flag1:=1; else flag1:=flag1; end if; if flag1=0 then cqi:=cq

13、i; ,否则计数清零小于99时继续计数加1 else if cqi99 then cqi:=cqi+1; - else cqi:=0; end if; 1 时加计满99 if cqi=99 then - if k99 then K:=K+1; else k:=0; end if; else K:=K; end if; end if; end if; kilo=k; -输出公里数 end process; end; (3)计时模块 其功能室得到等待的时间数。每一个脉冲的是1s,所以60个脉冲为1分钟,需要两个一60进制计数器,第一个计数器计满数后进位输出作为高位计数器的时钟,高位60计数器输出的

14、是分钟数。 当按下REST键时计数器清零。按下EN键后,再按下STOP键,此时等待时间计数器开始计数,来一个脉冲加1,到59s时为1分钟,高位60进制计数器计数加1,并输出分钟数。 WAIT60clkwaitime5.0startstoprsteninst 图(4) 等待时间计数器 程序代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity WAIT60 is port (clk,start,stop,rst,en:in std_logic; waitime:out integ

15、er range 0 to 60); end; architecture behav of WAIT60 is begin process(clk,rst,start,stop,en) variable cqi,W:integer range 0 to 60; variable flag1,flag2:std_logic:=0; -控制计数器的清零和计数,受rst,en,stop的控制 begin if rst=0 then cqi:=0;flag2:=0;flag1:=0; elsif clk event and clk=1 then if en=0 then flag2:=1; else

16、flag2:=flag2; end if; if stop=0AND flag2=1 then flag1:=1;w:=0; else flag1:=flag1; end if; if start=0and flag2=1 then flag1:=0; else flag1:=flag1; end if; if flag1=0 then cqi:=cqi; -计数保持 else if cqi59 then cqi:=cqi+1; -计数加1 else cqi:=0; end if; if cqi=59 then if w59 then W:=W+1; else w:=0; end if; el

17、se W :=W; end if; end if; end if; waitime=W; -输出分钟数 end process; end; 4) 费用计算模块 (其功能是得到总的费用,并将其三个十进制数表示。 每1km是1.7元,所以将公里数乘上1.7元,得到公里数的钱的10倍。每等待5分钟是1.7元,将等待时间对5去整再乘以1.7元,得到等待时间钱的10倍。再将行驶时的费用,等待时的费用和起步价相加得到总费用。再将费用对100取整得到十元位,再得到元位和角位。当在3公里以内是固定输出8元,否则输出正常计数所得的钱。 按rest键时,输出钱为0元。当按下en后,公里数小于3时输出8元,公 后,

18、按正常计费的前输出。3里数大于 sum_feekilo6.0Y13.0Y23.0waitime5.0Y33.0RESTENclkinst10 图(5) 费用计算模块 程序代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sum_fee is PORT( kilo:in integer range 0 to 100; -公里数 waitime:in integer range 0 to 60; -等待时间数 REST,EN,clk: in std_logic; Y1,Y2,

19、Y3:out integer range 0 to 9); -分别输出费用的角位、元位和十元位 end; architecture one of sum_fee is begin process(REST,EN,clk,kilo,waitime) variable shi1,yuan1,jiao1:integer range 0 to 9; variable sum:integer range 0 to 1000; VARIABLE FLAG: STD_LOGIC:=0; -标志位控制是否将钱清零,受rest和start控制 begin IF REST=0 THEN FLAG:=0; ELSE

20、 FLAG:=FLAG; END IF; IF EN=0 THEN FLAG:=1; ELSE FLAG:=FL AG; END IF; IF FLAG=0 THEN Y1=0;Y2=0;Y3=0; -当rest清零时,全部输出为0 ELSE if clk event and clk=1 then sum:=(kilo-3)*17+(waitime/5)*17+80; -总钱数的十倍 shi1:=sum/100; -得到总钱数的十元位 yuan1:=(sum-shi1*100)/10; -得到总钱数的元位 jiao1:=sum-shi1*100-yuan1*10; -得到总钱数的角位 end

21、if; if kilo3 then sum1:=0;sum2:=8;sum3:=0; -在3公里以内固定输出8元 else -否则输出正常计数是的钱 sum1:=shi1; sum2:=yuan1; sum3:=jiao1; end if; Y1=sum1;Y2=sum2;Y3=sum3; -将分开的位输出 END IF; end process; end architecture; (5)分码器 其功能是将公里数和等待时间数的十位和个位分开并输出。将公里数和等待时间分别对10得到十位,再得到个位。 当按下rest键时,输出清零。当在正常计数时,当按下的是start键,输出公里数;当按下sto

22、p键,输出等待时间数。 COUNTclky13.0y23.0reststopstartkilo6.0waitime5.0inst7 图(6) 分码器 程序代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity COUNT is port (clk,rest,stop,start:in std_logic; kilo:in integer range 0 to 100; -输入公里时 waitime:in integer range 0 to 60; -输入时间数 y1,y2:

23、out integer range 0 to 9); -分别代表个位和十位上的数 end; architecture behav of COUNT is begin process(clk,rest,stop,start,kilo,waitime) variable shi1,ge1,shi2,ge2:integer range 0 to 9; variable flag:std_logic:=0; begin if start=0 then flag:=1; else flag:=flag; end if; if stop=0 then flag:=0; else flag:=flag; e

24、nd if; if rest=0 then Y1=0;y2=0; else if clk event and clk=1 then shi1:=kilo/10; -公里数的十位 ge1:=kilo-shi1*10;-公里数的个位 shi2:=waitime/10;-等待时间的十位 ge2:=waitime-shi2*10;-等待时间的个位 end if; if flag=1 then y1=ge1;y2=shi1; else y1=ge2;y2 BT =I11101;A BT =I11011;A BT =I10111;A BT =I01111;A BT =H11111;A BT =A11111

25、;A BT =11111;A NULL; END CASE; END PROCESS P1; P2:PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN CNT8=CNT8+1; if CNT8= then FLAG=1 ;else FLAGSG0:=H00000;WHEN 1=SG0:=I11001; WHEN 2 =SG0:=A00100;WHEN 3=SG0:=A10000; WHEN 4 =SG0:=11001;WHEN 5=SG0:=10010; WHEN 6 =SG0:=00010;WHEN 7=SG0:=I11000; WHEN 8 =S

26、G0:=00000;WHEN 9=SG0:=10000; WHEN 10 =SG0:=01000;WHEN 11=SG0:=00011; WHEN 12 =SG0:=H00110;WHEN 13=SG0:=A00001; WHEN 14 =SG0:=00110;WHEN 15=SG0:=01110; WHEN OTHERS= NULL; END CASE; IF FLAG=1 THEN SG=SG0 AND POINT; ELSE SG=SG0; END IF; END PROCESS P3; END; (7)顶层原理图 ParameterValueTypeF_DIV2Signed Integ

27、erF_DIV_WIDTH32Signed Integerint_divclockclock_out课CNT0100inst12clkkilo6.0sum_feeSCAN_LEDINPUTSTARTstartVCCOUTPUTINPUTSG7.0STOPSG7.0kilo6.0stopY13.0Y13.0VCCOUTPUTINPUTRESTBT7.0BT7.0Y23.0Y23.0rstwaitime5.0VCCINPUTENY33.0RESTENY33.0VCCParameterValueTypeY63.0ENF_DIV2Signed Integerinst2Y73.0clkF_DIV_WIDTH32Signed IntegerCLKint_divWAIT60inst10INPUTCLKclockclock_outwaitime5.0clkVCCinst11startstoprstinst13ParameterValueTypeenF_DIV2Signed IntegerF_DIV_WIDTH32Signed Integerinstint_divclockclock_outCOUNTOUTPUTled13.0y13.0clkOUTPUTLED23.0inst14resty23.0stopstartkilo6.0waitime5.0图(8) 顶层原理图 (8) 实验仿真 因为实验室

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论