皮皮网

【lcd源码】【cef网页怎么获得源码】【快到前期高点指标源码】出租车管理系统源码_出租车管理系统源码怎么弄

2024-11-23 08:39:08 来源:nz 源码

1.EDA课程设计,用VHDL编程做出租车计费器
2.出租车计价器
3.做一个滴滴打车的出租车管lcd源码APP大概多少钱

出租车管理系统源码_出租车管理系统源码怎么弄

EDA课程设计,用VHDL编程做出租车计费器

       è¯¾ç¨‹è®¾è®¡å†…容与要求

       1,用开关按键表示脉冲,每个脉冲代表米,个脉冲1公里,每公里1.4元,能同步显示里程和费用;

       2,低于2公里5元计费,高于2公里总费用=起步费用+(里程-2公里)*里程单价+

       ç­‰å€™æ—¶é—´*等后单价;

       3,等候时间大于2分钟,按每分钟1.3元计费;

       4,可以设定起步价和里程单价。

        一、设计原理与技术方法:

       åŒ…括:电路工作原理分析与原理图、元器件选择与参数计算、电路调试方法与结果说明;

       è½¯ä»¶è®¾è®¡è¯´æ˜Žä¹¦ä¸Žæµç¨‹å›¾ã€è½¯ä»¶æºç¨‹åºä»£ç ã€è½¯ä»¶è°ƒè¯•æ–¹æ³•ä¸Žè¿è¡Œç»“果说明。

        根据设计要求,系统的输入信号clk,计价开始信号start,等待信号stop,里程脉冲信号fin。系统的输出信号有:总费用数C0—c3,行驶距离k0—k1,等待时间m0—m1等。系统有两个脉冲输入信号clk_k,fin,其中clk_k将根据设计要求分频成hz,hz和1hz分别作为公里计费和超时计费的脉冲。两个控制输入开关start,stop;控制过程为:start作为计费开始的开关,当start为高电平时,系统开始根据输入的情况计费。当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;如需停车等待,就把stop变为高电平,

       å¹¶åŽ»é™¤fin输入脉冲,进行等待计费;当乘客下车且不等待时,直接将start置为0,系统停止工作;价格开始归为起步价5.0元。

        整个设计由分频模块,计量模块,计费模块,控制模块和显示模块五个部分组成。

       å…¶ä¸­è®¡é‡æ¨¡å—是整个系统实现里程计数和时间计数的重要部分;控制模块是实现不同计费方式的选择部分,根据所设计的使能端选择是根据里程计费还是根据等待时间计费,同时设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。计量模块采用1hz的驱动信号,计费模块采用hz,hz的驱动信号;计量模块每计数一次,计量模块就实现次或者次计数,即为实现计时的1.3元/min,计程时的1.4元/km的收费。组成框图如下所示:

       1.百进制模块:

       å®žçŽ°ç™¾ç±³è„‰å†²çš„驱动信号,元件框图如图3所示:

       å›¾3 百进制模块框图

       æºç¨‹åºå¦‚下:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity baijinzhi is

       port(start,clk2: in std_logic; --秒脉冲

        a: out std_logic_vector(3 downto 0));

       end baijinzhi;

       architecture rt1 of baijinzhi is

       signal count_1:std_logic_vector(3 downto 0);

       begin

        a<=count_1;

       process(start,clk2)

        begin

        if(start='0')then

        count_1<="";

        elsif(clk2'event and clk2='1')then

        if(count_1="")then

        count_1<="";

        else

        count_1<=count_1+'1';

        end if;

        end if;

       end process;

       end rt1

       2.计费模块

       ; 实现里程和等候时间的计费并输出到显示,元件框图4如下:

       å›¾4 计费模块框图

       æºç¨‹åºå¦‚下:

       Library IEEE;

       use IEEE.std_logic_.all;

       use IEEE.std_logic_arith.all;

       use IEEE.std_logic_unsigned.all;

       entity jifei is

       port(clk2:in std_logic; --计费驱动信号

        start:in std_logic; --计费开始信号

        c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));

       end jifei;

       architecture rt1 of jifei is

       begin

       process(clk2,start)

       begin

        if start='0'then c3<="";c2<="";c1<="";c0<=""; --起步价5元

        elsif clk2'event and clk2='1'then

        if c0="" then c0<="";

        if c1="" then c1<="";

        if c2="" then c2<="";

        if c3="" then c3<="";

        else c3<=c3+1;

        end if;

        else c2<=c2+1;

        end if;

        else c1<=c1+1;

        end if;

        else c0<=c0+1;

        end if;

       end if;

       end process;

       end rt1;

       3.公里模块

       å®žçŽ°åŽ†ç¨‹çš„计数和输出计费脉冲,元件框图5如下:

       å›¾5 公里模块框图

       æºç¨‹åºå¦‚下:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity gongli is

       port(clk1,start: in std_logic; --百米脉冲

        k1,k2,k3,k4: out std_logic_vector(3 downto 0); --里程显示

        temp2 : out std_logic);

       end gongli;

       architecture rt1 of gongli is

       signal count_1: std_logic_vector(3 downto 0);

       signal count_2: std_logic_vector(3 downto 0);

       signal count_3: std_logic_vector(3 downto 0);

       signal count_4: std_logic_vector(3 downto 0);

       begin

        k1<=count_1;

        k2<=count_2;

        k3<=count_3;

        k4<=count_4;

        process(start,clk1)

        begin

        if(start='0')then

        count_1<="";

        count_2<="";

        count_3<="";

        count_4<=""; ---公里清零

        elsif(clk1'event and clk1='1')then

        if(count_1="")then --公里计数器

        count_1<="";count_2<=count_2+1;temp2<='1';

        if(count_2="")then

        count_2<="";count_3<=count_3+'1';

        if(count_3="")then

        count_3<="";count_4<=count_4+'1';

        end if;

       end if;

        else

        count_1<=count_1+'1';temp2<='0';

        end if;

        end if;

        end process;

        end rt1;

       4.输出模块

       å®žçŽ°æ‰€æœ‰æ•°æ®çš„输出,元件框图6如下:

       å›¾6 输出模块框图

       æºç¨‹åºå¦‚下:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity shuchu is

       port(y: in std_logic_vector(3 downto 0);

        e: out std_logic_vector(6 downto 0));

       end shuchu;

       architecture rt1of shuchu is

       begin

       process

       begin

        case y is

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when""=>e<="";

        when others=>e<="";

        end case;

       end process;

       end rt1;

       5.显示模块

       å®žçŽ°æ‰€æœ‰æ•°æ®çš„显示,元件框图7如下:

       å›¾7 显示模块框图

       æºç¨‹åºå¦‚下:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity xianshi is

       port(start: in std_logic;

       a:in std_logic_vector(3 downto 0); --选择信号

        c1,c2,c3,c4,out1,out2,out3,out4:in std_logic_vector(3 downto 0); --里程显示,时间显示输入

        y:out std_logic_vector(3 downto 0)); --里程显示,时间显示输出

       end xianshi;

       architecture rt1 of xianshi is

       begin

       process

       begin

        if(start='0')then

        y<="";

        else case a is

        when ""=> y<=c1 ;

        when ""=> y<=c2 ;

        when ""=> y<=c3 ;

        when ""=> y<=c4 ;

        when ""=> y<=out1 ;

        when ""=> y<=out2;

        when ""=> y<=out3 ;

        when ""=> y<=out4;

        when others =>y<= "";

        end case;

        end if;

       end process;

       end rt1;

       6.dian模块

       å›¾8 dian模块框图

       æºç¨‹åºå¦‚下:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity dian is

       port(a: in std_logic_vector(3 downto 0);

        e: out std_logic);

       end dian;

       architecture rt1 of dian is

       begin

       process

       begin

        case a is

        when ""=>e<='1';

        when ""=>e<='1';

        when others=>e<='0';

        end case;

       end process;

       end rt1;

       ä¸‰ã€ä¸­å„个模块设计分析

       ç³»ç»Ÿæ€»ä½“顶层框图如下:

       ç³»ç»Ÿæ€»ä½“顶层框图

       ç¨‹åºæœ€ç»ˆåŠŸèƒ½å®žçŽ°æ³¢å½¢ä»¿çœŸ

       1. 分频模块

       ç”±äºŽå®žéªŒç®±ä¸Šæ²¡æœ‰hz和hz的整数倍时钟信号,因此采用频率较大的khz进行分频,以近似得到hz,hz和1hz的时钟频率。通过以上三种不同频率的脉冲信号实行出租车行驶,等待两种情况下的不同计费。模块元件如下:

        分频模块框图

       æºç¨‹åºå¦‚下:

       Library IEEE;

       use IEEE.std_logic_.all;

       use IEEE.std_logic_arith.all;

       use IEEE.std_logic_unsigned.all;

        entity fenpin is

       port(clk_k:in std_logic; --系统时钟

        clk_:buffer std_logic; --分频

        clk_:buffer std_logic; --分频

        clk_1 : buffer std_logic); --1分频

       end fenpin ;

       architecture rt1 of fenpin is

       signal q_:integer range 0 to ; --定义中间信号量

       signal q_:integer range 0 to ;

       signal q_1:integer range 0 to ;

        begin

        process(clk_k)

        begin

       If(clk_k' event and clk_k='1')then

       If q_= then q_<=0;clk_<=not clk_;

        else q_<=q_+1;

        end if; --得hz频率信号

       If q_= then q_<=0;clk_<=not clk_;

        else q_<=q_+1;

        end if; --得hz频率信号

       If q_1= then q_1<=0;clk_1<=not clk_1;

        else q_1<=q_1+1;

        end if; --得1hz频率信号

       end if;

       end process;

        end rt1;

       2. 计量模块

       è®¡é‡æ¨¡å—主要完成计时和计程功能。

       è®¡æ—¶éƒ¨åˆ†ï¼šè®¡ç®—乘客的等待累积时间,当等待时间大于2min时,本模块中en1使能信号变为1;当clk1每来一个上升沿,计时器就自增1,计时器的量程为min,满量程后自动归零。

       è®¡ç¨‹éƒ¨åˆ†ï¼šè®¡ç®—乘客所行驶的公里数,当行驶里程大于2km时,本模块中en0使能信号变为1;当clk每来一个上升沿,计程器就自增1,计程器的量程为km,满量程后自动归零。

       å…ƒä»¶æ¡†å›¾ä¸ºï¼š

       è®¡é‡æ¨¡å—框图

       è®¡é‡æ¨¡å—仿真波形为:

       æºç¨‹åºå¦‚下:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_arith.all;

       use ieee.std_logic_unsigned.all;

       entity jiliang is

       port(start:in std_logic; --计费开始信号

        fin:in std_logic; --里程脉冲信号

        stop:in std_logic; --行驶中途等待信号

        clk1:in std_logic; --驱动脉冲

        en1,en0:buffer std_logic; --计费单价使能信号

        k1,k0:buffer std_logic_vector(3 downto 0); --行驶公里计数

        m1,m0:buffer std_logic_vector(3 downto 0)); --等待时间计数

       end jiliang;

       architecture rt2 of jiliang is

       signal w:integer range 0 to ; --计时范围0~

       begin

       process(clk1)

       begin

       if(clk1'event and clk1='1')then

        if start='0' then

        w<=0;en1<='0';en0<='0';m1<="";

        m0<="";k1<="";k0<="";

       elsif stop='1' then --计时开始信号

        if w= then

        w<=0;

        else w<=w+1;

       end if;

       if m0="" then

        m0<="";

       if m1="" then

        m1<="";

       else m1<=m1+1;

       end if;

       else m0<=m0+1;

       end if;

       if stop='1' then en0<='0';

       if m1&m0>"" then en1<='1'; --若等待时间大于2min则en1ç½®1

       else en1<='0';

       end if;

       end if;

       elsif fin='1' then --里程计数开始

       if k0="" then k0<="";

       if k1="" then k1<=""; --计程范围0~

       else k1<=k1+1;

       end if;

       else k0<=k0+1;

       end if;

       if stop='0' then

       en1<='0';

       if k1&k0>"" then

       en0<='1'; --若行使里程大于2km,则en0ç½®1

       else en0<='0';

       end if;

       end if;

       end if;

       end if;

       end process;

       end rt2;

       3. 控制模块

        本模块主要是通过计量模块产生的两个不同的输入使能信号en0,en1,对每个分频模块输出的hz,hz的脉冲进行选择输出的过程;本模块实现了双脉冲的二选一;最终目的为了计费模块中对行驶过程中不同的时段进行计价。

       æ¨¡å—元件如下:

       æŽ§åˆ¶æ¨¡å—框图

       æŽ§åˆ¶æ¨¡å—仿真波形为:

       æºç¨‹åºå¦‚下:

       Library IEEE;

       use IEEE.std_logic_.all;

       use IEEE.std_logic_arith.all;

       use IEEE.std_logic_unsigned.all;

        entity kongzhi is

       port(en0,en1:in std_logic; --使能选择信号

        clk_in1:in std_logic; --分频输入信号

        clk_in2:in std_logic; --分频输入信号

        clk_out:out std_logic); --输出信号

        end kongzhi;

        architecture rt3 of kongzhi is

       begin

       process(en0,en1)

       begin

        if en0='1' then --实现二选一功能

        clk_out<=clk_in1;

        elsif en1='1' then

        clk_out<=clk_in2;

        end if;

        end process;

       end rt3;

       4.计费模块

        当计费信号start一直处于高电平即计费状态时,本模块根据控制模块选择出的信号从而对不同的单价时段进行计费。即行程在2km内,而且等待累计时间小于2min则为起步价5元;2km外以每公里1.4.元计费,等待累积时间超过2min则按每分钟1.3元计费。c0,c1,c2,c3分别表示费用的显示。

       æ¨¡å—元件为:

       è®¡è´¹æ¨¡å—框图

       è®¡è´¹æ¨¡å—仿真波形为:

       æºç¨‹åºå¦‚下:

       Library IEEE;

       use IEEE.std_logic_.all;

       use IEEE.std_logic_arith.all;

       use IEEE.std_logic_unsigned.all;

       entity jifei is

       port(clk2:in std_logic; --计费驱动信号

        start:in std_logic; --计费开始信号

        c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));

       end jifei;

       architecture rt4 of jifei is

       begin

       process(clk2,start)

       begin

        if start='0'then c3<="";c2<="";c1<="";c0<=""; --起步价5元

        elsif clk2'event and clk2='1'then

        if c0="" then c0<="";

        if c1="" then c1<="";

        if c2="" then c2<="";

        if c3="" then c3<=""; --计价范围0~.9

        else c3<=c3+1;

        end if;

        else c2<=c2+1;

        end if;

        else c1<=c1+1;

        end if;

        else c0<=c0+1;

        end if;

       end if;

       end process;

       end rt4;

       5.显示模块

        显示模块完成计价,计时和计程数据显示。计费数据送入显示模块进行译码,最后送至以百元,十元,元,角为单位对应的数码管上显示。计时数据送入显示模块进行译码,最后送至以分为单位对应的数码管上显示。计程数据送入显示模块进行译码,最后送至以km为单位的数码管上显示。

        模块元件为:

        显示模块框图

       æºç¨‹åºå¦‚下:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all; --定义库包

       entity xianshi is --定义实体

       port(

        clk_scan:in std_logic; --扫描时钟信号端口设置

        c3,c2,c1,c0:in std_logic_vector(3 downto 0); --总费用输入端口

        k0,k1:in std_logic_vector(3 downto 0); --里程输入端口

        m0,m1:in std_logic_vector(3 downto 0); --等待时间输入端口

        sel:out std_logic_vector(2 downto 0); --控制数码管位选信号的扫描信号输出端口

        led:out std_logic_vector(6 downto 0); --数码管的控制端口

        led_dp:out std_logic --数码管的小数点输出端口

        );

       end xianshi;

       architecture rt5 of xianshi is

       signal duan:std_logic_vector(6 downto 0); --数码显示管中间变量

       signal shuju:std_logic_vector(3 downto 0); --选择输入端的中间变量

       signal cnt:std_logic_vector(2 downto 0); --控制数码管的中间变量

       signal xiaodian:std_logic; --小数点的中间变量

       begin

       process(clk_scan) --开始进程

       begin

        if clk_scan'event and clk_scan='1' then

        cnt<=cnt+1; --每有一个扫描信号上升沿实现加1扫描

        end if;

       end process; --结束进程

       process(cnt) --开始进程(选择扫描显示数码管)

       begin

        case cnt is --扫描时给每个数码管赋值

        when ""=>shuju<=c0;

        when ""=>shuju<=c1;

        when ""=>shuju<=c2;

        when ""=>shuju<=c3;

        when ""=>shuju<=k0;

        when ""=>shuju<=k1;

        when ""=>shuju<=m0;

        when ""=>shuju<=m1;

        when others=> null;

        end case;

        if (cnt="" or cnt="")

        then xiaodian<='1'; --在里程和总费用的个位处显示小数点

        else xiaodian<='0';

        end if;

       end process; --结束进程

       process(shuju) --开始进程(译码显示)

       begin

        case shuju is

        when ""=>duan<=""; --0

        when ""=>duan<=""; --1

        when ""=>duan<=""; --2

        when ""=>duan<=""; --3

        when ""=>duan<=""; --4

        when ""=>duan<=""; --5

        when ""=>duan<=""; --6

        when ""=>duan<=""; --7

        when ""=>duan<=""; --8

        when ""=>duan<=""; --9

        when others=>null;

        end case;

       end process;

       sel<=cnt;

       led<=duan;

       led_dp<=xiaodian;

       end rt5;

       äºŒã€è¯¾ç¨‹è®¾è®¡å·¥ä½œè®°å½•ï¼š

       åŒ…括:设计步骤与时间安排、调试步骤与时间安排、课题完成结果说明

       2.课题完成结果说明:

       æ­¤è®¡è´¹å™¨èƒ½å®žçŽ°èµ·æ­¥ä»·æ˜¯5元;实现实验要求的1公里计费一次单价,行驶公里大于2km时每公里按1.4元计费并能显示里程和总共的费用。当行驶了6公里,等待了4分钟时,费用显示为.8元。与计算公式总费用=起步费用+(里程-2公里)*里程单价+等候时间*等后单价;即.8=5+(6-2)*1.4+4*1.3。实验结果与理论结果完全一致,实验设计成功。

出租车计价器

       ä¸€ã€é¢˜ç›®ï¼šA题 设计并制作一个用于出租车的计费系统。

       äºŒã€è®¾è®¡è¦æ±‚

       1、基本要求:

       ï¼ˆ1)制作一个模拟车轮用直流电动机(或步进电机)驱动,现场模拟以下运行情况的收费情况:

       u 假设车轮的周长为一米。

       u 起步价为三公里五元,白天每公里三元,晚上每公里四元。

       u 运行五公里之后,停三分钟,再运行五公里之后乘客下车,由于演示的时间的需要,途中停车超过一分钟开始收费,超过的时间每分钟一元。

       ï¼ˆ2)能够手动修改单价。

       ï¼ˆ3)具有数据的复位功能。

       ï¼ˆ5)数据输出

       u 单价输出 至少2位

       u 路程输出 至少2位

       u 总金额输出 至少3位

       2、发挥部分:

       ï¼ˆ1)能够在掉电的情况下存储单价等数据。

       ï¼ˆ2)能够显示、调节当前的系统时间,并根据当前的系统时间进行计费(6时至时为白天,时至第二天6时为晚上)。

       ï¼ˆ3)有语音报价功能。

       1.2 方案比较与论证

       1.2.1控制器模块

       æ–¹æ¡ˆä¸€ï¼šé‡‡ç”¨å¯ç¼–程逻辑器件CPLD 作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑我们放弃了此方案。

       æ–¹æ¡ˆäºŒï¼šé‡‡ç”¨å‡Œé˜³å…¬å¸çš„位单片机,它是位控制器,具有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点。处理速度高,尤其适用于语音处理和识别等领域,采用此单片机能够很方便的实现发挥部分的语音报价功能,但此单片机较难买到,而且价格稍贵,故放弃了此方案。

       æ–¹æ¡ˆä¸‰ï¼šé‡‡ç”¨Atmel公司的ATS单片机作为主控制器,此单片机是内核的CMOS 8位单片机,片内含8k空间的可反复擦些次的Flash读写存储器,具有 bytes的随机存取数据存储器(RAM),个IO口,你知道厂房装修合同样板。2个位可编程定时计数器。其价格低廉,非常适合用于小系统的开发,开采用ISP在线编程,程序的下载和修改也很方便。题目所要求的系统对控制器的要求不高,我们综合多方面考虑选用了此方案。

       1.2.2车轮转速探测模块

       æ–¹æ¡ˆä¸€ï¼šç”¨å…‰æ•ç”µé˜»ç»„成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到车轮码盘的白色部分时,光线发射强烈,光线照射到车轮码盘的黑色部分时,光线发射较弱。因此光敏电阻在白色部分和黑色部分上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。此方案易受外界光线的干扰。

       æ–¹æ¡ˆäºŒï¼šé‡‡ç”¨éœå°”传感器最为探测器件,霍尔传感器的两部分分别安装在车轮和固定电路板上,根据车轮转动时将变化的磁场强度转换为脉冲电信号,此方案能够使对车轮计数精确,工作稳定,但成本较高。

       æ–¹æ¡ˆä¸‰ï¼šé‡‡ç”¨çº¢å¤–对管,当红外发射管发射出的红外线照到码盘的白色部分和黑色部分时,其反射的红外线强度不同,通过红外接收管接收后经电压比较器LM比较后即可输出高低电平。此方案成本低,容易实现,且灵敏度较高。

       æ ¹æ®æœ¬ç³»ç»Ÿçš„设计要求,对车轮转速的探测受外界的干扰较小,而采用采用红外对管工作电路简单,调试方便,所以我们选择此方案。

       1.2.3时钟控制模块

       æ–¹æ¡ˆä¸€ï¼šé‡‡ç”¨.MHz的晶振产生震荡后经多个LS进行次2分频,产生精确的秒信号,自行搭建时间电路。此方案具有较好的原创性,但电路搭建起来较为复杂,工作不够稳定,也不方便调节。

       æ–¹æ¡ˆäºŒï¼šç›´æŽ¥é‡‡ç”¨å•ç‰‡æœºå†…部的时钟信号。这样能够大大简化硬件的设计,但断电后不能工作,而且大量占用单片机有限的内存资源。

       æ–¹æ¡ˆä¸‰ï¼šé‡‡ç”¨DS专用时钟芯片。DS是功能强大的实时时钟芯片,内置锂电池,内置晶振。提供二进制数和BCD码两种数据表示方式。可切换小时制和小时制时间表示。具有闹钟功能。可编程方波输出。提供字节非易失存储空间,用于断电保存数据。

       ç”±äºŽæœ¬ç³»ç»Ÿçš„很多功能都是基于时间的基础上实现的,因此对时钟的要求较高,故我们选择方案三。

       1.2.4显示模块

       æ–¹æ¡ˆä¸€ï¼šç”¨æ•°ç ç®¡è¿›è¡Œæ˜¾ç¤ºã€‚数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用,但显示的内容仅仅局限于数字,人机界面不够友好因此我们放弃了此方案。

       æ–¹æ¡ˆäºŒï¼šç”¨LCD液晶进行显示。LCD由于其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速而得到了广泛的应用。由于本此系统需要显示的内容较多,为达到较好的人机交互界面,我们选择了此方案。

       1.3最终选择方案

       u 采用ATS单片机作为主控制器。

       u 采用红外对管+LM作为车轮转速探测模块。

       u 采用DS作为实时时钟控制芯片。

       u 采用LCD液晶作为显示模块。

       u 采用普通的直流电机和自制的车轮及码盘作为模拟车轮。

       1.4系统结构图

       æŒ‰é”®ï¼š

       çº¢å¤–感应模块

       MCU

       ATS

       DS系统时间,断电保存数据

       LCD液晶显示

       æ¨¡æ‹Ÿè½¦è½®

       å›¾1 系统结构框架

       ç¬¬äºŒç« :各部分电路原理与设计

       2.1单片机主控模块的设计

       Atmel公司的ATS是内核的单片机。不用烧写器而只用串口或者并口就可以往单片机中下载程序。

       æˆ‘们所设计的单片机最小系统板采用的双龙公司的并口下载标准,且在板上留有下载线插座,这样可以非常方便的实现通过PC机的并口往单片机中下载程序。同时将稳压电源部分也附在其上,经过稳压后的+5V电源为除电机外的其他系统模块提供工作电源。

       å•ç‰‡æœºæŽ§åˆ¶æ¨¡å—的示意图如图9所示:

       å›¾2 单片机主控模块

       å•ç‰‡æœºçš„I/O口分配如下:

       P0,P2.5~P2.7 LCD模块

       P1,P2.0~P2.3,P3.3 实时时钟模块

       P3.0~P3.1,P3.5~P3.7 按键开关

       P3.2 红外探测模块

       2.2红外探测模块的设计

       æˆ‘们通过将红外接收二极管的不同压降与基准电压送入电压比较器LM进行比较,输出对应的高低电平信号,送到单片机进行处理。其电路原理图如下:

       å›¾3 红外探测模块

       åœ¨å›¾3中,可调电阻RW可以调节比较器的门限电压,经示波器观察,输出波形相当规则,可以直接够单片机查询使用。

       ç”±äºŽæˆ‘们的码盘采用二分法进行设计,黑白两种颜色各占原周的一半,因此单片机每接收到一个高电平信号则模拟车轮转了一圈,通过计算每秒钟单片机接收到的高电平信号个数即可方便的计算出车轮的速度和所走的里程。

       2.3模拟车轮的设计

       å°è½¦çš„速度和里程的测量是通过光电对管检测码盘实现的。我们采用普通的直流电机和玩具车的车轮,自制码盘,做成模拟车轮,供测量用。

       è€ƒè™‘到电机运行时对电压的干扰,电机的电源直接由输入的未经过稳压的电源提供,试用期解除劳动合同。并设立独立的开关,有人工控制,这样更符合实际的工作情况。

       ä¸ºé˜²æ­¢å…‰ç”µç®¡äº§ç”Ÿè¯¯åŠ¨ä½œï¼Œæˆ‘们将光电码盘分为2份黑白相间的圆盘,每份各占圆周的一半,如图4:

       å›¾4 模拟车轮码盘

       å°†å…¶ç´§è´´åœ¨è½¦è½®çš„内侧。在封装盒右侧打一个方孔,红外对管通过方孔对光电码盘进行检测就可以得到车轮转过的圈数。从而计算出小车前进的路程。

       æœ¬ç³»ç»Ÿå‡è®¾è½¦è½®çš„周长为1米,假设单片机每秒检测到黑白信号的变化为n,共走了k秒则小车走过的路程为S=nk米。

       2.4实时时钟控制模块的设计

       æˆ‘们采用的DS功能强大,内置锂电池,内置晶振,可以作为实时电子钟,为整个系统提供时钟,很好地解决了题目发挥部分“能够显示、调节当前的系统时间,并根据当前的系统时间进行计费(6时至时为白天,时至第二天6时为晚上)”的要求。同时利用其闹钟功能对探测信号进行采样,精确的计算出车速。由于芯片还提供字节非易失存储空间,因此我们将题目要求的各种价格的设置方便的保存在里面,达到断电保存数据的功能。

       å›¾5 时钟模块电路图

       2.5人机交互界面的设计

       ä¸ºä½¿ç³»ç»Ÿæœ‰æ›´è‰¯å¥½çš„人机交互界面,我们将LCD液晶显示模块,操作按键,系统复位开关和车轮控制开关集中于封装盒的面板上,方便用户操作,如下图:

       å›¾6 人机交互界面

       2.6系统总体电路图

       å›¾7 系统总电路图

       å›¾8 系统装箱后的内部实物图

       ç¬¬ä¸‰ç« ï¼šç³»ç»Ÿç¨‹åºè®¾è®¡

       3.1系统程序所实现的功能

       u 实时显示总金额,总里程,车速,已走过时间,系统时间。

       u 可在线修改系统时间。

       u 可修改起步价及起步距离。

       u 可修改每超过一公里加收费用。

       u 可修改途中停车超过时间开始收费的时间及单价。

       3.2程序任务分配

       è¡¨1 程序任务分配

       å¤–部中断0(来自车轮)

       å¤–部中断1(来自时钟)

       ä¸»å‡½æ•°

       æ›´æ–°è·¯ç¨‹ï¼ŒåŠ æ€»ä»·ï¼Œå¤ä½è®¡æ—¶å™¨ï¼Œå¦‚果显示屏使用权在INT0,就更新显示。

       æ˜¾ç¤ºå±ä½¿ç”¨æƒç”¨screen变量表示。

       è®¡ç®—速度,计算行车时间,计时并在停车超时后加钱。根据显示屏使用权判断是否更新显示。

       æ ¹æ®real_time变量的值决定是否把系统时间更新到屏幕上。

       è¯»å–按键。决定控制逻辑。

       3.3主程序流程图

       å¼€å§‹

       åˆå§‹åŒ–LCD、实时时钟

       ä»Žå­˜å‚¨å™¨è¯»å‡ºå•ä»·ç­‰æ•°æ®

       æ˜¾ç¤ºlogo

       ä»»æ„é”®

       ç©ºé—²çŠ¶æ€ï¼Œæ˜¾ç¤ºç³»ç»Ÿæ—¶é—´

       æœ‰é”®æŒ‰ä¸‹

       ç©ºé—²çŠ¶æ€

       è®¡è´¹çŠ¶æ€

       è®¾ç½®é”®?

       N

       Y

       è®¾ç½®

       ç­‰å¾…按键

       æ˜¯2键?

       N

       Y

       åˆå§‹åŒ–计费屏幕,进入计费状态

       æ˜¯3键

       Y

       æŸ¥çœ‹ç³»ç»Ÿæ—¶é—´ï¼Œå»¶æ—¶4秒

       N

       æ˜¯4键?

       Y

       åœæ­¢è®¡è´¹ï¼Œè¿›å…¥ç©ºé—²çŠ¶æ€

       N

       æŒ‰ä¸‹2键复位

       3.4各数据在中存储地址

       è¡¨2 各数据在中存储地址

       åœ°å€

       å˜é‡

       åŠŸèƒ½

       0x0e

       d

       //起步价 d 公里 p 角

       0x0f

       p

       0x

       day_price

       //白天每公里价格,单位:角

       0x

       night_price

       //夜晚每公里价格,单位:角

       0x

       x

       //中途停车超过y分钟之后按x角每分钟计价

       0x

       y

       3.5中断服务0程序流程图

       è§¦å‘中断

       è·¯ç¨‹åŠ ä¸€ç±³

       å…è®¸ä½¿ç”¨æ˜¾ç¤ºå±?

       è®¡æ—¶å™¨å¤ä½

       è·¯ç¨‹ï¼ï¼èµ·æ­¥è·¯ç¨‹ï¼Ÿ

       è·¯ç¨‹>起步路程?

       Y

       N

       Y

       æ›´æ–°è·¯ç¨‹æ˜¾ç¤º

       å‘总金额加上公里价

       N

       æ›´æ–°æ€»é‡‘额显示

       Y

       N

       Y

       å…¬é‡Œè®¡ç¨‹å™¨å¤ä½

       ä¸­æ–­2服务程序的timer_state和timer_count变量

       counter_变量

       å…¬é‡Œè®¡ç¨‹å™¨åŠ 1

       å…¬é‡Œè®¡ç¨‹å™¨ï¼ï¼?

       ç»“束

       N

       Y

       å‘总金额加上公里价

       å…è®¸ä½¿ç”¨æ˜¾ç¤ºå±?

       æ›´æ–°æ€»é‡‘额显示

       Y

       N

       å…¬é‡Œè®¡ç¨‹å™¨å¤ä½

       0号中断服务程序:

       è½¦è½®è½¬åŠ¨ä¸€åœˆè§¦å‘一次

       3.6 中断服务2程序流程图

       è§¦å‘中断

       ç³»ç»Ÿåœ¨è®¡è´¹çŠ¶æ€ï¼Ÿ

       Y

       N

       éœ€è¦åŒæ­¥æ—¶é—´ï¼Ÿ

       Y

       N

       ç»“束

       é€Ÿåº¦=现在的路程—一秒之前的路程

       è¡Œè½¦æ—¶é—´åŠ ä¸€ç§’

       è®¡æ—¶å™¨åŠ ä¸€ç§’

       è®¡æ—¶ç­‰äºŽæœ€å¤§åœè½¦æ—¶é—´ï¼Ÿ

       N

       æ€»é‡‘额加每分钟价

       è¿›å…¥åœè½¦è¶…时状态

       Y

       åœè½¦è¶…时状态?

       Y

       æ¯åˆ†é’ŸåŠ é’±

       N

       å°†ç³»ç»Ÿæ—¶é—´å’Œæ—¥æœŸåŒæ­¥åˆ°å±å¹•ä¸Š

       2号中断服务程序:

       æ¯ç§’钟触发一次

       ç¬¬å››ç« :系统调试结果与分析

       4.1调试方法与仪器

       è¡¨3 测试仪器设备清单

       ä»ªå™¨åç§°

       åž‹å·

       ç”¨é€”

       æ•°é‡

       PC机

       è”想

       è°ƒè¯•åŠä¸‹è½½ç¨‹åº

       1

       æ•°å­—万用表

       UNI-TA

       æµ‹é‡å„电路工作情况

       1

       ç§’表

       è®°å½•æ—¶é—´

       1

       ç›´æµç¨³åŽ‹ç”µæº

       ALKIMIA

       æä¾›ç”µæº

       1

       4.2调试步骤与测试数据

       4.2.1系统时间与秒表实际时间测量

       å¼€æœºåŽæŒ‰â€œå¼€å§‹â€é”®è¿›å…¥è®¡æ—¶å·¥ä½œçŠ¶æ€ï¼ŒåŒæ—¶å¯åŠ¨ç§’表进行及时对比,分别对工作时间为1分钟,2分钟,3分钟,4分钟,5分钟进行测量比较,结果如表2

       è¡¨4 系统时间测试比较

       æµ‹è¯•æ—¶é—´

       ç³»ç»Ÿæ˜¾ç¤ºæ—¶é—´

       ç§’表测量时间

       s

       s

       .s

       s

       s

       .s

       s

       s

       .s

       s

       s

       .s

       s

       s

       .s

       4.2..2车轮转速测试

       æœ¬ç³»ç»Ÿçš„设计对探测信号的下降沿进行触发,因此当红外对管探测到的码盘从白色转为黑色时,单片机中断触发,计数器加一。

       å¯åŠ¨è®¡è´¹ç³»ç»Ÿï¼ŒåŒæ—¶æ‰‹å·¥è½¬åŠ¨è½¦è½®ä¸€å‘¨ï¼Œæ˜¾ç¤ºå±ä¸Šè·¯ç¨‹æ˜¾ç¤º1m,在转动车轮几圈,LCD的显示数值均与实际相符。

       4.2.3计费系统测试

       è¡¨5 不同情况下的计费结果测试

       è®¡è´¹æ—¶é—´æ®µ

       è¡Œé©¶é‡Œç¨‹

       è¡Œé©¶æ—¶é—´

       ä¸­é€”停车时间

       è®¡è´¹ä»·æ ¼

       ç™½å¤©

       m

       s

       0

       5.0元

       ç™½å¤©

       m

       s

       0

       .0元

       æ™šä¸Š

       m

       s

       0

       .0元

       æ™šä¸Š

       m

       s

       s

       .0元

       4.2.4数据设定及断电储存功能

       åœ¨å¾…机状态下按“设置”键,分别修改起步价4km内8元,白天每公里5元,晚上每公里7元,修改系统时间,然后保存,关机,断开电源,等待5分钟之后重新开机,发现数据为修改后的数据,即数据的设定及断电储存功能有效。

       4.3测试结果分析

       é€šè¿‡è°ƒè¯•å’Œç³»ç»Ÿæµ‹è¯•ï¼Œå‘现系统能很好地实现预期的目的,实现了除语音功能外的其他所有功能,工作性能稳定,计费精确。系统时间实时运行,准确,里程的显示误差在1m以内。很好的完成了赛题的要求。

       ç¬¬äº”章:系统性能总结及特点

       5.1 实现基本要求功能

       è¡¨4 基本功能的实现情况

       åŸºæœ¬è¦æ±‚功能

       åŠŸèƒ½å®žçŽ°æƒ…况

       åŸºæœ¬è¦æ±‚第(1)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(2)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(3)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(4)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(5)项

       å®žçŽ°

       5.2 实现发挥部分功能

       è¡¨5 发挥功能的实现情况

       å‘挥要求功能

       åŠŸèƒ½å®žçŽ°æƒ…况

       å‘挥要求第(1)项

       å®žçŽ°

       å‘挥要求第(2)项

       å®žçŽ°

       å‘挥要求第(3)项

       æœªå®žçŽ°

       5.3 增加的其他功能

       u 与计费系统相关的所有参数用户均可修改并储存。

       u 兼有万年历和数字电子钟功能。

       u 一体化人机交互界面控制面板,硬件系装箱,提高机械强度,安全性能和美观度。

       ç¬¬å…­ç« ï¼šé™„录

       é™„录一 系统程序源代码

       /