出租车计费系统的EDA技术综合应用实例与分析谭会生课件_第1页
出租车计费系统的EDA技术综合应用实例与分析谭会生课件_第2页
出租车计费系统的EDA技术综合应用实例与分析谭会生课件_第3页
出租车计费系统的EDA技术综合应用实例与分析谭会生课件_第4页
出租车计费系统的EDA技术综合应用实例与分析谭会生课件_第5页
已阅读5页,还剩255页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章出租车计费系统的设计与分析14.1系统设计要求

14.2系统设计方案14.3主要源程序14.4系统仿真/硬件验证14.5设计技巧分析14.6系统扩展思路第14章出租车计费系统的设计与分析14.1系统设计14.1系统设计要求以CPLD/FPGA为主体,设计并制作一台出租车计费系统,系统的方框图如图14.1所示。14.1系统设计要求以CPLD图14.1出租车计费系统方框图图14.1出租车计费系统方框图1.计费及显示(1)里程,即汽车行驶里程,用四位数字显示,显示方式为“XXX.X”,单位为km,精确到0.1km。(2)单价,即里程单价,用三位数字显示,显示方式为“X.XX”,单价为元/km,根据每天不同的时间段有两种情况:当时间段为06:00~23:00时单价为1.40元/km,其他时间段内单价为1.80元/km。1.计费及显示(3)等候时间,用四位数字显示分钟和秒,显示方式为“XX:XX”,等候的定义是:当汽车行驶速度小于或等于12km/h时为“等候”。(4)等候单价,等候单价有两种情况:在等候时间小于1小时的情况下,等候单价为1元每5分钟;在等候时间大于1小时的情况下,等候单价为20元每小时。(3)等候时间,用四位数字显示分钟(5)费用的计算,出租车的起价为5.00元,当里程小于2km时,按起价计算费用;当里程大于2km时按下式计算费用:费用=里程╳里程单价+等候时间╳等候单价(6)费用的显示,用五位数字显示,显示方式为“XXX.XX”,单价为元。

(5)费用的计算,出租车的起价为52.时钟及显示当出租车在常运状态下,应能显示当前的时间。在汽车熄火的情况下,时钟必须正常运行,但是可以不显示时钟。3.计费开始提示当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。2.时钟及显示14.2系统设计方案14.2.1系统总体设计方案本系统拟采用单片机和FPGA的结合进行系统的主体设计,系统原理框图如图14.2所示。14.2系统设计方案14.2.1系统总体设图14.2出租车计费系统总体原理框图图14.2出租车计费系统总体原理框图14.2.2测控FPGA的VHDL程序设计

根据系统的设计要求,我们可将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待判别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,输出数据选择模块SCXZ。其内部组成原理图如图14.3所示。14.2.2测控FPGA的VHDL程序设计分频器模块FPQ:将外部时钟信号SCLK(设计时假设为200Hz)经过适当分频后,产生1Hz的系统工作用基准时钟信号CLK1HZ,供系统中的有关模块计时用。等待判别模块DDPB:根据速度传感器脉冲信号WCLK和分频器产生的基准时钟信号CLK1HZ,计算单位时间里WCLK的脉冲个数(每km产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志信号DDBZ。分频器模块FPQ:将外部时钟信号SCL里程计算模块LCJS:根据速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶的里程数XSLC进行计算,同时发出里程标志信号LCBZ和里程计费标志信号JFBZ。里程计费模块LCJF:在计费标志信号JFBZ、等待标志信号DDBZ、里程标志信号LCBZ和时段标志信号XDBZ等信号的控制下,计算行驶里程超过2km以上里程的费用LCFY。里程计算模块LCJS:根据速度传感等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ的控制下,进行等待时间DDSJ的计算,其中DDSJ的低8位表示等待时间的秒数,DDSJ的高8位表示等待时间的分钟数,同时根据等待时间的长短发出一个熄灯标志信号XDBZ。等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY的计费操作。输出数据选择模块SCXZ:根据单片机发出的数据传输选择控制信号SEL,选择有关计算处理结果传输给单片机。SEL与被传送数据的具体关系如表14.1所示。等待计时模块DDJS:在等待标志信号表14.1SEL与被传送数据的关系列表表14.1SEL与被传送数据的关系列表14.2.3单片机控制程序设计

单片机模块包括单片机AT89C51及其控制的显示和键盘系统,控制口如图14.3(略)所示。AT89C51对FPGA的数据进行运算,计算出用车总费用并送显示系统显示,同时它接收键盘信息并处理显示切换。系统采用6+1显示,6个数码管作常规显示,一个数码管作状态显示。按键共有5个,分别是功能切换键、确定键、修改键、启动模拟键和空车牌压下模拟键。涉及的主要流程图如图14.4~14.8所示。14.2.3单片机控制程序设计图14.4主程序流程图图14.4主程序流程图图14.5键处理流程图图14.5键处理流程图图14.6经典显示子程序流程图图14.6经典显示子程序流程图图14.7里程显示子程序流程图图14.7里程显示子程序流程图图14.8乘车费用显示子程序流程图图14.8乘车费用显示子程序流程图14.3主要源程序14.3.1主要VHDL源程序1.分频器模块FPQ的VHDL源程序--FPQ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYFPQIS14.3主要源程序14.3.1主要VHDLPORT(SCLK:INSTD_LOGIC; --SCLK=200Hz CLK1HZ:OUTSTD_LOGIC);--CLK1HZ=1HzENDENTITYFPQ;ARCHITECTUREARTOFFPQISSIGNALCNT100:INTEGERRANGE0TO99;SIGNALCLK1:STD_LOGIC;BEGINPROCESS(SCLK)PORT(SCLK:INSTD_LOGIC; BEGINIFSCLK'EVENTANDSCLK='1'THEN IFCNT100=99THEN CNT100<=0; CLK1<=NOTCLK1; ELSE CNT100<=CNT100+1; ENDIF;ELSEBEGINCLK1<=CLK1;ENDIF;CLK1HZ<=CLK1;ENDPROCESS;ENDARCHITECTUREART;CLK1<=CLK1;2.等待判别模块DDPB的VHDL源程序--DDPB.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYDDPBISPORT(START,WCLK:INSTD_LOGIC; CLK1HZ:INSTD_LOGIC; DDBZ:OUTSTD_LOGIC);2.等待判别模块DDPB的VHDL源程序ENDENTITYDDPB;ARCHITECTUREARTOFDDPBISSIGNALT60S:STD_LOGIC;SIGNALWCLKCOU:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN--产生60s周期性跳变信号进程PROCESS(START,CLK1HZ)ISVARIABLECNT60:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFSTART='1'THENENDENTITYDDPB;CNT60:="00000000";T60S<='0';ELSIFCLK1HZ'EVENTANDCLK1HZ='1'THENIFCNT60="00111100"THEN--CNT60=60 T60S<='1';CNT60:="00000000"; ELSE CNT60:=CNT60+'1';T60S<='0';ENDIF;ENDIF;ENDPROCESS;--每分钟行驶距离计算进程CNT60:="00000000";T60S<='0';PROCESS(START,WCLK,T60S)ISBEGINIFSTART='1'THENWCLKCOU<="00000000";ELSIFWCLK'EVENTANDWCLK='1'THENIFT60S='1'THENWCLKCOU<="00000000";ELSE WCLKCOU<=WCLKCOU+'1'; --距离计算,单位为mPROCESS(START,WCLK,T60S)ISENDIF;ENDIF;ENDPROCESS;--等待标志判别进程PROCESS(WCLKCOU,T60S)ISBEGINIFT60S'EVENTANDT60S='1'THENIFWCLKCOU<="11001000"THEN--WCLKCOU<=200 DDBZ<='1';--等待ELSEENDIF;DDBZ<='0';--行驶ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTUREART;DDBZ<='0';--行驶3.里程计算模块LCJS的VHDL源程序--LCJS.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITY LCJSISPORT(START,DDBZ,WCLK:INSTD_LOGIC; XSLC:OUTSTD_LOGIC_VECTOR(15DOWNTO0);3.里程计算模块LCJS的VHDL源程序LCBZ,JFBZ:OUTSTD_LOGIC);ENDENTITYLCJS;ARCHITECTUREARTOFLCJSISSIGNALBMS:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALBMS1:INTEGERRANGE0TO99999;SIGNALJFBZ1:STD_LOGIC;BEGIN--里程计算及标志产生进程PROCESS(START,WCLK)LCBZ,JFBZ:OUTSTD_LOGIC);VARIABLEMS:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFSTART='1'THEN MS:="00000000"; BMS<="0000000000000000";LCBZ<='0';ELSIFWCLK'EVENTANDWCLK='1'THEN IFDDBZ='0'THENIFMS="01100011"THEN MS:="00000000";VARIABLEMS:STD_LOGIC_VECTORBMS<=BMS+'1'; --百米数计算IFBMS>=20THEN LCBZ<='1'; --大于2km标志ENDIF; ELSE MS:=MS+'1'; --米数计算 ENDIF;ENDIF;ENDIF;ENDPROCESS;BMS<=BMS+'1'; --百米数计算--里程计算结果输出XSLC<=BMS;--里程计算结果转换BMS1<=CONV_INTEGER(BMS);--产生计费信号进程PROCESS(BMS1)ISBEGINCASEBMS1IS--里程计算结果输出WHEN10|20|30|40|50|60|70|80|90|100=>JFBZ1<='1';WHEN110|120|130|140|150|160|170|180|190|200=>JFBZ1<='1';WHEN210|220|230|240|250|260|270|280|290|300=>JFBZ1<='1';WHEN310|320|330|340|350|360|370|380|390|400=>JFBZ1<='1';WHEN410|420|430|440|450|460|470|480|490|500=>JFBZ1<='1';WHEN510|520|530|540|550|560|570|580|590|600=>JFBZ1<='1';WHEN610|620|630|640|650|660|670|680|690|700=>JFBZ1<='1';WHEN710|720|730|740|750|760|770|780|790|800=>JFBZ1<='1';WHEN810|820|830|840|850|860|870|880|890|900=>JFBZ1<='1';WHEN910|920|930|940|950|960|970|980|990|1000=>JFBZ1<='1';WHEN10|20|30|40|50|60|70|8WHEN1010|1020|1030|1040|1050|1060|1070|1080|1090|1100=>JFBZ1<='1';WHEN1110|1120|1130|1140|1150|1160|1170|1180|1190|1200=>JFBZ1<='1';WHEN1210|1220|1230|1240|1250|1260|1270|1280|1290|1300=>JFBZ1<='1';WHEN1310|1320|1330|1340|1350|1360|1370|1380|1390|1400=>JFBZ1<='1';WHEN1410|1420|1430|1440|1450|1460|1470|1480|1490|1500=>JFBZ1<='1';WHEN1510|1520|1530|1540|1550|1560|1570|1580|1590|1600=>JFBZ1<='1';WHEN1610|1620|1630|1640|1650|1660|1670|1680|1690|1700=>JFBZ1<='1';WHEN1710|1720|1730|1740|1750|1760|1770|1780|1790|1800=>JFBZ1<='1';WHEN1810|1820|1830|1840|1850|1860|1870|1880|1890|1900=>JFBZ1<='1';WHEN1910|1920|1930|1940|1950|1960|1970|1980|1990|2000=>JFBZ1<='1';WHEN1010|1020|1030|1040|10WHEN3910|3920|3930|3940|3950|3960|3970|3980|3990|4000=>JFBZ1<='1';WHENOTHERS=>JFBZ1<='0';ENDCASE;ENDPROCESS;--计费标志去毛刺进程PROCESS(WCLK,JFBZ1)ISBEGINWHEN3910|3920|3930|3940|3950|IFWCLK'EVENTANDWCLK='1'THENJFBZ<=JFBZ1;ENDIF;ENDPROCESS;ENDARCHITECTUREART;IFWCLK'EVENTANDWCLK='1'TH4.里程计费模块LCJF的VHDL源程序--LCJF.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYLCJFISGENERIC(SD1:INTEGER:=140;--04:00~23:00单价 SD2:INTEGER:=180);--其他时段单价4.里程计费模块LCJF的VHDL源程序PORT(LCBZ,JFBZ,START,DDBZ,SDBZ:INSTD_LOGIC; LCFY:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDENTITYLCJF;ARCHITECTUREARTOFLCJFISSIGNALLCFY1:STD_LOGIC_VECTOR(15DOWNTO0);BEGINPROCESS(START,LCBZ,SDBZ,JFBZ)BEGINIFSTART='1'THENPORT(LCBZ,JFBZ,START,DDBZ,SDBZLCFY1<="0000000000000000";ELSIFJFBZ'EVENTANDJFBZ='1'THENIFDDBZ='0'THEN --行驶状态IFLCBZ='0'THEN --2km以内 LCFY1<="0000000000000000";ELSIFLCBZ='1'THEN --2km以上 IFSDBZ='0'THEN LCFY1<=LCFY1+SD1;ELSIFSDBZ='1'THEN LCFY1<=LCFY1+SD2; ENDIF;LCFY1<="0000000000000000";ENDIF;ENDIF;ENDIF;ENDPROCESS;LCFY<=LCFY1;ENDARCHITECTUREART;ENDIF;5.等待计时模块DDJS的VHDL源程序--DDJS.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYDDJSISPORT(START,DDBZ:INSTD_LOGIC; CLK1HZ:INSTD_LOGIC; DDSJ:OUTSTD_LOGIC_VECTOR(15DOWNTO0);5.等待计时模块DDJS的VHDL源程序XDBZ:OUTSTD_LOGIC);ENDENTITYDDJS;ARCHITECTUREARTOFDDJSISSIGNALMS,MG,FS,FG:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALXIDENG:STD_LOGIC; BEGINPROCESS(START,DDBZ,CLK1HZ)ISBEGINIFSTART='1'THENXDBZ:OUTSTD_LOGIC);MS<="0000";MG<="0000"; FS<="0000";FG<="0000";ELSIFCLK1HZ'EVENTANDCLK1HZ='1'THENIFDDBZ='1'THEN IFMG=9THENMG<="0000"; IFMS=5THENMS<="0000"; IFFG=9THENFG<="0000"; IFFS=5THENXIDENG<='1';FS<="0000"; ELSEMS<="0000";MG<="0000";FS<=FS+'1'; --分数十位计算 ENDIF; ELSEFG<=FG+'1'; --分数个位计算 ENDIF; ELSEMS<=MS+'1'; --秒数十位计算 ENDIF; ELSEMG<=MG+'1'; --秒数个位计算FS<=FS+'1'; ENDIF;ENDIF;ENDIF;ENDPROCESS;XDBZ<=XIDENG;DDSJ(15DOWNTO12)<=FS;DDSJ(11DOWNTO8)<=FG;DDSJ(7DOWNTO4)<=MS;DDSJ(3DOWNTO0)<=MG;ENDARCHITECTUREART;ENDIF;6.等待计费模块DDJF的VHDL源程序--DDJF.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYDDJFIS--每分钟等待费用定义,单位为分GENERIC(WDJ1:INTEGER:=20;WDJ2:INTEGER:=33);6.等待计费模块DDJF的VHDL源程序PORT(START,XDBZ,DDBZ,CLK1HZ:INSTD_LOGIC; DDFY:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDENTITYDDJF;ARCHITECTUREARTOFDDJFISSIGNALDDFY1:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALCNT60:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALT60S:STD_LOGIC;BEGIN--产生60s周期性跳变信号进程PORT(START,XDBZ,DDBZ,CLK1HPROCESS(CLK1HZ)ISBEGINIFCLK1HZ'EVENTANDCLK1HZ='1'THENIFCNT60="00111100"THEN--CNT60=60 T60S<='1';CNT60<="00000000"; ELSE CNT60<=CNT60+'1';T60S<='0';ENDIF;ENDIF;ENDPROCESS;--等待费用计算进程PROCESS(CLK1HZ)ISPROCESS(T60S,XDBZ,DDBZ)ISBEGINIFSTART='1'THENDDFY1<="0000000000000000";ELSIFT60S'EVENTANDT60S='1'THENIFDDBZ='1'THEN IFXDBZ='0'THEN --等待时间小于1小时 DDFY1<=DDFY1+WDJ1; ELSIFXDBZ='1'THEN --等待时间大于1小时 DDFY1<=DDFY1+WDJ2;PROCESS(T60S,XDBZ,DDBZ)ISENDIF; ENDIF;ENDIF;ENDPROCESS; --等待费用计算结果输出DDFY<=DDFY1;ENDARCHITECTUREART;ENDIF;7.输出数据选择模块SCXZ的VHDL源程序--SCXZ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSCXZISPORT(SEL:INSTD_LOGIC_VECTOR(2DOWNTO0);XSLC:INSTD_LOGIC_VECTOR(15DOWNTO0);7.输出数据选择模块SCXZ的VHDL源程序LCFY:INSTD_LOGIC_VECTOR(15DOWNTO0);DDSJ:INSTD_LOGIC_VECTOR(15DOWNTO0);DDFY:INSTD_LOGIC_VECTOR(15DOWNTO0);DATA:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYSCXZ;ARCHITECTUREARTOFSCXZISBEGINLCFY:INSTD_LOGIC_VECTOR(15DDATA<=DDSJ(7DOWNTO0)WHENSEL="000" ELSEDDSJ(15DOWNTO8)WHENSEL="001" ELSELCFY(7DOWNTO0)WHENSEL="010" ELSELCFY(15DOWNTO8)WHENSEL="011" ELSEDDFY(7DOWNTO0)WHENSEL="100" ELSEDDFY(15DOWNTO8)WHENSEL="101" ELSEXSLC(7DOWNTO0)WHENSEL="110" ELSEXSLC(15DOWNTO8)WHENSEL="111" ELSE"00000000";ENDARCHITECTUREART;DATA<=DDSJ(7DOWNTO0)WHE8.系统总体组装的VHDL源程序系统总体组装的VHDL源程序请读者根据图14.3的测控FPGA系统CZJFXT内部组成原理图自行完成。8.系统总体组装的VHDL源程序14.3.2单片机汇编语言源程序;CZJFXT.ASMLED8 EQU7FHLED7 EQU7EH ;时间显缓LED6 EQU7DHLED5 EQU7CHLED4 EQU7BHLED3 EQU7AHLED2 EQU79HLED1 EQU78H14.3.2单片机汇编语言源程序FUNKEY EQUP1.0 ;功能SELKEY EQUP1.1 ;选择FIXKEY EQUP1.2 ;修改

RUN EQUP1.4 ;运行信号(传感器)RUNBZ EQU28H.4

ZK EQUP1.5 ;载客信号-单片机(传感器)ZKBZ EQU28H.2 ;载客标志SZKBZ EQUP2.7 ;送FPGA的载客标志FUNKEY EQUP1.0 ;功能INT_R1 EQU46HINT_R0 EQU47HINT_R2 EQU48HKEYNUM EQU49H

ADA EQUP2.0ADB EQUP2.1ADC EQUP2.2SDBZ EQUP3.3 ;时段标志INT_R1 EQU46HLCBZ EQUP2.4 ;里程标志DDBZ EQUP2.5 ;等待标志DDBZC EQU28H.5XDBZ EQUP2.6 ;等待超过1小时标志

FYDY8 EQU3FH ;费用显缓LCBZ EQUP2.4 ;里程标志FYDY7 EQU3EHFYDY6 EQU3DHFYDY5 EQU3CHFYDY4 EQU3BHFYDY3 EQU3AHFYDY2 EQU39HFYDY1 EQU38H

;主程序FYDY7 EQU3EHSTART: JMP MAIN;转移到主程序

ORG 000BH;中断服务入口地址 LJMP PIT0

ORG 30HMAIN:START:CLEAR: MOV R0,#00H MOV R1,#128 MOV A,#00HL1: MOV @R0,A INC R0 DJNZ R1,L1

MOV P2,#00H MOV SP,#60H ;开辟堆栈区CLEAR: MOV R0,#00H MOV TMOD,#01H;定时器0,定时工作方式1,16位 MOV TL0,#0B0H ;初值为4C00H,50ms MOV TH0,#03CH SETB TR0 ;启动定时器工作 SETB IE.7 ;中断总允许 SETB IE.1 ;允许定时中断 MOV 30H,#14H ;中断循环次数初值为20次 MOV TMOD,#01HML2: LCALL KKEYIMLL3:CJNE A,#04H,ML4 SETB RUNBZ SJMP ML2;调用键盘扫描程序ML4: CJNE A,#00H,MLL1 CLR 28H.0ML2:CLR 28H.6 LCALL SJJZ LCALL KKEYI CJNE A,#00H,MLL3 LCALL LCDJDISP

LCALL KKEYI CJNE A,#00H,MLL3 CLR 28H.0 LJMP ML6

LCALL KKEYICLR 28H.6MLLL1:CJNE A,#00H,MLL3 LJMP ML5

MLL1:JNB RUNBZ,ML2 CJNE A,#05H,ML2 SETB ZKBZ SETB SZKBZ NOP CLR SZKBZ ;LCALL QJDISP ;起价显示MLLL1:CJNE A,#00H,MLL3ML5: LCALLFYDISP ;费用显示

LCALLKKEYII JNB 28H.3,ML3 ;有键按下转ML3 LJMP ML5 ;没键按下继续刷新费用显示ML3:LJMP MLL3ML5: LCALLFYDISP ;费用显示ML6: LCALL LCDISP LCALL KKEYII JNB 28H.3,MLLL1

LJMP ML6

DDDISP:;等待时间显示子程序

MOV FYDY8,#0FH MOV FYDY7,#12H MOV FYDY6,#12HML6: MOV A,R6 CJNE A,#03H,SL0 MOV R0,40H LCALL DAAD1 MOV A,R2 ;是否到了60s? XRL A,#24H JNZ SJL4;不到,转RET1返回 LCALL CLR0;到了60s,则秒显示缓冲单元清0 LJMP SJL4 MOV A,R6SL0: CJNE A,#02H,SL1 MOV R0,40H LCALLDAAD1 MOV A,R2 ;是否到了60s? XRL A,#60H JNZ SJL4 ;不到,转RET1返回 LCALLCLR0;到了60s,则秒显示缓冲单元清0 LJMP SJL4SL0: CJNE A,#02H,SL1SL1: CJNE A,#01H,SJL4 MOV R0,40H LCALL DAAD1 MOV A,R2 ;是否到了60s? XRL A,#60H JNZ SJL4 ;不到,转RET1返回 LCALLCLR0;到了60s,则秒显示缓冲单元清0 LJMP SJL4SL1: CJNE A,#01H,SJL4SJL4: LCALL KKEYI CJNE A,#01H,SJL1

DEC 40H DEC 40H DJNZ R6,SJL3

NEXT3: RET ;ENDIFIF1=2SJL4: LCALL KKEYIQJDISP: ;起价显示参数子程序 SETB 28H.0

MOV FYDY8,#0FH MOV FYDY7,#12H MOV FYDY6,#12H JB 28H.1,NEXT9 MOV FYDY5,#00H MOV FYDY4,#00H MOV FYDY3,#05H MOV FYDY2,#00H MOV FYDY1,#00HQJDISP: ;起价显NEXT9: RETENDIF

LCDJDISP:;里程单价显示子程序 SETB 28H.0 MOV FYDY8,#0DH MOV FYDY7,#12H MOV FYDY6,#12H MOV FYDY5,#12H MOV FYDY4,#12H JNB SDBZ,DJL1 MOV FYDY3,#01HNEXT9: RETMOV FYDY2,#04H MOV FYDY1,#00H LJMP DJL2DJL1: MOV FYDY3,#01H MOV FYDY2,#08H MOV FYDY1,#00HDJL2: RET

MOV FYDY2,#04HLCDISP: ;ANL P2,#0FAH SETB P2.1 MOV R0,#4FH ;读入数据 MOV R3,#02H ;读3次P0口LCDL0: MOV A,P0 MOV @R0,A

DEC R0 MOV A,P2LCDISP: ;ANL P2,#0FAHINC A;指向CPLD下一个数据ADRCADRBADRA= MOV P2,A

DJNZ R3,LCDL0 ANL P2,#0F8H

MOV 58H,4EH ;另存 MOV 59H,4FH

MOV 22H,4DH MOV 21H,4EH MOV 20H,4FHINC A;指向CPLD下一个数据ADRCADRBLCALL HEXBCD2

SETB 28H.6 MOV FYDY8,#13H MOV FYDY7,#12H MOV FYDY6,#12H MOV FYDY5,#12H RET

FYDISP: ANL P2,#0F8H

MOV R0,#4FH ;读入数据 MOV R3,#02H ;读3次P0口LCALL HEXBCD2FYL1:MOV A,P0 MOV @R0,A DEC R0 MOV A,P2 INC A ;指向CPLD下一个数据ADRCADRBADRA= MOV P2,A DJNZ R3,FYL1 ANL P2,#0F8H MOV 58H,4EH ;另存 MOV 59H,4FHFYL1:MOV A,P0 MOV 5FH,#0F4H MOV 5EH,#01h LCALL ADDMB MOV 22H,4DH MOV 21H,4EH MOV 20H,4FH MOV 4FH,#00H MOV 4EH,#00H MOV 4DH,#00H LCALL HEXBCD2 SETB 28H.0 MOV FYDY8,#0FH MOV FYDY7,#12H MOV FYDY6,#12H RET MOV 5FH,#0F4H;BCD转换及送显缓HEXBCD2:NOP ;3BYTEHEXTO4BYTEBCDHEX(22~20H)-BCD(26~23H)MUBTD: MOV R0,#23H MOV R7,#04H CLR ALOPP1: MOV @R0,A INC R0 DJNZ R7,LOPP1 MOV R7,#18H ;32BITLOOP4: MOV R1,#20H MOV R6,#03H CLR C;BCD转换及送显缓LOPP2:MOV A,@R1 RLC A MOV @R1,A INC R1 DJNZ R6,LOPP2 MOV R5,#04H MOV R0,#23HLOOP3:MOV A,@R0 ADDC A,@R0 DA A MOV @R0,A INC R0LOPP2:MOV A,@R1DJNZ R5,LOOP3 DJNZ R7,LOOP4SBCD:MOV R0,#23H; MOV R1,#38H MOV R3,#04HHEX1: MOV A,@R0 ANL A,#0FH MOV @R1,A INC R1 MOV A,@R0 ANL A,#0F0H SWAP ADJNZ R5,LOOP3MOV @R1,A INC R1 INC R0 DJNZ R3,HEX1NEXT2: RET

;时钟中断处理子程序PIT0: PUSH PSW;时钟中断服务开始,保护断点 PUSH ACC SETB PSW.3;选用1组通用寄存器MOV @R1,A;MOVA,TL0;计数器重新加载,并修正时钟 ;ADD A,#2 MOV TL0,#0B6H MOV TH0,#03CH MOV A,30H ;循环次数处理 DEC A ;循环次数减1 MOV 30H,A ;保存于A中 JNZ RET0 ;不满20次转RET1返回 MOV 30H,#14H ;满20次,则重赋循环次数初值;MOVA,TL0;计数器重新加载,并MOV R0,#LED2 ;秒的十位缓冲单元 LCALL DAAD1 ;秒加1 MOV A,R2 ;是否到了60s? XRL A,#60H JNZ RET0 ;不到,转RET1返回 LCALLCLR0;到了60s,则秒显示缓冲单元清0 MOV R0,#LED4 ;分的十位显示缓冲单元地址 LCALLDAAD1 ;分加1 MOV A,R2 ;是否到了60分?MOV R0,#LED2 ;秒的十位缓冲单元XRL A,#60H JNZ RET0;不到,转RET0返回 LCALLCLR0;到了60分,则分显示缓冲单元清0 MOV R0,#LED6 ;时的十位显示缓冲单元地址 LCALL DAAD1 ;时加1 MOV A,R2 ;是否到了24时? XRL A,#24H JNZ RET0 ;不到,转RET0返回 LCALLCLR0 ;到了24时,则时显示缓冲单元清0XRL A,#60HRET0: LCALL SDBJNEXT5: MOV LED7,#12H MOV LED8,#0AH LCALL DISP POP ACC ;恢复断点 POP PSW RETI ;中断返回RET0:DAAD1:MOV A,@R0 ;加1子程序,十位数送A DEC R0;指向个位显示缓冲单元地址 SWAP A;十位数占高四位 ORL A,@R0 ;个位数占低四位 ADD A,#01H ;加1 DA A;十进制调整 MOV R2,A ;全值暂存R2中 ANL A,#0FH ;取出个位数DAAD1:MOV A,@R0 MOV @R0,A ;个位值送显示缓冲单元 MOV A,R2 INC R0 ANL A,#0F0H ;取出十位数 SWAP A;使十位数占低四位 MOV @R0,A ;十位数送显示缓冲单元 RET ;返回MOV @R0,A ;个位值送显示缓冲CLR0: CLR A;清缓冲单元地址子程序 MOV @R0,A ;十位数缓冲单元清0 DEC R0 MOV @R0,A ;个位数缓冲单元清0 RETSDBJ: MOV A,LED6;时段比较子程序CLR0: CLR A;清缓冲CJNE A,#00H,SDL1 MOV A,LED5 CLR C SUBB A,#06H JNC SDL2 LJMP SDL0SDL1: CLR C SUBB A,#02H JC SDL2 MOV A,LED5 CLR C SUBB A,#03H JNC SDL0CJNE A,#00H,SDL1SDL2: SETB SDBZ LJMP NEXT7SDL0: CLR SDBZNEXT7: RET

DDCL: MOV R0,#LED8 MOV R1,#5FH MOV R3,#08HDDL0: MOV A,@R0 MOV R1,A DEC R0 DEC R1 DJNZ R3,DDL0 RETSDL2: SETB SDBZ;显示程序DISP: MOV R0,#LED8 MOV R1,#08H JNB 28H.0,DDLL0 MOV R0,#FYDY8 LJMP DL7DDLL0: JNB 28H.6,DL0DDL1: MOV R0,#FYDY8 MOV R1,#08H LJMP DDL2;显示程序DL7: MOV A,R1 LJMP DL1DDL2: MOV A,R1 LJMP DLL1DL0: MOV A,R1 CJNE A,#05H,DL1 LJMP DL3DL1: CJNE A,#03H,DL2 LJMP DL3DLL1: CJNE A,#02H,DL2 LJMP DL3DL7: MOV A,R1DL2: MOV A,@R0 MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV SBUF,A LJMP DL4DL3: MOV A,@R0 MOV DPTR,#TAB1 MOVC A,@A+DPTR ORL A,#01H MOV SBUF,ADL2: MOV A,@R0DL4: JNB TI,DL4 CLR TI DEC R0 DJNZ R1,DL8 LJMP NEXT4DL8: JB 28H.0,DL7 JB 28H.6,DDL2 LJMP DL0NEXT4:RET

;a,b,c,d,e,f,g,hDL4: JNB TI,DL4TAB1:DB0FCH,60H,0DAH ;012DB0F2H,66H,0B6H ;345DB0BEH,0E0H,0FEH ;678DB0F6H,0EEH,3EH ;9ABDB9CH,7AH,9EH ;CDEDB8EH,0CEH,02H ;FP-DB00H,0CFH,6EH ;NL,P.,HDB1CH ;LTAB1:DB0FCH,60H,0DAHIF1=3DB08FH,7DH,61H ;17;13H-F.,16H-U.,17H-I.,18H-S. DB0B7H,6EH,09DH ;1A;19H-H,1AH-C.,1BH-O(DIGREE) DB0C6H,7BH,02H;1D ;1CH-d.,1DH--(MINUSESIGN) DB0CFH,0EFH,01DH ;20;1EH-P.,1FH-A.,20H-L. DB0FDH,7CH,1CH,0FFH;21H-O.,22H-U ,23H-L,24HDB80H,40H,20H,10H,08H,04H,02H,01H;25,26,27,28,29,2A,2B,2CHDB0EDH ;2DHDB0BCH,3AH;2EH-G;2FH-SMALL"O"IF1=3ENDIF

;键盘子程序KKEYII: LCALL KKS1 ;KEYSCANNINGPROG JNZ KLK1 ;有按键,转跳KLK1KNN1: LCALL DELAY LCALL DELAY

SETB 28H.3 RETENDIFKKEYI: LCALL KKS1 ;KEYSCANNINGPROG JNZ KLK1 ;有按键,转跳KLK1KN1: LCALL DELAY LCALL DELAY LJMP KKEYI ;无按键,转跳KKEYI继续扫描KLK1: LCALL DELAY LCALL DELAY LCALL KKS1 JNZ KLK2 ;确实有按键,转跳至KLK2 LCALL DELAY LJMP KKEYIKKEYI: LCALL KKS1 ;KEYSCKLK2: NOP ;THEREISKEYI JB P1.0,NOK1 MOV A,#00H LJMP GOHMNOK1: NOP JB P1.1,NOK2 MOV A,#01H LJMP GOHMNOK2: NOP JB P1.2,NOK3 MOV A,#02H LJMP GOHMKLK2: NOP ;THEREISKEYINOK3:NOP JB P1.3,NOK4 MOV A,#03H LJMP GOHMNOK4: NOP JB P1.4,NOK5 MOV A,#04H LJMP GOHMNOK5:NOP JB P1.5,NOK6 MOV A,#05H LJMP GOHMNOK3:NOPNOK6:NOP JB P1.6,NOK7 MOV A,#06H LJMP GOHMNOK7:NOP JB P1.7,KLK1 MOVA,#07HGOHM: PUSH ACCKLK3: LCALL DELAYNOK6:NOPLCALL KKS1 JNZ KLK3 LCALL DELAY LCALL KKS1 JNZ KLK3 POP ACC CLR 28H.3 RETLCALL KKS1KKS1:MOVP1,#0FFH;ISTHEREANY NOP MOVA,P1 CPL A RET ;IFTHEREISKEYINGTHENA=/=0DELAY:MOVR1,#09HWWW:MOVR0,#0FFHNMN:DJNZ R0,NMN DJNZ R1,WWW RETKKS1:MOVP1,#0FFH;T1S: MOV INT_R1,#0FFHTSM3:MOV INT_R0,#0FFHTSM4:DJNZINT_R0,TSM4 DJNZ INT_R1,TSM3 RET

ADDMB: MOV R2,#02H ;NOSIGNNBYTESADDSNBYTES MOV R0,#4FH ;(......4FH)+(......5FH)=(......4FH)T1S: MOV INT_R1,#0FFH MOV R1,#5FHADDMBB: CLR CADDL: MOV A,@R0 ADDC A,@R1 MOV @R0,A DEC R0 DEC R1 DJNZ R2,ADDL RETEND MOV R1,#5FH14.4系统仿真/硬件验证14.4.1系统的调试方法本系统既含有FPGA自编程硬件设计电路,又含有单片机控制电路的设计,整个系统比较复杂,因此我们采用自底向上的调试方法,也就是先进行各个单元电路的软件仿真和硬件调试,在各个单元电路调试好后再进行系统联调,最后进行硬件的编程固化及系统的组装。14.4系统仿真/硬件验证14.4.1系统的调14.4.2系统调试的软/硬件(1)设计开发软件:MAX+plusⅡ10.0,伟福6000(WAVE6000forwindows)。(2)主要设备:PIV计算机,伟福E6000L单片机仿真器及POD—8X5XP仿真头,GW48-CKEDA实验开发系统,单片机最小系统,炜煌WH-500B程序编写加密器。14.4.2系统调试的软/硬件14.4.3系统的有关仿真图14.9~图14.15是系统中主要模块的仿真图,请读者结合有关程序进行仿真结果的分析。经分析这些有关仿真结果,可知对应模块的VHDL程序设计是正确的。14.4.3系统的有关仿真图14.9等待判别模块DDPB.VHDL仿真图(局部结果)图14.9等待判别模块DDPB.VHDL仿真图(局部结果图14.10等待判别模块DDPB.VHDL仿真图(整体结果)图14.10等待判别模块DDPB.VHDL仿真图(整体结图14.11里程计算模块LCJS.VHDL仿真图图14.11里程计算模块LCJS.VHDL仿真图图14.12里程计费模块LCJF.VHDL仿真图图14.12里程计费模块LCJF.VHDL仿真图图14.13等待计时模块DDJS.VHDL仿真图图14.13等待计时模块DDJS.VHDL仿真图图14.14等待计费模块DDJF.VHDL仿真图图14.14等待计费模块DDJF.VHDL仿真图图14.15测控系统CZJFXT.VHD的仿真图图14.15测控系统CZJFXT.VHD的仿真图14.4.4系统的硬件验证

1.单元电路的调试FPGA/CPLD测控电路的调试:使用MAX+plusⅡ10.0、计算机、GW48-CKEDA实验开发系统等软件和设备,对FPGA/CPLD测控电路进行VHDL程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论