版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第14章 出租车计费系统的设计与分析,14.1 系统设计要求 14.2 系统设计方案 14.3 主要源程序 14.4 系统仿真/硬件验证 14.5 设计技巧分析 14.6 系统扩展思路,14.1 系统设计要求,以CPLD/FPGA为主体,设计并制作一台出租车计费系统,系统的方框图如图14.1所示。,图14.1 出租车计费系统方框图,1计费及显示 (1) 里程,即汽车行驶里程,用四位数字显示,显示方式为“XXX.X”,单位为km,精确到0.1 km。 (2) 单价,即里程单价,用三位数字显示,显示方式为“X.XX”,单价为元/km,根据每天不同的时间段有两种情况:当时间段为06:0023:00时
2、单价为1.40元/km,其他时间段内单价为1.80元/km。,(3) 等候时间,用四位数字显示分钟和秒,显示方式为“XX:XX”,等候的定义是:当汽车行驶速度小于或等于12 km/h时为“等候”。 (4) 等候单价,等候单价有两种情况:在等候时间小于1小时的情况下,等候单价为1元每5分钟;在等候时间大于1小时的情况下,等候单价为20元每小时。,(5) 费用的计算,出租车的起价为5.00元,当里程小于2 km时,按起价计算费用;当里程大于2 km时按下式计算费用: 费用=里程里程单价+等候时间等候单价 (6) 费用的显示,用五位数字显示,显示方式为“XXX.XX”,单价为元。,2时钟及显示 当出
3、租车在常运状态下,应能显示当前的时间。在汽车熄火的情况下,时钟必须正常运行,但是可以不显示时钟。 3计费开始提示 当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。,14.2 系统设计方案,14.2.1 系统总体设计方案 本系统拟采用单片机和FPGA的结合进行系统的主体设计,系统原理框图如图14.2所示。,图14.2 出租车计费系统总体原理框图,14.2.2 测控FPGA的VHDL程序设计 根据系统的设计要求,我们可将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待判别模块DDPB,里程计算模块LCJS,里程计费模块
4、LCJF,等待计时模块DDJS,等待计费模块DDJF,输出数据选择模块SCXZ。其内部组成原理图如图14.3所示。,分频器模块FPQ:将外部时钟信号SCLK(设计时假设为200 Hz)经过适当分频后,产生1 Hz的系统工作用基准时钟信号CLK1HZ,供系统中的有关模块计时用。 等待判别模块DDPB:根据速度传感器脉冲信号WCLK和分频器产生的基准时钟信号CLK1HZ,计算单位时间里WCLK的脉冲个数(每km产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志信号DDBZ。,里程计算模块LCJS:根据速度传感器脉冲信号WCLK和等待标
5、志DDBZ,对出租车行驶的里程数XSLC进行计算,同时发出里程标志信号LCBZ和里程计费标志信号JFBZ。 里程计费模块LCJF:在计费标志信号JFBZ、等待标志信号DDBZ、里程标志信号LCBZ和时段标志信号XDBZ等信号的控制下,计算行驶里程超过2 km以上里程的费用LCFY。,等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ的控制下,进行等待时间DDSJ的计算,其中DDSJ的低8位表示等待时间的秒数,DDSJ的高8位表示等待时间的分钟数,同时根据等待时间的长短发出一个熄灯标志信号XDBZ。 等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进
6、行等待费用DDFY的计费操作。 输出数据选择模块SCXZ :根据单片机发出的数据传输选择控制信号SEL,选择有关计算处理结果传输给单片机。SEL与被传送数据的具体关系如表14.1所示。,表14.1 SEL与被传送数据的关系列表,14.2.3 单片机控制程序设计 单片机模块包括单片机AT89C51及其控制的显示和键盘系统,控制口如图14.3(略 )所示。 AT89C51对FPGA的数据进行运算,计算出用车总费用并送显示系统显示,同时它接收键盘信息并处理显示切换。系统采用6+1显示,6个数码管作常规显示,一个数码管作状态显示。按键共有5个,分别是功能切换键、确定键、修改键、启动模拟键和空车牌压下模
7、拟键。涉及的主要流程图如图14.414.8所示。,图14.4 主程序流程图,图14.5 键处理流程图,图14.6 经典显示子程序流程图,图14.7 里程显示子程序流程图,图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; ENTITY FPQ IS,PORT(SCLK: IN STD
8、_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 SCLKEVENT AND SCLK=1 THEN IF CNT100=99 THEN CNT100=0; CLK1=NOT CLK1; ELSE CNT100=CNT100+1; END IF; ELSE,CLK1
9、=CLK1; END IF; CLK1HZ=CLK1; END PROCESS; END ARCHITECTURE ART;,2等待判别模块DDPB的VHDL源程序 -DDPB.VHD LIBRARY 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);,END ENTITY DDP
10、B; ARCHITECTURE ART OF 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,CNT60:=00000000; T60S=0; ELSIF CLK1HZEVENT AND CLK1HZ=1 THEN IF CNT60=00111100 THEN
11、-CNT60=60 T60S=1; CNT60:=00000000; ELSE CNT60: =CNT60+1; T60S=0; END IF; END IF; END PROCESS ; -每分钟行驶距离计算进程,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 WCLKCOU=WCLKCOU+1; -距离计算,单位为m,END IF; END IF; END PR
12、OCESS ; -等待标志判别进程 PROCESS(WCLKCOU,T60S) IS BEGIN IF T60SEVENT AND T60S=1 THEN IF WCLKCOU=11001000 THEN -WCLKCOU=200 DDBZ=1; -等待 ELSE,DDBZ=0; -行驶 END IF; END IF; END PROCESS ; END ARCHITECTURE ART;,3里程计算模块LCJS的VHDL源程序 -LCJS.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.AL
13、L; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITYLCJS IS PORT(START, DDBZ, 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_LOGI
14、C; BEGIN -里程计算及标志产生进程 PROCESS(START,WCLK),VARIABLE MS: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN 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;,BMS=20 THEN LCBZ=1; -大于2 km标志 END IF; ELSE MS:=MS+1; -米数计算 END IF; EN
15、D IF; END IF; END PROCESS;,-里程计算结果输出 XSLC=BMS; -里程计算结果转换 BMS1=CONV_INTEGER(BMS); -产生计费信号进程 PROCESS(BMS1) IS BEGIN CASE BMS1 IS,WHEN 10|20|30|40|50|60|70|80|90|100=JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1=1;,WHEN 1010|1020|1030|1040|1050|1060|1070|1080|1090|1100=JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFB
16、Z1JFBZ1JFBZ1JFBZ1JFBZ1=1;,WHEN 3910|3920|3930|3940|3950|3960|3970|3980|3990|4000=JFBZ1JFBZ1=0; END CASE; END PROCESS; -计费标志去毛刺进程 PROCESS(WCLK,JFBZ1) IS BEGIN,IF WCLKEVENT AND WCLK=1 THEN JFBZ=JFBZ1; END IF; END PROCESS; END ARCHITECTURE ART;,4里程计费模块LCJF的VHDL源程序 -LCJF.VHD LIBRARY IEEE; USE IEEE.STD_L
17、OGIC_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); -其他时段单价,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 LCF
18、Y1: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN PROCESS(START, LCBZ, SDBZ, JFBZ) BEGIN IF START=1 THEN,LCFY1=0000000000000000; 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 LCFY
19、1=LCFY1+SD2; END IF;,END IF; END IF; END IF; END PROCESS; LCFY=LCFY1; END ARCHITECTURE ART;,5等待计时模块DDJS的VHDL源程序 -DDJS.VHD LIBRARY 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; DDS
20、J: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);,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,MS=0000;MG=0000; FS=0000;FG=0000; ELSIF CLK1HZEVENT AND CL
21、K1HZ=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,FS=FS+1; -分数十位计算 END IF; ELSE FG=FG+1; -分数个位计算 END IF; ELSE MS=MS+1; -秒数十位计算 END IF; ELSE MG=MG+1; -秒数个位计算,END IF; END IF; END IF; END PROCESS; XDBZ=XIDENG; DDSJ(15 DOWNTO
22、 12)=FS; DDSJ(11 DOWNTO 8)=FG; DDSJ(7 DOWNTO 4)=MS; DDSJ(3 DOWNTO 0)=MG; END ARCHITECTURE ART;,6等待计费模块DDJF的VHDL源程序 -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 -每分钟等待费用定义,单位为分 GENERIC(WDJ1: INTEGER:=20; WDJ2: INTEG
23、ER:=33);,PORT(START, XDBZ, DDBZ, CLK1HZ: IN STD_LOGIC; DDFY:OUT STD_LOGIC_VECTOR(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 -产生60 s周期性跳变信号进程,PROCESS(CLK1HZ) IS BEGIN
24、 IF CLK1HZEVENT AND CLK1HZ=1 THEN IF CNT60=00111100 THEN -CNT60=60 T60S=1;CNT60=00000000; ELSE CNT60=CNT60+1;T60S=0; END IF; END IF; END PROCESS ; -等待费用计算进程,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
25、小时 DDFY1=DDFY1+WDJ1; ELSIF XDBZ=1 THEN -等待时间大于1小时 DDFY1=DDFY1+WDJ2;,END IF; END IF; END IF; END PROCESS; -等待费用计算结果输出 DDFY=DDFY1; END ARCHITECTURE ART;,7输出数据选择模块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_VE
26、CTOR(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 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
27、=000 ELSE DDSJ(15 DOWNTO 8) WHEN SEL=001 ELSE LCFY(7 DOWNTO 0) WHEN SEL=010 ELSE LCFY(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系统总体组装的V
28、HDL源程序 系统总体组装的VHDL源程序请读者根据图14.3的测控FPGA系统CZJFXT内部组成原理图自行完成。,14.3.2 单片机汇编语言源程序 ; CZJFXT.ASM LED8 EQU 7FH LED7 EQU 7EH ; 时间显缓 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 ; 修改 RUN EQU P1.4 ; 运行信号(传感器) RUNBZ EQU 2
29、8H.4 ZK EQU P1.5 ; 载客信号-单片机(传感器) ZKBZ EQU 28H.2 ; 载客标志 SZKBZ EQU P2.7 ; 送FPGA的载客标志,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 EQU P3.3 ; 时段标志,LCBZ EQU P2.4 ; 里程标志 DDBZ EQU P2.5 ; 等待标志 DDBZC EQU 28H.5 XDBZ EQU P2.6 ; 等待超过1小时标志 FYDY8 EQU 3FH
30、 ; 费用显缓,FYDY7 EQU 3EH FYDY6 EQU 3DH FYDY5 EQU 3CH FYDY4 EQU 3BH FYDY3 EQU 3AH FYDY2 EQU 39H FYDY1 EQU 38H ; 主程序,START: JMPMAIN ; 转移到主程序 ORG 000BH ; 中断服务入口地址 LJMP PIT0 ORG 30H MAIN:,CLEAR: MOVR0, #00H MOVR1, #128 MOVA, #00H L1: MOVR0, A INC R0 DJNZR1, L1 MOVP2, #00H MOV SP, #60H ; 开辟堆栈区,MOV TMOD, #01
31、H ; 定时器0,定时工作方式1,16位 MOV TL0, #0B0H ; 初值为4C00H,50 ms MOV TH0, #03CH SETBTR0 ; 启动定时器工作 SETBIE.7 ; 中断总允许 SETBIE.1 ; 允许定时中断 MOV30H, #14H ; 中断循环次数初值为20次,ML2: LCALLKKEYI MLL3: CJNEA, #04H, ML4 SETB RUNBZ SJMPML2 ; 调用键盘扫描程序 ML4: CJNEA, #00H, MLL1 CLR28H.0,CLR28H.6 LCALLSJJZ LCALLKKEYI CJNEA, #00H, MLL3 LC
32、ALLLCDJDISP LCALLKKEYI CJNEA, #00H, MLL3 CLR 28H.0 LJMPML6 LCALLKKEYI,MLLL1: CJNE A, #00H, MLL3 LJMPML5 MLL1: JNBRUNBZ, ML2 CJNE A, #05H, ML2 SETB ZKBZ SETBSZKBZ NOP CLR SZKBZ ; LCALLQJDISP; 起价显示,ML5: LCALL FYDISP; 费用显示 LCALL KKEYII JNB28H.3, ML3 ; 有键按下转ML3 LJMPML5 ; 没键按下继续刷新费用显示 ML3: LJMPMLL3,ML6:
33、LCALLLCDISP LCALLKKEYII JNB28H.3, MLLL1 LJMPML6 DDDISP: ; 等待时间显示子程序 MOVFYDY8, #0FH MOV FYDY7, #12H MOV FYDY6, #12H,MOVA,R6 CJNEA, #03H, SL0 MOVR0, 40H LCALLDAAD1 MOV A, R2 ; 是否到了60 s? XRL A, #24H JNZ SJL4 ; 不到,转RET1返回 LCALLCLR0 ; 到了60 s,则秒显示缓冲单元清0 LJMPSJL4,SL0: CJNE A, #02H, SL1 MOVR0, 40H LCALL DAA
34、D1 MOVA, R2 ; 是否到了60 s? XRLA, #60H JNZ SJL4 ; 不到,转RET1返回 LCALL CLR0 ; 到了60 s,则秒显示缓冲单元清0 LJMPSJL4,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 LJMPSJL4,SJL4: LCALLKKEYI CJNE A, #01H, SJL1 DEC40H DEC 40H DJNZ R6,
35、SJL3 NEXT3:RET ;ENDIF IF 1=2,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, #00H,NEXT9: RET ENDIF LCDJDISP: ; 里程单价显示子程序 SETB28H.0 MOVFYDY8, #0DH MOVFYDY7, #12H MOV FYDY6, #12H MOV
36、 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: ;ANLP2, #0FAH SETBP2.1 MOVR0, #4FH ; 读入数据 MOVR3, #02H ; 读3次P0口 LCDL0: MOVA, P0 MOVR0, A DECR0 MOVA,P2,INCA ; 指向CPLD下一个数据ADRC A
37、DRB ADRA= MOVP2, A DJNZR3, LCDL0 ANL P2, #0F8H 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 FYDISP:ANL P2, #0F8H MOV R0, #4FH ; 读入数据 MOV R3, #02H ; 读3次P0口,FYL1: MOV A, P0 MOV R0, A D
38、EC 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,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 M
39、OV FYDY6, #12H RET,; BCD转换及送显缓 HEXBCD2: NOP ; 3BYTE HEX TO 4BYTE BCD HEX(2220H)-BCD(2623H) MUBTD: MOVR0, #23H 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: MOVA, R1 RLCA MOV R1, A INC R1 DJNZ R6, LOPP2 MOV R5, #04H MOV R0
40、, #23H LOOP3: MOV A, R0 ADDC A, R0 DAA MOV R0, A INC R0,DJNZ R5, LOOP3 DJNZ R7, LOOP4 SBCD: MOV R0, #23H ; MOV R1, #38H MOV R3, #04H HEX1: 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 ; 时钟中断处理子程序 PIT0: PUSH PSW ; 时钟中断服务开始,保护断点
41、PUSH ACC SETB PSW.3 ; 选用1组通用寄存器,; MOV A, 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次,则重赋循环次数初值,MOV R0, #LED2 ; 秒的十位缓冲单元 LCALL DAAD1 ; 秒加1 MOV A, R2 ; 是否到了60 s? XRL A, #60H JNZ RET0 ;
42、不到,转RET1返回 LCALL CLR0 ; 到了60 s,则秒显示缓冲单元清0 MOV R0, #LED4 ; 分的十位显示缓冲单元地址 LCALL DAAD1 ; 分加1 MOV A, R2 ; 是否到了60分?,XRL A, #60H JNZ RET0 ; 不到,转RET0返回 LCALLCLR0 ; 到了60分,则分显示缓冲单元清0 MOVR0, #LED6 ; 时的十位显示缓冲单元地址 LCALL DAAD1 ; 时加1 MOV A, R2 ; 是否到了24时? XRL A, #24H JNZ RET0 ; 不到,转RET0返回 LCALL CLR0 ; 到了24时,则时显示缓冲单
43、元清0,RET0: LCALL SDBJ NEXT5: MOV LED7, #12H MOV LED8, #0AH LCALL DISP POP ACC ; 恢复断点 POP PSW RETI ; 中断返回,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 ; 取出个位数,MOV R0, A ; 个位值送显示缓冲单元 MOV A, R2 INC
44、 R0 ANL A, #0F0H ; 取出十位数 SWAP A ; 使十位数占低四位 MOV R0, A ; 十位数送显示缓冲单元 RET ; 返回,CLR0: CLR A ; 清缓冲单元地址子程序 MOV R0, A ; 十位数缓冲单元清0 DEC R0 MOVR0, A ; 个位数缓冲单元清0 RET SDBJ: MOV A, LED6 ; 时段比较子程序,CJNE A, #00H, SDL1 MOV A, LED5 CLRC SUBB A, #06H JNC SDL2 LJMP SDL0 SDL1: CLR C SUBB A, #02H JC SDL2 MOV A, LED5 CLR C
45、 SUBB A, #03H JNC SDL0,SDL2: SETB SDBZ LJMP NEXT7 SDL0: CLR SDBZ NEXT7: RET DDCL:MOV R0, #LED8 MOV R1, #5FH MOV R3, #08H DDL0: MOV A, R0 MOV R1, A DEC R0 DEC R1 DJNZ R3, DDL0 RET,; 显示程序 DISP: MOV R0, #LED8 MOV R1, #08H JNB 28H.0, DDLL0 MOV R0, #FYDY8 LJMP DL7 DDLL0:JNB 28H.6, DL0 DDL1: MOV R0, #FYDY
46、8 MOV R1, #08H LJMP DDL2,DL7: MOV A, R1 LJMP DL1 DDL2:MOV A, R1 LJMP DLL1 DL0: MOV A, R1 CJNE A, #05H, DL1 LJMP DL3 DL1: CJNE A, #03H, DL2 LJMP DL3 DLL1: CJNE A, #02H, DL2 LJMP DL3,DL2: MOV A, R0 MOV DPTR, #TAB1 MOVCA, A+DPTR MOV SBUF, A LJMP DL4 DL3: MOV A, R0 MOV DPTR, #TAB1 MOVC A, A+DPTR ORL A,
47、#01H MOV SBUF, A,DL4: JNB TI, DL4 CLR TI DEC R0 DJNZ R1, DL8 LJMP NEXT4 DL8: JB 28H.0, DL7 JB 28H.6, DDL2 LJMP DL0 NEXT4: RET ; a,b,c,d,e,f,g,h,TAB1: DB 0FCH,60H,0DAH ; 0 1 2 DB 0F2H,66H,0B6H ; 3 4 5 DB 0BEH,0E0H,0FEH ; 6 7 8 DB 0F6H,0EEH,3EH ; 9 A B DB 9CH,7AH,9EH; C D E DB 8EH,0CEH,02H ; F P - DB
48、00H,0CFH,6EH; NL, P. , H DB 1CH ; L,IF 1=3 DB 08FH,7DH,61H ; 17 ; 13H-F. ,16H-U. ,17H-I. ,18H-S. DB 0B7H,6EH,09DH; 1A ; 19H-H ,1AH-C. ,1BH-O(DIGREE) DB 0C6H,7BH,02H; 1D ; 1CH-d. ,1DH- -(MINUSE SIGN) DB 0CFH,0EFH,01DH; 20 ; 1EH-P. ,1FH-A. ,20H-L. DB 0FDH, 7CH,1CH,0FFH ; 21H-O. ,22H-U,23H-L,24H DB 80H
49、,40H,20H,10H,08H,04H,02H,01H ;25,26,27,28,29,2A,2B,2CH DB 0EDH ; 2DH DB 0BCH,3AH ; 2EH-G ; 2FH-SMALL O,ENDIF ; 键盘子程序 KKEYII:LCALLKKS1 ; KEY SCANNING PROG JNZ KLK1 ; 有按键, 转跳 KLK1 KNN1: LCALLDELAY LCALLDELAY SETB28H.3 RET,KKEYI: LCALL KKS1 ; KEY SCANNING PROG JNZ KLK1 ; 有按键, 转跳KLK1 KN1: LCALL DELAY LC
50、ALL DELAY LJMP KKEYI ; 无按键, 转跳KKEYI继续扫描 KLK1:LCALLDELAY LCALLDELAY LCALL KKS1 JNZ KLK2 ; 确实有按键,转跳至 KLK2 LCALL DELAY LJMP KKEYI,KLK2:NOP ; THERE IS KEYI JB P1.0, NOK1 MOV A, #00H LJMP GOHM NOK1: NOP JB P1.1, NOK2 MOV A, #01H LJMP GOHM NOK2: NOP JB P1.2, NOK3 MOV A, #02H LJMP GOHM,NOK3: NOP JB P1.3, N
51、OK4 MOV A, #03H LJMP GOHM NOK4: NOP JB P1.4, NOK5 MOV A, #04H LJMP GOHM NOK5: NOP JB P1.5, NOK6 MOV A, #05H LJMP GOHM,NOK6: NOP JB P1.6, NOK7 MOV A, #06H LJMP GOHM NOK7: NOP JB P1.7, KLK1 MOV A, #07H GOHM: PUSH ACC KLK3:LCALL DELAY,LCALL KKS1 JNZ KLK3 LCALL DELAY LCALL KKS1 JNZ KLK3 POP ACC CLR 28H.
52、3 RET,KKS1: MOV P1, #0FFH ; IS THERE ANY NOP MOV A, P1 CPL A RET ; IF THERE IS KEYING THEN A =/= 0 DELAY: MOV R1, #09H WWW: MOV R0, #0FFH NMN: DJNZ R0, NMN DJNZ R1, WWW RET,T1S: MOV INT_R1, #0FFH TSM3: MOV INT_R0, #0FFH TSM4: DJNZ INT_R0, TSM4 DJNZ INT_R1, TSM3 RET ADDMB: MOV R2, #02H ; NO SIGN N BY
53、TES ADDS N BYTES MOV R0, #4FH ; (.4FH)+(.5FH)=(.4FH),MOV R1, #5FH ADDMBB:CLRC ADDL: MOVA, R0 ADDC A, R1 MOV R0, A DEC R0 DEC R1 DJNZ R2, ADDL RET END,14.4 系统仿真/硬件验证,14.4.1 系统的调试方法 本系统既含有FPGA自编程硬件设计电路,又含有单片机控制电路的设计,整个系统比较复杂,因此我们采用自底向上的调试方法,也就是先进行各个单元电路的软件仿真和硬件调试,在各个单元电路调试好后再进行系统联调,最后进行硬件的编程固化及系统的组装。,
54、14.4.2 系统调试的软/硬件 (1) 设计开发软件:MAX+plus 10.0,伟福6000(WAVE 6000 for windows)。 (2) 主要设备:PIV 计算机,伟福E6000L单片机仿真器及POD8X5XP仿真头,GW48-CK EDA实验开发系统,单片机最小系统,炜煌WH-500B程序编写加密器。,14.4.3 系统的有关仿真 图14.9图14.15是系统中主要模块的仿真图,请读者结合有关程序进行仿真结果的分析。经分析这些有关仿真结果,可知对应模块的VHDL程序设计是正确的。,图14.9 等待判别模块DDPB.VHDL仿真图(局部结果),图14.10 等待判别模块DDPB.VHDL仿真图(整体结果),图14.11
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 从宝洁的成功看企业战略管理的重要性
- 农产品跨境电商营销策略
- 以乐启智家庭中的音乐启蒙实践与反思
- 从教育角度看小学生阅读习惯的培养
- 创新型学校基础设施设计与管理案例
- 2025订购物品合同纠纷上诉状
- 创新医疗技术下的高血压早期识别及预防教育探讨研讨会重点指引
- 2025林地承包的合同范本
- 2024山东核子及核辐射测量仪器制造市场前景及投资研究报告
- 2025产品销售合同
- 2024年河北中考语文试题及答案
- HG/T 22820-2024 化工安全仪表系统工程设计规范(正式版)
- 偏微分方程智慧树知到期末考试答案章节答案2024年山东大学(威海)
- 村集体经济入股分红协议书
- 新时代大学生劳动教育智慧树知到期末考试答案章节答案2024年黑龙江农业经济职业学院
- MOOC 计量经济学-西南财经大学 中国大学慕课答案
- MOOC 高等数学(上)-西北工业大学 中国大学慕课答案
- 毛泽东思想概论智慧树知到期末考试答案2024年
- 中医诊所消防应急预案
- 2024版国开电大法学本科《国际经济法》历年期末考试总题库
- 2024年学前儿童科学教育知识题库及答案(含各题型)
评论
0/150
提交评论