课程设计内容与要求.docx
- 文档编号:30301380
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:20
- 大小:20KB
课程设计内容与要求.docx
《课程设计内容与要求.docx》由会员分享,可在线阅读,更多相关《课程设计内容与要求.docx(20页珍藏版)》请在冰豆网上搜索。
课程设计内容与要求
课程设计内容与要求
1,用开关按键表示脉冲,每个脉冲代表100米,10个脉冲1公里,每公里1.4元,能同步显示里程和费用;
2,低于2公里5元计费,高于2公里总费用=起步费用+(里程-2公里)*里程单价+
等候时间*等后单价;
3,等候时间大于2分钟,按每分钟1.3元计费;
4,可以设定起步价和里程单价。
一、设计原理与技术方法:
包括:
电路工作原理分析与原理图、元器件选择与参数计算、电路调试方法与结果说明;
软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。
根据设计要求,系统的输入信号clk,计价开始信号start,等待信号stop,里程脉冲信号fin。
系统的输出信号有:
总费用数C0—c3,行驶距离k0—k1,等待时间m0—m1等。
系统有两个脉冲输入信号clk_750k,fin,其中clk_750k将根据设计要求分频成14hz,15hz和1hz分别作为公里计费和超时计费的脉冲。
两个控制输入开关start,stop;控制过程为:
start作为计费开始的开关,当start为高电平时,系统开始根据输入的情况计费。
当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;如需停车等待,就把stop变为高电平,
并去除fin输入脉冲,进行等待计费;当乘客下车且不等待时,直接将start置为0,系统停止工作;价格开始归为起步价5.0元。
整个设计由分频模块,计量模块,计费模块,控制模块和显示模块五个部分组成。
其中计量模块是整个系统实现里程计数和时间计数的重要部分;控制模块是实现不同计费方式的选择部分,根据所设计的使能端选择是根据里程计费还是根据等待时间计费,同时设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。
计量模块采用1hz的驱动信号,计费模块采用14hz,13hz的驱动信号;计量模块每计数一次,计量模块就实现14次或者13次计数,即为实现计时的1.3元/min,计程时的1.4元/km的收费。
组成框图如下所示:
1.百进制模块:
实现百米脉冲的驱动信号,元件框图如图3所示:
图3百进制模块框图
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybaijinzhiis
port(start,clk2:
instd_logic;--秒脉冲
a:
outstd_logic_vector(3downto0));
endbaijinzhi;
architecturert1ofbaijinzhiis
signalcount_1:
std_logic_vector(3downto0);
begin
a<=count_1;
process(start,clk2)
begin
if(start='0')then
count_1<="0000";
elsif(clk2'eventandclk2='1')then
if(count_1="0111")then
count_1<="0000";
else
count_1<=count_1+'1';
endif;
endif;
endprocess;
endrt1
2.计费模块
;实现里程和等候时间的计费并输出到显示,元件框图4如下:
图4计费模块框图
源程序如下:
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;
entityjifeiis
port(clk2:
instd_logic;--计费驱动信号
start:
instd_logic;--计费开始信号
c0,c1,c2,c3:
bufferstd_logic_vector(3downto0));
endjifei;
architecturert1ofjifeiis
begin
process(clk2,start)
begin
ifstart='0'thenc3<="0000";c2<="0000";c1<="0101";c0<="0000";--起步价5元
elsifclk2'eventandclk2='1'then
ifc0="1001"thenc0<="0000";
ifc1="1001"thenc1<="0000";
ifc2="1001"thenc2<="0000";
ifc3="1001"thenc3<="0000";
elsec3<=c3+1;
endif;
elsec2<=c2+1;
endif;
elsec1<=c1+1;
endif;
elsec0<=c0+1;
endif;
endif;
endprocess;
endrt1;
3.公里模块
实现历程的计数和输出计费脉冲,元件框图5如下:
图5公里模块框图
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitygongliis
port(clk1,start:
instd_logic;--百米脉冲
k1,k2,k3,k4:
outstd_logic_vector(3downto0);--里程显示
temp2:
outstd_logic);
endgongli;
architecturert1ofgongliis
signalcount_1:
std_logic_vector(3downto0);
signalcount_2:
std_logic_vector(3downto0);
signalcount_3:
std_logic_vector(3downto0);
signalcount_4:
std_logic_vector(3downto0);
begin
k1<=count_1;
k2<=count_2;
k3<=count_3;
k4<=count_4;
process(start,clk1)
begin
if(start='0')then
count_1<="0000";
count_2<="0000";
count_3<="0000";
count_4<="0000";---公里清零
elsif(clk1'eventandclk1='1')then
if(count_1="1001")then--公里计数器
count_1<="0000";count_2<=count_2+1;temp2<='1';
if(count_2="1001")then
count_2<="0000";count_3<=count_3+'1';
if(count_3="1001")then
count_3<="0000";count_4<=count_4+'1';
endif;
endif;
else
count_1<=count_1+'1';temp2<='0';
endif;
endif;
endprocess;
endrt1;
4.输出模块
实现所有数据的输出,元件框图6如下:
图6输出模块框图
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityshuchuis
port(y:
instd_logic_vector(3downto0);
e:
outstd_logic_vector(6downto0));
endshuchu;
architecturert1ofshuchuis
begin
process
begin
caseyis
when"0000"=>e<="0111111";
when"0001"=>e<="0000110";
when"0010"=>e<="1011011";
when"0011"=>e<="1001111";
when"0100"=>e<="1100110";
when"0101"=>e<="1101101";
when"0110"=>e<="1111101";
when"0111"=>e<="0000111";
when"1000"=>e<="1111111";
when"1001"=>e<="1100111";
whenothers=>e<="0000000";
endcase;
endprocess;
endrt1;
5.显示模块
实现所有数据的显示,元件框图7如下:
图7显示模块框图
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityxianshiis
port(start:
instd_logic;
a:
instd_logic_vector(3downto0);--选择信号
c1,c2,c3,c4,out1,out2,out3,out4:
instd_logic_vector(3downto0);--里程显示,时间显示输入
y:
outstd_logic_vector(3downto0));--里程显示,时间显示输出
endxianshi;
architecturert1ofxianshiis
begin
process
begin
if(start='0')then
y<="0000";
elsecaseais
when"0000"=>y<=c1;
when"0001"=>y<=c2;
when"0010"=>y<=c3;
when"0011"=>y<=c4;
when"0100"=>y<=out1;
when"0101"=>y<=out2;
when"0110"=>y<=out3;
when"0111"=>y<=out4;
whenothers=>y<="0000";
endcase;
endif;
endprocess;
endrt1;
6.dian模块
图8dian模块框图
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydianis
port(a:
instd_logic_vector(3downto0);
e:
outstd_logic);
enddian;
architecturert1ofdianis
begin
process
begin
caseais
when"0001"=>e<='1';
when"0101"=>e<='1';
whenothers=>e<='0';
endcase;
endprocess;
endrt1;
三、中各个模块设计分析
系统总体顶层框图如下:
系统总体顶层框图
程序最终功能实现波形仿真
1.分频模块
由于实验箱上没有14hz和13hz的整数倍时钟信号,因此采用频率较大的750khz进行分频,以近似得到14hz,13hz和1hz的时钟频率。
通过以上三种不同频率的脉冲信号实行出租车行驶,等待两种情况下的不同计费。
模块元件如下:
分频模块框图
源程序如下:
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;
entityfenpinis
port(clk_750k:
instd_logic;--系统时钟
clk_14:
bufferstd_logic;--14分频
clk_13:
bufferstd_logic;--13分频
clk_1:
bufferstd_logic);--1分频
endfenpin;
architecturert1offenpinis
signalq_14:
integerrange0to53570;--定义中间信号量
signalq_13:
integerrange0to57691;
signalq_1:
integerrange0to749999;
begin
process(clk_750k)
begin
If(clk_750k'eventandclk_750k='1')then
Ifq_14=53570thenq_14<=0;clk_14<=notclk_14;
elseq_14<=q_14+1;
endif;--得14hz频率信号
Ifq_13=57691thenq_13<=0;clk_13<=notclk_13;
elseq_13<=q_13+1;
endif;--得13hz频率信号
Ifq_1=749999thenq_1<=0;clk_1<=notclk_1;
elseq_1<=q_1+1;
endif;--得1hz频率信号
endif;
endprocess;
endrt1;
2.计量模块
计量模块主要完成计时和计程功能。
计时部分:
计算乘客的等待累积时间,当等待时间大于2min时,本模块中en1使能信号变为1;当clk1每来一个上升沿,计时器就自增1,计时器的量程为59min,满量程后自动归零。
计程部分:
计算乘客所行驶的公里数,当行驶里程大于2km时,本模块中en0使能信号变为1;当clk每来一个上升沿,计程器就自增1,计程器的量程为99km,满量程后自动归零。
元件框图为:
计量模块框图
计量模块仿真波形为:
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityjiliangis
port(start:
instd_logic;--计费开始信号
fin:
instd_logic;--里程脉冲信号
stop:
instd_logic;--行驶中途等待信号
clk1:
instd_logic;--驱动脉冲
en1,en0:
bufferstd_logic;--计费单价使能信号
k1,k0:
bufferstd_logic_vector(3downto0);--行驶公里计数
m1,m0:
bufferstd_logic_vector(3downto0));--等待时间计数
endjiliang;
architecturert2ofjiliangis
signalw:
integerrange0to59;--计时范围0~59
begin
process(clk1)
begin
if(clk1'eventandclk1='1')then
ifstart='0'then
w<=0;en1<='0';en0<='0';m1<="0000";
m0<="0000";k1<="0000";k0<="0000";
elsifstop='1'then--计时开始信号
ifw=59then
w<=0;
elsew<=w+1;
endif;
ifm0="1001"then
m0<="0000";
ifm1="0101"then
m1<="0000";
elsem1<=m1+1;
endif;
elsem0<=m0+1;
endif;
ifstop='1'thenen0<='0';
ifm1&m0>"00000001"thenen1<='1';--若等待时间大于2min则en1置1
elseen1<='0';
endif;
endif;
elsiffin='1'then--里程计数开始
ifk0="1001"thenk0<="0000";
ifk1="1001"thenk1<="0000";--计程范围0~99
elsek1<=k1+1;
endif;
elsek0<=k0+1;
endif;
ifstop='0'then
en1<='0';
ifk1&k0>"00000001"then
en0<='1';--若行使里程大于2km,则en0置1
elseen0<='0';
endif;
endif;
endif;
endif;
endprocess;
endrt2;
3.控制模块
本模块主要是通过计量模块产生的两个不同的输入使能信号en0,en1,对每个分频模块输出的14hz,13hz的脉冲进行选择输出的过程;本模块实现了双脉冲的二选一;最终目的为了计费模块中对行驶过程中不同的时段进行计价。
模块元件如下:
控制模块框图
控制模块仿真波形为:
源程序如下:
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;
entitykongzhiis
port(en0,en1:
instd_logic;--使能选择信号
clk_in1:
instd_logic;--14分频输入信号
clk_in2:
instd_logic;--13分频输入信号
clk_out:
outstd_logic);--输出信号
endkongzhi;
architecturert3ofkongzhiis
begin
process(en0,en1)
begin
ifen0='1'then--实现二选一功能
clk_out<=clk_in1;
elsifen1='1'then
clk_out<=clk_in2;
endif;
endprocess;
endrt3;
4.计费模块
当计费信号start一直处于高电平即计费状态时,本模块根据控制模块选择出的信号从而对不同的单价时段进行计费。
即行程在2km内,而且等待累计时间小于2min则为起步价5元;2km外以每公里1.4.元计费,等待累积时间超过2min则按每分钟1.3元计费。
c0,c1,c2,c3分别表示费用的显示。
模块元件为:
计费模块框图
计费模块仿真波形为:
源程序如下:
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;
entityjifeiis
port(clk2:
instd_logic;--计费驱动信号
start:
instd_logic;--计费开始信号
c0,c1,c2,c3:
bufferstd_logic_vector(3downto0));
endjifei;
architecturert4ofjifeiis
begin
process(clk2,start)
begin
ifstart='0'thenc3<="0000";c2<="0000";c1<="0101";c0<="0000";--起步价5元
elsifclk2'eventandclk2='1'then
ifc0="1001"thenc0<="0000";
ifc1="1001"thenc1<="0000";
ifc2="1001"thenc2<="0000";
ifc3="1001"thenc3<="0000";--计价范围0~999.9
elsec3<=c3+1;
endif;
elsec2<=c2+1;
endif;
elsec1<=c1+1;
endif;
elsec0<=c0+1;
endif;
endif;
endprocess;
endrt4;
5.显示模块
显示模块完成计价,计时和计程数据显示。
计费数据送入显示模块进行译码,最后送至以百元,十元,元,角为单位对应的数码管上显示。
计时数据送入显示模块进行译码,最后送至以分为单位对应的数码管上显示。
计程数据送入显示模块进行译码,最后送至以km为单位的数码管上显示。
模块元件为:
显示模块框图
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;--定义库包
entityxianshiis--定义实体
port(
clk_scan:
instd_logic;--扫描时钟信号端口设置
c3,c2,c1,c0:
instd_logic_vector(3downto0);--总费用输入端口
k0,k1:
instd_logic_vector(3downto0);--里程输入端口
m0,m1:
instd_logic_vector(3downto0);--等待时间输入端口
sel:
outstd_logic_vector(2downto0);--控制数码管位选信号的扫描信号输出端口
led:
outstd_logic_vector(6downto0);--数码管的控制端口
led_dp:
outstd_logic--数码管的小数点输出端口
);
endxianshi;
architecturert5ofxianshiis
signalduan:
std_logic_vector(6downto0);--数码显示管中间变量
signalshuju:
std_logic_vector(3dow
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 内容 要求