基于单片机和FPGA的出租车计费系统毕业设计.docx
《基于单片机和FPGA的出租车计费系统毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机和FPGA的出租车计费系统毕业设计.docx(36页珍藏版)》请在冰豆网上搜索。
基于单片机和FPGA的出租车计费系统毕业设计
(此文档为word格式,下载后您可任意编辑修改!
)
LiaoningNormalUniversity
(届)
本科生毕业论文(设计)
题目:
基于单片机和FPGA的出租车计费系统
学院:
辽宁师范大学
专业:
电子信息工程
学号:
学生姓名:
指导教师:
年月
摘要
本系统电源电压为+16V,速度传感器具有汽车每运行1㎞提供1000个脉冲信号的特性。
显示器可以采用LED数码管。
系统采用单片机和FPGA的结合进行系统的主体设计,测控FPGA芯片通过采集传感器脉冲信号WCLK进行里程计算,里程计费,利用外部脉冲信号SCLK产生标准时钟信号,以计算等待时间,等待费用,并产生里程标志(LCBZ),等待标志(DDBZ),熄灯标志(XDBZ)等有关控制标志信号,同时根据单片机发出的开始信号(START),时段标志(SDBZ),传输数据选择(SEL)等控制信号将有关计算结果传送给FPGA芯片。
单片机MCU除了完成键盘扫描,显示控制外,还通过P0口与FPGA进行数据交换,并向测控FPGA芯片发出有关控制信号。
本设计方案利用单片机和FPGA的结合,发挥它们各自的长处,分工清晰,实际使用和操作符合大众逻辑,容易被人接受。
而且,单片机丰富的IO口和FPGA模块化的设计为系统功能的扩展提供了空间和便利。
关键词:
计费系统;单片机;FPGA芯片
Abstract
Thesystempowersupplyvoltageof+16V,speedsensorbeusedLEDdigitaltube.ThesystemadoptsthesinglechipandFPGAbindingsystemofthemaindesign,controlFPGAchipthroughtheacquisitionsensorpulsesignalWCLKtomileage,metered,usinganexternalpulsesignalSCLKproducesastandardclocksignal,tocalculatethewaitingtime,waitingcost,andgeneratethemileagesigns(LCBZ),waitforthesigns(DDBZ),mark(lightsoutXDBZ)andotherrelatedcontrolsignal,atthesametimeaccordingtotheMCUbyastartsignal(START),timeslotmarkers(SDBZ),transmissiondataselection(SEL)andothercontrolsignalstobetransmittedtothecalculationresultsofFPGAchip.SinglechipMCUinadditiontothecompletionofthekeyboardscanning,displaycontrol,throughtheP0andFPGAdataexchange,andtocontrolFPGAchipemitsthecontrolsignal.ThedesignmakesuseofSCMandFPGAcombination,playtotheirrespectivestrengths,acleardivisionoflabor,theactualapplicationandoperationinlinewiththegenerallogic,iseasytobeacceptedbypeople.Moreover,SCMrichIOandFPGAmodulardesignforsystemexpansionprovidesspaceandfacilities.
Keywords:
billingsystem;SCM;FPGAchip
1绪论
出租车是现代人类的重要交通工具,而出租车的计费系统的安全性和先进性是人们普遍关心的问题,要求计费器性能稳定,计费准确,以及预防司机作弊行为等等都关系到乘客的切身利益。
因此,设计出符合人们普遍要求及放心的产品具有重要的意义。
同时,设计该系统所应用的知识涉及范围广,通过设计可以牢固掌握所学理论知识,对电子信息工程专业的就业方向有初步认识,将理论与实际有机联系起来。
应该是对以前所学知识的一次审核吧!
本设计主要介绍了出租车计费系统的设计思路和过程,并给出了所涉及的相关知识的详细介绍。
EDA技术应用,单片机的功能及应用,传感器检测技术,VHDL编程语言及汇编语言程序,显示系统设计及按键控制,等等。
第一部分为绪论,第二部分为方案论证,第三部分为系统设计,第四部分是硬件及软件实现,第五部分系统检测及分析,第六部分是结论,第七部分是附录,第八部分是参考文献,第九部分是致谢.
目前,普遍的出租车计费器仅仅具有时钟,起步价,里程计费,等待计费及显示几个功能。
其发展前景是可观的,将来的产品除具有这些功能外,另外还可增加如下功能:
防作弊功能,IC卡付费:
顾客能在制定点购买一定额度的“顾客IC卡”,乘车后可用IC卡付帐,付帐是否成功有相应的提示。
车主可定期将总营业额写入“车主IC卡”中,并据此IC卡向所属公司领取报酬。
车票资料打印:
顾客付费后可打印发票,打印内容包括车主信息和车费信息等。
可打印车主总营业额信息。
语音播报:
当乘客上车时,可自动问候乘客,当到达目的地,自动播报乘车费用并礼貌再见,表达希望下次乘坐的意思。
增加的这些功能将会更好地为乘客服务。
本系统设计也可应用于其他计费系统中,如电脑计费系统等等,其应用技术也有相当范围的应用面,如显示和播报部分也可应用于智能饭卡﹑智能电动车﹑机器人等电子相关产品中。
可见掌握了该系统的设计和分析可实现对电子专业知识的具体应用,增强理论联系实际的能力。
除此以外,所涉及的知识面也联系到现实生活中很多相关电子产品,也将对其他电子产品有一定理论基础。
2系统设计
2.1系统组成
其中系统电源电压为+16V。
速度传感器不需要进行设计,假设它具有汽车每运行1㎞提供1000个脉冲信号的特性。
显示器采用LED数码管。
具体功能要求如图2-1:
图2-1系统方框图
2.1.1计费及显示
①里程,即汽车行程里程,用四位数字显示,显示方式为“XXX.X”,单位为㎞,精确到0.1㎞。
②单价,即里程单价,用三位数字显示,显示方式为“X.XX”,单价为元㎞,根据每天不同的时间段有两种情况:
当时间段为06:
00~23:
00时单价为1.4元㎞,其他时间段内单价为1.80元㎞。
③等候时间,用四位数字显示分钟和秒,显示方式为“XX:
XX”,等候的定义是:
当汽车行驶速度小于或等于12㎞Register)
8051单片机内部将多个寄存器统称成SFR,代表其特定的功能,甚至Port0、Port1、Port3也都是属SFR的成员之一,在这些SFR中有部分的寄存器可以进行位寻址,表3-1是这些SFR寄存器的整理,其中加(*)记号的寄存器可进行位寻址。
SFR寄存器
部分可进行位寻址的寄存器
算术运算寄存器
Acc(*)、B(*)、PSW(*)
指标类寄存器
SP、DPL、DPH
并行输入出端口
P0(*)、P1(*)、P2(*)、P3(*)
中断控制寄存器
IP(*)、IE(*)
定时计数寄存器
TMOD、TCON(*)、TL0、TH0、TL1、TH1
串行通信寄存器
SCON(*)、SBUF
表3-1可进行位寻址的SFR寄存器
3.2.2AT89S51单片机简介
AT89S5l是新型高档单片机。
它的主要特性是:
片内含有32KB的Flash程序存储器,擦写周期为1000次;
片内数据存储器内含512字节的RAM;
具有可编程32线IO口(P0,P1,P2和P3口);
具有3个可编程定时器T0,T1和T2;
中断系统是具有8个中断源、6个中断矢量、2级中断优先权的中断结构;
具有一个全双工UART串行口;
低功耗工作方式为空闲模式和掉电模式;
具有双数据指针DPTR0和DPTR1;
具有3级程序锁定位;
具有硬件看门狗定时器WDT;
AT89S51工作电源为4.0~5.5V(AT89LV51RC为2.7~5.5V);
AT89S51最高工作频率为33MHZ(AT89LV51RC为12MHZ);
具有断电标志POF.
3.2.3AT89S5l与51系列单片机相比具有如下特点
①程序存储器由8KB增加到32KB;
②片内数据存储器由256宇节增加到512字节;
③数据指针由1个增加到2个;
④增加了看门狗定时器,CPU在执行程序过程中,由于瞬时的干扰使程序陷入死循环状态,WDT(WatchdogTimer)是使CPU摆脱这种困境而自动恢复的一种方法;
⑤退出掉电方式由单纯硬件复位方式增加到硬件复位和中断两种方式;
⑥新增加了断电标志POF.
3.2.489S51的内部框图
图3-589S51的内部框图
引脚排列及功能:
AT89S51有3种封装形式:
PDIP.PLCC和TQFP.PDIP封装的引脚排列如图所示。
图3-6单片机电路板
①IO口线
P0口——8位、漏极开路的双向1O口。
当使用片外存储器及外扩IO口时,P0口作为低字节地址数据复用线。
在编程时,P0口可用于接收指令代码宇节;在程序校验时,P0口可输出指令字节(这时需要加外部上拉电阻)。
P0口也可作通用IO口使用.但需加上拉电阻.变为准双向口。
当作为普通输入时,应将输出锁存器置1.PO口可驱动8个TTL负载.
P1口——8位、准双向IO口,具有内部上拉电阻。
P1口是为用户准备的1O双向口。
在编程和校验时,可用做输入低8位地址。
用做输入时,应先将输出锁存器置1.P1口可驱动4个TTL负载。
引 脚
替代功能
说 明
P1.0
T2
定时器2的外部事件输入端;
可编脉冲输出端
P1.1
T2EX
定时器2的捕捉重装触发器输入端;
定时器2的计数方向控制端
表3-2P1.0P1.1替代功能
P2口——8位、准双向1O口.具有内部上位电阻.
当使用片外存储器或外扩1O口时.P2口输出高8位地址。
在编程校验时.P2口可接收高字节地址和某些控制信号。
P2口也可作普通IO口使用。
用做输入时,应先将输出锁存器置1.P2口可驱动4个TTL负载。
P3口——8位、准双向1O口,具有内部上拉电阻。
P3口可作为普通1O口。
用做输入时,应先将输出锁存器置1.在编程校验时.P3口接收某些控制信号。
它可驱动4个TTL负载。
P3口还提供各种替代功能。
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(记时器0外部输入)
P3.5
T1(记时器1外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
表3-3P3口替代功能
②控制信号线
RST——复位输入信号,高电平有效。
在振荡器稳定工作时,在RST脚施加两个机器周期(即24个晶振周期)以上的高电平,将器件复位。
EA(——)VPP——外部程序存储器访问允许信号EA(ExternalAccessEnable)。
当EA(——)信号接地时,对ROM的读操作限定在外部程序存储器,地址为0000H~FFFFH;当EA(——)接地时,对ROM的读操作从内部程序存储器开始,并可延续至外部程序存储器。
在编程时,该引脚可接编程电压(AT89C51的VPP为5V或12V;AT89LV51的VPP为12V)。
在编程校验时,该引脚可接VCC。
PSEN(————)——片外程序存储器读选通信号用PSEN(ProgramStoreEnable),低电平有效。
在片外程序存储器取指令期间,当PSEN(————)有效时,程序存储器的内容被送至PO口(数据总线);在访问外部RAM时,PSEN(————)无效。
AIEPROG(————)——低字节地址锁存信号AlE(AddresslatchEnable)。
在系统扩展时,AlE的下降沿将PO口输出的低8位地址锁存在外接的地址锁存器中,以实现低字节地址和数据的分时传送。
此外,ALE端连续输出正脉冲.频率为晶振频率的16,
可用做外部定时脉冲使用。
但要注意,每次访问外RAM时要丢失一个ALE脉冲。
在编程期间.该引脚输入编程脉冲(PROG(————))。
③电源线
VCC——电源电压输入。
GND——接地。
④外部晶振引线
XTAL1——片内振荡器反相放大器和时钟发生线路的输入端。
使用片内振荡器时,连接外部石英晶体和微调电容。
XTAL2——片内振荡器反相放大器的输出端。
当使用片内振荡器时,外接石英晶体和微调电容。
当使用外部振荡器时,引脚XTAL1接收外振荡器信号,XTAIL2悬空。
3.2.5中断控制
可采用中断的时机:
①当计数值数完时要做一个特定的动作。
②当外部信号有一个脉冲信号产生时要做某种特定的运算。
③当外部某些信号成立时,必须立即处理。
④当收到通信界面上的一个特定值时,必须立即反应。
⑤当程序必须处理数个小程序,且这些程序必须几乎同时都在执行中。
⑥当程序必须随时更新某项数据或显示值。
⑦当程序必须自动且随时去检查系统中的状态值时。
上述的情形亦可采用平常的程序,以持续或经常询问的写法来应付,但是若系统有多个条件要询问时,写法就会变得相当的复杂。
假如改用程序中断的写法,则程序的写法就会变得较单纯些,中断程序通常有以下一个或一个以上的特征,假使我们的应用中发现有这些特征时,在程序规划前就要考虑是否采用中断的写法。
特征1:
每隔一个时间间隔就必须做某件特定的事情。
特征2:
当某个条件(不论软件或硬件线路)成立时,就让CPU立即处理。
特征3:
CPU正以多任务(Multi-task)的模式,同时处理数个程序或信号。
特征4:
某项状态可能平时均不成立,可是一成立时,CPU必须立即停止原先的动作,马上来处理这个状态。
3.2.6单片机控制程序设计
单片机模块包括单片机AT89S51及其控制的显示和键盘系统,AT89S51对FPGA的数据进行计算,计算出用车总费用并送入显示系统显示,同时它接收键盘信息并处理显示切换。
系统采用6+1显示,6个数码管作常规显示,一个数码管作状态显示。
按键共有5个,分别是功能切换键,确定键,修改键,启动模拟键和空车牌压下模拟键。
图3-7主程序流程图
图3-8按键处理流程图
图3-9显示子程序流程图
图3-10里程显示子程序流程图
图3-11乘车费用显示子程序流程图
3.2.7单片机汇编语言源程序
;CZJFXT.ASM
LED8EQU7FH
LED7EQU7EH;时间显缓
LED6EQU7DH
LED5EQU7CH
LED4EQU7BH
LED3EQU7AH
LED2EQU79H
LED1EQU78H
FUNKEYEQUP1.0;功能
SELKEYEQUP1.1;选择
FIXKEYEQUP1.2;修改
RUNEQUP1.4;运行信号(传感器)
RUNBZEQU28H.4
ZKEQUP1.5;载客信号-单片机(传感器)
ZKBZEQU28H.2;载客标志
SZKBZEQUP2.7;送FPGA的载客标志
INT_R1EQU46H
INT_R0EQU47H
INT_R2EQU48H
KEYNUMEQU49H
ADAEQUP2.0
ADBEQUP2.1
ADCEQUP2.2
SDBZEQUP2.3;时段标志
LCBZEQUP2.4;里程标志
DDBZEQUP2.5;等待标志
DDBZCEQU28H.5
XDBZEQUP2.6;等待超过1小时标志
FYDY8EQU3FH;费用显缓
FYDY7EQU3EH
FYDY6EQU3DH
FYDY5EQU3CH
FYDY4EQU3BH
FYDY3EQU3AH
FYDY2EQU39H
FYDY1EQU38H
;主程序
START:
JMPMAIN;转移到主程序
ORG000BH;中断服务入口地址
LJMPPIT0
ORG30H
MAIN:
CLEAR:
MOVR0,#00H
MOVR1,#128
MOVA,#00H
L1:
MOV@R0,A
INCR0
DJNZR1,L1
MOVP2,#00H
MOVSP,#60H;开辟堆栈区
MOVTMOD,#01H;定时器0,定时工作方式1,16位
MOVTL0,#0B0H;初值为4C00H,50MS
MOVTH0,#03CH
SETBTR0;启动定时器工作
SETBIE.7;中断总允许
SETBIE.1;允许定时中断
MOV30H,#14H;中断循环次数初值为20次
ML2:
LCALLKKEYI
MLL3:
CJNEA,#04H,ML4
SETBRUNBZ
SJMPML2
;调用键盘扫描程序
ML4:
CJNEA,#00H,MLL1
CLR28H.0
CLR28H.6
LCALLSJJZ
LCALLKKEYI
CJNEA,#00H,MLL3
LCALLLCDJDISP
LCALLKKEYI
CJNEA,#00H,MLL3
CLR28H.0
LJMPML6
LCALLKKEYI
MLLL1:
CJNEA,#00H,MLL3
LJMPML5
MLL1:
JNBRUNBZ,ML2
CJNEA,#05H,ML2
SETBZKBZ
SETBSZKBZ
NOP
LCALLDELAY3
CLRSZKBZ
;LCALLQJDISP;起价显示
ML5:
LCALLFYDISP;费用显示
LCALLKKEYII
JNB28H.3,ML3;有键按下转ML3
LJMPML5;没键按下继续刷新费用显示
ML3:
LJMPMLL3
ML6:
LCALLLCDISP
LCALLKKEYII
JNB28H.3,MLLL1
LJMPML6
DDDISP:
;等待时间显示子程序
MOVFYDY8,#0DH
MOVFYDY7,#12H
MOVFYDY6,#12H
RET
;时间校正子程序
SJJZ:
MOVR6,#03H
MOV40H,#LED6
SJL0:
LCALLKKEYI
CJNEA,#01H,NEXT3
SJL3:
LCALLKKEYI
SJL1:
CJNEA,#02H,NEXT3
MOVA,R6
CJNEA,#03H,SL0
MOVR0,40H
LCALLDAAD1
MOVA,R2;是否到了60S?
XRLA,#24H
JNZSJL4;不到,转RET1返回
LCALLCLR0;到了60S,则秒显示缓冲单元清0
LJMPSJL4
SL0:
CJNEA,#02H,SL1
MOVR0,40H
LCALLDAAD1
MOVA,R2;是否到了60S?
XRLA,#60H
JNZSJL4;不到,转RET1返回
LCALLCLR0;到了60S,则秒显示缓冲单元清0
LJMPSJL4
SL1:
CJNEA,#01H,SJL4
MOVR0,40H
LCALLDAAD1
MOVA,R2;是否到了60S?
XRLA,#60H
JNZSJL4;不到,转RET1返回
LCALLCLR0;到了60S,则秒显示缓冲单元清0
LJMPSJL4
SJL4:
LCALLKKEYI
CJNEA,#01H,SJL1
DEC40H
DEC40H
DJNZR6,SJL3
NEXT3:
RET
;起价显示参数子程序
QJDISP:
SETB28H.0
MOVFYDY8,#0FH
MOVFYDY7,#12H
MOVFYDY6,#12H
JB28H.1,NEXT9
MOVFYDY5,#00H
MOVFYDY4,#00H
MOVFYDY3,#05H
MOVFYDY2,#00H
MOVFYDY1,#00H
NEXT9:
RET
;里程单价显示子程序
LCDJDISP:
SETB28H.0
MOVFYDY8,#0DH
MOVFYDY7,#12H
MOVFYDY6,#12H
MOVFYDY5,#12H
MOVFYDY4,#12H
JNBSDBZ,DJL1
MOVFYDY3,#01H
MOVFYDY2,#04H
MOVFYDY1,#00H
LJMPDJL2
DJL1:
MOVFYDY3,#01H
MOVFYDY2,#08H
MOVFYDY1,#00H
DJL2:
RET
LCDISP:
ANLP2,#0F8H
SETBP2.2
SETBP2.1
MOVR0,#4FH;读入数据
MOVR3,#02H;读3次P0口
LCDL0:
MOVA,P0
MOV@R0,A
DECR0
MOVA,P2
INCA;指向CPLD下一个数据ADRCADRBADRA=
MOVP2,A
DJNZR3,LCDL0
ANLP2,#0F8H
IF1=5
MOV4FH,#0AAH
MOV4EH,#00H
ENDIF
MOV58H,4EH;另存
MOV59H,4FH
MOV22H,4DH
MOV21H,4EH
MOV20H,4FH
LCALLHEXBCD2
SETB28H.6
MOVFYDY8,#13H
MOVFYDY7,#12H
MOVFYDY6,#12H
MOVFYDY5,#12H
RET
FYDISP:
ANLP2,#0F8H
SETBP2.1
MOVR0,#4FH;读入数据
MOVR3,#02H;读3次P0口
FYL1:
MOVA,P0
MOV@R0,A
DECR0
MOVA,P2
INCA;指向CPLD下一个数据ADRCADRBADRA=
MOVP2,A
DJNZR3,FYL1
ANLP2,#0F8H
IF1=4
MOV