出租车计费系统

上传人:e****s 文档编号:243744993 上传时间:2024-09-30 格式:PPT 页数:130 大小:720KB
返回 下载 相关 举报
出租车计费系统_第1页
第1页 / 共130页
出租车计费系统_第2页
第2页 / 共130页
出租车计费系统_第3页
第3页 / 共130页
点击查看更多>>
资源描述
,第二级,第三级,第四级,第五级,第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时单价为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计费开始提示,当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。,14.2 系统设计方案,14.2.1 系统总体设计方案,本系统拟采用单片机和FPGA的结合进行系统的主体设计,系统原理框图如图14.2所示。,图14.2 出租车计费系统总体原理框图,14.2.2 测控FPGA的VHDL程序设计,根据系统的设计要求,我们可将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待判别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,输出数据选择模块SCXZ。其内部组成原理图如图14.3所示。,分频器模块FPQ:将外部时钟信号SCLK(设计时假设为200 Hz)经过适当分频后,产生1 Hz的系统工作用基准时钟信号CLK1HZ,供系统中的有关模块计时用。,等待判别模块DDPB:根据速度传感器脉冲信号WCLK和分频器产生的基准时钟信号CLK1HZ,计算单位时间里WCLK的脉冲个数(每km产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志信号DDBZ。,里程计算模块LCJS:根据速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶的里程数XSLC进行计算,同时发出里程标志信号LCBZ和里程计费标志信号JFBZ。,里程计费模块LCJF:在计费标志信号JFBZ、等待标志信号DDBZ、里程标志信号LCBZ和时段标志信号XDBZ等信号的控制下,计算行驶里程超过2 km以上里程的费用LCFY。,等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ的控制下,进行等待时间DDSJ的计算,其中DDSJ的低8位表示等待时间的秒数,DDSJ的高8位表示等待时间的分钟数,同时根据等待时间的长短发出一个熄灯标志信号XDBZ。,等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY的计费操作。,输出数据选择模块SCXZ :根据单片机发出的数据传输选择控制信号SEL,选择有关计算处理结果传输给单片机。SEL与被传送数据的具体关系如表14.1所示。,表14.1 SEL与被传送数据的关系列表,14.2.3 单片机控制程序设计,单片机模块包括单片机AT89C51及其控制的显示和键盘系统,控制口如图14.3略 所示。,AT89C51对FPGA的数据进行运算,计算出用车总费用并送显示系统显示,同时它接收键盘信息并处理显示切换。系统采用6+1显示,6个数码管作常规显示,一个数码管作状态显示。按键共有5个,分别是功能切换键、确定键、修改键、启动模拟键和空车牌压下模拟键。涉及的主要流程图如图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_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=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 DDPB;,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 -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 PROCESS ;,-等待标志判别进程,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.ALL;,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_LOGIC;,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;,END IF;,END IF;,END PROCESS;,-里程计算结果输出,XSLC=BMS;,-里程计算结果转换,BMS1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1JFBZ1=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_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); -其他时段单价,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,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,LCFY1=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;,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: 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 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,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 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: INTEGER:=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,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小时,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_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 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 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系统总体组装的VHDL源程序,系统总体组装的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 28H.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 ; 费用显缓,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, #01H,; 定时器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,LCALLLCDJDISP,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:,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 DAAD1,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, 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 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 ADRB 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,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,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,; 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, #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 ; 时钟中断效劳开始,保护断点,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 ; 不到,转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时,那么时显示缓冲单元清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 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,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, #FYDY8,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, #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 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,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,LCALL 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, NOK4,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.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 BYTES 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自编程硬件设计电路,又含有单片机控制电路的设计,整个系统比较复杂,因此我们采用自底向上的调试方法,也就是先进行各个单元电路的软件仿真和硬件调试,在各个单元电路调试好后再进行系统联调,最后进行硬件的编程固化及系统的组装。,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仿真图(局部结果)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 幼儿教育


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!