出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)與分析 EDA課程設(shè)計(jì)
《出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)與分析 EDA課程設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)與分析 EDA課程設(shè)計(jì)(61頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第14章 出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)與分析 14.1 系統(tǒng)設(shè)計(jì)要求 14.2 系統(tǒng)設(shè)計(jì)方案 14.3 主要源程序 14.4 系統(tǒng)仿真/硬件驗(yàn)證 14.5 設(shè)計(jì)技巧分析 14.6 系統(tǒng)擴(kuò)展思路 14.1 系統(tǒng)設(shè)計(jì)要求 以CPLD/FPGA為主體,設(shè)計(jì)并制作一臺(tái)出租車計(jì)費(fèi)系統(tǒng),系統(tǒng)的方框圖如圖14.1所示。 1.計(jì)費(fèi)及顯示 (1) 里程,即汽車行駛里程,用四位數(shù)字顯示,顯示方式為“XXX.X”,單位為km,精確到0.1 km。 (2) 單價(jià),即里程單
2、價(jià),用三位數(shù)字顯示,顯示方式為“X.XX”,單價(jià)為元/km,根據(jù)每天不同的時(shí)間段有兩種情況:當(dāng)時(shí)間段為06:00~23:00時(shí)單價(jià)為1.40元/km,其他時(shí)間段內(nèi)單價(jià)為1.80元/km。 (3) 等候時(shí)間,用四位數(shù)字顯示分鐘和秒,顯示方式為“XX:XX”,等候的定義是:當(dāng)汽車行駛速度小于或等于12 km/h時(shí)為“等候”。 (4) 等候單價(jià),等候單價(jià)有兩種情況:在等候時(shí)間小于1小時(shí)的情況下,等候單價(jià)為1元每5分鐘;在等候時(shí)間大于1小時(shí)的情況下,等候單價(jià)為20元每小時(shí)。 (5) 費(fèi)用的計(jì)算,出租車的起價(jià)為5.
3、00元,當(dāng)里程小于2 km時(shí),按起價(jià)計(jì)算費(fèi)用;當(dāng)里程大于2 km時(shí)按下式計(jì)算費(fèi)用: 費(fèi)用=里程╳里程單價(jià)+等候時(shí)間╳等候單價(jià) (6) 費(fèi)用的顯示,用五位數(shù)字顯示,顯示方式為“XXX.XX”,單價(jià)為元。 2.時(shí)鐘及顯示 當(dāng)出租車在常運(yùn)狀態(tài)下,應(yīng)能顯示當(dāng)前的時(shí)間。在汽車熄火的情況下,時(shí)鐘必須正常運(yùn)行,但是可以不顯示時(shí)鐘。 3.計(jì)費(fèi)開始提示 當(dāng)出租車載上乘客并起步后,將空車指示牌扳倒時(shí),空車指示牌里的指示燈熄滅,并有語(yǔ)音或燈光提示信
4、號(hào)。 14.2 系統(tǒng)設(shè)計(jì)方案 14.2.1 系統(tǒng)總體設(shè)計(jì)方案 本系統(tǒng)擬采用單片機(jī)和FPGA的結(jié)合進(jìn)行系統(tǒng)的主體設(shè)計(jì),系統(tǒng)原理框圖如圖14.2所示。 14.2.2 測(cè)控FPGA的VHDL程序設(shè)計(jì) ? 根據(jù)系統(tǒng)的設(shè)計(jì)要求,我們可將整個(gè)測(cè)控FPGA系統(tǒng)CZJFXT分為七個(gè)模塊,它們分別是:分頻器模塊FPQ,等待判別模塊DDPB,里程計(jì)算模塊LCJS,里程計(jì)費(fèi)模塊LCJF,等待計(jì)時(shí)模塊DDJS,等待計(jì)費(fèi)模塊DDJF,輸出數(shù)據(jù)選擇模塊SCXZ。其內(nèi)部組成原理圖如圖14.3所示。 分頻器模塊FP
5、Q:將外部時(shí)鐘信號(hào)SCLK(設(shè)計(jì)時(shí)假設(shè)為200 Hz)經(jīng)過(guò)適當(dāng)分頻后,產(chǎn)生1 Hz的系統(tǒng)工作用基準(zhǔn)時(shí)鐘信號(hào)CLK1HZ,供系統(tǒng)中的有關(guān)模塊計(jì)時(shí)用。 等待判別模塊DDPB:根據(jù)速度傳感器脈沖信號(hào)WCLK和分頻器產(chǎn)生的基準(zhǔn)時(shí)鐘信號(hào)CLK1HZ,計(jì)算單位時(shí)間里WCLK的脈沖個(gè)數(shù)(每km產(chǎn)生1000個(gè)脈沖信號(hào),即每米產(chǎn)生1個(gè)脈沖信號(hào)),亦即出租車行駛速度,從而判別出租車是否處于等待狀態(tài),發(fā)出等待標(biāo)志信號(hào)DDBZ。 里程計(jì)算模塊LCJS:根據(jù)速度傳感器脈沖信號(hào)WCLK和等待標(biāo)志DDBZ,對(duì)出租車行駛的里程數(shù)XSLC進(jìn)行計(jì)算,同時(shí)發(fā)出里程標(biāo)志信號(hào)LC
6、BZ和里程計(jì)費(fèi)標(biāo)志信號(hào)JFBZ。 里程計(jì)費(fèi)模塊LCJF:在計(jì)費(fèi)標(biāo)志信號(hào)JFBZ、等待標(biāo)志信號(hào)DDBZ、里程標(biāo)志信號(hào)LCBZ和時(shí)段標(biāo)志信號(hào)XDBZ等信號(hào)的控制下,計(jì)算行駛里程超過(guò)2 km以上里程的費(fèi)用LCFY。 等待計(jì)時(shí)模塊DDJS:在等待標(biāo)志信號(hào)DDBZ和基準(zhǔn)時(shí)鐘信號(hào)CLK1HZ的控制下,進(jìn)行等待時(shí)間DDSJ的計(jì)算,其中DDSJ的低8位表示等待時(shí)間的秒數(shù),DDSJ的高8位表示等待時(shí)間的分鐘數(shù),同時(shí)根據(jù)等待時(shí)間的長(zhǎng)短發(fā)出一個(gè)熄燈標(biāo)志信號(hào)XDBZ。 等待計(jì)費(fèi)模塊DDJF:在等待標(biāo)志信號(hào)DDBZ和熄燈標(biāo)志信號(hào)XDBZ
7、控制下,進(jìn)行等待費(fèi)用DDFY的計(jì)費(fèi)操作。 輸出數(shù)據(jù)選擇模塊SCXZ :根據(jù)單片機(jī)發(fā)出的數(shù)據(jù)傳輸選擇控制信號(hào)SEL,選擇有關(guān)計(jì)算處理結(jié)果傳輸給單片機(jī)。SEL與被傳送數(shù)據(jù)的具體關(guān)系如表14.1所示。 14.2.3 單片機(jī)控制程序設(shè)計(jì) ? 單片機(jī)模塊包括單片機(jī)AT89C51及其控制的顯示和鍵盤系統(tǒng),控制口如圖14.3(略 )所示。 AT89C51對(duì)FPGA的數(shù)據(jù)進(jìn)行運(yùn)算,計(jì)算出用車總費(fèi)用并送顯示系統(tǒng)顯示,同時(shí)它接收鍵盤信息并處理顯示切換。系統(tǒng)采用6+1顯示,6個(gè)數(shù)碼管作常規(guī)顯示,一個(gè)數(shù)碼管作狀態(tài)顯示。按鍵共有5個(gè),分別是
8、功能切換鍵、確定鍵、修改鍵、啟動(dòng)模擬鍵和空車牌壓下模擬鍵。涉及的主要流程圖如圖14.4~14.8所示。 14.3 主 要 源 程 序 14.3.1 主要VHDL源程序 1.分頻器模塊FPQ的VHDL源程序 --FPQ.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
9、 ENTITY FPQ IS PORT(SCLK: IN STD_LOGIC; --SCLK=200 Hz CLK1HZ: OUT STD_LOGIC); --CLK1HZ=1 Hz END ENTITY FPQ; ARCHITECTURE ART OF FPQ IS SIGNAL CNT100: INTEGER RANGE 0 TO 99; SIGNAL CLK1: STD_LOGIC; BEGIN PROCESS(SCLK) BEGIN IF SCLK'EVENT AND SCLK='1' THEN
10、 IF CNT100=99 THEN CNT100<=0; CLK1<=NOT CLK1; ELSE CNT100<=CNT100+1; END IF; ELSE CLK1<=CLK1; END IF; CLK1HZ<=CLK1; END PROCESS; END ARCHITECTURE ART; 2.等待判別模塊DDPB的VHDL源程序 --DDPB.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC
11、_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); END ENTITY DDPB; ARCHITECTURE ART OF DDPB IS SIGNAL T60S:STD_LOGIC; SIGNAL WCLKCOU:STD_LOGIC_VECTOR(7 DOWNTO 0
12、); BEGIN --產(chǎn)生60 s周期性跳變信號(hào)進(jìn)程 PROCESS(START, CLK1HZ) IS VARIABLE CNT60: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF START='1' THEN CNT60:="00000000"; T60S<='0'; ELSIF CLK1HZ'EVENT AND CLK1HZ='1' THEN IF CNT60="00111100" THEN --CNT60=60 T60S<='1'; CNT60:="000000
13、00"; ELSE CNT60: =CNT60+'1'; T60S<='0'; END IF; END IF; END PROCESS ; --每分鐘行駛距離計(jì)算進(jìn)程 PROCESS(START, WCLK, T60S) IS BEGIN IF START='1' THEN WCLKCOU<="00000000"; ELSIF WCLK'EVENT AND WCLK='1' THEN IF T60S='1' THEN WCLKCOU<="0000
14、0000"; ELSE WCLKCOU<=WCLKCOU+'1'; --距離計(jì)算,單位為m END IF; END IF; END PROCESS ; --等待標(biāo)志判別進(jìn)程 PROCESS(WCLKCOU,T60S) IS BEGIN IF T60S'EVENT AND T60S='1' THEN IF WCLKCOU<="11001000" THEN --WCLKCOU<=200 D
15、DBZ<='1'; --等待 ELSE DDBZ<='0'; --行駛 END IF; END IF; END PROCESS ; END ARCHITECTURE ART; 3.里程計(jì)算模塊LCJS的VHDL源程序 --LCJS.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY LCJS IS PORT(START, DDBZ,
16、 WCLK: IN STD_LOGIC; XSLC: OUT STD_LOGIC_VECTOR(15 DOWNTO 0); 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 --里程計(jì)算及標(biāo)志產(chǎn)生進(jìn)程 PROCESS(
17、START,WCLK) VARIABLE MS: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF START='1' THEN MS:="00000000"; BMS<="0000000000000000";LCBZ<='0'; ELSIF WCLK'EVENT AND WCLK='1' THEN IF DDBZ='0' THEN IF MS="01100011" THEN MS:="00000000"; BMS<=BMS+'1'; --百米數(shù)計(jì)算
18、 IF BMS>=20 THEN LCBZ<='1'; --大于2 km標(biāo)志 END IF; ELSE MS:=MS+'1'; --米數(shù)計(jì)算 END IF; END IF; END IF; END PROCESS; --里程計(jì)算結(jié)果輸出 XSLC<=BMS; --里程計(jì)算結(jié)果轉(zhuǎn)換 BMS1<=CONV_INTEGER(BMS); --產(chǎn)生計(jì)費(fèi)信號(hào)進(jìn)程 PROCESS(BMS1) IS BEGIN CASE BMS1 IS
19、 WHEN 10|20|30|40|50|60|70|80|90|100=>JFBZ1<='1'; WHEN 110|120|130|140|150|160|170|180|190|200=>JFBZ1<='1'; WHEN 210|220|230|240|250|260|270|280|290|300=>JFBZ1<='1'; WHEN 310|320|330|340|350|360|370|380|390|400=>JFBZ1<='1'; WHEN 410|420|430|440|450|460|470|480|490|500=>JFBZ1
20、<='1'; WHEN 510|520|530|540|550|560|570|580|590|600=>JFBZ1<='1'; WHEN 610|620|630|640|650|660|670|680|690|700=>JFBZ1<='1'; WHEN 710|720|730|740|750|760|770|780|790|800=>JFBZ1<='1'; WHEN 810|820|830|840|850|860|870|880|890|900=>JFBZ1<='1'; WHEN 910|920|930|940|950|960|970|980
21、|990|1000=>JFBZ1<='1'; WHEN 1010|1020|1030|1040|1050|1060|1070|1080|1090|1100=>JFBZ1<='1'; WHEN 1110|1120|1130|1140|1150|1160|1170|1180|1190|1200=>JFBZ1<='1'; WHEN 1210|1220|1230|1240|1250|1260|1270|1280|1290|1300=>JFBZ1<='1'; WHEN 1310|1320|1330|1340|1350|1360|1370|1380|1390|14
22、00=>JFBZ1<='1'; WHEN 1410|1420|1430|1440|1450|1460|1470|1480|1490|1500=>JFBZ1<='1'; WHEN 1510|1520|1530|1540|1550|1560|1570|1580|1590|1600=>JFBZ1<='1'; WHEN 1610|1620|1630|1640|1650|1660|1670|1680|1690|1700=>JFBZ1<='1'; WHEN 1710|1720|1730|1740|1750|1760|1770|1780|1790|1800=>JFBZ
23、1<='1'; WHEN 1810|1820|1830|1840|1850|1860|1870|1880|1890|1900=>JFBZ1<='1'; WHEN 1910|1920|1930|1940|1950|1960|1970|1980|1990|2000=>JFBZ1<='1'; WHEN 3910|3920|3930|3940|3950|3960|3970|3980|3990|4000=>JFBZ1<='1'; WHEN OTHERS =>JFBZ1<='0'; END CASE; END PROCESS; --計(jì)費(fèi)標(biāo)志去毛刺進(jìn)
24、程 PROCESS(WCLK,JFBZ1) IS BEGIN IF WCLK'EVENT AND WCLK='1' THEN JFBZ<=JFBZ1; END IF; END PROCESS; END ARCHITECTURE ART; 4.里程計(jì)費(fèi)模塊LCJF的VHDL源程序 --LCJF.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY
25、 LCJF IS GENERIC(SD1:INTEGER:=140; --04:00~23:00單價(jià) SD2:INTEGER:=180); --其他時(shí)段單價(jià) 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 PROC
26、ESS(START, LCBZ, SDBZ, JFBZ) BEGIN IF START='1' THEN LCFY1<="0000000000000000"; ELSIF JFBZ'EVENT AND JFBZ='1' THEN IF DDBZ='0' THEN --行駛狀態(tài) IF LCBZ='0' THEN --2 km以內(nèi) LCFY1<="0000000000000000"; ELSIF LCBZ='1' THEN --2 km以上 I
27、F SDBZ='0' THEN LCFY1<=LCFY1+SD1; ELSIF SDBZ='1' THEN LCFY1<=LCFY1+SD2; END IF; END IF; END IF; END IF; END PROCESS; LCFY<=LCFY1; END ARCHITECTURE ART; 5.等待計(jì)時(shí)模塊DDJS的VHDL源程序 --DDJS.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.
28、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); XDBZ: OUT STD_LOGIC); END ENTITY DDJS; ARCHITECTURE ART OF DDJS IS SIGNAL MS,MG,FS, FG: S
29、TD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL XIDENG: STD_LOGIC; BEGIN PROCESS(START, DDBZ, CLK1HZ) IS BEGIN IF START='1' THEN MS<="0000";MG<="0000"; FS<="0000";FG<="0000"; ELSIF CLK1HZ'EVENT AND CLK1HZ='1' THEN IF DDBZ='1' THEN IF MG=9 THEN MG<="0000";
30、 IF MS=5 THEN MS<="0000"; IF FG=9 THEN FG<="0000"; IF FS=5 THEN XIDENG<='1';FS<="0000"; ELSE FS<=FS+'1'; --分?jǐn)?shù)十位計(jì)算 END IF; ELSE FG<=FG+'1'; --分?jǐn)?shù)個(gè)位計(jì)算 END IF; ELSE MS<=MS+'
31、1'; --秒數(shù)十位計(jì)算 END IF; ELSE MG<=MG+'1'; --秒數(shù)個(gè)位計(jì)算 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; 6.等待計(jì)費(fèi)模塊DDJF的VHDL源程序
32、 --DDJF.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DDJF IS --每分鐘等待費(fèi)用定義,單位為分 GENERIC(WDJ1: INTEGER:=20; WDJ2: INTEGER:=33); PORT(START, XDBZ, DDBZ, CLK1HZ: IN STD_LOGIC; DDFY:OUT STD_LOGIC_VEC
33、TOR(15 DOWNTO 0)); END ENTITY DDJF; ARCHITECTURE ART OF DDJF IS SIGNAL DDFY1: STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CNT60: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL T60S: STD_LOGIC; BEGIN --產(chǎn)生60 s周期性跳變信號(hào)進(jìn)程 PROCESS(CLK1HZ) IS BEGIN IF CLK1HZ'EVENT AND CLK1HZ='1' THEN
34、 IF CNT60="00111100" THEN --CNT60=60 T60S<='1';CNT60<="00000000"; ELSE CNT60<=CNT60+'1';T60S<='0'; END IF; END IF; END PROCESS ; --等待費(fèi)用計(jì)算進(jìn)程 PROCESS(T60S,XDBZ,DDBZ) IS BEGIN IF START='1' THEN DDFY1<="0000000000000000"; ELSIF T60S'E
35、VENT AND T60S='1' THEN IF DDBZ='1' THEN IF XDBZ='0' THEN --等待時(shí)間小于1小時(shí) DDFY1<=DDFY1+WDJ1; ELSIF XDBZ='1' THEN --等待時(shí)間大于1小時(shí) DDFY1<=DDFY1+WDJ2; END IF; END IF; END IF; END PROCESS; --等待費(fèi)用計(jì)算結(jié)果輸出 DDFY<=DDFY1; END ARCHITECTURE ART; 7.輸出數(shù)據(jù)
36、選擇模塊SCXZ的VHDL源程序 --SCXZ.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SCXZ IS PORT( SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0); XSLC: IN STD_LOGIC_VECTOR(15 DOWNTO 0); LCFY: IN STD_LOGIC_VECTOR(15 DOWNTO 0); DDSJ: IN STD_LOGIC_VECTOR(15
37、 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 DATA<= DDSJ(7 DOWNTO 0) WHEN SEL="000" ELSE DDSJ(15 DOWNTO 8) WHEN SEL="001" ELSE LCFY(7 DOWNTO 0) WHEN SEL="010" ELSE LC
38、FY(15 DOWNTO 8) WHEN SEL="011" ELSE DDFY(7 DOWNTO 0) WHEN SEL="100" ELSE DDFY(15 DOWNTO 8) WHEN SEL="101" ELSE XSLC(7 DOWNTO 0) WHEN SEL="110" ELSE XSLC(15 DOWNTO 8) WHEN SEL="111" ELSE "00000000"; END ARCHITECTURE ART; 8.系統(tǒng)總體組裝的VHDL源程序 系統(tǒng)總體組裝的VHDL源程序請(qǐng)讀者根據(jù)圖14.3的測(cè)
39、控FPGA系統(tǒng)CZJFXT內(nèi)部組成原理圖自行完成。 14.3.2 單片機(jī)匯編語(yǔ)言源程序 ; CZJFXT.ASM LED8 EQU 7FH LED7 EQU 7EH ; 時(shí)間顯緩 LED6 EQU 7DH LED5 EQU 7CH LED4 EQU 7BH LED3 EQU 7AH LED2 EQU 79H LED1 EQU 78H FUNKEY EQU P1.0 ; 功能 SELKEY EQU P1.1 ; 選擇 FIXKEY EQU P1.2 ; 修改
40、? RUN EQU P1.4 ; 運(yùn)行信號(hào)(傳感器) RUNBZ EQU 28H.4 ? ZK EQU P1.5 ; 載客信號(hào)-單片機(jī)(傳感器) ZKBZ EQU 28H.2 ; 載客標(biāo)志 SZKBZ EQU P2.7 ; 送FPGA的載客標(biāo)志 INT_R1 EQU 46H INT_R0 EQU 47H INT_R2 EQU 48H KEYNUM EQU 49H ? ADA EQU P2.0 ADB EQU P2.1 ADC EQU P2.2 SDBZ
41、 EQU P3.3 ; 時(shí)段標(biāo)志 LCBZ EQU P2.4 ; 里程標(biāo)志 DDBZ EQU P2.5 ; 等待標(biāo)志 DDBZC EQU 28H.5 XDBZ EQU P2.6 ; 等待超過(guò)1小時(shí)標(biāo)志 ? FYDY8 EQU 3FH ; 費(fèi)用顯緩 FYDY7 EQU 3EH FYDY6 EQU 3DH FYDY5 EQU 3CH FYDY4 EQU 3BH FYDY3 EQU 3AH FYDY2 EQU 39H FYDY1 EQU 38H ?; 主程序 START:
42、 JMP MAIN ; 轉(zhuǎn)移到主程序 ? ORG 000BH ; 中斷服務(wù)入口地址 LJMP PIT0 ? ORG 30H MAIN: CLEAR: MOV R0, #00H MOV R1, #128 MOV A, #00H L1: MOV @R0, A INC R0 DJNZ R1, L1 ? MOV P2, #00H MOV SP, #60H ;
43、 開辟堆棧區(qū) MOV TMOD, #01H ; 定時(shí)器0,定時(shí)工作方式1,16位 MOV TL0, #0B0H ; 初值為4C00H,50 ms MOV TH0, #03CH SETB TR0 ; 啟動(dòng)定時(shí)器工作 SETB IE.7 ; 中斷總允許 SETB IE.1 ; 允許定時(shí)中斷 MOV 30H, #14H ; 中斷循環(huán)次數(shù)初值為20次 ML2: LCALL KKEYI M
44、LL3: CJNE A, #04H, ML4 SETB RUNBZ SJMP ML2 ; 調(diào)用鍵盤掃描程序 ML4: CJNE A, #00H, MLL1 CLR 28H.0 CLR 28H.6 LCALL SJJZ LCALL KKEYI CJNE A, #00H, MLL3 LCALL LCDJDISP ? LCALL KKEYI CJNE A, #00H, MLL3
45、 CLR 28H.0 LJMP ML6 ? LCALL KKEYI MLLL1: CJNE A, #00H, MLL3 LJMP ML5 ? MLL1: JNB RUNBZ, ML2 CJNE A, #05H, ML2 SETB ZKBZ SETB SZKBZ NOP CLR SZKBZ ; LCALL QJDISP ; 起價(jià)顯示 ML5: LCALL FYDISP ; 費(fèi)用顯示 ?
46、 LCALL KKEYII JNB 28H.3, ML3 ; 有鍵按下轉(zhuǎn)ML3 LJMP ML5 ; 沒(méi)鍵按下繼續(xù)刷新費(fèi)用顯示 ML3: LJMP MLL3 ML6: LCALL LCDISP LCALL KKEYII JNB 28H.3, MLLL1 ? LJMP ML6 ? DDDISP: ; 等待時(shí)間顯示子程序 ? MOV FYDY8, #0FH
47、 MOV FYDY7, #12H MOV FYDY6, #12H MOV A,R6 CJNE A, #03H, SL0 MOV R0, 40H LCALL DAAD1 MOV A, R2 ; 是否到了60 s? XRL A, #24H JNZ SJL4 ; 不到,轉(zhuǎn)RET1返回 LCALL CLR0
48、 ; 到了60 s,則秒顯示緩沖單元清0 LJMP SJL4 SL0: CJNE A, #02H, SL1 MOV R0, 40H LCALL DAAD1 MOV A, R2 ; 是否到了60 s? XRL A, #60H JNZ SJL4 ; 不到,轉(zhuǎn)RET1返回 LCALL CLR0 ; 到了
49、60 s,則秒顯示緩沖單元清0 LJMP SJL4 SL1: CJNE A, #01H, SJL4 MOV R0, 40H LCALL DAAD1 MOV A, R2 ; 是否到了60 s? XRL A, #60H JNZ SJL4 ; 不到,轉(zhuǎn)RET1返回 LCALL CLR0 ; 到了60 s,則秒顯示緩沖單元清0 LJMP SJL4
50、 SJL4: LCALL KKEYI CJNE A, #01H, SJL1 ? DEC 40H DEC 40H DJNZ R6, SJL3 ? NEXT3: RET ;ENDIF IF 1=2 QJDISP: ; 起價(jià)顯示參數(shù)子程序 SETB 28H.0 ? MOV FYDY8, #0FH MOV FYDY7, #12H MOV FYDY6, #12H
51、 JB 28H.1, NEXT9 MOV FYDY5, #00H MOV FYDY4, #00H MOV FYDY3, #05H MOV FYDY2, #00H MOV FYDY1, #00H NEXT9: RET ENDIF LCDJDISP: ; 里程單價(jià)顯示子程序 SETB 28H.0 MOV FYDY8, #0DH MOV FYDY7, #12H MOV
52、FYDY6, #12H MOV FYDY5, #12H MOV FYDY4, #12H JNB SDBZ, DJL1 MOV FYDY3, #01H MOV FYDY2, #04H MOV FYDY1, #00H LJMP DJL2 DJL1: MOV FYDY3, #01H MOV FYDY2, #08H MOV FYDY1, #00H DJL2: RET ? LCDISP: ;ANL P
53、2, #0FAH SETB P2.1 MOV R0, #4FH ; 讀入數(shù)據(jù) MOV R3, #02H ; 讀3次P0口 LCDL0: MOV A, P0 MOV @R0, A ? DEC R0 MOV A,P2 INC A ; 指向CPLD下一個(gè)數(shù)據(jù)ADRC ADRB ADRA= MOV P2, A ? DJNZ R3, LCDL0 ANL P2, #0F8H
54、? MOV 58H, 4EH ; 另存 MOV 59H, 4FH ? MOV 22H, 4DH MOV 21H, 4EH MOV 20H, 4FH LCALL HEXBCD2 ? SETB 28H.6 MOV FYDY8, #13H MOV FYDY7, #12H MOV FYDY6, #12H MOV FYDY5, #12H RET
55、 ? FYDISP: ANL P2, #0F8H ? MOV R0, #4FH ; 讀入數(shù)據(jù) MOV R3, #02H ; 讀3次P0口 FYL1: MOV A, P0 MOV @R0, A DEC R0 MOV A, P2 INC A ; 指向CPLD下一個(gè)數(shù)據(jù)ADRC ADRB ADRA= MOV P2, A
56、 DJNZ R3, FYL1 ANL P2, #0F8H MOV 58H, 4EH ; 另存 MOV 59H, 4FH MOV 5FH, #0F4H MOV 5EH, #01h LCALL ADDMB MOV 22H, 4DH MOV 21H, 4EH MOV 20H, 4FH MOV 4FH, #00H MOV 4
57、EH, #00H MOV 4DH, #00H LCALL HEXBCD2 SETB 28H.0 MOV FYDY8, #0FH MOV FYDY7, #12H MOV FYDY6, #12H RET ; BCD轉(zhuǎn)換及送顯緩 HEXBCD2: NOP ; 3BYTE HEX TO 4BYTE BCD HEX(22~20H)-BCD(26~23H) MUBTD: MOV R0, #23H
58、 MOV R7, #04H CLR A LOPP1: MOV @R0, A INC R0 DJNZ R7, LOPP1 MOV R7, #18H ; 32BIT LOOP4: MOV R1, #20H MOV R6, #03H CLR C LOPP2: MOV A, @R1 RLC A MOV @R1, A INC R1
59、 DJNZ R6, LOPP2 MOV R5, #04H MOV R0, #23H LOOP3: MOV A, @R0 ADDC A, @R0 DA A MOV @R0, A INC R0 DJNZ R5, LOOP3 DJNZ R7, LOOP4 SBCD: MOV R0, #23H ; MOV R1, #38H MOV R3, #04H HE
60、X1: MOV A, @R0 ANL A, #0FH MOV @R1, A INC R1 MOV A, @R0 ANL A, #0F0H SWAP A MOV @R1, A INC R1 INC R0 DJNZ R3, HEX1 NEXT2: RET ? ; 時(shí)鐘中斷處理子程序 PIT0: PUSH PSW ; 時(shí)鐘中斷服務(wù)開始,保護(hù)斷點(diǎn)
61、 PUSH ACC SETB PSW.3 ; 選用1組通用寄存器 ; MOV A, TL0 ; 計(jì)數(shù)器重新加載,并修正時(shí)鐘 ; ADD A, #2 MOV TL0, #0B6H MOV TH0, #03CH MOV A, 30H ; 循環(huán)次數(shù)處理 DEC A ; 循環(huán)次數(shù)減1 MOV 30H, A ; 保存于A中 JNZ RET0 ; 不滿20次轉(zhuǎn)RET1返回 MOV 30H, #14H
62、 ; 滿20次,則重賦循環(huán)次數(shù)初值 MOV R0, #LED2 ; 秒的十位緩沖單元 LCALL DAAD1 ; 秒加1 MOV A, R2 ; 是否到了60 s? XRL A, #60H JNZ RET0 ; 不到,轉(zhuǎn)RET1返回 LCALL CLR0 ; 到了60 s,則秒顯示緩沖單元清0 MOV R0, #LED4 ; 分的十位顯示緩沖單元地址 LCALL DA
63、AD1 ; 分加1 MOV A, R2 ; 是否到了60分? XRL A, #60H JNZ RET0 ; 不到,轉(zhuǎn)RET0返回 LCALLCLR0 ; 到了60分,則分顯示緩沖單元清0 MOV R0, #LED6 ; 時(shí)的十位顯示緩沖單元地址 LCALL DAAD1 ; 時(shí)加1 MOV A, R2 ; 是否到了24時(shí)? XRL A, #24H
64、 JNZ RET0 ; 不到,轉(zhuǎn)RET0返回 LCALL CLR0 ; 到了24時(shí),則時(shí)顯示緩沖單元清0 RET0: LCALL SDBJ NEXT5: MOV LED7, #12H MOV LED8, #0AH LCALL DISP POP ACC ; 恢復(fù)斷點(diǎn) POP PSW RETI ; 中斷返回 DAAD1: MOV
65、 A, @R0 ; 加1子程序,十位數(shù)送A DEC R0 ; 指向個(gè)位顯示緩沖單元地址 SWAP A ; 十位數(shù)占高四位 ORL A, @R0 ; 個(gè)位數(shù)占低四位 ADD A, #01H ; 加1 DA A ; 十進(jìn)制調(diào)整 MOV R2, A ; 全值暫存R2中
66、 ANL A, #0FH ; 取出個(gè)位數(shù) MOV @R0, A ; 個(gè)位值送顯示緩沖單元 MOV A, R2 INC R0 ANL A, #0F0H ; 取出十位數(shù) SWAP A ; 使十位數(shù)占低四位 MOV @R0, A ; 十位數(shù)送顯示緩沖單元 RET ; 返回 CLR0: CLR A ; 清緩沖單元地址子程序 MOV @R0, A ; 十位數(shù)緩沖單元清0 DEC R0 MOV @R0, A ; 個(gè)位數(shù)緩沖單元清0 RET SDBJ: MOV A, LED6 ; 時(shí)段比較子程序 CJNE A, #00H, SDL1 MOV A,
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 植樹問(wèn)題講課
- 小小圖書館賈世喜
- 小班數(shù)學(xué):變得一樣多
- 蘇教版三年級(jí)數(shù)學(xué)上冊(cè)教學(xué)ppt課件58:解決問(wèn)題的策略復(fù)習(xí)
- 小學(xué)科學(xué)六下《拓展與應(yīng)用》-公開課一等獎(jiǎng)ppt課件
- 高中英語(yǔ)人教版選修七Unit-2-Robots-ppt課件
- 第九章長(zhǎng)期負(fù)債課件
- 皮膚免疫系統(tǒng)課件
- 辦公樓施工現(xiàn)場(chǎng)消防安全管理要求規(guī)范課件
- freeroi在功能磁共振roi分析中的應(yīng)用
- 《永遇樂(lè)&#183;京口北固亭懷古》用典講解課件
- 《秋天的雨》微課課件
- 護(hù)患溝通技巧-課件
- 《高等數(shù)學(xué)B》第十章___微分方程與差分方程__第6節(jié)__差分與差分方程的概念_、……課件
- 英語(yǔ)(人教版)九年級(jí)總復(fù)習(xí)題型訓(xùn)練補(bǔ)全對(duì)話(含最新原創(chuàng)題)課件