1、第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 第第14章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 14.1 系统设计要求系统设计要求 14.2 系统设计方案系统设计方案 14.3 主要源程序主要源程序 14.4 系统仿真系统仿真/硬件验证硬件验证 14.5 设计技巧分析设计技巧分析 14.6 系统扩展思路系统扩展思路 第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 14.1 系统设计要求系统设计要求 以CPLD/FPGA为主体,设计并制作一台出租车计费系统,系统的方框图如图14.1所示。第第1414章章 出租车计费系统的出租车计
2、费系统的设计与分析设计与分析 图14.1 出租车计费系统方框图 速度传感器电路主板汽车电瓶916 V空车指示牌显示器LED/LCD第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 1计费及显示 (1) 里程,即汽车行驶里程,用四位数字显示,显示方式为“XXX.X”,单位为km,精确到0.1 km。 (2) 单价,即里程单价,用三位数字显示,显示方式为“X.XX”,单价为元/km,根据每天不同的时间段有两种情况:当时间段为06:0023:00时单价为1.40元/km,其他时间段内单价为1.80元/km。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析
3、(3) 等候时间,用四位数字显示分钟和秒,显示方式为“XX:XX”,等候的定义是:当汽车行驶速度小于或等于12 km/h时为“等候”。 (4) 等候单价,等候单价有两种情况:在等候时间小于1小时的情况下,等候单价为1元每5分钟;在等候时间大于1小时的情况下,等候单价为20元每小时。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 (5) 费用的计算,出租车的起价为5.00元,当里程小于2 km时,按起价计算费用;当里程大于2 km时按下式计算费用: 费用=里程里程单价+等候时间等候单价 (6) 费用的显示,用五位数字显示,显示方式为“XXX.XX”,单价为元。 第第141
4、4章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 2时钟及显示 当出租车在常运状态下,应能显示当前的时间。在汽车熄火的情况下,时钟必须正常运行,但是可以不显示时钟。 3计费开始提示 当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 14.2 系统设计方案系统设计方案 14.2.1 系统总体设计方案 本系统拟采用单片机和FPGA的结合进行系统的主体设计,系统原理框图如图14.2所示。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 图14.2 出
5、租车计费系统总体原理框图 传感器时钟信号DISPLAYP3.0-P3.1P0P2.2-P2.0P2.3P2.7P2.4P2.5P2.6RETP1.0-P1.5MCUXDBZDDBZLCBZSTARTSDBZSELDATA复位FPGA83WCLKSCLK显示切换确定修改启动空车牌第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 14.2.2 测控FPGA的VHDL程序设计 根据系统的设计要求,我们可将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待判别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块
6、DDJF,输出数据选择模块SCXZ。其内部组成原理图如图14.3所示。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 分频器模块FPQ:将外部时钟信号SCLK(设计时假设为200 Hz)经过适当分频后,产生1 Hz的系统工作用基准时钟信号CLK1HZ,供系统中的有关模块计时用。 等待判别模块DDPB:根据速度传感器脉冲信号WCLK和分频器产生的基准时钟信号CLK1HZ,计算单位时间里WCLK的脉冲个数(每km产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志信号DDBZ。 第第1414章章 出租车计费系统的
7、出租车计费系统的设计与分析设计与分析 里程计算模块LCJS:根据速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶的里程数XSLC进行计算,同时发出里程标志信号LCBZ和里程计费标志信号JFBZ。 里程计费模块LCJF:在计费标志信号JFBZ、等待标志信号DDBZ、里程标志信号LCBZ和时段标志信号XDBZ等信号的控制下,计算行驶里程超过2 km以上里程的费用LCFY。 第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ的控制下,进行等待时间DDSJ的计算,其中DDSJ的低8位表示等待时间的秒数
8、,DDSJ的高8位表示等待时间的分钟数,同时根据等待时间的长短发出一个熄灯标志信号XDBZ。 等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY的计费操作。 输出数据选择模块SCXZ :根据单片机发出的数据传输选择控制信号SEL,选择有关计算处理结果传输给单片机。SEL与被传送数据的具体关系如表14.1所示。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 表14.1 SEL与被传送数据的关系列表 第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 14.2.3 单片机控制程序设计 单片机模块包括单片机AT8
9、9C51及其控制的显示和键盘系统,控制口如图14.3(略 )所示。 AT89C51对FPGA的数据进行运算,计算出用车总费用并送显示系统显示,同时它接收键盘信息并处理显示切换。系统采用6+1显示,6个数码管作常规显示,一个数码管作状态显示。按键共有5个,分别是功能切换键、确定键、修改键、启动模拟键和空车牌压下模拟键。涉及的主要流程图如图14.414.8所示。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 图14.4 主程序流程图开始清内存SP#60HP2#00H定时器0,工作方式1定时50 ms启动定时器工作,开中断调用键处理第第1414章章 出租车计费系统的出租车计费
10、系统的设计与分析设计与分析 图14.5 键处理流程图键处理开始置标志位 RUNBZNNYYYYYNNNNNNYYYNNYNYN汽车启动没有?ZKBZ1送载客标志给FPGAY调用当前时间修改子程序调用里程单价显示子程序Y调用里程显示子程序调用费用显示子程序有键按下吗?是功能键 SB0?RUNBZ=1?有键按下吗?是SB0吗?有键按下吗?是SB0吗?有键按下吗?是SB0吗?有键按下吗?有键按下吗?第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 图14.6 经典显示子程序流程图 NYYNNY显示子程序开始R0#LED8R1#08HA(R1)NA(R1)AYNR0#FYDY8A
11、(R1)查表添加小数点查表显示数据送串行口R1R11返回NYYANYYN28H.00?28H.60?(R1)#05H?(R1)#02H?(R1)#03H?R10?28H.00?28H.60?第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 图14.7 里程显示子程序流程图 赋 数 码 管 显 示 参 数N里 程 显 示 子 程 序 开 始P2.1128H.01R0#4FHR3#02H读 P0口 数 据 放 4D 4FHR3R3 1(R3) 0?P2#0F8H22 20H4D 4FHLCALL HEXBCD2SETB 28H.6返 回Y第第1414章章 出租车计费系统的出租
12、车计费系统的设计与分析设计与分析 图14.8 乘车费用显示子程序流程图 赋数码管显示参数N乘车费用显示子程序开始P2#0F8H28H.01R0#4FHR3#02H读P0口数据放4D4FHR3R31P2#0F8H5F,5EH存放(500)DLCALL ADDMB2220H4D4FHLCALL HEXBCD2SETB 28H.6返回(R3)0?Y第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 14.3 主主 要要 源源 程程 序序 14.3.1 主要VHDL源程序 1分频器模块FPQ的VHDL源程序 -FPQ.VHD LIBRARY IEEE; USE IEEE.STD_L
13、OGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY FPQ IS第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 PORT(SCLK: IN STD_LOGIC; -SCLK=200 Hz CLK1HZ: OUT STD_LOGIC); -CLK1HZ=1 HzEND ENTITY FPQ; ARCHITECTURE ART OF FPQ IS SIGNAL CNT100: INTEGER RANGE 0 TO 99; SIGNAL CLK1: STD_L
14、OGIC; BEGIN PROCESS(SCLK)第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 BEGIN IF SCLKEVENT AND SCLK=1 THEN IF CNT100=99 THEN CNT100=0; CLK1=NOT CLK1; ELSE CNT100=CNT100+1; END IF; ELSE 第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 CLK1=CLK1; END IF; CLK1HZ=CLK1; END PROCESS;END ARCHITECTURE ART;第第1414章章 出租车计费系统的出租车计费系统的
15、设计与分析设计与分析 2等待判别模块DDPB的VHDL源程序-DDPB.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DDPB IS PORT(START,WCLK:IN STD_LOGIC; CLK1HZ:IN STD_LOGIC; DDBZ:OUT STD_LOGIC); 第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 END ENTITY DDPB;ARCHITECTURE ART OF
16、DDPB IS SIGNAL T60S:STD_LOGIC; SIGNAL WCLKCOU:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN -产生60 s周期性跳变信号进程 PROCESS(START, CLK1HZ) IS VARIABLE CNT60: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF START=1 THEN第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 CNT60:=00000000; T60S=0; ELSIF CLK1HZEVENT AND CLK1HZ=1 THEN IF CNT60=00
17、111100 THEN -CNT60=60 T60S=1; CNT60:=00000000; ELSE CNT60: =CNT60+1; T60S=0; END IF; END IF; END PROCESS ; -每分钟行驶距离计算进程第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 PROCESS(START, WCLK, T60S) IS BEGIN IF START=1 THEN WCLKCOU=00000000; ELSIF WCLKEVENT AND WCLK=1 THEN IF T60S=1 THEN WCLKCOU=00000000; ELSE WCLKC
18、OU=WCLKCOU+1; -距离计算,单位为m第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 END IF; END IF; END PROCESS ; -等待标志判别进程 PROCESS(WCLKCOU,T60S) IS BEGIN IF T60SEVENT AND T60S=1 THEN IF WCLKCOU=11001000 THEN -WCLKCOU=200 DDBZ=1; -等待 ELSE第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 DDBZ=0; -行驶 END IF; END IF; END PROCESS ; END ARCH
19、ITECTURE ART;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 3里程计算模块LCJS的VHDL源程序-LCJS.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITYLCJS IS PORT(START, DDBZ, WCLK: IN STD_LOGIC; XSLC: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);第第1414章章 出租车计费系统的出租车计费系统的设计与分
20、析设计与分析 LCBZ,JFBZ:OUT STD_LOGIC);END ENTITY LCJS;ARCHITECTURE ART OF LCJS IS SIGNAL BMS:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL BMS1: INTEGER RANGE 0 TO 99999; SIGNAL JFBZ1: STD_LOGIC; BEGIN -里程计算及标志产生进程 PROCESS(START,WCLK)第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 VARIABLE MS: STD_LOGIC_VECTOR(7 DOWNTO 0); B
21、EGIN IF START=1 THEN MS:=00000000; BMS=0000000000000000;LCBZ=0; ELSIF WCLKEVENT AND WCLK=1 THEN IF DDBZ=0 THEN IF MS=01100011 THEN MS:=00000000;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 BMS=20 THEN LCBZ=1; -大于2 km标志 END IF; ELSE MS:=MS+1; -米数计算 END IF; END IF; END IF; END PROCESS;第第1414章章 出租车计费系统的出租车计费系统的
22、设计与分析设计与分析 -里程计算结果输出 XSLC=BMS; -里程计算结果转换 BMS1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1=0; END CASE; END PROCESS; -计费标志去毛刺进程 PROCESS(WCLK,JFBZ1) IS BEGIN第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 IF WCLKEVENT AND WCLK=1 THEN JFBZ=JFBZ1; EN
23、D IF; END PROCESS;END ARCHITECTURE ART;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 4里程计费模块LCJF的VHDL源程序-LCJF.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY LCJF IS GENERIC(SD1:INTEGER:=140; -04:0023:00单价 SD2:INTEGER:=180); -其他时段单价第第1414章章 出租车计费
24、系统的出租车计费系统的设计与分析设计与分析 PORT(LCBZ,JFBZ,START,DDBZ,SDBZ:IN STD_LOGIC; LCFY:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END ENTITY LCJF;ARCHITECTURE ART OF LCJF IS SIGNAL LCFY1: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN PROCESS(START, LCBZ, SDBZ, JFBZ) BEGIN IF START=1 THEN第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 LCFY1=000
25、0000000000000; ELSIF JFBZEVENT AND JFBZ=1 THEN IF DDBZ=0 THEN -行驶状态 IF LCBZ=0 THEN -2 km以内 LCFY1=0000000000000000; ELSIF LCBZ=1 THEN -2 km以上 IF SDBZ=0 THEN LCFY1=LCFY1+SD1; ELSIF SDBZ=1 THEN LCFY1=LCFY1+SD2; END IF;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 END IF; END IF; END IF; END PROCESS; LCFY=LCFY1;E
26、ND ARCHITECTURE ART;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 5等待计时模块DDJS的VHDL源程序-DDJS.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DDJS IS PORT(START, DDBZ: IN STD_LOGIC; CLK1HZ: IN STD_LOGIC; DDSJ: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);第第141
27、4章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 XDBZ: OUT STD_LOGIC);END ENTITY DDJS;ARCHITECTURE ART OF DDJS IS SIGNAL MS,MG,FS, FG: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL XIDENG: STD_LOGIC; BEGIN PROCESS(START, DDBZ, CLK1HZ) IS BEGIN IF START=1 THEN第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 MS=0000;MG=0000; FS=0000;FG=0000
28、; ELSIF CLK1HZEVENT AND CLK1HZ=1 THEN IF DDBZ=1 THEN IF MG=9 THEN MG=0000; IF MS=5 THEN MS=0000; IF FG=9 THEN FG=0000; IF FS=5 THEN XIDENG=1;FS=0000; ELSE第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 FS=FS+1; -分数十位计算 END IF; ELSE FG=FG+1; -分数个位计算 END IF; ELSE MS=MS+1; -秒数十位计算 END IF; ELSE MG=MG+1; -秒数个位计算第第14
29、14章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 END IF; END IF; END IF; END PROCESS; XDBZ=XIDENG; DDSJ(15 DOWNTO 12)=FS; DDSJ(11 DOWNTO 8)=FG; DDSJ(7 DOWNTO 4)=MS; DDSJ(3 DOWNTO 0)=MG;END ARCHITECTURE ART;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 6等待计费模块DDJF的VHDL源程序-DDJF.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IE
30、EE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DDJF IS -每分钟等待费用定义,单位为分 GENERIC(WDJ1: INTEGER:=20; WDJ2: INTEGER:=33);第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 PORT(START, XDBZ, DDBZ, CLK1HZ: IN STD_LOGIC; DDFY:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END ENTITY DDJF;ARCHITECTURE ART OF DDJF IS SIG
31、NAL DDFY1: STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CNT60: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL T60S: STD_LOGIC; BEGIN -产生60 s周期性跳变信号进程第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 PROCESS(CLK1HZ) IS BEGIN IF CLK1HZEVENT AND CLK1HZ=1 THEN IF CNT60=00111100 THEN -CNT60=60 T60S=1;CNT60=00000000; ELSE CNT60=CNT60+1
32、;T60S=0; END IF; END IF; END PROCESS ; -等待费用计算进程第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 PROCESS(T60S,XDBZ,DDBZ) IS BEGIN IF START=1 THEN DDFY1=0000000000000000; ELSIF T60SEVENT AND T60S=1 THEN IF DDBZ=1 THEN IF XDBZ=0 THEN -等待时间小于1小时 DDFY1=DDFY1+WDJ1; ELSIF XDBZ=1 THEN -等待时间大于1小时 DDFY1=DDFY1+WDJ2;第第1414
33、章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 END IF; END IF; END IF; END PROCESS; -等待费用计算结果输出 DDFY=DDFY1;END ARCHITECTURE ART;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 7输出数据选择模块SCXZ的VHDL源程序-SCXZ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCXZ IS PORT( SEL: IN STD_LOGIC_VECTOR(2 DO
34、WNTO 0); XSLC: IN STD_LOGIC_VECTOR(15 DOWNTO 0);第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 LCFY: IN STD_LOGIC_VECTOR(15 DOWNTO 0); DDSJ: IN STD_LOGIC_VECTOR(15 DOWNTO 0); DDFY: IN STD_LOGIC_VECTOR(15 DOWNTO 0); DATA: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY SCXZ;ARCHITECTURE ART OF SCXZ IS BEGIN第第1414章章
35、 出租车计费系统的出租车计费系统的设计与分析设计与分析 DATA= DDSJ(7 DOWNTO 0) WHEN SEL=000ELSE DDSJ(15 DOWNTO 8) WHEN SEL=001ELSE LCFY(7 DOWNTO 0) WHEN SEL=010ELSE LCFY(15 DOWNTO 8) WHEN SEL=011ELSE DDFY(7 DOWNTO 0) WHEN SEL=100ELSE DDFY(15 DOWNTO 8) WHEN SEL=101ELSE XSLC(7 DOWNTO 0) WHEN SEL=110ELSE XSLC(15 DOWNTO 8) WHEN SE
36、L=111ELSE 00000000;END ARCHITECTURE ART;第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 8系统总体组装的VHDL源程序 系统总体组装的VHDL源程序请读者根据图14.3的测控FPGA系统CZJFXT内部组成原理图自行完成。第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 14.3.2 单片机汇编语言源程序; CZJFXT.ASMLED8 EQU 7FHLED7 EQU 7EH ; 时间显缓LED6 EQU 7DHLED5 EQU 7CHLED4 EQU 7BHLED3 EQU 7AHLED2 EQU 79HL
37、ED1 EQU 78H第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 FUNKEY EQU P1.0 ; 功能SELKEY EQU P1.1 ; 选择FIXKEY EQU P1.2 ; 修改 RUN EQU P1.4 ; 运行信号(传感器)RUNBZ EQU 28H.4 ZK EQU P1.5 ; 载客信号-单片机(传感器)ZKBZ EQU 28H.2 ; 载客标志SZKBZ EQU P2.7 ; 送FPGA的载客标志第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 INT_R1 EQU 46HINT_R0 EQU 47HINT_R2 EQU 48
38、HKEYNUM EQU 49H ADA EQU P2.0ADB EQU P2.1ADC EQU P2.2SDBZ EQU P3.3 ; 时段标志第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 LCBZ EQU P2.4 ; 里程标志DDBZ EQU P2.5 ; 等待标志DDBZC EQU 28H.5XDBZ EQU P2.6 ; 等待超过1小时标志 FYDY8 EQU 3FH ; 费用显缓第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 FYDY7 EQU 3EHFYDY6 EQU 3DHFYDY5 EQU 3CHFYDY4 EQU 3BHFYD
39、Y3 EQU 3AHFYDY2 EQU 39HFYDY1 EQU 38H ; 主程序第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 START: JMPMAIN ; 转移到主程序 ORG 000BH ; 中断服务入口地址LJMP PIT0 ORG 30HMAIN:第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 CLEAR: MOV R0, #00H MOV R1, #128 MOV A, #00HL1: MOV R0, A INC R0 DJNZ R1, L1 MOV P2, #00H MOV SP, #60H ; 开辟堆栈区第第1414章章 出
40、租车计费系统的出租车计费系统的设计与分析设计与分析 MOV TMOD, #01H ; 定时器0,定时工作方式1,16位MOV TL0, #0B0H ; 初值为4C00H,50 msMOV TH0, #03CH SETB TR0 ; 启动定时器工作SETBIE.7 ; 中断总允许SETBIE.1 ; 允许定时中断MOV30H, #14H ; 中断循环次数初值为20次第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 ML2: LCALLKKEYIMLL3: CJNE A, #04H, ML4 SETB RUNBZ SJMP ML2; 调用键盘扫描程序ML4: CJNE A,
41、#00H, MLL1 CLR28H.0第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 CLR28H.6 LCALLSJJZ LCALLKKEYI CJNE A, #00H, MLL3 LCALLLCDJDISP LCALLKKEYI CJNE A, #00H, MLL3 CLR 28H.0 LJMP ML6 LCALLKKEYI第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 MLLL1: CJNE A, #00H, MLL3 LJMP ML5 MLL1: JNBRUNBZ, ML2 CJNE A, #05H, ML2 SETB ZKBZ SETB
42、 SZKBZ NOP CLR SZKBZ ; LCALLQJDISP; 起价显示第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 ML5: LCALL FYDISP; 费用显示 LCALL KKEYII JNB28H.3, ML3 ; 有键按下转ML3 LJMP ML5 ; 没键按下继续刷新费用显示ML3: LJMP MLL3第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 ML6: LCALL LCDISP LCALL KKEYII JNB28H.3, MLLL1 LJMPML6 DDDISP: ; 等待时间显示子程序 MOVFYDY8, #0FH
43、 MOV FYDY7, #12H MOV FYDY6, #12H第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 MOV A,R6 CJNE A, #03H, SL0 MOV R0, 40H LCALLDAAD1 MOV A, R2 ; 是否到了60 s? XRL A, #24H JNZ SJL4 ; 不到,转RET1返回 LCALLCLR0 ; 到了60 s,则秒显示缓冲单元清0 LJMP SJL4第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 SL0: CJNE A, #02H, SL1 MOV R0, 40H LCALL DAAD1 MOV
44、A, R2 ; 是否到了60 s? XRLA, #60H JNZ SJL4 ; 不到,转RET1返回 LCALL CLR0 ; 到了60 s,则秒显示缓冲单元清0 LJMP SJL4第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 SL1: CJNE A, #01H, SJL4 MOV R0, 40H LCALL DAAD1 MOV A, R2 ; 是否到了60 s? XRLA, #60H JNZ SJL4 ; 不到,转RET1返回 LCALL CLR0 ; 到了60 s,则秒显示缓冲单元清0 LJMP SJL4第第1414章章 出租车计费系统的出租车计费系统的设计与分析
45、设计与分析 SJL4: LCALLKKEYI CJNE A, #01H, SJL1 DEC40H DEC 40H DJNZ R6, SJL3 NEXT3:RET ;ENDIF IF 1=2第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 QJDISP: ; 起价显示参数子程序 SETB28H.0 MOVFYDY8, #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, #0
46、0H第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 NEXT9: RET ENDIF LCDJDISP: ; 里程单价显示子程序 SETB28H.0 MOVFYDY8, #0DH MOVFYDY7, #12H MOV FYDY6, #12H MOV FYDY5, #12H MOV FYDY4, #12H JNB SDBZ, DJL1 MOV FYDY3, #01H第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 MOV FYDY2, #04H MOV FYDY1, #00H LJMP DJL2DJL1: MOV FYDY3, #01H MOV FY
47、DY2, #08H MOV FYDY1, #00HDJL2: RET 第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 LCDISP: ;ANLP2, #0FAH SETB P2.1 MOV R0, #4FH ; 读入数据 MOV R3, #02H ; 读3次P0口LCDL0: MOV A, P0 MOV R0, A DECR0 MOV A,P2第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 INCA ; 指向CPLD下一个数据ADRC ADRB ADRA= MOVP2, A DJNZR3, LCDL0 ANL P2, #0F8H MOV 58H,
48、 4EH ; 另存 MOV 59H, 4FH MOV 22H, 4DH MOV 21H, 4EH MOV 20H, 4FH第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 LCALL 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口第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 FYL1: MOV A,
49、 P0 MOV R0, A DEC R0 MOV A, P2 INC A ; 指向CPLD下一个数据ADRC ADRB ADRA= MOV P2, A DJNZ R3, FYL1 ANL P2, #0F8H MOV 58H, 4EH ; 另存 MOV 59H, 4FH第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 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 HE
50、XBCD2 SETB 28H.0 MOV FYDY8, #0FH MOV FYDY7, #12H MOV FYDY6, #12H RET第第1414章章 出租车计费系统的出租车计费系统的设计与分析设计与分析 ; BCD转换及送显缓HEXBCD2: NOP ; 3BYTE HEX TO 4BYTE BCD HEX(2220H)-BCD(2623H)MUBTD: MOVR0, #23H MOV R7, #04H CLR ALOPP1: MOV R0, A INC R0 DJNZ R7, LOPP1 MOV R7, #18H ; 32BITLOOP4: MOV R1, #20H MOV R6, #0