欢迎来到天天文库
浏览记录
ID:57687521
大小:147.50 KB
页数:28页
时间:2020-09-01
《EDA出租车计费器设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.出租车计费器的总体设计1.1出租车计费设计该出租车计费器按下开关S1后开始计费和计里程数,分为白天和夜晚。当拨动开关K2为0时,系统使用程序设置的起步价,白天起步价是3元,准行2公里,以后2元/公里;夜晚起步价是9元,准行2公里,以后3元/公里。当拨动开关K2为1时,可由矩阵键盘输入起步价0~9元。当路程大于200公里时,价格会在原来的基础上加50元。1.2基本设计思想时钟输入为一个1KHz的系统时钟,直流电机模块每转一圈输出一个脉冲信号给CPU,另外用按键模块的S1来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。直流电机模块用来模拟出租车的车轮子,每转动一圈认为是行
2、走1米,所以每旋转1000圈,认为车子前进1公里。系统设计是需要检测电机的转动情况,每转1000圈,分频模块输出一个下降沿信号。车费和里程数在一个8位7段数码管上显示,前4位显示里程,后4位显示费用。路程的单价由16*16点阵显示,拨动开关K1为0时,2元/公里,点阵显示2;拨动开关K2为1时,3元/公里,点阵显示3。2.出租车计费器的总体实现2.1系统总体框图该出租车计费器由一个VHDL程序构成,不同功能的实现分别是多个进程控制,主要进程有:分频模块进程:将每1000个电机脉冲转化为1个输出脉冲;计程模块进程:记录已行里程;计费模块进程:计算应付车费;4*4矩阵键盘进程:设置起步
3、价;数码管显示进程:将已行里程和应付车费显示在数码管上;16*16点阵显示进程:显示当前状态的每公里单价。计程模块分频模块计费模块总程序(系统时钟)4*4矩阵键盘16*16点阵数码管图2-1系统框图2.2程序流程图(1)分频模块:Yrst或motor信号发生变化Rst=’0’Count<=0Temp<=0Nmotor'eventandmotor='1'YYCount=0Temp=nottempCount<499NCount<=count+1Glclk<=temp图2-2分频模块(2)计程模块Meter1<=0;Meter10<=0;Meter100<=0;Meter1K<=0;Yr
4、st或glclk信号发生变化Rst=’0’Nglclk'eventandglclk='0'YMeter1,meter10,meter100,meter1000代表的四位十进制数加1图2-3计程模块(3)计费模块Money1<=qibujia;Money10<=0;Money100<=0;Money1000<=0;Yrst或clk信号发生变化Rst=’0’Nclk'eventandclk='0'Y根据路程计算出总价,再把总价的千位、百位、十位、个位取出显示。图2-4计费模块2.3出租车计费器各功能的实现(1)分频模块:直流电机motor每输出1000个脉冲,分频器glclk输出一个下
5、降沿脉冲,表示电机已走1公里,meter1加1.ifrst='0'thencount<=0;temp<='0';elsif(motor'eventandmotor='1')thenifcount>499thencount<=0;temp<=nottemp;elsecount<=count+1;endif;endif;glclk<=temp;(2)计程模块:glclk的下降沿来临时,路程的个位加1,满9往高位进一,同时低位归0。process(glclk)beginif(Rst='0')thenMeter1<=0;Meter10<=0;Meter100<=0;Meter1K<=0;e
6、lsif(glclk'eventandglclk='0')thenif(Meter1=9)thenMeter1<=0;if(Meter10=9)thenMeter10<=0;if(Meter100=9)thenMeter100<=0;if(Meter1K=9)thenMeter1K<=0;elseMeter1K<=Meter1K+1;endif;elseMeter100<=Meter100+1;endif;elseMeter10<=Meter10+1;endif;elseMeter1<=Meter1+1;endif;endif;lucheng<=meter1k*1000+meter
7、100*100+meter10*10+meter1*1;endprocess;(3)计费模块:路程小于等于2公里时,费用为起步价;路程大于2公里,小于200公里,费用为(起步价+(路程-2)*单价);路程大于200公里时费用为(起步价+(路程-2)*单价+50)。process(clk,rst)beginif((Rst='0')or(lucheng<3))thenMoney1<=qibujia;Money10<=0;Money100<=0;Money1000<=0;e
此文档下载收益归作者所有