版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . . . 数电课程设计报告设计课题:出租车计价器: 班级: 学号:指导老师 0引言随着我国市场经济的发展,交通也越来越便利,特别是计程车,以快捷、方便的特点早已盛行各个城市,成为城市交通的重要工具。计程车市场从90年代初的起步阶段到现在已经进入了高峰期。随着城市化水平的提高和人民生活水平的改善,计程车的服务也就显得越来越重要。因此计程车计价器也就应运而生了。本设计就是针对目前计程车计价器的问题设计的一种基于可编程逻辑器件FPGA的ASIC,并用超高速硬件描述语言VHDL编程实现的可同时显示金额、乘车时间、乘车总路程的“多功能”计价器。有较好的实用价值和较高的可行性。一、整体方案设计实现计程
2、车的计价器功能。一方面实现基本功能时,包括在行程中满足2公里以计起步价6 元,以后在车行2公里后且10公里以再按1.8元/公里,10公里以后按2.2元/公里计费;处于等待的状态下满足5 分钟以不计价,以后以2元/分计费。另一方面多功能的实现,计价器可以显示总费用,总行程数和总乘车时间等等。实现模拟功能:能模拟汽车启动、停止等状态。设计的主要技术指标如下:1、计价围:0999.0元 计价分辨率: 0.1元。2、计程围:099公里 计价分辨率:1公里。3、计时围: 59分59秒 计时分辨率:1秒(<1小时)设计方案比较方案一:用单片机实现:通过软件编程,仿真,调试,符合要求后将程序用编程器写
3、入到单片机芯片上。利用单片机的中断响应乘客开车或者等待的请求,进行相应的处理。利用寄存器存放计价器系统运行状态,从而可以根据整个行程的状态进行计价。方案二:用FPGA(可编程门阵列)实现:利用硬件描述语言编程,仿真调试后下载到可编程逻辑器件(CPLD)上实现。可以对计程车整个过程进行判断、处理。整个过程完全实现了自动化和智能化。比较而言,方案一的开发与制作成本较低,能较大程度地利用资源,但外围电路较多,调试复杂,抗干扰能力差,特别对这种计程车的计价器需要长时间不间断运作的系统,由于主要是软件运作,容易出错,造成系统不稳定。方案二将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,并且
4、可应用EDA软件仿真,调试,易于进行功能扩展,外围电路较少,采用硬件逻辑电路实现,其最大的优点是稳定性好,抗干扰能力强,非常适合作为计程车的计价器系统的控制核心。基于对以上各个因素的考虑,我们觉得FPGA实现计程车的计价器的设计更设计的要求,提升设计的可行性。因此,决定选用以FPGA为核心,用VHDL编程来实现计价器的设计。二、系统模块划分将系统分为三个大模块:1 系统各项计费功能的实现;CP1端输入的脉冲信号经系统部分频后做为模拟行车里程信号。CP2端输入脉冲信号进系统部分频后做为行车时间信号。RR为复位信号,RR=1时计价器清零,RSTN为计价器开关。CASH150 MILES150 TI
5、MES150 端分别输出乘车费用,行车里程,行车总时间,它们都是用16位2进制BCD码表示。2 各模块的LCD显示模块。BUSY:控制器忙信号,数据未显示稳定时BUSY=1;反之为0;CASHH70 CASHL70 :乘车费用16位2进制BCD码的高8位数据和低八位数据;CPIN :输入工作时钟信号;MILEH70 MILEL70 : 行车里程16位2进制BCD码的高8位数据和低八位数据;R : LCD显示开关;TMH70 TML70 :行车时间16位2进制BCD码的高8位数据和低八位数据;ADDR30:字符在LCD屏幕上的地址(共两行,每行16个字符) ADDR=“0000”“1111”对应
6、每行的第015个字符;CLK: 控制器工作时钟,上升沿有效;DATA 70 :ASCII码数据总线;OUTLINE:LCD1602屏幕上的行选择信号,LINE=0时数据在第一行显示,LINE=1时数据在第二行显示;RST:复位信号,高电平有效;STORB:E数据输入有效使能,高电平有效;3 LCD控制显示模块CLK:控制器工作时钟,上升沿有效RST:复位信号,高电平有效DATA7.0:ASCII码数据总线ADDR3.0:字符在LCD屏幕上的地址(共两行,每行16个字符) ADDR=“0000”“1111”对应每行的第015个字符LINE: LCD1602屏幕上的行选择信号,LINE=0时数据在
7、第一行显示,LINE=1时数据在第二行显示BUSY: 控制器忙信号,数据未显示稳定时BUSY=1;反之为0STROBE: 数据输入有效使能,高电平有效LCD显示器接口:LCD_E:LCD显示器使能LCD_RW:LCD读写方向控制LCD_RS:LCD命令,数据选择LCD_DATA_TRI:LCD数据高阻态控制LCD_DATAO:LCD数据输出总线LCD_DATAI:LCD数据输入总线三、主要VHDL源程序1、计费功能的实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity JFQZMK i
8、s port (CP1 ,CP2,RR,RSTN: IN STD_LOGIC; MILES,CASH,TIMES: OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );end JFQZMK ;architecture JFQLL of JFQZMK is SIGNAL CASHOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); -由CASHTIME&CASHMILE组成-十个十米记为0.1KM的SIGNAL(模拟轮子转一圈走十米) SIGNAL CT:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CP3:STD_LOG
9、IC;-十个十米记为0.1KM的SIGNAL-十个0。1KM脉冲记为1KM的SIGNAL SIGNAL T:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CP:STD_LOGIC;-十个0。1KM脉冲记为1KM的SIGNAL-时间计数与分频的SIGANAL SIGNAL COUNTER_REG : STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL COUNTER :STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL TIMESOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CLK
10、:STD_LOGIC;-时间计数与分频的SIGANAL-里程计算部分的SIGNAL SIGNAL MILESOUT: STD_LOGIC_VECTOR(15 DOWNTO 0);-里程计算部分的SIGNAL-行车计费部分的SIGNAL SIGNAL CASHL: STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CASHH: STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CASHMILE: STD_LOGIC_VECTOR(15 DOWNTO 0);-行车计费部分的SIGNAL-停车计费部分的SIGNAL SIGNAL COST : ST
11、D_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CV: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CASHTIME: STD_LOGIC_VECTOR(15 DOWNTO 0);-停车计费部分的SIGNAL-将16位二进制价格转换到BCD码 FUNCTION CONVERT(AA:STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS VARIABLE AN:STD_LOGIC_VECTOR(15 DOWNTO 0); VARIABLE S:STD_LOGIC_VECTOR(15 DOWNTO 0);BE
12、GIN AN:=X"0000"S:=X"0000" FOR N IN 0 TO 15 LOOP IF AA(N)='1' THEN CASE N IS WHEN 0 => AN:=X"0001" WHEN 1 => AN:=X"0002" WHEN 2 => AN:=X"0004" WHEN 3 => AN:=X"0008" WHEN 4 => AN:=X"0016" WHEN 5 => AN:=X&qu
13、ot;0032" WHEN 6 => AN:=X"0064" WHEN 7 => AN:=X"0128" WHEN 8 => AN:=X"0256" WHEN 9 => AN:=X"0512" WHEN 10 => AN:=X"1024" WHEN 11 => AN:=X"2048" WHEN 12 => AN:=X"4096" WHEN 13 => AN:=X"8192" WH
14、EN OTHERS => AN:=X"0000" END CASE; IF ("0" & S(3 downto 0) + ("0" & AN(3 DOWNTO 0)>"01001" THEN S(3 DOWNTO 0):=S(3 DOWNTO 0)+AN(3 DOWNTO 0)+"0110" S(15 DOWNTO 4):=S(15 DOWNTO 4)+X"001" ELSE S(3 DOWNTO 0):=S(3 DOWNTO 0)+AN(3 DO
15、WNTO 0); END IF; IF ("0" & S(7 DOWNTO 4) + ("0" & AN(7 DOWNTO 4)>"01001" THEN S(7 DOWNTO 4):=S(7 DOWNTO 4)+AN(7 DOWNTO 4)+"0110" S(15 DOWNTO 8):=S(15 DOWNTO 8)+X"01" ELSE S(7 DOWNTO 4):=S(7 DOWNTO 4)+AN(7 DOWNTO 4); END IF; IF ("0&quo
16、t; & S(11 DOWNTO 8) + ("0" & AN(11 DOWNTO 8)>"01001" THEN S(11 DOWNTO 8):=S(11 DOWNTO 8)+AN(11 DOWNTO 8)+"0110" S(15 DOWNTO 12):=S(15 DOWNTO 12)+X"1" ELSE S(11 DOWNTO 8):=S(11 DOWNTO 8)+AN(11 DOWNTO 8); END IF; S(15 DOWNTO 12):=S(15 DOWNTO 12)+AN(15
17、 DOWNTO 12); END IF; END LOOP; RETURN S; END FUNCTION; -将16位二进制价格转换到BCD码BEGIN-10个脉冲记为0.1KM的实现PROCESS(CP1,RR) -CP1,RR INPUT SIGNALBEGINIF RR='1' THENCT<=X"0000"ELSIF CP1='1' AND CP1'EVENT THENIF CT="01001" THEN CT<=X"0000" CP3<='1' EL
18、SE CP3<='0' CT<=CT+"00001" END IF;END IF;END PROCESS;-10个脉冲记为0.1KM的实现-10个0。1KM脉冲记为1KM的实现PROCESS(CP3,RR)BEGINIF RR='1' THENT<=X"0000"ELSIF CP3='1' AND CP3'EVENT THEN IF T="01001" THEN T<=X"0000" CP<='1' ELSE CP
19、<='0' T<=T+"00001" END IF;END IF;END PROCESS;-10个0。1KM脉冲记为1KM的实现完-将时间脉冲分频 PROCESS(CP2,RR) BEGIN IF RR='1' THEN COUNTER_REG<="1111"-X"989680" -仿真时设为2 COUNTER <= X"00000000" CLK<='0' ELSE IF CP2='1' AND CP2 'EVE
20、NT THEN IF COUNTER>=COUNTER_REG THEN COUNTER<=X"00000000" CLK<=NOT CLK; ELSE COUNTER<=COUNTER+1; END IF; END IF;END IF;END PROCESS;-时间脉冲分频完-时间计数的实现PROCESS(CLK,RR)VARIABLE TIMESOUT_I:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINIF RR='1' THEN TIMESOUT<=X"0000" TIMESOU
21、T_I:=X"0000"ELSIF CLK='1' AND CLK'EVENT THEN IF TIMESOUT_I(15 DOWNTO 0)="11001" THEN -16位二进制数转BCD码 TIMESOUT_I:=X"0000" ELSE IF TIMESOUT_I(11 DOWNTO 0)="1" THEN TIMESOUT_I(11 DOWNTO 0):="0" TIMESOUT_I:=TIMESOUT_I+"00000" ELSE IF
22、TIMESOUT_I(7 DOWNTO 0)="01011001" THEN TIMESOUT_I(7 DOWNTO 0):="00000000" TIMESOUT_I:=TIMESOUT_I+"00000" ELSE IF TIMESOUT_I(3 DOWNTO 0)="1001" THEN TIMESOUT_I(3 DOWNTO 0):="0000" TIMESOUT_I:=TIMESOUT_I+"10000" ELSE TIMESOUT_I:=TIMESOUT_I+&q
23、uot;00001" END IF; END IF; END IF; END IF; TIMESOUT<=TIMESOUT_I;END IF; -16位二进制数转BCD码END PROCESS;-时间计数的实现完-里程计算部分PROCESS(CP3,RR)VARIABLE MILESOUT_I:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINIF RR='1' THENMILESOUT<=X"0000"MILESOUT_I:=X"0000"ELSIF CP3='1' AND CP
24、3'EVENT THEN IF MILESOUT_I(15 DOWNTO 0)="11001" THEN -16位二进制数转BCD码 MILESOUT_I:=X"0000" ELSE IF MILESOUT_I(11 DOWNTO 0)="1" THEN MILESOUT_I(11 DOWNTO 0):="0" MILESOUT_I:=MILESOUT+"00000" ELSE IF MILESOUT_I(7 DOWNTO 0)="10011001" THEN MIL
25、ESOUT_I(7 DOWNTO 0):="00000000" MILESOUT_I:=MILESOUT_I+"00000" ELSE IF MILESOUT_I(3 DOWNTO 0)="1001" THEN MILESOUT_I(3 DOWNTO 0):="0000" MILESOUT_I:=MILESOUT_I+"10000" ELSE MILESOUT_I:=MILESOUT_I+"00001" END IF; END IF; END IF; END IF; -16位
26、二进制数转BCD码MILESOUT<=MILESOUT_I;END IF;END PROCESS;-里程计算部分完-行车计费部分PROCESS(MILESOUT,RR)BEGINIF RR='1' THENCASHL<=X"0000"ELSIF MILESOUT <"00000" THEN CASHL<="11100"ELSE CASHL<="11100"END IF;END PROCESS;PROCESS(MILESOUT,CP,RR)BEGINIF RR='
27、1' THENCASHH<=X"0000"ELSIF CP='1' AND CP'EVENT THEN IF MILESOUT <"00000" THEN CASHH<=X"0000" ELSIF MILESOUT <"00000" THEN CASHH<=CASHH+"10010"-行程<=10公里,1.8元/公里 ELSE CASHH<=CASHH+"10110"-行程>10公里,2.2元/公
28、里 END IF;END IF;END PROCESS;PROCESS(CASHH,CASHL,RR)BEGINIF RR='1' THENCASHMILE<=X"0000"ELSECASHMILE<=CASHH+CASHL;END IF;END PROCESS;-行车计费部分完-停车计费部分PROCESS(MILESOUT,CLK,RR)BEGINIF RR='1' THEN COST<=X"0000"CV<=X"00"CASHTIME<=X"0000"
29、;ELSIF CLK='1' AND CLK 'EVENT THEN IF COST/=MILESOUT THEN CV<="00000000" ELSIF CV="00000101" THEN CASHTIME<=CASHTIME+"00010"-停车超过5分钟,每等一分钟2元 ELSE CV<=CV+"00000001" END IF; COST<=MILESOUT;END IF;END PROCESS;-停车计费部分完-计价部分PROCESS(CASHTIME,
30、CASHMILE,RR)VARIABLE CASHOUT_I:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINIF RR='1' THENCASHOUT_I:=X"0000"ELSE CASHOUT_I:=CONVERT(CASHTIME+CASHMILE);END IF; CASHOUT<=CASHOUT_I;END PROCESS;-计价部分完-输出部分PROCESS(MILESOUT,CASHOUT,TIMESOUT)BEGINMILES<=MILESOUT;CASH<=CASHOUT;TIMES<=TIM
31、ESOUT;END PROCESS;-输出部分完END JFQLL;2、各模块的LCD显示模块。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity JFQLCD is port (CPIN,R,BUSY :IN STD_LOGIC; TMH,TML,MILEH,MILEL,CASHH,CASHL :IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC; DATA : OUT STD_LOGIC_VE
32、CTOR(7 DOWNTO 0); ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );end JFQLCD;architecture JFQ of JFQLCD is TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES; SIGNAL LCDPT : INTEGERRANGE 0 TO 23; SIGNAL CPCT : INTEGERRANGE 0 TO 65535; SIGNAL CP: STD_LOGIC;beginPROCESS(CPIN,R)BEGINCLK<=CPIN;IF R='1
33、39; THEN CPCT<=65535;ELSIF CPIN='1' AND CPIN 'EVENT THEN IF CPCT=0 THEN CPCT<=65535;CP<=NOT CP; ELSE CPCT<=CPCT-1; END IF;END IF;END PROCESS;PROCESS(CP,R)BEGINIF R='1' THEN S<=S0;LCDPT<=0;RST<='1'ELSIF CP='1' AND CP 'EVENT THEN CASE S IS W
34、HEN S0=> S<=S1;LCDPT<=0;RST<='1' WHEN S1=> RST<='0'STROBE<='0' IF BUSY='0' THEN LCDPT<=LCDPT+1; IF LCDPT=10 THEN S<=S3; ELSE S<=S2; END IF; END IF; WHEN S2=> S<=S1;STROBE<='1' WHEN S3=> STROBE<='0' IF BUSY=&
35、#39;0' THEN IF LCDPT=23 THEN LCDPT<=10; ELSE LCDPT<=LCDPT+1; END IF; S<=S4; END IF; WHEN S4=> STROBE<='1'S<=S3; WHEN OTHERS=> NULL; END CASE;END IF; END PROCESS; PROCESS(LCDPT,TMH,TML,CASHH,CASHL,MILEH,MILEL)BEGINCASE LCDPT ISWHEN 0 => NULL;WHEN 1=> DATA<=&q
36、uot;00111010"ADDR<="0011"OUTLINE<='0' -:WHEN 2=> DATA<="00101110"ADDR<="1011"OUTLINE<='0' -.WHEN 3=> DATA<="01001011"ADDR<="1101"OUTLINE<='0' -KWHEN 4=> DATA<="01101101"ADDR&l
37、t;="1110"OUTLINE<='0' -mWHEN 5=> DATA<="01000011"ADDR<="0010"OUTLINE<='1' -CWHEN 6=> DATA<="01000001"ADDR<="0011"OUTLINE<='1' -AWHEN 7=> DATA<="01010011"ADDR<="0100"OUTLI
38、NE<='1' -SWHEN 8=> DATA<="01001000"ADDR<="0101"OUTLINE<='1' -HWHEN 9=> DATA<="00111010"ADDR<="0110"OUTLINE<='1' -:WHEN 10=> DATA<="00101110"ADDR<="1011"OUTLINE<='1' -.-L
39、CDPT=722 显示FS1FS8-LCDPT=2325 显示ZB/TMWHEN 11=>DATA<="0011"&TMH(7 DOWNTO 4);ADDR<="0001"OUTLINE<='0'WHEN 12=>DATA<="0011"&TMH(3 DOWNTO 0);ADDR<="0010"OUTLINE<='0'WHEN 13=>DATA<="0011"&TML(7 DOWN
40、TO 4);ADDR<="0100"OUTLINE<='0'WHEN 14=>DATA<="0011"&TML(3 DOWNTO 0);ADDR<="0101"OUTLINE<='0'WHEN 15=>DATA<="0011"&MILEH(7 DOWNTO 4);ADDR<="1000"OUTLINE<='0'WHEN 16=>DATA<="0011&
41、quot;&MILEH(3 DOWNTO 0);ADDR<="1001"OUTLINE<='0'WHEN 17=>DATA<="0011"&MILEL(7 DOWNTO 4);ADDR<="1010"OUTLINE<='0'WHEN 18=>DATA<="0011"&MILEL(3 DOWNTO 0);ADDR<="1100"OUTLINE<='0'WHEN 19=
42、>DATA<="00100000"ADDR<="0111"OUTLINE<='1'WHEN 20=>DATA<="0011"&CASHH(7 DOWNTO 4);ADDR<="1000"OUTLINE<='1'WHEN 21=>DATA<="0011"&CASHH(3 DOWNTO 0);ADDR<="1001"OUTLINE<='1'WHEN 22=>DATA<="0011"&CASHL(7 DOWNTO 4);ADDR<="1010"OUTLINE<='1'WHEN 23=>DATA<="0011"&CASHL(3 DOWNTO 0);ADDR<="1100"OU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度施工员通关题库【达标题】附答案详解
- 纺织企业生产效率提升办法
- 某铝厂原材料入库制度
- 2026汉江水利水电(集团)有限责任公司及所属单位招聘91人备考题库(管理与专业技术岗位)完整参考答案详解
- 2026天津立度资产经营管理有限责任公司社会招聘工作人员1人备考题库带答案详解(达标题)
- 2026四川德阳市就业创业促进中心市本级公益性岗位招聘1人备考题库附参考答案详解(完整版)
- 2026湖北长江产融资本投资有限公司招聘5人备考题库附参考答案详解【完整版】
- 2026山东东营锦苑大地幼儿园招聘幼儿园教师1人备考题库带答案详解(黄金题型)
- 2026江西萍乡市融资担保集团有限公司招聘员工4人备考题库含答案详解(典型题)
- 2026四川成都市邛崃市招聘事业单位人员13人备考题库带答案详解(预热题)
- 幼儿园谷雨课件
- 量子计算入门:通过线性代数学习量子计算 课件 第11章 量子傅里叶变换
- 行政处罚法专题培训课件
- 园区党组织管理制度
- 2025年四川省泸州市中考道德与法治真题(附答案解析)
- 2025届河北省邢台市英语八下期末联考试题含答案
- CJ/T 107-2013城市公共汽、电车候车亭
- 心电图基础知识与识图理论考核试题题库及答案
- 2025年四川省德阳市中考一模化学试题(含答案)
- 智能化弱电培训
- 杭州中好电子有限公司搬迁项目环评报告
评论
0/150
提交评论