还剩29页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
多功能出租车运营控制器学号:61007211姓名:洪立俊
1、申请题目多功能出租车运营控制器这是一个以出租车计费为主要功能的基于FPGA的全数字系统,同时此系统还附加有一些相关的其他功能,比如计时,自动收费,___操作等
2、课题背景出租车是人们日常生活中不可或缺的交通工具,但就目前的出租车运营状况来看,仍存在许多问题,比如司机乱收费,不打表现象较多,出租车公司对于运营信息的管理不到位,另外在客运安全方面仍存在较大漏洞,针对以上提到的问题,我觉得__一个能够高效管理出租车运营的系统
3、项目规划系统功能此系统的功能主要有计时(附有闹钟和日期),运营计价,自动收费,运营信息保存,___操作等指标及规模时间显示包括时,分,秒,日期显示包括日,月(分大小月,二月假设为29天),闹钟设置精确到秒,闹铃长达30s收费标准白天(6时到夜间23点)起步价为9元,3~15公里每公里1元,15公里以上每公里
1.5元,每等待1分钟加收2元,夜间起步价10元,超过3公里每公里
1.8元,每等待1分钟3元计价按每100米计价,里程增加里程最大为99公里,收费最大
999.99元,自动收费接受10,5元,1元,自动找零找都是1元系统涉及__为6位面板(显示)6个8段数码管,4×4小键盘,开关若干,LED灯操作及规则复位后进入计时,按C修改时间,中途按B可退出,完成六位修改后按E确认,按6进入设置闹钟状态,类似于时间的修改闹钟时间到或者按0关闭,或者30s后自动关闭按4显示日期,按C修改日期,类似时间修改按B回到时间显示按A进入登陆过程,输入6为__,登录成功进入,___操作程序,按D修改里程分配参数,按F可阅读运营记录按B退出___操作,按F键进入运营过程,按方向键可切换里程和费用的显示,按2进入等待按3保存记录,进入自动收费,通过拨开关进行收费收完费进入自动找零至零按E回到时间显示输入、输出接口键盘有扫描译码模块,数码管有译码模块及显示驱动模块,相当于数据选择器
4、实现方案核心问题状态的控制及转移,数据处理模块的设计,以及若干显示的分时显示模块的设计解决方案FPGA设计顶层文件采用图形化设计,状态机及相关数据处理单元,附加模块部分采用VHDL语言设计,部分采用图形化设计由于显示部分也是比较复杂的,所以也引进状态的概念对显示内容进行控制存储器采用数组的形式存储二进制信息,数组元素即为逻辑值向量
5、系统结构系统框图模块功能描述输入接口用于译码产生相关的控制__,状态机用于控制不同时刻的相关操作,数据处理单元用来处理相关__,包括计时模块,相关寄存模块,计费,收费,计程模块,存储器模块等,输出驱动模块用于控制不同时候的输出模块接口标注输入模块接口有4位键盘码keyvalue输出,握手__pressed,以及一些经消抖同步的外部输入,如复位reset,闹钟开关控制alarm_on,收费脉冲输入f10,f5,f1,状态机产生控制__,修改时间,日期使能timeloaddateload修改__使能,存储记录使能store,运营控制__showXX,阅读记录__readXX找零__等数据处理模块产生时间time,日期date,__code,里程kilo,收费charge,存储器记录输出record等输出模块输入包括显示状态控制__ss,各数据处理单元的显示输出内容,输出为6个8段数码管的__,和一个闹钟到__alarmsignal
6、状态流程图系统工作状态流程由于系统比较庞大,操作过程比较多,所以涉及的状态控制也比较多,为了更加清楚地表示各状态间的控制转移,以及不同状态对应的控制输出__,现采用多状态机的描述方法包括主流程图,各子流程图,其中一些具有类似功能的流程就省略了,比如校准日期,设置闹钟,设置参数的流程就和校准时间的流程类似
1.总流程图
2.出租车运营流程图
3.校准时间流程图
4.___登录流程
5.___修改__流程
6.___阅读运营记录流程图
7、程序清单由于本系统的复杂性,所以程序比较多,这里仅列出主要的程序,同一个程序中类似的代码则省略,具有类似功能的代码仅举其一--键盘译码,按键动作标志生成模块--libraryieee;useieee.std_logic_
1164.all;entitykey_decoderisportcol3col2col1col0:instd_logic;row3row2row1row0:instd_logic;clkscan_clk:instd_logic;keyvalue:outstd_logic_vector3downto0;pressedstop:outstd_logic;endkey_decoder;architecturertlofkey_decoderissignaltemp:std_logic_vector7downto0;signaltemp_pressed:std_logic;signalq1q2q3q4q5q6:std_logic;signalkeypressed_asy:std_logic;begintemp=row3row2row1row0col3col2col1col0;pro__sstemp--键盘译码begincasetempiswhen11101110=keyvalue=0000;temp_pressed=1;when11101101=keyvalue=0001;temp_pressed=1;省略部分when01111101=keyvalue=1101;temp_pressed=1;when01111011=keyvalue=1110;temp_pressed=1;when01110111=keyvalue=1111;temp_pressed=1;whenothers=temp_pressed=0;endcase;endpro__ss;pro__ssscan_clk--按键动作标志消抖beginifscan_clkeventandscan_clk=1thenq1=temp_pressed;q2=q1;q3=q2;q4=q3;endif;keypressed_asy=q1orq2orq3orq4;endpro__ss;pro__ssclk--按键动作标志与全局时钟同步化beginifclkeventandclk=1thenq5=keypressed_asy;q6=q5;endif;pressed=q5andnotq6;endpro__ss;stop=col3andcol2andcol1andcol0;endrtl;--里程计数模块--libraryieee;useieee.std_logic_
1164.all;useieee.std_logic_arith.all;entitykilocounterisportstartmilepause:instd_logic;--开始计数,里程脉冲输入,暂停使能输入端kilo:outstd_logic_vector11downto0;--公里数输出端high_3high_15:outstd_logic;--大于三公里,大于15公里的使能输出端endkilocounter;architecturertlofkilocounterissignalk1k0k00:std_logic_vector3downto0;beginpro__ssstartpausemilebeginifstart=0then--未进入里程计数时里程数始终保持为零k1=0000;k0=0000;k00=0000;high_3=0;high_15=0;elseifpause=1then--等待状态下保持里程数k1=k1;k0=k0;k00=k00;elsifrising_edgemilethen--在里程脉冲下正常计数ifk00=1001thenk00=0000;ifk0=1001thenk0=0000;ifk1=1001thenk1=0000;elsek1=k1+1;endif;elsek0=k0+1;endif;elsek00=k00+1;endif;endif;endif;ifk0=0011then--达到里程要求时标志__有效high_3=1;endif;ifk1=0010ork1=0001andk0=0101thenhigh_15=1;endif;endpro__ss;kilo11downto8=k1;kilo7downto4=k0;kilo3downto0=k00;endrtl;--计时模块--libraryieee;useieee.std_logic_
1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitytime_counterisportclkresettimeload:instd_logic;--全局时钟输入,开机复位端,修改时间置数端buffertime:instd_logic_vector23downto0;--时间并行输入端time:outstd_logic_vector23downto0;--时间输出端ci:outstd_logic;--时间进位进日月模块endtime_counter;architecturertloftime_counterissignalclk1s:std_logic;signaltemp_time5temp_time4temp_time3temp_time2temp_time1temp_time0:std_logic_vector3downto0;componentdivider_1s--500分频器说明portclk:instd_logic;clk1s:outstd_logic;endcomponent;begindivider1s:divider_1s--500分频器实例化port__pclk=clkclk1s=clk1s;pro__ssclk1sclkresettimeloadbeginifreset=0then--复位清零temp_time5=0000;temp_time4=0000;temp_time3=0000;temp_time2=0000;temp_time1=0000;temp_time0=0000;elsifrising_edgeclktheniftimeload=1then--修改时间时置数temp_time5=buffertime23downto20;temp_time4=buffertime19downto16;temp_time3=buffertime15downto12;temp_time2=buffertime11downto8;temp_time1=buffertime7downto4;temp_time0=buffertime3downto0;else--正常计时ifclk1s=1theniftemp_time0=1001thentemp_time0=0000;iftemp_time1=0101thentemp_time1=0000;iftemp_time2=1001thentemp_time2=0000;iftemp_time3=0101thentemp_time3=0000;iftemp_time4=1001andtemp_time5=0000thentemp_time4=0000;temp_time5=0001;elsiftemp_time4=1001andtemp_time5=0001thentemp_time4=0000;temp_time5=0010;elsiftemp_time4=0011andtemp_time5=0010thentemp_time4=0000;temp_time5=0000;elsetemp_time4=temp_time4+1;endif;elsetemp_time3=temp_time3+1;endif;elsetemp_time2=temp_time2+1;endif;elsetemp_time1=temp_time1+1;endif;elsetemp_time0=temp_time0+1;endif;endif;endif;endif;--当计到235959出现进位__至日月模块--iftemp_time5temp_time4temp_time3temp_time2temp_time1temp_time0=001000110101_____1011001thenci=1;elseci=0;endif;endpro__ss;time23downto20=temp_time5;time19downto16=temp_time4;time15downto12=temp_time3;time11downto8=temp_time2;time7downto4=temp_time1;time3downto0=temp_time0;endrtl;--计费模块--libraryieee;useieee.std_logic_
1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitytotal_chargeisportstartpausemilef_wait:instd_logic;--未运营状态,等待暂停状态,里程脉冲,等待时间脉冲high_3high_15:instd_logic;--里程标志输入time:instd_logic_vector23downto0;--时间输入charge:outstd_logic_vector19downto0;--计费总价输出分别为百,十,个,十分,百分位endtotal_charge;architecturertloftotal_chargeissignalc4c3c2c1c0:std_logic_vector3downto0;beginpro__sstimepausestartmilef_waithigh_3high_15variablehour_hhour_l:std_logic_vector3downto0;beginhour_h:=time23downto20;hour_l:=time19downto16;ifstart=0then--未运营时__总为零c4=0000;c3=0000;c2=0000;c1=0000;c0=0000;elseifhour_h=0000andhour_l=0110orhour_h=0001orhour_h=0010andhour_l=0010then--白天运营ifpause=1then--等待下的计费ifrising_edgef_waitthen--即pause=1进入等待状态ifc2=1001orc2=1000thenifc2=1001thenc2=0001;elsec2=0000;endif;ifc3=1001thenc3=0000;ifc4=1001thenc4=0000;elsec4=c4+1;endif;elsec3=c3+1;endif;elsec2=c2+2;endif;endif;elseifrising_edgemilethen--正常运营ifhigh_3=0thenc4=0000;c3=0000;c2=1001;c1=0000;c0=0000;elsifhigh_15=0thenifc1=1001thenc1=0000;ifc2=1001thenc2=0000;ifc3=1001thenc3=0000;ifc4=1001thenc4=0000;elsec4=c4+1;endif;elsec3=c3+1;endif;elsec2=c2+1;endif;elsec1=c1+1;endif;elsifhigh_3=1andhigh_15=1thenifc0=0101andc1=1000orc1=1001thenifc1=1001andc0=0101thenc0=0000;c1=0001;elsifc1=1001andc0=0000thenc0=0101;c1=0000;elsifc1=1000andc0=0101thenc0=0000;c1=0000;endif;ifc2=1001thenc2=0000;ifc3=1001thenc3=0000;ifc4=1001thenc4=0000;elsec4=c4+1;endif;elsec3=c3+1;endif;elsec2=c2+1;endif;elsifc0=0000thenc0=0101;c1=c1+1;elsec0=0000;c1=c1+0010;endif;endif;endif;endif;else--夜间运营模式ifpause=1thenifrising_edgef_waitthen省略部分endpro__ss;charge19downto16=c4;charge15downto12=c3;charge11downto8=c2;charge7downto4=c1;charge3downto0=c0;endrtl;--__产生模块--libraryieee;useieee.std_logic_
1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitybell_proisportalarm_onclkalarm_loadpressed:instd_logic;--闹钟开关,时钟,修改置数,键盘响应buffertime:instd_logic_vector15downto0;--修改时间并行输入端time:instd_logic_vector23downto0;--当前时间并行输入keyvalue:instd_logic_vector3downto0;--键盘值输入端alarm_signal:outstd_logic;--闹铃__输出端endbell_pro;architecturertlofbell_proissignalalarm:std_logic;typestateiss0s1s2s3;signalpre_state:state:=s0;signalnext_state:state:=s0;signaliner_ala_time:std_logic_vector15downto0;beginpro__ssclk--修改置数进程beginifrising_edgeclkthenifalarm_load=1theniner_ala_time=buffertime;endif;endif;endpro__ss;pro__ssclkalarm_on--状态转移进程beginifalarm_on=0thenpre_state=s0;elsifrising_edgeclkthenpre_state=next_state;endif;endpro__ss;pro__sspre_statetimeiner_ala_timepressedkeyvalue--具体的状态机begincasepre_stateiswhens0=ifiner_ala_time=time23downto8thennext_state=s1;elsenext_state=pre_state;endif;whens1=ifpressed=1andkeyvalue=0000thennext_state=s3;elsiftime7downto4=0011thennext_state=s2;elsenext_state=pre_state;endif;whens2=iftime7downto4=0000thennext_state=s0;elsenext_state=pre_state;endif;whens3=iftime7downto4=0011thennext_state=s2;elsenext_state=pre_state;endif;whenothers=next_state=s0;endcase;endpro__ss;pro__sspre_state--状态输出beginifpre_state=s1thenalarm=1;elsealarm=0;endif;endpro__ss;alarm_signal=alarm;endrtl;--存储器模块--libraryieee;useieee.std_logic_
1164.all;useieee.std_logic_unsigned.all;entityram_16isportclk:instd_logic;wr:instd_logic:=0;--写使能re:instd_logic:=0;--读使能re_addresswr_address:instd_logic_vector3downto0;--读写地址输入端time:instd_logic_vector23downto0;--时间输入date:instd_logic_vector15downto0;--日期输入charge:instd_logic_vector19downto0;--费用输入kilo:instd_logic_vector11downto0;--里程输入tra_record:outstd_logic_vector55downto0;--运营记录输出endram_16;architecturertlofram_16issubtyperam_wordisstd_logic_vector55downto0;typeram_tableisarray0to15ofram_word;signalram:ram_table;beginpro__ssclktimedatechargere_addresswr_addresskilowrrebeginifrising_edgeclkthenifre=1then--读出运营记录tra_record=ramconv_integerre_address;elsifwr=1then--写进记录ramconv_integerwr_address55downto44=kilo;ramconv_integerwr_address43downto28=date;ramconv_integerwr_address27downto12=time23downto8;ramconv_integerwr_address11downto0=charge19downto8;endif;endif;endpro__ss;endrtl;--自动收费模块--libraryieee;useieee.std_logic_
1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityauto_re__iveisportf10f5f1writeresetclkclk1sen_return:instd_logic;--收费脉冲输入,写使能charge:instd_logic_vector19downto0;--总收费收入端money:outstd_logic_vector11downto0;--收费过程输出return_money:outstd_logic_vector3downto0;--找零输出endauto_re__ive;architecturertlofauto_re__iveisbeginpro__ssresetclkchargef10f5f1en_returnclk1svariablemoney_temp:std_logic_vector11downto0;variablereturn_temp:std_logic_vector3downto0;beginifreset=0thenmoney_temp:=000000000000;return_temp:=0000;elsifrising_edgeclkthenifwrite=1then--将应收费用置入其中money_temp:=charge19downto8;elsemoney_temp:=money_temp;endif;ifmoney_temp=0000000_____theniff1=1thenifmoney_temp3downto0=0000thenmoney_temp3downto0:=1001;ifmoney_temp7downto4=0000thenmoney_temp7downto4:=1001;money_temp11downto8:=money_temp11downto8-1;elsemoney_temp7downto4:=money_temp7downto4-1;endif;elsemoney_temp3downto0:=money_temp3downto0-1;endif;elsiff5=1thenifmoney_temp3downto00101thenmoney_temp3downto0:=money_temp3downto0-11;ifmoney_temp7downto4=0000thenmoney_temp7downto4:=1001;money_temp11downto8:=money_temp11downto8-1;elsemoney_temp7downto4:=money_temp7downto4-1;endif;elsemoney_temp3downto0:=money_temp3downto0-5;endif;elsiff10=1thenifmoney_temp7downto4=0000thenmoney_temp7downto4:=1001;money_temp11downto8:=money_temp11downto8-1;elsemoney_temp7downto4:=money_temp7downto4-1;endif;elsemoney_temp:=money_temp;endif;elsifmoney_temp0000000_____andmoney_temp=000000000101theniff10=1thenreturn_temp:=1010-money_temp3downto0;money_temp:=000000000000;elsiff5=1thenmoney_temp:=money_temp-000000000101;elsiff1=1thenmoney_temp:=money_temp-1;elsemoney_temp:=money_temp;endif;elsifmoney_temp000000000101andmoney_temp=000000000001theniff10=1thenreturn_temp:=1010-money_temp3downto0;money_temp:=000000000000;elsiff5=1thenreturn_temp:=0101-money_temp3downto0;money_temp:=000000000000;elsiff1=1thenmoney_temp:=money_temp-1;elsemoney_temp:=money_temp;endif;elsemoney_temp:=000000000000;endif;ifclk1s=1anden_return=1thenifreturn_temp/=000000000000thenreturn_temp:=return_temp-1;elsereturn_temp:=return_temp;endif;elsereturn_temp:=return_temp;endif;endif;money=money_temp;return_money=return_temp;endpro__ss;endrtl;--总的控制状态机--libraryieee;useieee.std_logic_
1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitySTATE__CHINEisportclkpressedreset:instd_logic;keyvalue:instd_logic_vector3downto0;codeout:instd_logic_vector23downto0;money:instd_logic_vector11downto0;return_money:instd_logic_vector3downto0;timeloaddateloadalarmloadcodeloadparaloadreadstatestartpauseen_returnwritedot:outstd_logic;ss:outstd_logic_vector5downto0;buffertime:outstd_logic_vector23downto0;bufferalarm:outstd_logic_vector15downto0;bufferdate:outstd_logic_vector15downto0;buffernewcode:outstd_logic_vector23downto0;buffernewpara:outstd_logic_vector7downto0;endSTATE__CHINE;architecturertlofSTATE__CHINEistypestateistimecountermodifytime1modifytime2modifytime3modifytime4modifytime5modifytime6modifytime7loadtimesetalarm1setalarm2setalarm3setalarm4setalarm5loadalarmshowdatemodifydate1modifydate2modifydate3modifydate4modifydate5loaddateinputcode1inputcode2inputcode3inputcode4inputcode5inputcode6inputcode7comparehellosetcode1setcode2setcode3setcode4setcode5setcode6setcode7setcode8setcode9setcode10setcode11setcode12setcode13setcode14compare_newcodeloadnewcodesetpara1setpara2setpara3loadparareaddatereadtimereadkiloreadmoneyshowkiloshowmoneywaitonstoregetchargereturn_changeholdon;signalpre_state:state:=timecounter;--定义当前状态--定义状态机内部寄存器,用来修改某些值时用到--signaltime_temp:std_logic_vector23downto0;--校时寄存器signalalarm_temp:std_logic_vector15downto0;--闹钟设置寄存器signaldate_temp:std_logic_vector15downto0;--校日期寄存器signalcode_temp:std_logic_vector23downto0;--登录输入__寄存器signalnewcode_temp:std_logic_vector47downto0;--重新设置__寄存器signalpara_temp:std_logic_vector7downto0;--修改分频参数寄存器begin--具体的状态转移过程--pro__ssresetclkpressedkeyvaluecodeoutmoneyreturn_moneybeginifreset=0thenpre_state=timecounter;elsifrising_edgeclkthencasepre_stateis--显示当前时间状态--whentimecounter=ifpressed=1andkeyvalue=1100then--按C转校准时间状态pre_state=modifytime1;elsifpressed=1andkeyvalue=0110then--按6转重新设置闹钟时间状态pre_state=setalarm1;elsifpressed=1andkeyvalue=0100then--按4转日月操作状态,首先是显示当前日期pre_state=showdate;elsifpressed=1andkeyvalue=1111then--按F转正常运营状态首先显示的是里程数pre_state=showkilo;elsifpressed=1andkeyvalue=1010then--按A转___操作状态,首先必须输入_____pre_state=inputcode1;elsepre_state=pre_state;endif;time_temp=000000000000000000000000;--为寄存器赋初始值alarm_temp=0000000000000000;date_temp=0000000000000000;code_temp=000000000000000000000000;newcode_temp=000000000000000000000000000000000000000000000000;para_temp=00000000;--准备校准时间的时高位--whenmodifytime1=ifpressed=1andkeyvalue=1011then--按B则返回时间显示状态(后面多次用到)--pre_state=timecounter;elsifpressed=1andkeyvalue=0010thenpre_state=modifytime2;time_temp23downto20=keyvalue;elsepre_state=pre_state;time_temp=time_temp;endif;--准备校准时间的时低位--whenmodifytime2=ifpressed=1andkeyvalue=1011thenpre_state=timecounter;elsifpressed=1andkeyvalue=1001andtime_temp23downto20=0001thenpre_state=modifytime3;time_temp19downto16=keyvalue;elsifpressed=1andkeyvalue=0011andtime_temp23downto20=0010thenpre_state=modifytime3;time_temp19downto16=keyvalue;elsepre_state=pre_state;time_temp=time_temp;endif;省略部分--等待校时确定--whenmodifytime7=ifpressed=1andkeyvalue=1011thenpre_state=timecounter;elsifpressed=1andkeyvalue=1110thenpre_state=loadtime;elsepre_state=pre_state;endif;time_temp=time_temp;--新的时间值置入状态--whenloadtime=pre_state=timecounter;time_temp=time_temp;--准备设置闹钟时间的时高位--whensetalarm1=ifpressed=1andkeyvalue=1011thenpre_state=timecounter;elsifpressed=1andkeyvalue=0010thenpre_state=setalarm2;alarm_temp15downto12=keyvalue;elsepre_state=pre_state;alarm_temp=alarm_temp;endif;省略部分--等待闹钟时间设定确定--whensetalarm5=ifpressed=1andkeyvalue=1011thenpre_state=timecounter;elsifpressed=1andkeyvalue=1110thenpre_state=loadalarm;alarm_temp=alarm_temp;elsepre_state=pre_state;alarm_temp=alarm_temp;endif;--修改闹钟时间的值--whenloadalarm=pre_state=timecounter;alarm_temp=alarm_temp;--显示当前日期状态--whenshowdate=ifpressed=1andkeyvalue=0110thenpre_state=timecounter;elsifpressed=1andkeyvalue=1100thenpre_state=modifydate1;elsepre_state=pre_state;endif;date_temp=0000000000000000;--准备校准日期的月高位--whenmodifydate1=ifpressed=1andkeyvalue=1011thenpre_state=showdate;elsifpressed=1andkeyvalue=0001thenpre_state=modifydate2;date_temp15downto12=keyvalue;elsepre_state=pre_state;date_temp=date_temp;endif;省略部分--等待是否确认校准日期为新的值--whenmodifydate5=ifpressed=1andkeyvalue=1011thenpre_state=showdate;elsifpressed=1andkeyvalue=1110thenpre_state=loaddate;date_temp=date_temp;elsepre_state=pre_state;date_temp=date_temp;endif;--修改日期为新的值--whenloaddate=pre_state=showdate;date_temp=date_temp;--管理登录准备输入第一个__--wheninputcode1=ifpressed=1andkeyvalue=1011thenpre_state=timecounter;elsifpressed=1andkeyvalue=1001thenpre_state=inputcode2;code_temp23downto20=keyvalue;elsepre_state=pre_state;code_temp=code_temp;endif;省略部分--等待是否确认所输入__--wheninputcode7=ifpressed=1andkeyvalue=1011thenpre_state=timecounter;elsifpressed=1andkeyvalue=1110thenpre_state=compare;code_temp=code_temp;elsepre_state=pre_state;code_temp=code_temp;endif;--对比__是否匹配--whencompare=ifcode_temp=codeoutthenpre_state=hello;elsepre_state=timecounter;endif;--进入___具体操作状态--whenhello=ifpressed=1andkeyvalue=1011then--按B返回计时状态pre_state=timecounter;elsifpressed=1andkeyvalue=1100then--按C进入修改__状态pre_state=setcode1;elsifpressed=1andkeyvalue=1101then--按D进入修改里程分配参数状态pre_state=setpara1;elsifpressed=1andkeyvalue=1111then--按F进入查阅运营情况状态,首先读的是第一条记录的日期pre_state=readdate;elsepre_state=pre_state;endif;newcode_temp=000000000000000000000000000000000000000000000000;para_temp=00000000;--准备修改第1位__--whensetcode1=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=1001thenpre_state=setcode2;newcode_temp47downto44=keyvalue;elsepre_state=pre_state;newcode_temp=newcode_temp;endif;省略部分--等待确认是否修改__为此值,若是则需要重新输入以确认--whensetcode7=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=1110thenpre_state=setcode8;newcode_temp=newcode_temp;elsepre_state=pre_state;newcode_temp=newcode_temp;endif;--准备确认修改的第1位__--whensetcode8=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=1001thenpre_state=setcode9;newcode_temp23downto20=keyvalue;elsepre_state=pre_state;newcode_temp=newcode_temp;endif;省略部分--准备再次确认修改__,两次键入的相同则修改__成功--whensetcode14=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=1110thenpre_state=compare_newcode;newcode_temp=newcode_temp;elsepre_state=pre_state;newcode_temp=newcode_temp;endif;--对比两次输入的__值--whencompare_newcode=ifnewcode_temp47downto24=newcode_temp23downto0thenpre_state=loadnewcode;newcode_temp=newcode_temp;elsepre_state=hello;endif;--修改__状态--whenloadnewcode=ifpressed=1andkeyvalue=1110thenpre_state=hello;elsepre_state=pre_state;newcode_temp=newcode_temp;endif;--准备设置参数的十位--省略部分--读运营记录状态,首先是读日期--whenreaddate=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=0100thenpre_state=readkilo;elsifpressed=1andkeyvalue=0110thenpre_state=readtime;elsepre_state=pre_state;endif;--读运营记录状态,读里程--whenreadkilo=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=0100thenpre_state=readmoney;elsifpressed=1andkeyvalue=0110thenpre_state=readdate;elsepre_state=pre_state;endif;--读运营记录状态,读时分--whenreadtime=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=0100thenpre_state=readdate;elsifpressed=1andkeyvalue=0110thenpre_state=readmoney;elsepre_state=pre_state;endif;--读运营记录状态,读缴费--whenreadmoney=ifpressed=1andkeyvalue=1011thenpre_state=hello;elsifpressed=1andkeyvalue=0100thenpre_state=readtime;elsifpressed=1andkeyvalue=0110thenpre_state=readkilo;elsepre_state=pre_state;endif;--运营状态,首先是显示里程数--whenshowkilo=ifpressed=1andkeyvalue=0110thenpre_state=showmoney;elsifpressed=1andkeyvalue=0011thenpre_state=store;elsifpressed=1andkeyvalue=0010thenpre_state=waiton;elsepre_state=pre_state;endif;--运营状态,显示当前累计费用--whenshowmoney=ifpressed=1andkeyvalue=0011thenpre_state=store;elsifpressed=1andkeyvalue=0010thenpre_state=waiton;elsifpressed=1andkeyvalue=0100thenpre_state=showkilo;elsepre_state=pre_state;endif;--等待状态--whenwaiton=ifpressed=1andkeyvalue=0010thenpre_state=showkilo;elsepre_state=pre_state;endif;--存储状态--whenstore=pre_state=getcharge;--自动收费状态--whengetcharge=ifmoney=000000000000thenpre_state=return_change;elsepre_state=pre_state;endif;--找零状态--whenreturn_change=ifreturn_money=0000thenpre_state=holdon;elsepre_state=pre_state;endif;--找零后的保持状态--whenholdon=ifpressed=1andkeyvalue=1110thenpre_state=timecounter;elsepre_state=pre_state;endif;--冗余状态处理--whenothers=pre_state=timecounter;endcase;endif;endpro__ss;--当前状态下相应的控制输出值进程--pro__sspre_statebeginifpre_state=loadtimethentimeload=1;elsetimeload=0;endif;ifpre_state=loaddatethendateload=1;elsedateload=0;endif;ifpre_state=loadalarmthenalarmload=1;elsealarmload=0;endif;ifpre_state=loadnewcodethencodeload=1;elsecodeload=0;endif;ifpre_state=loadparathenparaload=1;elseparaload=0;endif;ifpre_state=readdateorpre_state=readtimeorpre_state=readkiloorpre_state=readmoneythenreadstate=1;elsereadstate=0;endif;ifpre_state=showkiloorpre_state=waitonorpre_state=showmoneyorpre_state=storethenstart=1;elsestart=0;endif;ifpre_state=waitonthenpause=1;elsepause=0;endif;ifpre_state=storethenwrite=1;elsewrite=0;endif;ifpre_state=showkiloorpre_state=showmoneyorpre_state=getchargeorpre_state=return_changeorpre_state=holdonthendot=1;elsedot=0;endif;ifpre_state=return_changethenen_return=1;elseen_return=0;endif;endpro__ss;--不同状态下的显示状态控制进程--pro__sspre_statebeginifpre_state=timecounterthen--显示当前时间,每个数码管显示相应的数字ss=000000;elsifpre_state=modifytime1orpre_state=modifydate1--这些状态下所有的数码管什么也不显示orpre_state=setalarm1orpre_state=inputcode1orpre_state=setcode1orpre_state=setcode8orpre_state=setpara1thenss=000001;elsifpre_state=modifytime2then--校时1完成后只有第一个数码显示置入的数,其他什么也不显示ss=000010;elsifpre_state=modifytime3then--校时2完成后只有第一,二个数码显示置入的数,其他什么也不显示ss=000011;elsifpre_state=modifytime4then--校时3完成后只有第一,二,三个数码显示置入的数,其他什么也不显示ss=000100;elsifpre_state=modifytime5then--校时4完成后只有第一,二,三,四个数码显示置入的数,其他什么也不显示ss=000101;elsifpre_state=modifytime6then--校时5完成后只有第六个数码不显示,其他显示对应的数字ss=000110;elsifpre_state=modifytime7orpre_state=loadtimethen--校时6完成后以及确认后六个数码管分别显示相应的数字ss=000111;elsifpre_state=setalarm2then--设置闹钟1完成只有第二个数码管显示置人的数,其他都不显示ss=001000;elsifpre_state=setalarm3then--设置闹钟2完成只有第二,三个数码管显示置人的数,其他都不显示ss=001001;elsifpre_state=setalarm4then--设置闹钟3完成只有第二,三,五个数码管显示置人的数,其他都不显示ss=001010;elsifpre_state=setalarm5orpre_state=loadalarmthen--设置闹钟4完成以及确认后只有第二,三,五,六个数码管显示置人的数,其他都不显示ss=001011;elsifpre_state=showdatethen--显示当前日期时,只有第二,三,五,六个数码管起到显示作用,其他不显示ss=001100;elsifpre_state=modifydate2then--修改日期1完成只有第二个数码管显示置人的数,其他都不显示ss=001101;elsifpre_state=modifydate3then--修改日期2完成只有第二,三个数码管显示置人的数,其他都不显示ss=001110;elsifpre_state=modifydate4then--修改日期3完成只有第二,三,五个数码管显示置人的数,其他都不显示ss=001111;elsifpre_state=modifydate5orpre_state=loaddatethen--修改日期4完成以及确认后只有第二,三,五,六个数码管显示置人的数,其他都不显示ss=0_____;elsifpre_state=inputcode2orpre_state=setcode2orpre_state=setcode9then--登录输入及修改第一位__时,显示”-“ss=010001;elsifpre_state=inputcode3orpre_state=setcode3orpre_state=setcode10then--登录输入及修改第二位__时,显示”--”ss=0_____;elsifpre_state=inputcode4orpre_state=setcode4orpre_state=setcode11then--登录输入及修改第三位__时,显示”---“ss=010011;elsifpre_state=inputcode5orpre_state=setcode5orpre_state=setcode12then--登录输入及修改第四位__时,显示”----ss=010100;elsifpre_state=inputcode6orpre_state=setcode6orpre_state=setcode13then--登录输入及修改第五位__时,显示”-----“ss=010101;elsifpre_state=inputcode7orpre_state=setcode7orpre_state=setcode14orpre_state=compare_newcodethen--登录输入及修改第六位__以及确认新__时,显示”------”ss=010110;elsifpre_state=loadnewcodethen--置入新__时显示000000ss=010111;elsifpre_state=hellothen--登录成功后显示HELLOss=011000;elsifpre_state=setpara2then--修改分配参数1成功后只有第六个数码管显示相应的数字ss=011001;elsifpre_state=setpara3orpre_state=loadparathen--修改分配参数2成功以及确认后只有第五,六个数码管显示相应的数字ss=011010;elsifpre_state=readdatethen--读运营记录的日期时,第二,三,五,六个数码管显示日期ss=011011;elsifpre_state=readkilothen--读运营记录的里程时,第三,四,五个数码管显示对应的里程ss=011100;elsifpre_state=readtimethen--读运营记录的时间时,第一,二,四,五个数码管显示当时的时间ss=011101;elsifpre_state=readmoneythen--读运营记录的收费数目时,第四,五,六个数码管显示收费金额ss=011110;elsifpre_state=showkilothen--运营过程中,显示里程数时,只有第三,四,五个数码管显示里程,其中,第四个数码管的小数点位发光ss=011111;elsifpre_state=showmoneythen--运营过程中,显示计费数目时,只有第一个数码管无显示,其中第四个数码管显示小数点ss=_____0;elsifpre_state=waitonthen--运营过程中,显示等待时间时,第二,三个数码管显示分,五,六个显示秒ss=_____1;elsifpre_state=getchargethen--显示收费数目时,只有第二,三,四个数码显示百,十,个位ss=100010;elsifpre_state=return_changeorpre_state=holdonthen--显示找零数目,以及找零完成后的保持时,只有第四个数码管有显示,且小数点显示ss=100011;elsess=_____0;endif;endpro__ss;buffertime=time_temp;bufferdate=date_temp;bufferalarm=alarm_temp;buffernewpara=para_temp;buffernewcode=newcode_temp23downto0;endrtl;
8、各主要模块仿真结果波形说明由于过程复杂,涉及的__特别多所以没有完全仿真,调试时只是在实物电路上进行
9、课程设计总结预期的目标与实现功能的差异总体来说预期的设计规划目标已经基本实现,但是有些重复性的没有价值,不具有代表意义的功能也就没有实现,另外有些复杂的指标没有达到,比如出租车收费标准有所简化,因为在完成项目的过程中发现这是比较复杂的,设想如果采用DSP或许程序或简单一些可以进一步发挥提高的部分
1.实现__模拟部分硬件组成,比如传感器,波形整形电路,A/D转换电路,扫描现金部件等等
2.采用__提示功能,可提示应缴金额,找零金额及一些问候用语,操作提示语等等
3.设计此系统与PC机的接口,可直接将存储器信息转入PC电脑内部数据库,因而后台软件是一个可操作的友好界面
4.链接GPS导航系统(显示本服务区电子地图)和通信设备,外来呼叫可显示在电子地图上,由一定的算法确定如何选择行车路线
5.设计电路具有防止计价器被修改的功能
6.引入嵌入式触摸屏技术,将系统功能以菜单的形式显示,可以通过触摸屏直接对系统进行操作,相关显示,修改也可更加直观化
7.支持__消费课程设计体会经历了这整整一学期的努力,我终于完成了这个数字系统设计项目,__颇多一方面为自己能够完成而高兴,另一方面回味设计过程便百感交集,这既是一个痛苦的历程,也是一个快乐的过程说的痛苦,是因为经常熬夜写代码,经常上课走神想算法,课后睡觉也不踏实,总是在想如何设计更令人恼火的是调试的过程,我花了将近6个星期的时间来调试,而且错误的原因往往很__,有的时候为了一个输入的错误检查了半天,时间得不到很好的利用当然也有令人高兴的地方,比如当很多功能依次在我面前实现时,当时心情是非常激动的,有很大的成就感总而言之,这次数字系统课程设计给了我很多,我学到了很多东西,不仅仅是系统设计方面的学术知识,同时也包含了人生的体悟
10、____【1】徐莹隽等数字系统电路设计实践2008高等教育出版社北京【2】黄正谨计算机结构与逻辑设计2008东南大学内部资料南京【3】林明权等VHDL数字控制系统设计范例2003电工电子出版社北京【4】金西VHDL与发展数字系统设计2003西安电子科技大学西安。