北邮数电综合实验报告._第1页
北邮数电综合实验报告._第2页
北邮数电综合实验报告._第3页
北邮数电综合实验报告._第4页
北邮数电综合实验报告._第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电路与逻辑设计实验 题目: 简易出租车计价器 学号: 姓名: 班级: 学院: 时间:2013/11/4一 设计课题的任务要求设计一台出租车计价器,不同情况具有不同的收费标准。基本要求:1、行驶公里: 用时钟 2 秒钟表示出租车匀速行驶1 公里,在行车5 公里以内,按起步价13 元收费,超过5 公里部分,以每公里2 元收费。燃油附加费为每运次1 元。2、途中等待:用按键控制中途等待,等待少于(包括)5 秒不收费,超过5 秒后每等待3 秒钟加收1 元。3、用数码管分时显示计费金额、行驶里程和等候时间。字母A 表示当前处于显示计费金额状态,字母B 表示当前处于显示行驶里程状态,字母C 表示当前处

2、于显示等候时间状态。4、用按键控制出租车空驶、载客状态并用点阵显示空驶、载客状态。二、系统设计(包括设计思路、总体框图、分块设计)1、设计思路: 将整个计价器分为控制和计费模块,按键及防抖模块,数码管显示模块,点阵显示模块。其中控制和计费模块作为系统核心,负责给出所有控制和对外显示信号。按键及防抖模块提供输入按键信号,用于状态间切换。数码管用于显示计费金额、里程和等待时间信息。点阵模块用于显示出租车载客和空驶状态。2、设计框图:3、分块设计控制和计费模块:采用状态机的设计方式,根据计费计时方式的不同,分为了S0、S1、S2、S3四个状态,四个状态的含义和状态转移图如图所示:S0等待开始S1行驶

3、S2等待S3停车付费按键防抖模块:如图:按键防抖模块的原理是利用信号延迟,每个防抖模块都有一个输入时钟,每按下一次按键后输出端将产生一个输入时钟宽度的脉冲,输入时钟频率与主控模块中的状态切换扫描时钟频率相同,使状态能够及时的切换。点阵显示模块:点阵模块主要用于显示出租车的空载和载客状态。空载时显示汉字“空”,载客时显示标志“X”。输出信号lie和com分别连接到点阵控制的行和列。En是由计费控制模块给出的空载/载客信号。数码管显示模块数码管主要用于显示计费、里程、等待时间信息。clk_shu连接1kHz时钟扫描信号,s0s6用于接收计费控制模块输出的各个数码管显示的数字。Weixuan和dua

4、nxuan控制数码管的位选和段选信号。时钟分频模块将50MHz片上时钟分频为1Hz、1kHz、200Hz时钟信号,其中1Hz用于计费和计时。200Hz用于按键防抖和状态切换。1kHz用于数码管和点阵的扫描。三、仿真波形及波形分析数码管显示模块:下图是固定s0s6为数字951413后的仿真波形,由于S1位在程序中没有用到,于是将其始终置为高电平(灭),实际输出应为9 1413。如图所示:weixuan信号每隔6个时钟周期扫描一次,扫描频率为166Hz足以使人眼产生连续显示的感觉。观察duanxuan信号,在圆圈处应显示数字“1”,duanxuan为0000110正是“1”的段选码。说明数码管能将

5、s0s6传输的数字正确的显示。按键防抖模块如图,keyin输入一个持续时间约为0.1s的按键信号并用高频时钟模拟抖动,keyout输出一个时钟周期(5ms)的高电平。时钟分频模块:由于分频比例太高,仿真到1s需要花费大量时间,故只仿真到20ms,观察1kHz和200Hz信号如下:点阵显示模块:将en置高电平,输出应为X,如图,显示正确。计费计时模块:等待模式:如图在2S和3S间分别按start-stop和pause进入s2模式,初始计费为14(起步费+燃油费),2s(即等待3s)后计费变为15。而在切换至s1后outen信号置高电平使点阵显示“X”。结束和清零:如图,再次按Start-stop

6、后停止计费,按clear后计时计费清零行驶状态:5s内为14元,之后每2s 加2元,计费正常。四、源程序计费和控制模块:Mytaxi.vhdlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity mytaxi isport ( signal clk1k,clk1,clk5ms:in std_logic; -频率为1kHz,1Hz,5ms的信号 start_stop:in std_logic; -开始-结束信号 pause:in std

7、_logic; -等待-重新行驶信号 clear:in std_logic; -清零信号 t0:out integer range 0 to 13; -与数码管连接 t1:out integer range 0 to 13; t2:out integer range 0 to 9; t3:out integer range 0 to 9; t4:out integer range 0 to 9; t5:out integer range 0 to 9; outen:out std_logic);-点阵控制信号 end mytaxi; architecture behav of mytaxi i

8、ssignal sec1:integer range 0 to 5; -秒计数十位signal sec0:integer range 0 to 9; -秒计数个位signal m1:integer range 0 to 5; -分的十位计数器signal m0:integer range 0 to 9; -分的个位计数器signal c2,c1,c0:integer range 0 to 9; -费用计数器signal k2,k1,k0:integer range 0 to 9; -公里计数器signal v:integer range 0 to 5:=1; -车速signal fei:int

9、eger range 0 to 999;-费用计数器signal bai,shi,ge:integer range 0 to 9; -费用计数百位,十位,个位type state_type is (s0, s1, s2, s3); -状态列表signal state : state_type;beginprocess(clk5ms,start_stop,pause,clear) -状态切换进程begin if clear= '1' then state <= s0; elsif (rising_edge(clk5ms) thencase state iswhen s0=&

10、gt;if start_stop = '1' thenstate <= s1;else state <= s0;end if;when s1=> if start_stop='1' then state <= s3;elsif pause = '1' thenstate <= s2;elsestate <= s1;end if;when s2=>if start_stop = '1' thenstate <= s3;elsif pause = '1' thenstat

11、e <= s1;elsestate <= s2;end if;when s3=> if clear= '1' thenstate <= s0;elsestate <= s3;end if;end case;end if;end process;jishi:process(clk1) -计时,计费进程variable cntk:integer range 0 to 5;variable cntf1:integer range 0 to 5;variable cntf11:integer range 0 to 5;variable cntf2:inte

12、ger range 0 to 5;variable cntf22:integer range 0 to 2;variable cntx:integer range 0 to 6:=0;begin if clk1'event and clk1='1' then case state is when s2=> -等待模式 outen<='1' -点阵显示载客 if cntf2>4 then -等待超过5s进行计费if cntf22=2 then cntf22:=0; -每3s加1元fei<=fei+1; else cntf22:=cn

13、tf22+1;end if;else cntf2 :=cntf2+1;end if; if sec0=9 then sec0<=0; -此语句完成秒计数 if sec1=6 then sec1<=0; if m0=9 then m0<=0; -此语句完成分计数 if m1<=6 then m1<=0; else m1<=m1+1; end if; else m0<=m0+1; end if; else sec1<=sec1+1; end if; else sec0<=sec0+1;end if; bai<=fei/100; -将费用重

14、新计算成三位便于显示 shi<=(fei/10) mod 10; ge<=fei mod 10; when s1=> -行驶模式 outen<='1'-点阵显示载客 if cntk=v then cntk:=0; -2s一公里 if k0=9 then k0<=0; if k1=9 then k1<=0;if k2=9 then k2<=0; -公里计数else k2<=k2+1;end if;else k1<=k1+1;end if; else k0<=k0+1;fei<=fei+2; -每公里2元 end i

15、f; else cntk:=cntk+1; end if; if cntf1=v then cntf1:=0;if cntf11>4 then fei<=fei+2; -超过5公里开始计费else cntf11:=cntf11+1;end if; else cntf1:=cntf1+1; end if; bai<=fei/100; shi<=(fei/10) mod 10; ge<=fei mod 10; when s0=> -按下clear后各项数字清零 outen<='0' cntf1:=0;cntf11:=0;cntf2:=0;c

16、ntf22:=0;cntk:=0; fei<=14; bai<=0;shi<=0;ge<=0; sec1<=0;sec0<=0; m1<=0;m0<=0;k1<=0;k0<=0;k2<=0; when s3=> outen<='0' end case;if cntx=6 then cntx:=0;else cntx:=cntx+1;end if;case cntx is -数码管分时显示when 2=>t0<=10;t1<=0;t2<=0;t3<=bai;t4<=s

17、hi;t5<=ge;when 4=>t0<=11;t1<=0;t2<=0;t3<=k2;t4<=k1;t5<=k0;when 6=>t0<=12;t1<=0;t2<=m1;t3<=m0;t4<=sec1;t5<=sec0;when others=>t1<=0;end case; end if;end process jishi;end;数码管:shumaguan.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNS

18、IGNED.ALL;ENTITY shumaguan IS PORT(clk_shu:IN STD_LOGIC; -BUTTON:IN STD_LOGIC; s0:in integer range 0 to 13; -各个数码管的数字 s1:in integer range 0 to 13; s2:in integer range 0 to 9; s3:in integer range 0 to 9; s4:in integer range 0 to 9; s5:in integer range 0 to 9; weixuan:OUT STD_LOGIC_VECTOR(5 downto 0);

19、-位选 duanxuan:OUT STD_LOGIC_VECTOR(6 downto 0)段选 );END shumaguan;ARCHITECTURE ACE OF shumaguan ISSIGNAL CNT6:INTEGER RANGE 0 TO 5;SIGNAL C:integer range 0 to 13;BEGINP1:process(CNT6) BEGIN CASE CNT6 IS -位选扫描 WHEN 0 => weixuan <= "111110" ; WHEN 1 => weixuan<= "111111"

20、; WHEN 2 => weixuan<= "111011" ; WHEN 3 => weixuan<= "110111" ; WHEN 4 => weixuan<= "101111" ; WHEN 5 => weixuan<= "011111" ; WHEN OTHERS => NULL; END CASE ;END PROCESS P1;P2:process(clk_shu)BEGIN IF clk_shu'EVENT AND clk_shu= &#

21、39;1' THEN -实现模6计数器if CNT6= 5 then CNT6<= 0; else CNT6<=CNT6 + 1; end if; END IF; END PROCESS P2;P3:process(CNT6)begincase CNT6 iswhen 0=>C<=s0; -扫描到的数码管赋值when 1=>C<=s1;when 2=>C<=s2;when 3=>C<=s3;when 4=>C<=s4;when 5=>C<=s5;end case;end process P3;P4:pr

22、ocess(C)BEGIN CASE C IS -段选赋值 WHEN 0=> duanxuan<= "1111110" WHEN 1=> duanxuan <= "0110000" WHEN 2=> duanxuan <= "1101101" WHEN 3=> duanxuan <= "1111001" WHEN 4=> duanxuan <= "0110011" WHEN 5=> duanxuan <= "101

23、1011" WHEN 6=> duanxuan <= "1011111" WHEN 7=> duanxuan <= "1110000" WHEN 8=> duanxuan <= "1111111" WHEN 9=> duanxuan <= "1111011" WHEN 10=> duanxuan <= "1110111" WHEN 11=> duanxuan <= "0011111" WHEN

24、12=> duanxuan <= "0001101" WHEN OTHERS =>NULL ; END CASE ;END PROCESS P4; END ACE;分频:div50m.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div50m isport(clk_in : in std_logic; clk_out_1hz : out std_logic; clk_out_5ms : out std_logic; clk_out_1kh

25、z : out std_logic );end;architecture a of div50m issignal cnt : integer range 0 to 24999; signal cnt1: integer range 0 to 999; signal cnt2: integer range 0 to 5;signal clk_tmp1k : std_logic;signal clk_tmp1: std_logic;signal clk_tmp5ms: std_logic;beginprocess(clk_in)beginif (clk_in'event and clk_

26、in='1') then-分频到1kHzif cnt=24999 thencnt<=0;clk_tmp1k<= not clk_tmp1k;elsecnt<=cnt+1;end if;end if;end process;process(clk_tmp1k) -分频到1Hzbeginif (clk_tmp1k'event and clk_tmp1k='1') thenif cnt1=499 thencnt1<=0;clk_tmp1<= not clk_tmp1;elsecnt1<=cnt1+1;end if;end i

27、f;end process;process(clk_tmp1k) -分频到5msbeginif (clk_tmp1k'event and clk_tmp1k='1') thenif cnt2=4 thencnt2<=0;clk_tmp5ms<= not clk_tmp5ms;elsecnt2<=cnt2+1;end if;end if;end process;clk_out_1khz<=clk_tmp1k;clk_out_1hz<=clk_tmp1; clk_out_5ms<=clk_tmp5ms;end;防抖模块:fangdou.v

28、hdlibrary ieee;use ieee.std_logic_1164.all;entity fangdou isport(keyin,clk_fd:in std_logic;keyout:out std_logic);end;architecture b of fangdou issignal key_tmp0,key_tmp1,key_tmp2,key_tmp3:std_logic;begin process(clk_fd) begin if (clk_fd'event and clk_fd='1') then key_tmp0 <= keyin; ke

29、y_tmp1 <= key_tmp0; end if; end process;-利用信号赋值延时将前后信号相与完成防抖key_tmp2 <= key_tmp0 and key_tmp1; process( clk_fd ) begin if (clk_fd'event and clk_fd='1') then key_tmp3 <= key_tmp2; keyout <= not( key_tmp2 ) and key_tmp3; end if; end process; end; -时钟上升沿输出一个时钟周期宽度的脉冲点阵模块:peng.vh

30、dlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_Unsigned.all;use ieee.std_logic_ARITH.all;ENTITY peng isport(clkpeng,en:in std_logic; lie:out std_logic_vector(7 downto 0); -列 com:out std_logic_vector(7 downto 0);-行End peng;Architecture a of peng issignal st1:std_logic_vector(7 downto 0)

31、;signal data:std_logic_vector(7 downto 0);signal d0,d1,d2,d3,d4,d5,d6,d7:std_logic_vector(7 downto 0);signal e0,e1,e2,e3,e4,e5,e6,e7:std_logic_vector(7 downto 0);-signal lie0,lie1,lie2,lie3,lie4,lie5,lie6,lie7:std_logic_vector(7 downto 0);Begincom<=data;lie<=st1;d0<="00110000"-汉字“

32、空”d1<="01011001"d2<="01111001"d3<="11001111"d4<="11001111"d5<="01111001"d6<="01111001"d7<="00110000"e0<="10000001"-符号“X”e1<="01000010"e2<="00100100"e3<="00011000&

33、quot;e4<="00011000"e5<="00100100"e6<="01000010"e7<="10000001"second:process(clkpeng)begin if(clkpeng='1' and clkpeng'event )then逐行扫描,下同if en='0' thenif st1(7 downto 0)="00000000"or st1(7 downto 0)="01111111"t

34、hen st1(7 downto 0)<="11111110"data<=d0;elsif st1(7 downto 0)="11111110"then st1(7 downto 0)<="11111101"data<=d1;elsif st1(7 downto 0)="11111101"then st1(7 downto 0)<="11111011"data<=d2;elsif st1(7 downto 0)="11111011"then

35、 st1(7 downto 0)<="11110111"data<=d3;elsif st1(7 downto 0)="11110111"then st1(7 downto 0)<="11101111"data<=d4;elsif st1(7 downto 0)="11101111"then st1(7 downto 0)<="11011111"data<=d5;elsif st1(7 downto 0)="11011111"thenst1

36、(7 downto 0)<="10111111"data<=d6;elsif st1(7 downto 0)="10111111"thenst1(7 downto 0)<="01111111"data<=d7;end if;elseif st1(7 downto 0)="00000000"or st1(7 downto 0)="01111111"then st1(7 downto 0)<="11111110"data<=e0;elsif st1(7 downto 0)="11111110"then st1(7 downto 0)<="11111101"data<=e1;elsif st1(7 downto 0)="11111101"then st1(7 downto 0)<="11111011"data<=e2;elsif st1(7 downto 0)="11111011"then st1(7 downto 0)<="11110111"data<=e3;elsif s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论