arm出租车计价器系统.docx
- 文档编号:25695768
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:22
- 大小:407.58KB
arm出租车计价器系统.docx
《arm出租车计价器系统.docx》由会员分享,可在线阅读,更多相关《arm出租车计价器系统.docx(22页珍藏版)》请在冰豆网上搜索。
arm出租车计价器系统
《》
课程设计报告
题目:
出租车计价器系统
专业:
)
班级:
学号:
姓名:
指导教师:
完成日期:
目录
一、前言1
1.1课题研究背景1
1.2课程研究目的和意义1
二、需求分析1
三、开发环境及系统结构2
3.1开发环境2
3.2系统结构2
四、详细设计3
五、结论17
参考文献18
一、前言
1.1课题研究背景
嵌入式系统反映了当代最新的技术水平。
嵌入式系统不仅和一般的PC机上的应用系统不同,就是针对不同的具体应用而设计的嵌入式系统之间差别也很大。
嵌入式系统一般功能单一,简单而且兼容性方面要求不高,但是在大小和成本方面限制较多。
1.2课程研究目的和意义
在本实验中以三星S3C6410开发板和7个7段数码管为基础,设计一个出租车简易计价器,用FPGA开发板的按键手动来控制出租车的状态,即行驶或等待,数码管显示当前的行驶里程,等待时间以及总共的费用。
二、需求分析
随着汽车的普及人们出行的需求出租车行业越来越繁盛,随之而来的便是关于乘客出租车计费的标准化要求,本设计根据乘客以及车主的实际情况来进行设计,具备的功能如下:
(1)异步复位,复位信号与时钟信号不同步。
(2)基准时钟(50MHZ)由原来的每秒跳变50M下分成每秒跳变3下,即便于人眼的观察,设计5秒钟里程变化一公里,6秒钟时间等待为一分钟。
(3)用一个拨码开关来控制当前的状态,如果是高电平1则开始计里程,如果是低电平0则开始计等待时间。
(4)用7个7段数码管来显示当前的里程,等待时间以及最后的费用。
(5)手动控制计费系统,当一位客人下车而另一位客人上车则按复位键清0,使得数码管只显示起始价8元。
三、开发环境及系统结构
3.1开发环境
三星s3c6410开发板
3.2系统结构
1、结构图
图1
2、顶层划分
图2
四、详细设计
1、输入输出信号描述
信号
输入/输出
目标/源
功能描述
clk
input
pin
系统时钟(50MHZ)
reset
input
pin
异步清零,低电平有效
start
input
pin
状态选择,1时计里程,0时计等待时间
hex0
input
pin
显示里程的十位上的数字
hex1
input
pin
显示里程个位上的数字
hex2
output
pin
显示计时十位上的数字
hex4
output
pin
显示计时个位上的数字
hex5
output
pin
显示计费百位上的数字
hex6
output
pin
显示计费十位上的数字
hex7
output
pin
显示计费个位上的数字
表1
2、分频模块
modulefenpin(clk,reset,clk_1);
inputclk,reset;
outputclk_1;
regclk_1;
reg[29:
0]count;
always@(posedgeclk,negedgereset)
begin
if(!
reset)
begin
count=0;
clk_1=1'b0;
end
elseif(count==25000000)
begin
count=0;
clk_1=!
clk_1;
end
else
count=count+1'd1;
end
endmodule
仿真结果:
图3
3、里程模块
在出租车转轴上加装传感器,以便获得“行驶里程信号”。
设汽车每走10米发一个脉冲,到1公里时,发100个脉冲,所以对里程计数要设计一个模100计数器,如图3-1程的计数显示,则用十进制、译码显示即可,见图3-4。
计数器采用74LS290,显示可用译码、驱动、显示三合一器件CL002或共阴、共阳显示组件
modulelicheng(reset,start,clk_1,lch);
inputreset,start,clk_1;
outputlch;
reg[7:
0]lch;
reg[5:
0]count;
always@(negedgereset,posedgeclk_1)
begin
if(!
reset)
begin
lch=8'b00000000;
count=6'b000000;
end
else
begin
if(start)
begin
if(count==6'b000010)
begin
lch=lch+1'b1;
count=count+1'b1;
if(lch[3:
0]>4'b1001)
begin
lch[7:
4]=lch[7:
4]+4'b0001;
lch[3:
0]=4'b0000;
end
end
elseif(count==6'b000100)
count=6'b000000;
else
count=count+1'b1;
end
else
lch[7:
0]=lch[7:
0];
end
end
endmodule
modulejs(reset,start,clk_1,jishi);
inputreset,start,clk_1;
outputjishi;
reg[5:
0]count1;
reg[7:
0]jishi;
always@(negedgereset,posedgeclk_1)
begin
if(!
reset)
begin
count1=6'b000000;
jishi=8'b00000000;
end
else
begin
if(!
start)
begin
if(count1==6'b000010)
begin
jishi=jishi+1'b1;
if(jishi[3:
0]>4'b1001)
begin
jishi[7:
4]=jishi[7:
4]+4'b0001;
jishi[3:
0]=4'b0000;
end
count1=count1+1'b1;
end
elseif(count1==6'b000100)
count1=6'b000000;
else
count1=count1+1'b1;
end
else
jishi[7:
0]=jishi[7:
0];
end
end
endmodule
里程计时模块仿真结果:
图4
说明:
从图上可以看出根据start的不同状态,里程和计时模块交替工作,若在行驶状态,则计程器开始加计数,。
若出租车停止等待状态,则计时器开始加计数。
里程计时模块框图:
图5
4、计费模块
该电路由两部分组成。
一是里程计价:
在起价公里以内(如5公里内),按起步价算;若超过起价公里,则每走一公里,计价器则加上每公里的单价款。
二是等候计价;汽车运行时,自动关断计时等待,而当要等候计数时,需要手动按动“等候”计费开关,进行计时,时间到(如10分钟),则输出1公里的脉冲。
相当于里程增加1公里,数字显示均为十进制数,因此,加法也要以BCD码相加。
modulejf(lch,jishi,fee);
inputlch,jishi;
outputfee;
reg[13:
0]fee;
wire[7:
0]lch;
wire[7:
0]jishi;
always@(lch,jishi)
begin
if(jishi[7:
0]<8'b00000011)
begin
fee[4:
0]={1'b0,lch[3:
0]}+5'b01000;
fee[9:
5]={1'b0,lch[7:
4]};
fee[13:
10]=4'b0000;
if(fee[4:
0]>5'b01001)
begin
fee[4:
0]=fee[4:
0]-5'b01010;
fee[9:
5]=fee[9:
5]+5'b00001;
end
end
else
begin
fee[4:
0]={1'b0,jishi[3:
0]}+{1'b0,lch[3:
0]}-5'b00011+5'b01000;
fee[9:
5]={1'b0,jishi[7:
4]}+{1'b0,lch[7:
4]};
fee[13:
10]=4'b0000;
if(fee[4:
0]>5'b10011)
begin
fee[4:
0]=fee[4:
0]-5'b10100;
fee[9:
5]=fee[9:
5]+5'b00010;
end
elseif(fee[4:
0]>5'b01001)
begin
fee[4:
0]=fee[4:
0]-5'b01010;
fee[9:
5]=fee[9:
5]+5'b00001;
end
if(fee[9:
5]>5'b10011)
begin
fee[9:
5]=fee[9:
5]-5'b10100;
fee[13:
10]=fee[13:
10]+4'b0010;
end
elseif(fee[9:
5]>5'b01001)
begin
fee[9:
5]=fee[9:
5]-5'b01010;
fee[13:
10]=fee[13:
10]+4'b0001;
end
end
end
endmodule
仿真结果:
图6
说明:
若在行驶状态,则计程器开始加计数,每公里1元。
若出租车停止等待状态,则计时器开始加计数,当时间超过三分钟后,计费器以每两分钟1元累加,最后显示总费用。
计费模块框图:
图7
5、数码管显示
显示器显示。
基本起步价所行驶的里程到达后,按每行驶1公里的单价进行计价。
由控制触发器IC9(FF2)控制起步里程到否?
若起步里程(图中设为5km)使IC9(FF2)Q端为1,Q=0,这样IC11和IC13连通,显示器显示的为起步价、单价之和的值
moduledisplay(clk_1,lch,reset,jishi,fee,hex0,hex1,hex2,hex4,hex5,hex6,hex7);
inputclk_1,lch,jishi,fee,reset;
outputhex0,hex1,hex2,hex4,hex5,hex6,hex7;
wirereset;
wire[7:
0]lch;
wire[7:
0]jishi;
wire[13:
0]fee;
reg[6:
0]hex0,hex1,hex2,hex4,hex5,hex6,hex7;
always@(posedgeclk_1,negedgereset)
begin
if(!
reset)
begin
hex6[6:
0]=7'b1000000;
hex7[6:
0]=7'b1000000;
hex4[6:
0]=7'b1000000;
hex5[6:
0]=7'b1000000;
hex0[6:
0]=7'b1000000;
hex1[6:
0]=7'b1000000;
hex2[6:
0]=7'b1000000;
end
case(lch[3:
0])
4'b0000:
hex6[6:
0]=7'b1000000;
4'b0001:
hex6[6:
0]=7'b1111001;
4'b0010:
hex6[6:
0]=7'b0100100;
4'b0011:
hex6[6:
0]=7'b0110000;
4'b0100:
hex6[6:
0]=7'b0011001;
4'b0101:
hex6[6:
0]=7'b0010010;
4'b0110:
hex6[6:
0]=7'b0000010;
4'b0111:
hex6[6:
0]=7'b1111000;
4'b1000:
hex6[6:
0]=7'b0000000;
4'b1001:
hex6[6:
0]=7'b0010000;
default:
hex6[6:
0]=7'b1000000;
endcase
case(lch[7:
4])
4'b0000:
hex7[6:
0]=7'b1000000;
4'b0001:
hex7[6:
0]=7'b1111001;
4'b0010:
hex7[6:
0]=7'b0100100;
4'b0011:
hex7[6:
0]=7'b0110000;
4'b0100:
hex7[6:
0]=7'b0011001;
4'b0101:
hex7[6:
0]=7'b0010010;
4'b0110:
hex7[6:
0]=7'b0000010;
4'b0111:
hex7[6:
0]=7'b1111000;
4'b1000:
hex7[6:
0]=7'b0000000;
4'b1001:
hex7[6:
0]=7'b0010000;
default:
hex7[6:
0]=7'b1000000;
endcase
case(jishi[3:
0])
4'b0000:
hex4[6:
0]=7'b1000000;
4'b0001:
hex4[6:
0]=7'b1111001;
4'b0010:
hex4[6:
0]=7'b0100100;
4'b0011:
hex4[6:
0]=7'b0110000;
4'b0100:
hex4[6:
0]=7'b0011001;
4'b0101:
hex4[6:
0]=7'b0010010;
4'b0110:
hex4[6:
0]=7'b0000010;
4'b0111:
hex4[6:
0]=7'b1111000;
4'b1000:
hex4[6:
0]=7'b0000000;
4'b1001:
hex4[6:
0]=7'b0010000;
default:
hex4[6:
0]=7'b1000000;
endcase
case(jishi[7:
4])
4'b0000:
hex5[6:
0]=7'b1000000;
4'b0001:
hex5[6:
0]=7'b1111001;
4'b0010:
hex5[6:
0]=7'b0100100;
4'b0011:
hex5[6:
0]=7'b0110000;
4'b0100:
hex5[6:
0]=7'b0011001;
4'b0101:
hex5[6:
0]=7'b0010010;
4'b0110:
hex5[6:
0]=7'b0000010;
4'b0111:
hex5[6:
0]=7'b1111000;
4'b1000:
hex5[6:
0]=7'b0000000;
4'b1001:
hex5[6:
0]=7'b0010000;
default:
hex5[6:
0]=7'b1000000;
endcase
case(fee[3:
0])
4'b0000:
hex0[6:
0]=7'b1000000;
4'b0001:
hex0[6:
0]=7'b1111001;
4'b0010:
hex0[6:
0]=7'b0100100;
4'b0011:
hex0[6:
0]=7'b0110000;
4'b0100:
hex0[6:
0]=7'b0011001;
4'b0101:
hex0[6:
0]=7'b0010010;
4'b0110:
hex0[6:
0]=7'b0000010;
4'b0111:
hex0[6:
0]=7'b1111000;
4'b1000:
hex0[6:
0]=7'b0000000;
4'b1001:
hex0[6:
0]=7'b0010000;
default:
hex0[6:
0]=7'b1000000;
endcase
case(fee[8:
5])
4'b0000:
hex1[6:
0]=7'b1000000;
4'b0001:
hex1[6:
0]=7'b1111001;
4'b0010:
hex1[6:
0]=7'b0100100;
4'b0011:
hex1[6:
0]=7'b0110000;
4'b0100:
hex1[6:
0]=7'b0011001;
4'b0101:
hex1[6:
0]=7'b0010010;
4'b0110:
hex1[6:
0]=7'b0000010;
4'b0111:
hex1[6:
0]=7'b1111000;
4'b1000:
hex1[6:
0]=7'b0000000;
4'b1001:
hex1[6:
0]=7'b0010000;
default:
hex1[6:
0]=7'b1000000;
endcase
case(fee[13:
10])
4'b0000:
hex2[6:
0]=7'b1000000;
4'b0001:
hex2[6:
0]=7'b1111001;
4'b0010:
hex2[6:
0]=7'b0100100;
4'b0011:
hex2[6:
0]=7'b0110000;
4'b0100:
hex2[6:
0]=7'b0011001;
4'b0101:
hex2[6:
0]=7'b0010010;
4'b0110:
hex2[6:
0]=7'b0000010;
4'b0111:
hex2[6:
0]=7'b1111000;
4'b1000:
hex2[6:
0]=7'b0000000;
4'b1001:
hex2[6:
0]=7'b0010000;
default:
hex2[6:
0]=7'b1000000;
endcase
end
endmodule
仿真结果:
图8
说明:
数码管有两种显示方式动态显示与静态显示,由于在本文中用到了七个数码管所以选择了动态显示,在时钟的控制下,当reset为高电平的时候把费用,公里,时间译码输出
显示模块框图:
图9
6、系统仿真
初步设计完成后,即可将分模块和顶层模块进行仿真测试,同时可根据设计要求加入测试输入条件。
仿真后得到的相应输出结果如与预先的结果不相符,则应修改设计,直到相符为止。
没有译码的仿真结果如下所示:
(a)为行驶中未停时的系统电路仿真结果:
图10
(b)为行驶中时(在两公里之内)的系统电路仿真结果:
图11
(c)为停止时(在两分钟之外)的系统电路仿真结果:
图12
从(a)可以看出当reset=1时,系统复位,路程计数器、和等待时间计数器均为0,费用计数器为8元;当reset为0时,系统启动,start=1表示出租车行驶,clk-1每产生一个脉冲,路程计数器加1;路程2公里内,费用保持8不变,超过2公里,费用计数器进行加计数,每增加1公里费用加1元,此时等待时间计数器不变。
而根据(b),(c)的仿真波形可知,当reset为0时,系统启动,start=0表示出租车处于停止等待状态,此时等待时间计数器计数,在2分钟等待时间内,费用计数器不变;等待时间超过2分钟后,每增加2分钟,费用计数器增加1元,此时路程计数器保持不变。
7、验证流程图
图13
五、结论
本文介绍了一种全新的出租车计价器计费系统的FPGA设计方法。
分别介绍了整个系统和各个模块的设计,使用FPGA芯片、VHDL硬件描述语言作为设计手段,利用自顶向下的模块化设计思路,通过在QuartusⅡ软件下进行的模拟仿真,并进行相应的硬件下载调试,证明所设计的系统完成了出租车计费器的功能,各项技术指标符合预定标准,具有一定实用性。
如果将该设计再结合到实际应用中,那么,只需改变设计中计费要求,就可以应用到出租车上。
另外,如果再任意输入该出租车计价器的计费标准,那么,它的适用范围可能就更广泛了。
本次课程设计还是比较有成就感的,因为遇到一些很棘手的问题,最终解决之后感觉很好,还学到一些之前没学到的东西。
参考文献
[1]刘尚军,张志兵等ARM嵌入式技术与应用—基于Xscale处理器及Vxworks操作系统北京:
北京航空航天大学出版社2012
[2]田泽ARM9嵌入式Linux开发实验与实践北京:
北京航空航天大学出版2013
[3]沈连丰,许波,夏玮玮等嵌入式系统及其开发应用北京:
电子工业出版社2011
[4]EmbeddedsystemsTammyNoergaard北京:
人民邮电出版社2008
[5]童永清LinuxC编程实践北京:
人民邮电出版社2008
[6]李斌,董慧颖.可重组机器人研究和发展现状.沈阳工业学院学报2000
[8]马淑华.单片机原理与接口技术.北京邮电大学出版社2007
[9]张义和.例说51单片机. 人民邮电出版社2008
[10]刘岚,尹勇基于ARM的嵌入式系统开发北京:
电子工业出版社2013
[11]三恒星科技ARM9应用实例北京:
电子工业出版社2015
[12]庞丽萍操作系统原理武汉:
华中科技大学出版社2017
课程设计总结:
通过本次的实验操作,不仅使我深刻体会打了嵌入式系统的广阔的应用前景,而且也是我对课本知识的一次较深的回顾与体悟。
温故而知新,只有通过自己动手操作才能掌握真正的技术。
在有限的课时内我们掌握的知识也是相当有限的,我们对嵌入式系统的硬件和软件的基本原理,特点有了更深的认识。
这些知识对于本次实验是不够的。
我自己查找了许多资料,同时也参考了过去的课题,取长补短。
经过不断的努力,在老师和同学们的帮助之下,我顺利的完成了课程设计,对嵌入式系统的硬件/软件有了更深的了解,也深入掌握了嵌入式系统设计的基本方法,达到了预期的目的。
不仅这一次,以后我要更加努力的学习嵌入式系统,以期能够有更大的进步。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arm 出租车 计价器 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)