vdhl语言出租车计费器课程设计报告_第1页
vdhl语言出租车计费器课程设计报告_第2页
vdhl语言出租车计费器课程设计报告_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、目录第1章总体设计思路11.1系统总体结构11.2各模块设计功能与设计思路22.1 第二章各模块功能3jifei模块3x模块6sel模块10xxx1模块12di模块14div模块15decode3_8模块17第3章总体电路图183.1、模块连接:183.2、硬件连接:193.3、结果分析:19第4章硬件实现22第5章总结23第6章参考文献24第1章总体设计思路1.1系统总体结构图1.1系统总体框图出租车计费器的组成如上图所示,各部分主要功能包括输入信号模块对车轮传感器传送的脉冲信号进行计数,并以高低脉冲模拟出租汽车启动,停止,暂停,速度按钮,具有输入信号作用;数据转换器模块将计费模块输出的车费

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

3、扫描显示两部分组成。采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的dp。这段程序所示的是在数码管的第二、第六个后面显示小数点,实现了路程和车费都用2位小数点表示的功能。数码管控制与译码显示模块将十进制的输入信号用七段数码管显示,由2.1 七段发光二极管组成数码显示器,利用字段的不同组合。可分别显示09十个数字。片选信号产生模块片选信号产生模块是对数码管进行片选并让其能够按照要求显示数据的模块第二章各模块功能jifei模块此模块为计费模块(即总体结构中的信号输入模块),实现计费功能,计费标准

4、为:按行驶里程计费,起步价为7.00元,并在车行3公里后按2.20元/km计费,当计数器达到或超过20元时,每公里加收50%勺车费,即按3.30元/km计费。CLKSTARTSTOPPAUSEspeed为输入信号,分别代表汽车的起动、停止、暂停和速度,CLW扫描时钟,硬件实现时加入时钟信号,另有两个输出,即MONEYRUN分别代表车费和路程,当车处丁行驶状态时,此模块会自动记录下路程与车费状况并作为转换模块的输入。jifei模块源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityjfmki

5、sport(clk,start,stop,pause,speed:instd_logic;money,run:outintegerrange0to8000);endjfmk;architectureoneofjfmkisbeginprocess(clk,start,stop,pause,speed)variablea,b:std_logic;variableaa:integerrange0to100;variablechf,lc:integerrange0to8000;variablenum:integerrange0to9;beginif(clk'eventandclk='1

6、')thenif(stop='0')thenchf:=0;num:=0;b:='1'aa:=0;lc:=0;elsif(start='0')thenb:='0'chf:=700;lc:=0;elsif(start='1'andspeed='1'andpause='1')thenif(b='0')thennum:=num+1;endif;if(num=9)thenlc:=lc+5;num:=0;aa:=aa+5;endif;elsif(start='1&

7、#39;andspeed='0'andpause='1')thenlc:=lc+1;aa:=aa+1;endif;if(aa>=100)thena:='1'aa:=0;elsea:='0'endif;if(lc<300)thennull;elsif(chf<2000anda='1')thenchf:=chf+220;elsif(chf>=2000anda='1')thenchf:=chf+330;endif;endif;money<=chf;run<=lc;end

8、process;endone;模块分析:首先打开ieee库,用use语句声明使用std_logic_1164和std_logic_unsigned程序包。clk、start、stop、pause、speed为敏感信号,定义a,b为中间变量,变量aa、numchf为位欠量。当时钟上升沿到来时,如果STOP='0'则chf:=0,num:=0,b:=1,aa:=0,lc:=0,如果stop='1'且start='0'则chf:=700,lc:=0,stop='1';如果stop='1'andstart='1&#

9、39;andspeed='1'andpause='1'且b='0'贝Unum:=num+1;如果stop='1'andstart='1'andspeed='1'andpause='1'且num=9贝Ulc:=lc+1;num:=0,aa:=aa+1。如果stop='1'andstart='1'andspeed='0'andpause='1'贝Ulc:=lc+1;aa:=aa+1;以上各状态分别代表汽车的停止、启动、速度、

10、暂停。如果aa>=100则a:='1',aa:=0,否则a:='0',如果chf<2000且a='1'则chf:=chf+220;如果chf>2000anda='1'贝Uchf:=chf+330;以上各状态表示汽车在三公里以外车费在二十元以的状态、车费在二十元以外的状态。结束进程,结束结构体。jifei模块的时序仿真图:J1TdnJ1BLR.Omyfli0uno0».lilOOmIS)QuUO.O胜】如山w的010K2300u.些0m*就Clul|l1C11CI1I细UEcheEeii1TJDclfcj

11、s.回lu<yii,:JU.;J.J.J,LI4b.一L坷*:;W.;下门我.,L一1,罚L.iJ.j.R'.一炉小一Larli时序仿真图分析:图中的stop为汽车停止输入端,上升沿有效;start为汽车启动输入端,上升沿有效;pause为汽车暂停输入端,上升沿有效;speed为汽车速度输入端,上升沿有效。CLK为时钟源信号;money为汽车车费输出端,run为汽车路程输出端。由图可知:当stop,Start,pause,speed全为高电平时路程按5的速度增加,车费为700.当路程增加到300时,车费变为920,以后路程每增加100,车费增加220。2.2 x模块此模块为数据转

12、换模块,功能是将计费模块产生的车费与路程的模拟量转换成数字量并输出,它是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。其中DACLW时钟信号,ASCOFREBSCORE接计费模块的MONEYrun,输出为2个4位的十进制数,可以分别表示路程和车费情况。当车运行丁不同状况时,此模块会将不同的车费与路程状况转换为数字量并输出。x模块的源程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityxisport(daclk:instd_logic;ascore,bscore

13、:inintegerrange0to8000;age,ashi,abai,aqian,bge,bshi,bbai,bqian:outstd_logic_vector(3downto0);endx;architecturert1ofxisbeginprocess(daclk,ascore)variablecomb1:integerrange0to8000;variablecomb1a,comb1b,comb1c,comb1d:std_logic_vector(3downto0);beginif(daclk'eventanddaclk='1')thenif(comb1<

14、;ascore)thenif(comb1a=9andcomb1b=9andcomb1c=9)thencomb1a:="0000"comb1b:="0000"comb1c:="0000"comb1d:=comb1d+1;comb1:=comb1+1;elsif(comb1a=9andcomb1b=9)thencomb1a:="0000"comb1b:="0000"comb1:=comb1+1;comb1c:=comb1c+1;elsif(comb1a=9)thencomb1a:="000

15、0"comb1b:=comb1b+1;comb1:=comb1+1;elsecomb1a:=comb1a+1;comb1:=comb1+1;endif;elseashi<=comb1b;age<=comb1a;abai<=comb1c;aqian<=comb1d;comb1:=0;comb1a:="0000"comb1b:="0000"comb1c:="0000"comb1d:="0000"endif;endif;endprocess;process(daclk,bscore)va

16、riablecomb2:integerrange0to8000;variablecomb2a,comb2b,comb2c,comb2d:std_logic_vector(3downto0);beginif(daclk'eventanddaclk='1')thenif(comb2<bscore)thenif(comb2a=9andcomb2b=9andcomb2c=9)thencomb2a:="0000"comb2b:="0000"comb2c:="0000"comb2d:=comb2d+1;comb2:=

17、comb2+1;elsif(comb2a=9andcomb2b=9)thencomb2a:="0000"comb2b:="0000"comb2:=comb2+1;comb2c:=comb2c+1;elsif(comb2a=9)thencomb2a:="0000"comb2b:=comb2b+1;comb2:=comb2+1;elsecomb2a:=comb2a+1;comb2:=comb2+1;endif;elsebshi<=comb2b;bge<=comb2a;bbai<=comb2c;bqian<=comb

18、2d;comb2:=0;comb2a:="0000"comb2b:="0000"comb2c:="0000"comb2d:="0000"endif;endif;endprocess;endrt1;程序分析:首先打开ieee库,用use语句声明使用std_logic_1164和std_logic_unsigned程序包。定义实体,daclk、ascore、bscore为输入,age、ashi、abai、aqian、bge、bshi、bbai、bqian为输出位欠量。然后定义结构体,daclk、ascore、bscor

19、e为敏感信号,定义变量comb1a,comb1b,comb1c,comb1cfe位欠量,变量comb1为0到7000围。当时钟上升沿到来时,各个变量分别实现个、十、白、千的进位。然后实现一个循环。然后再将各个变量付给各个位欠量。X模块的时序仿真图g)“0.0nsmm1aJu1加.忡1*413BqtIDK:¥:了(WL;工:匚roicr田lEhiB*no国ill31BFODDO11t0090上ucxeJCMMOUKOMO:KdCMOOMC:Jf他颁如0ip;烦(DDCLsLssID1JDDHLX皿3血fyh«l皿Bidss3iscar|IXWKWOOLKITWDOOWrjlr

20、aoawwijLIounicHriLum:uwiuoiidkjuinnmuiwnininjJuvw_ojuuwjuuniLwjmowuuum驰DuMOuTGlfm40dEF举p也bk>Jt田普IfLOil#TfIOILiXil田iliiiHEC-Sdu黑OTQ田AfCWI.皿皿:厂ynnaHOKiLLiDXKqKEWXijnnjfflcooLSmciectciB3nintIMmZXZimi)cma国ailu3nn?.ID国bu*s邮*I«wr皿皿X皿gmtmi_r_aiarftrfiri!-Xowim-janKToifflira:押mwiuumjuiTuuuuuinrumnuu

21、uuuuuuuuuuuinjuuuuuuuinnnrjinnnjuirjinnrmjEKQ.Hmn*叫E恤N国.«»Biin-ETIulL匚国UQHulflBOJ国M国出B9Bdeni园HlECiTAGO£zijocmwKKClIEOICluajLiiOLdijOltll¥zxzbyQ珈:w厂皿fJiL1W田h=iaHnan:ShisB-iBOKDUbqLn.BODCDUIllEWVbloitHULU点usaaKaaiignaonoojLtiiii.il1iULILIftuimmLttiDd心jinnoinnrjvjnnmrjirwjrjnfunjiuj

22、nninrLronmnrjinr时序仿真图的分析转换模块的时序仿真图如下图所示:可见能将路程和车费转换为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。2.3 sel模块此模块为片选信号产生模块,功能是选择八段数码管按照设计要求进行正确的显示。其具体的对应关系如下表所示:接口序勺数码管SEL2SEL1SEL0状态111第1位亮110第2位亮101第3位亮100第

23、4位亮011第5位亮010第6位亮001第7位亮0XX第8位亮在该模块中CLK为时钟信号,A2.0为片选输出,用丁选择数码管,连接译码显示模块的片选端C2.0ose模块的源程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityselisport(clk:instd_logic;a:outstd_logic_vector(2downto0);endsel;architecturert1ofselisbeginprocess(clk)variableb:std_logic_vector(2d

24、ownto0);beginif(clk'eventandclk='1')thenif(b="111")thenb:="000"elseb:=b+1;endif;endif;a<=b;endprocess;endrt1;sel模块的波形图:2.4 变化,该模块可将模拟信号进行片选并有对应的数码管进行显示xxxl模块此模块为显示模块中的动态扫描/译码/数码管显示模块,功能是将已转换好的数字量加载到两个4位七段数码管上并加以显示。C2.0为片选端,用来连接片选模块的片选输出端A2.0,A1、A2、A3、A4B1、B2、B3B4分别

25、连接数据转换模块的八个转换输出端,因为设计要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的DP端,D3.0连接数码管控制模块的输入端。xxx1模块的源程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityxxxlisport(c:instd_logic_vector(2downto0);dp:outstd_logic;a1,a2,a3,a4,b1,b2,b3,b4:instd_logic_vector(3downto0);d:outstd_logic_vect

26、or(3downto0);endxxxl;architecturertlofxxxlisbeginprocess(c,a1,a2,a3,a4,b1,b2,b3,b4)variablecomb:std_logic_vector(2downto0);begincomb:=c;casecombiswhen"000"=>d<=a1;dp<='0'when"001"=>d<=a2;dp<='0'when"010"=>d<=a3;dp<='1'w

27、hen"011"=>d<=a4;dp<='0'when"100"=>d<=b1;dp<='0'when"101"=>d<=b2;dp<='0'when"110"=>d<=b3;dp<='1'when"111"=>d<=b4;dp<='0'whenothers=>null;endcase;endprocess;endrtl;

28、xxx1模块的时序仿真图:V-alii120fas也1H财u100pas虹痴LbieLBT.'Lh>oaiDIcrriiXEitrailoiod;DllJLmmI111戚-:laiDijjidj1DL1XlQD三ILEBl0BITanieemuImkDion5四Iduoinuii1DJUKIH:laxi丁IIII11CO!_IDIJma9洞eaOOQDITOJfnjin:illDIEtD<l;miatcan*im:IIDIJJIDJCIDLlflQD:io国1btnCM】Iniuf(JDL£DioXold1Inn:Efjoinion:jcuTLOQJ:(JlLUx

29、lh:WTHecu"olnrOno:-iijinrimi>ininfTbjiiinj'|山IHUITnTftod:mFteboiomriii;iH:2,LITIU:idirTIT'in:mITiirxOKOXMl:'iID9uBOLORDIorulitcooXJD:HKL04D!ieii5fTIMXir.3mii1'1:mYwi.rif)10bl顼mIi"iJal:(in0xLIMJriiJ1'llJniXir:n-tiIIIIt:cmI0011IDbOO国aVQI响二010XOH1_|OPIIIIIIQIHIIOQBIsiIm

30、uIonImtIIIIJ国tsaOTDImoXDUffi1M1|II'l'-I-inJLL9(n_n«taiQMi1LJLJLu90皿wn.aii¥id&dhl1心Drn.WDSdLL»Q411kLfliflin190ftmbffl.A1FFMElh.IKQijB.n国Hnetjjili削T万0LXjli<'(ijLir;net;l.Ll:1-10:Ljj(IO)15DLcILiJTLLIO"AwY'DCiiirijd-McifflIJOLTU3IQI03nILiw:】心T邸tL-ii:t3D0Illul.1

31、53KI1LJLIWllI虹JBJa7D>X-.1OJK1XMLX”】*QLUjimI(LJU.LHI£IIQDX;MKILIOhLL1IL或z叫XXIQBQ3mu):0911XIMXTO!);UMX皿J顷JKIM:.E:':LI:成7«>vj;.-阳J-DlffiLJPl1国hiba:nI:Dmi;:1011XIQU工Jldl;IlDI:iiD?.GinJmxiXHDL£D3IQ;(D01IJmFpm!yiQMBSeJ.hhlXidic:ionXileuXina1LLR:LE】IBOffiX.皿1XJ3L:厂而JfDIOCi.r皿iDEHD|

32、llQmBScanJ.jDiaXinilJULIJuniIila;mlUKX皿1tUILD)joil77dledJDial%PLEDIdu】mId*Elj<碰.XX1.IKJ1血;(ILI>I111:;典m<cjdxoilix邮KMUIJOlJt:£住;JB-*11JtICOxHiY旭KrmimaIniihxHLEi&川1!:七Qivar“inrsnftimicXunrJun!im:i-.jhfL3ioyqmxthexwXano:cMT;皿IQ由上图可知,输入信号C为3位片选信号其变化围为0到乙输入信号c从0到7逐个变化时,输出d逐个输al,a2,a3,a4

33、,bl,b2,b3,b4的输入信号。2.5 di模块此模块为数码管控制模块,功能是控制七段数码管对转换后的数字量进行显示,使其完成路程和车费的显示。其中D3.0连接动态扫描/译码/数码管显示模块的D3.0端,Q6.0连接七段数码管,利用其控制特性在数码管上显示出车费和路程。di模块的源程序:libraryieee;useieee.std_logic_1164.all;entitydiisport(d:instd_logic_vector(3downto0);q:outstd_logic_vector(6downto0);enddi;architecturertlofdiisbeginproce

34、ss(d)begincasediswhen"0000"=>q<="011111T'when"000T'=>q<="0000110"when"0010"=>q<="101101T'when"001T'=>q<="100111T'when"0100"=>q<="1100110"when"010T'=>q<="11

35、0110T'when"0110"=>q<="111110T'when"011T'=>q<="010011T'when"1000"=>q<="111111T'whenothers=>q<="1101111"endcase;endprocess;endrtl;di模块的时序仿真图:从波形图中可看出,此模块可控制数码管完成对数字量的显示。当输入为0000-1000时数码管分别显示0,1,2,3,4,5,6,乙8。当

36、输入为其他时数码管显示9。2.6 div模块div模块将实验箱上50Mhz脉冲信号分频为500hzdiv模块源程序:LIBRARYieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYdivISport(clk:INstd_logic;clkout:OUTstd_logic);enddiv;ARCHITECTUREoneOFdivISBEGINprocess(clk)variablet:integerrange0to100000;variabletmp:std_logic;beginifclk'even

37、tandclk='1'thenift>=99999thencnt:=0;tmp:=nottmp;elset:=cnt+1;endif;endif;clkout<=tmp;endprocess;endone;div模块时序仿真波形:div将时钟信号分频,使频率减小decode3_8模块sel通过decode3_8模块选择数码管decode3_8模块源程序:LIBRARYieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYdecode3_8ISPORT(SEL:INstd_logic_

38、vector(2downto0);Q:OUTstd_logic_vector(7downto0);ENDdecode3_8;ARCHITECTUREaOFdecode3_8ISBEGINQ<="11111110"whensel=0else"11111101"whensel=1else"11111011"whensel=2else"11110111"whensel=3else"11101111"whensel=4else"11011111"whensel=5else&qu

39、ot;10111111"whensel=6else01111111"whensel=7else11111111H.ENDa;decode3_8模块时序仿真波形图:decode3_8模块选择数码管,当sel信号从0-7变化时,依次选择1-8八个数码管。第3章总体电路图整体工作情况:3.1、模块连接:计费模块的clk、start、stop、pause和speed端连接输入,money12.0和run12.0连接转换模块的ascore12.0与bscore12.0;转换模块的daclk端连接输入,age3.0至bqian3.0连接动态扫描/译码/数码管显示模块的a13.0至b43

40、.0;动态扫描/译码/数码管显示模块的C2.0连接片选输出SEL2.0,DP端连接输出DPD3.0连接数码管控制模块的D3.0;片选信号产生模块的CLK端与输入信号相连,并连接转换模块的DACL胤,A2.0连接片选输出SEL2.0,并与动态扫描/洋码/数码管显示模块的C2.0相连;数码管控制模块的D3.0端与动态扫描/译码/数码管显示模块的D3.0端相连,Q6.0端连接八段数码管输出Q6.0。3.2、硬件连接:CLK接pin-28输入为1hz的脉冲;daclk是实验箱上50Mhz固定晶振STARTSTOPPAUSESPEE肉别连接按键开关,用于控制车的启动、停止、暂停和速度;DP和Q6.0分别

41、连接八段码显示单元的a到dp;W7.0接数据线。3.3、结果分析:该电路的仿真波形图如下:clk为jifei模块时钟信号,daclk为时钟信号,stop为汽车停止输入端;start为汽车启动输入端;pause为汽车暂停输入端;speed为汽车速度输入端。DP表示小数点。M.F10BCIni13在cU.I1l_iKlkD:_i一i_r-i_-_l_-:_rn-1_JIUTJB>(Ml*1GIVIA把1(?,1i_11_iLB<£&L3fiUJIL9ivnn(iHIT:网1ni,jiiJir;nnwi1:irm,rniiiY)十iYUTiiirinnno:mr而

42、9;H-TFi“:“:PM1>|8'W181顽1DB>liaJn,M:1«IfHh1_J11m3JE«7Ibn-LJL-r-Lr-LrLrnr-L_rL_r-|_r-L_r-L_nyB5顷tBiLT5B顽hBi1一iiiii"S1131)(amil。XDlilJItJi*/l'SiBId)1119101):iii(ni):iiiiKiiiXHiomiXihjrim:Oiinnu):('1ilihi>'iiihim:'):Jiinm】Xmii'ioi)iiuin1ilniDJmMH廿35B*BiJim3职4>n油JLSdiEkBi_r_LJ_L_r_L_r_L_r_LJ_L_rL_r_LJL_r_L_r_L_rLi*3JI-BUBiLrisH,顼,*H;!11111r9qbmoiijl1:laiionXmiijXdqul:niiniJiLrir)L£IJllUitiiyJII"III(lUtHILi:(JlDltJII:l£:JIII."Jill-JIIILLIIIIJXLUIIL'I:tIILEII(ILldlLI);SlltllJI:IIGjlll!岫1B

温馨提示

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

评论

0/150

提交评论