第一篇:出租车自动计费器设计(课程设计报告)
目 录 绪论....................................................................................................................................................1 1.1设计背景......................................................................................................................................1 1.2QUARTUS II简介.......................................................................................................................1 1.3VHDL语言基础..........................................................................................................................2 2 出租车计费器总体设计结构.............................................................................................................2 2.1
系统设计要求和目的..................................................................................................................2 2.2.1 系统设计要求......................................................................................................................2 2.2.1 系统设计目的......................................................................................................................2 2.2
设计思路......................................................................................................................................3 2.3
系统总体结构..............................................................................................................................3 2.4出租车计费器系统工作流程图..................................................................................................4 3 出租车计费器的实现........................................................................................................................5 3.1
出租车计费器的顶层原理图......................................................................................................5 3.2
系统各功能模块的实现..............................................................................................................5 3.2.1 计费模块JIFEI....................................................................................................................5 3.2.2 计量模块JILIANG..............................................................................................................6 3.2.3 显示控制模块SELTIME.....................................................................................................7 3.2.4 显示模块DELED................................................................................................................7 4 出租车计费器系统仿真及分析.........................................................................................................8 4.1
计费系统的仿真..........................................................................................................................8 4.2
单元模块的仿真及分析............................................................................................................10 4.2.1 译码显示模块的仿真及分析............................................................................................10 4.2.2 显示控制模块的仿真及分析............................................................................................12 4.2.3 计量模块的仿真及分析....................................................................................................13 4.2.4 计费模块的仿真及分析....................................................................................................13 5 锁定管脚及硬件实现......................................................................................................................14 5.1
锁定管脚图................................................................................................................................14 5.2
硬件实现....................................................................................................................................14 5.2.1 显示结果的几种情况........................................................................................................15 5.2.2 硬件实现总结....................................................................................................................16 6 设计体会与总结..............................................................................................................................17 参考文献................................................................................................................................................18 附
录................................................................................................................................................19 1
JILIANG模块的VHDL编程......................................................................................................19 2
JIFEI模块的VHDL编程............................................................................................................21 3
SELTIME控制模块的VHDL编程.............................................................................................22 4
DELED模块的VHDL编程........................................................................................................23
出租车自动计费器设计 绪论
1.1 设计背景
随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普通的交通工具。于是,出租车行业以低价高质的服务给人们带来了出行的享受。但是总存在着买卖纠纷困扰着行业的发展。而在出租车行业中解决这一矛盾的最好方法就是改良计价器。汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具,它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是具有一定意义的。出租车计费器是出租车营运收费的专用智能化仪表,是出租车市场规范化,标准化以及减少司机与乘客之间发生纠纷的重要设备。一种功能完备,简单易用,计量准确的出租车计费器是加强出租车行业管理,提高服务质量的必需品。本设计就是采用VHDL硬件描述语言作为设计手段,采用自己的设计思路,得到一种出租车计价系统的软件结构,通过Quartus II 6.0软件下进行仿真,证明所设计的电路系统完成了出租车计价的功能,各项指标符合设计要求,具有一定的实用性。
1.2 QUARTUS II简介
QUARTUS II 是Altera公司的综合性CPLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整CPLD设计流程。QUARTUS II 支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Altera QUARTUS II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
出租车自动计费器设计
1.3 VHDL语言基础
一般而言,一个相对完整的VHDL语言程序至少应三个基本组成部分:①库(Library)、程序包(Package)使用说明;②实体(Entity)说明;③实体对应的结构体(Architecture)说明。其中,库、程序包使用说明用于打开(调用)本设计实体将要用到的库、程序包;实体说明用于描述该设计实体与外界的接口信号说明,是可视部分;结构体说明用于描述该设计实体内部工作的逻辑关系,是不可视部分。在一个实体中,允许含有一个或多个结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。根据需要,实体还可以有配置说明语句。配置说明语句主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。出租车计费器总体设计结构
2.1 系统设计要求和目的
2.2.1 系统设计要求
1.起步价为5.0元,起步公里为3公里;
2.超过3公里,每公里按1元收费,也可每0.1公里按0.1元收费; 3.等候时间累计1分钟,按每分钟0.1元收费;
4.用三个数码管显示总金额,最大值为99.9元;用三个数码管显示总里程,最大值99.9公里;用两个数码管显示等待时间,最大值99分钟。2.2.1 系统设计目的
1.通过这次实验设计使我们加深对EDA技术与数字系统设计相关理论和概念的理解,培养我们的理论联系实际的能力,特别是实际动手能力。
2.学习使用QUARTUS II软件设计。
3.根据原理图学会用VHDL语言设计时序电路。4.学会绘制功能仿真波形图。
出租车自动计费器设计
2.2 设计思路
根据设计要求,电路具有计时、计程、计费功能,用数码管显示行驶公里数、等待时间、收费金额,行车里程和等待时间的处理电路将汽车行驶的里程数、转换成与之成正比的计费脉冲,然后由计费电路转换成收费金额,实验中以一个脉冲模拟汽车前进十米,则每100个脉冲表示1公里,3公里以后每0.1公里产生一个计费脉冲,一个1HZ的脉冲用来表示等待时间,60个脉冲代表1分钟,1分钟即60个脉冲产生一个等待计费脉冲,然后用计费电路对计费脉冲进行计费。
2.3 系统总体结构
图2-1 系统总体结构图
出租车计费器的组成如上图所示,通过控制模块以高低脉冲模拟出租汽车启动、行驶、暂停,具有控制作用;通过控制模块控制出租车的状态来选择出租车是计里程还是计等待时间,相应产生的时间计费脉冲信号和里程脉冲信号来计费,译码/动态扫描模块将等待时间、路程与费用的数值译码后用动态扫描的方式驱动数码管;数码管显示模块将里程数、等待时间和计费金额用数码管显示。
出租车自动计费器设计
2.4 出租车计费器系统工作流程图
图2-2 出租车计费系统工作流程图
出租车载客后,启动计费器,整个系统开始工作,进入初始化状态,即计程从0开始,计费从5.0元开始。再根据BREAK信号判断行驶还是暂停。若是行驶状态,计费器开始进行里程计数,当里程超过3公里时,计费器开始累加,按每0.1公里收费0.1元计算,计程器则继续,否则计费器不变。若是暂停状态,计费器开始进行等候时间计数,当等候时间累计1分钟,则每分钟0.1元计费。最后将等候时间、里程、计费都显示出来。
出租车自动计费器设计 出租车计费器的实现
3.1 出租车计费器的顶层原理图
图3-1 出租车计费器顶层原理图
原理图中输入部分分别是CLK:秒脉冲信号,1个脉冲代表1秒,则60个脉冲表示1分钟。CLK1:10米脉冲信号,1个脉冲代表10米,则10个脉冲表示100米,100个脉冲代表1公里。START:计程车开启信号;DRIVE:计费器启动信号;BREAK:等待信号,SEL为计数控制信号输出端。
3.2 系统各功能模块的实现
3.2.1 计费模块JIFEI 计费(JIFEI)模块也是本系统的核心,完成起步价计费,等待时间计费,里程计费功能。计费器启动,显示起步价5.0元,之后每来一个行驶里程计费脉冲或者等待时间计费脉冲,计费金额自动加0.1元。计费显示用3位数码管,所
出租车自动计费器设计
以计费最大值为99.9元。其中CH2表示费用的十位,CHI表示费用的个位,CH0表示费用的十分位。B为等待时间计费脉冲信号或里程计费脉冲信号。
图3-2 JIFEI模块图
3.2.2 计量模块JILIANG
图3-3 JILIANG模块图
本模块是系统的核心模块之一,能够对外部的行驶距离脉冲、等待时间脉冲进行计数。因为行驶距离每脉冲代表10米,所以计满100个数就输出一个行驶距离计费脉冲,因为3公里之内属于起步价,所以前3公里内不输出行驶距离计费脉冲,因为用3位数码管来显示行驶距离,其中两位整数,一位小数,所以行驶距离最小分辨率为0.1公里,行驶距离脉冲每计10个数,行驶距离输出加0.1,行驶距离最大值为99.9公里。其中KM2为里程的十位,KM1为里程的个位,KM0为里程的十分位。等待时间脉冲频率为1HZ,所以一个脉冲代表1秒,60个等待脉冲是1分钟,输出等待时间加1,等待时间满1分钟计一次费,所以对等待时间脉冲计数,计满60个数就输出一个等待计费脉冲。等待时间最大值为99分钟。MIN1为等待时间的十位,MIN0为等待时间的个位。将行驶距离、等待时间送到SELTIME模块,时间与里程计费脉冲送到计费模块完成里程、等待时间的计费功
出租车自动计费器设计
能。B1为超过3公里后,每0.1公里产生的计费脉冲。B2为每等待一分钟产生的计费脉冲。
3.2.3 显示控制模块SELTIME
图3-4 SELTIME模块图
SELTIME模块起显示控制作用,控制等待时间、行驶里程、费用在数码管上的显示位置。sel为计数控制信号输出端,功能主要是利用其计数的八个状态,使daout在其每个状态下选择某一输入数据,进而将选择的的数据送入到DELED模块。dp为小数点脉冲控制信号,当该模块输出的值为里程的个位、费用的个位时,需要考虑小数点的存在,即此时dp=‘1’,在其他不需要小数点的情况下,dp=‘0’,最后dp将信号输出到DELED模块。3.2.4 显示模块DELED
图3-5 DELED模块图
出租车自动计费器设计
DELED模块把送入的每个四位数据转换为7段码送出显示,能够使数码管正常显示送入的数据。其中DP为小数点输入信号。出租车计费器系统仿真及分析
4.1 计费系统的仿真
图4-1 出租车启动时计费系统功能仿真图
由图4-1 可知,当出租车未启动时,里程、等待时间、费用均为0。出租车刚启动时,里程、等待时间为0,费用为出租车起步价5元。
出租车自动计费器设计
图4-2 出租车等待时计费系统功能仿真图
由图4-2可知,当出租车在等待过程中,行驶里程16.2公里,等待时间为32分钟时,出租车的费用为:5+(16.2-3)×1+32×0.1=21.4元,与仿真结果一致。
图4-3 出租车行驶时计费系统功能仿真图
由图4-3可知,当出租车行驶到66.6千米,等待时间60分钟时,由仿真结果可得出费用为74.6元;根据设计要求计算可得费用为:5+(66.6-3)×1+60×0.1=74.6元。仿真结果与计算值一致,验证了设计的正确性。
出租车自动计费器设计
图4-4 出租车停车时计费系统功能仿真图
当出租车停车时,出租车上的时间、里程和费用清零,为下次计费的开始做准备。
4.2 单元模块的仿真及分析
4.2.1 译码显示模块的仿真及分析
图4-5 译码显示模块的功能仿真图
图4-5为译码显示模块的功能仿真波形图,DP、S为信号输入端,也是显示
出租车自动计费器设计
控制模块的信号输出端口,ABCDEFGH八个端口为八位二进制的输出端口。假设DOUT=“HGFEDCBA”,由上图可以看出:
1.DP=0时:
当S(3 downto 0)=”0000”,则DOUT=”00111111”; 当S(3 downto 0)=”0001”,则DOUT=”00000110”; 当S(3 downto 0)=”0010”,则DOUT=”01011011”; 当S(3 downto 0)=”0011”,则DOUT=”01001111”; 当S(3 downto 0)=”0100”,则DOUT=”01100110”; 当S(3 downto 0)=”0101”,则DOUT=”01101101”; 当S(3 downto 0)=”0110”,则DOUT=”01111101”; 当S(3 downto 0)=”0111”,则DOUT=”00000111”; 当S(3 downto 0)=”1000”,则DOUT=”01111111”; 当S(3 downto 0)=”1001”,则DOUT=”01101111”;
当S(3 downto 0)等于上述值以外的值时,则DOUT=”00000000”。2.DP=1时:
当S(3 downto 0)=”0000”,则DOUT=”10111111”; 当S(3 downto 0)=”0001”,则DOUT=”10000110”; 当S(3 downto 0)=”0010”,则DOUT=”11011011”; 当S(3 downto 0)=”0011”,则DOUT=”11001111”; 当S(3 downto 0)=”0100”,则DOUT=”11100110”; 当S(3 downto 0)=”0101”,则DOUT=”11101101”; 当S(3 downto 0)=”0110”,则DOUT=”11111101”; 当S(3 downto 0)=”0111”,则DOUT=”10000111”; 当S(3 downto 0)=”1000”,则DOUT=”11111111”; 当S(3 downto 0)=”1001”,则DOUT=”11101111”;
当S(3 downto 0)等于上述值以外的值时,则DOUT=”10000000”。
出租车自动计费器设计
4.2.2 显示控制模块的仿真及分析
图4-6 显示控制模块的功能仿真图
图4-6为显示控制模块功能仿真图,其中clk为时钟脉冲输入端,sel为计数控制信号输出端,daout为sel所控制状态下的输出到数码管的位选信号,dp为小数点控制输出信号。可以看出,当时钟沿上升时刻到来时,计数器的输出sel就自动加1,当计数器输出端加到“111”时,再来一个脉冲上升沿,则计数的输出端sel变为“000”,该显示控制模块的功能主要是利用其计数的八个状态,进而去轮流控制数码管的位选信号。由图4-6可知:当sel=“000”时,则daout=CH0;当sel=“001”时,daout=CH1;当sel=“010”时,daout=CH2;当sel=“011”时,daout=KM0;当sel=“100”时,daout=KM1;当sel=“101”时,daout=KM2;当sel=“110”时,daout=MIN0;当sel=“111”时,daout=MIN1。由于KM1、CH1表示里程的个位和费用的个位,其后都存在小数,故在设计中当显示KM1、CH1时须加入小数点,此时dp=‘1’,在其他没有小数点的情况时dp=‘0’。
出租车自动计费器设计
4.2.3 计量模块的仿真及分析
图4-7 计量模块的功能仿真图
图4-7为计量模块的功能仿真图,START信号为高电平时(即出租车启动)。当DRIVE为高电平且BREAK为低电平时,出租车为行驶状态,此时里程计数模块开始计数,每经过10个CLK1脉冲信号,里程加0.1公里,当里程计数大于3公里时,每计0.1公里产生1个B1脉冲信号。当DRIVE为高电平且BREAK为高电平时,出租车为暂停状态,此时等待时间计数模块开始计数,每经过60个CLK脉冲信号,时间加1分钟,每计1分钟产生一个B2脉冲信号。B1和B2分别为里程计费脉冲和等待时间计费脉冲。4.2.4 计费模块的仿真及分析
图4-8 计费模块的功能仿真图
图4-8为计费模块的功能仿真图当START处于高电平且DRIVE处于高电平时,每送入一个计费脉冲且计费脉冲处于上升沿时,CH0自动加1(即每送入一
出租车自动计费器设计
个计费脉冲加0.1元)。CH0、CH1、CH2为十进制计数。CH2表示费用的十位,CH1表示费用的个位,CH0表示费用的十分位,计费的最大值为99.9元。锁定管脚及硬件实现
5.1 锁定管脚图
在验证出租车计费器系统的功能之前,需要清楚实验箱与各个信号之间的对应关系,参照资料得出本设计中各引脚的对应情况如下:
图5-1 顶层原理图
5.2 硬件实现
通过硬件下载,该电路可以完成硬件实现,芯片管脚定义可以直接用编辑.pin文件。完成管脚定义后选择器件,编译后生成.sof文件。选择.sof文件进行下载。
下载完成后,将第一全局时钟CLK1的跳线器接1Hz(作为秒脉冲信号),将第二全局时钟CLK2的跳线器接1Hz(作为十米脉冲信号),将第三全局时钟CLK3的跳线器接32768Hz,用拨位开关模拟控制出租车的启动、行驶、暂停。观察数
出租车自动计费器设计
码管上数据的变化是否符合设计标准。在试验箱上八个数码管从左至右分别显示的是:等待时间的十位、等待时间的个位、里程的十位、里程的个位、里程的十分位、费用的十位、费用的个位、费用的十分位。5.2.1 显示结果的几种情况
图5-2 验证结果1 图5-2表示出租车等待了1分钟,行驶了3.9公里,即时车费为6.0元。根据设计要求计算所得费用为:5元+(3.9-3)公里×1元/公里+1分钟×0.1元/分钟=6.0元,计算结果与试验箱上所得显示结果相同。
图5-3 验证结果2
出租车自动计费器设计
图5-3表示出租车等待了3分钟,行驶了6.8公里,即时车费为9.1元。根据设计要求计算所得费用为:5元+(6.8-3)公里×1元/公里+3分钟×0.1元/分钟=9.1元,计算结果与试验箱上所得显示结果相同。
在试验箱验证过程中,我们可以看到,八位数码管的右三位显示起步价05.0,中间三个数码管在以0.1为步长进行加法显示行驶里程,当行驶里程超过3公里之后,每0.1公里计费金额加0.1元,当我们按下等待暂停键,每分钟左边两个数码管加1,其显示的等待时间,当等待时间到1分钟时,计费金额加0.1元,由此我们可以判断,系统设计符合要求。5.2.2 硬件实现总结
通过对每一模块的仿真和下载,可以实现各个模块的逻辑功能,验证了各个模块的正确性。在出租车计费系统的4个模块中,重点在于计量模块(JILIANG),计费模块(JIFEI),显示控制模块(SELTIME),译码显示模块(DELED)。JILIANG模块主要有汽车的开始、运行、暂停,JILIANG模块主要记录出租车的行驶里程和等待时间,并将等待时间计费脉冲和行驶里程计费脉冲送入JIFEI模块;JIFEI模块主要是完成起步价计费、等待时间计费、行驶里程计费,并完成总费用;SELTIME模块起显示控制作用,控制等待时间、行驶里程、费用在八个数码管上的位置。DELED模块是把送入的每个四位数据转换为7段码,从而能在数码管上正确的显示。这四个模块的组合成完整的出租车系统,在设计过程中还需要改进的是控制出租车计费系统的控制功能。
出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车开始、启动、暂停、停止等功能,由数码管显示出租车等待时间,行驶里程,费用。车暂等待时停止行驶里程计费,车费仅由等待时间计费;出租车正常行驶时,仅根据里程收费方式。若停止则车费清零,等待下一次计费的开始。出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言本设计在实用方面具有一定的价值。
该计费器实现了按预置参数自动计费(最大计费金额为99.9元)、自动计程(最大计程公里数为99.9公里)等功能;能够实现起步价、每公里收费、等待时间计费的参数预置(如:起步价5.0元;3公里后1元每公里;等待时间0.1元每分钟),且预置参数可调范围广。由于采用CPLD大规模可编程逻辑器件,整机功耗小、抗干扰能力强、系统稳定、工作可靠、升级方便。
出租车自动计费器设计 设计体会与总结
通过这次紧张而又充实的EDA课程设计,我感受到了VHDL语言和普通软件语言之间的区别,也能够更加熟练地运用VHDL语言进行逻辑电路的设计了,受益匪浅。我们所做的课题是出租车计费器的设计。老师给了我们课程设计题目,在这半个月的实验操作中,不断的完善自己的设计要求,将自己的想法融入到实验的程序中去。最终通过仿真达到了自己预想的效果。有种先苦后甜的成就感。
同时在本次试验中,我们熟练的掌握了Quartus II软件的使用。学会了如何把自己所设计的程序,通过软件用波形仿真出来,再通过试验箱仿真出来。
在这次课程设计过程中,要感谢陈老师在课程设计上给予我的帮助,提供给我的支持与建议,特别是帮助我解决了我半个月来一直遇到的运行程序警告多的问题,这是我能顺利完成这次报告的主要原因,让我能把课程设计做得更加完善。在此期间,我不仅学到了许多新知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学们,他们也为我解决了不少难题。这些东西是无法再平时上课的过程中学到的,实践出真知,只有在实验中我们才能更好的学到东西,不用纸上谈兵,做无用功。
出租车自动计费器设计
参考文献
[1] 徐飞.EDA技术与实践[M].北京:清华大学出版社,2011.[2] 王行,李衍.EDA技术入门与提高[M].西安:西安电子科技大学出版社,2005.[3] 刘昌华.数字逻辑EDA设计与实践[M].北京:国防工业出版社,2011.[4] 李蓉.基于VHDL语言的出租车自动计费器的设计[J].科技风,2008,24:33.出租车自动计费器设计
附 录 JILIANG模块的VHDL编程
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JILIANG IS PORT(CLK,CLK1 : IN STD_LOGIC;START : IN STD_LOGIC;DRIVE : IN STD_LOGIC;BREAK : IN STD_LOGIC;B1,B2 : OUT STD_LOGIC;KM2,KM1,KM0: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);MIN1,MIN0 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END JILIANG;
ARCHITECTURE BEHAVE OF JILIANG IS SIGNAL R1:INTEGER RANGE 0 TO 9;SIGNAL K:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL K2,K1,K0 :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL W1:INTEGER RANGE 0 TO 59;SIGNAL M1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL M0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN RUN:PROCESS(CLK1,DRIVE,BREAK,K0,K1,K2)BEGIN IF START='1' THEN IF DRIVE='0' THEN K0<=“0000”;K1<=“0000”;K2<=“0000”;R1<=0;ELSIF CLK1'EVENT AND CLK1='1' THEN IF DRIVE='1'AND BREAK='0' THEN IF R1=9 THEN R1<=0;IF K0=“1001” THEN K0<=“0000”;k1<=k1+1;
IF K1=“1001” THEN K1<=“0000”;k2<=k2+1;
IF K2=“1001” THEN K2<=“0000”;ELSE K2<=K2+1;
END IF;ELSE K1<=K1+1;END IF;
出租车自动计费器设计
ELSE K0<=K0+1;END IF;ELSE R1<=R1+1;B1<='0';END IF;K<=K2&K1;IF K>“00000010” THEN
IF R1<9 THEN R1<=R1+1;B1<='0';
ELSE R1<=0;B1<='1';
END IF;END IF;END IF;END IF;ELSE K0<=“0000”;K1<=“0000”;K2<=“0000”;END IF;KM0<=K0;KM1<=K1;KM2<=K2;END PROCESS;
PAUSE:PROCESS(CLK,DRIVE,BREAK,M0,M1)BEGIN IF START='1' THEN IF DRIVE='0' THEN M0<=“0000”;M1<=“0000”;W1<=0;ELSIF CLK'EVENT AND CLK='1' THEN IF DRIVE='1' AND BREAK='1'THEN IF W1=59 THEN W1<=0;B2<='1';
IF M0=“1001”THEN M0<=“0000”;M1<=M1+1;
IF M1=“1001”THEN M1<=“0000”;
ELSE M1<=M1+1;
END IF;ELSE M0<=M0+1;END IF;ELSE W1<=W1+1;B2<='0';END IF;END IF;END IF;ELSE M0<=“0000”;M1<=“0000”;END IF;MIN0<=M0;MIN1<=M1;END PROCESS;END ARCHITECTURE;
出租车自动计费器设计 JIFEI模块的VHDL编程
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JIFEI IS PORT(B :IN STD_LOGIC;START:IN STD_LOGIC;DRIVE:IN STD_LOGIC;CH2,CH1,CH0: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END JIFEI;ARCHITECTURE BEHAVE OF JIFEI IS SIGNAL C2,C1,C0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(B,DRIVE,C0,C1,C2)BEGIN IF DRIVE='0' THEN C0<=“0000”;C1<=“0101”;C2<=“0000”;ELSIF DRIVE='1' THEN IF B'EVENT AND B='1' THEN
IF C0=“1001” THEN C0<=“0000”;
IF C1=“1001”THEN C1<=“0000”;
IF C2=“1001”THEN C2<=“0000”;
ELSE C2<=C2+1;
END IF;
ELSE C1<=C1+1;
END IF;
ELSE C0<=C0+1;
END IF;END IF;END IF;ELSE C0<=“0000”;C1<=“0000”;C2<=“0000”;END IF;CH0<=C0;CH1<=C1;CH2<=C2;END PROCESS;END;
出租车自动计费器设计 SELTIME控制模块的VHDL编程
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity seltime is port(clk : in std_logic;CH2,CH1,CH0 : in std_logic_vector(3 downto 0);KM2,KM1,KM0 : in std_logic_vector(3 downto 0);MIN1,MIN0 : in std_logic_vector(3 downto 0);dp : OUT STD_LOGIC;daout : out std_logic_vector(3 downto 0);sel : out std_logic_vector(2 downto 0));end seltime;
architecture behav of seltime is signal sec : std_logic_vector(2 downto 0);begin process(clk)begin if(clk'event and clk='1')then
if(sec=“111”)then sec<=“000”;else sec<=sec+1;end if;end if;end process;process(sec,MIN1,MIN0,CH2,CH1,CH0,KM2,KM1,KM0)begin case sec is when “000”=>daout<=CH0(3 downto 0);dp<='0';when “001”=>daout<=CH1(3 downto 0);dp<='1';when “010”=>daout<=CH2(3 downto 0);dp<='0';when “011”=>daout<=KM0(3 downto 0);dp<='0';when “100”=>daout<=KM1(3 downto 0);dp<='1';when “101”=>daout<=KM2(3 downto 0);dp<='0';when “110”=>daout<=MIN0(3 downto 0);dp<='0';
when “111”=>daout<=MIN1(3 downto 0);dp<='0';when others=>daout<=“XXXX”;end case;end process;
出租车自动计费器设计
sel<=sec;end behav;DELED模块的VHDL编程
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DELED IS PORT(DP: IN STD_LOGIC;S: IN STD_LOGIC_VECTOR(3 DOWNTO 0);A,B,C,D,E,F,G,H: OUT STD_LOGIC);END DELED;
ARCHITECTURE BEHAV OF DELED IS SIGNAL DATA : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL DOUT : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN DATA<=S;PROCESS(DATA,DP)BEGIN IF DP='0' THEN
CASE DATA IS
WHEN “0000”=>DOUT<=“00111111”;
WHEN “0001”=>DOUT<=“00000110”;
WHEN “0010”=>DOUT<=“01011011”;
WHEN “0011”=>DOUT<=“01001111”;
WHEN “0100”=>DOUT<=“01100110”;
WHEN “0101”=>DOUT<=“01101101”;
WHEN “0110”=>DOUT<=“01111101”;
WHEN “0111”=>DOUT<=“00000111”;
WHEN “1000”=>DOUT<=“01111111”;
WHEN “1001”=>DOUT<=“01101111”;
WHEN OTHERS=>DOUT<=“00000000”;
END CASE;ELSE
CASE DATA IS
WHEN “0000”=>DOUT<=“10111111”;
WHEN “0001”=>DOUT<=“10000110”;
WHEN “0010”=>DOUT<=“11011011”;
WHEN “0011”=>DOUT<=“11001111”;
WHEN “0100”=>DOUT<=“11100110”;
WHEN “0101”=>DOUT<=“11101101”;
出租车自动计费器设计
WHEN “0110”=>DOUT<=“11111101”;
WHEN “0111”=>DOUT<=“10000111”;
WHEN “1000”=>DOUT<=“11111111”;
WHEN “1001”=>DOUT<=“11101111”;
WHEN OTHERS=>DOUT<=“10000000”;
END CASE;END IF;END PROCESS;H<=DOUT(7);G<=DOUT(6);F<=DOUT(5);E<=DOUT(4);D<=DOUT(3);C<=DOUT(2);B<=DOUT(1);A<=DOUT(0);END BEHAV;
第二篇:出租车自动计费器设计(课程设计报告)课件
目录 绪论....................................................................................................................................................1 1.1设计背景......................................................................................................................................1 1.2QUARTUS II简介.......................................................................................................................1 1.3VHDL语言基础..........................................................................................................................2 2 出租车计费器总体设计结构.............................................................................................................2 2.1
系统设计要求和目的..................................................................................................................2 2.2.1 系统设计要求......................................................................................................................2 2.2.1 系统设计目的......................................................................................................................2 2.2
设计思路......................................................................................................................................3 2.3
系统总体结构..............................................................................................................................3 2.4出租车计费器系统工作流程图..................................................................................................4 3 出租车计费器的实现.........................................................................................................................5 3.1
出租车计费器的顶层原理图......................................................................................................5 3.2
系统各功能模块的实现..............................................................................................................5 3.2.1 计费模块JIFEI....................................................................................................................5 3.2.2 计量模块JILIANG..............................................................................................................6 3.2.3 显示控制模块SELTIME.....................................................................................................7 3.2.4 显示模块DELED................................................................................................................7 4 出租车计费器系统仿真及分析.........................................................................................................8 4.1
计费系统的仿真..........................................................................................................................8 4.2
单元模块的仿真及分析............................................................................................................10 4.2.1 译码显示模块的仿真及分析............................................................................................10 4.2.2 显示控制模块的仿真及分析............................................................................................11 4.2.3 计量模块的仿真及分析....................................................................................................12 4.2.4 计费模块的仿真及分析....................................................................................................12 5 锁定管脚及硬件实现.......................................................................................................................13 5.1
锁定管脚图................................................................................................................................13 5.2
硬件实现....................................................................................................................................13 5.2.1 显示结果的几种情况........................................................................................................14 5.2.2 硬件实现总结....................................................................................................................15 6 设计体会与总结...............................................................................................................................16 参考文献................................................................................................................................................17 附
录................................................................................................................................................18 1
JILIANG模块的VHDL程序......................................................................................................18 2
JIFEI模块的VHDL程序............................................................................................................19 3
SELTIME控制模块的VHDL程序.............................................................................................20 4
DELED模块的VHDL程序........................................................................................................21 巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计 绪论
1.1 设计背景
随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普通的交通工具。于是,出租车行业以低价高质的服务给人们带来了出行的享受。但是总存在着买卖纠纷困扰着行业的发展。而在出租车行业中解决这一矛盾的最好方法就是改良计价器。汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具,它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是具有一定意义的。出租车计费器是出租车营运收费的专用智能化仪表,是出租车市场规范化,标准化以及减少司机与乘客之间发生纠纷的重要设备。一种功能完备,简单易用,计量准确的出租车计费器是加强出租车行业管理,提高服务质量的必需品。本设计就是采用VHDL硬件描述语言作为设计手段,采用自己的设计思路,得到一种出租车计价系统的软件结构,通过Quartus II 6.0软件下进行仿真,证明所设计的电路系统完成了出租车计价的功能,各项指标符合设计要求,具有一定的实用性。
1.2 QUARTUS II简介
QUARTUS II 是Altera公司的综合性CPLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整CPLD设计流程。QUARTUS II 支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Altera QUARTUS II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
1.3 VHDL语言基础
一般而言,一个相对完整的VHDL语言程序至少应三个基本组成部分:①库(Library)、程序包(Package)使用说明;②实体(Entity)说明;③实体对应的结构体(Architecture)说明。其中,库、程序包使用说明用于打开(调用)本设计实体将要用到的库、程序包;实体说明用于描述该设计实体与外界的接口信号说明,是可视部分;结构体说明用于描述该设计实体内部工作的逻辑关系,是不可视部分。在一个实体中,允许含有一个或多个结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。根据需要,实体还可以有配置说明语句。配置说明语句主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。出租车计费器总体设计结构
2.1 系统设计要求和目的
2.2.1 系统设计要求
1.起步价为5.0元,起步公里为3公里;
2.超过3公里,每公里按1元收费,也可每0.1公里按0.1元收费; 3.等候时间累计1分钟,按每分钟0.1元收费;
4.用三个数码管显示总金额,最大值为99.9元;用三个数码管显示总里程,最大值99.9公里;用两个数码管显示等待时间,最大值99分钟。2.2.1 系统设计目的
1.通过这次实验设计使我们加深对EDA技术与数字系统设计相关理论和概念的理解,培养我们的理论联系实际的能力,特别是实际动手能力。
2.学习使用QUARTUS II软件设计。
3.根据原理图学会用VHDL语言设计时序电路。4.学会绘制功能仿真波形图。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
2.2 设计思路
根据设计要求,电路具有计时、计程、计费功能,用数码管显示行驶公里数、等待时间、收费金额,行车里程和等待时间的处理电路将汽车行驶的里程数、转换成与之成正比的计费脉冲,然后由计费电路转换成收费金额,实验中以一个脉冲模拟汽车前进十米,则每100个脉冲表示1公里,3公里以后每0.1公里产生一个计费脉冲,一个1HZ的脉冲用来表示等待时间,60个脉冲代表1分钟,1分钟即60个脉冲产生一个等待计费脉冲,然后用计费电路对计费脉冲进行计费。
2.3 系统总体结构
图2-1 系统总体结构图
出租车计费器的组成如上图所示,通过控制模块以高低脉冲模拟出租汽车启动、行驶、暂停,具有控制作用;通过控制模块控制出租车的状态来选择出租车是计里程还是计等待时间,相应产生的时间计费脉冲信号和里程脉冲信号来计费,译码/动态扫描模块将等待时间、路程与费用的数值译码后用动态扫描的方式驱动数码管;数码管显示模块将里程数、等待时间和计费金额用数码管显示。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
2.4 出租车计费器系统工作流程图
图2-2 出租车计费系统工作流程图
出租车载客后,启动计费器,整个系统开始工作,进入初始化状态,即计程从0开始,计费从5.0元开始。再根据BREAK信号判断行驶还是暂停。若是行驶状态,计费器开始进行里程计数,当里程超过3公里时,计费器开始累加,按每0.1公里收费0.1元计算,计程器则继续,否则计费器不变。若是暂停状态,计费器开始进行等候时间计数,当等候时间累计1分钟,则每分钟0.1元计费。最后将等候时间、里程、计费都显示出来。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计 出租车计费器的实现
3.1 出租车计费器的顶层原理图
图3-1 出租车计费器顶层原理图
原理图中输入部分分别是CLK:秒脉冲信号,1个脉冲代表1秒,则60个脉冲表示1分钟。CLK1:10米脉冲信号,1个脉冲代表10米,则10个脉冲表示100米,100个脉冲代表1公里。START:计程车开启信号;DRIVE:计费器启动信号;BREAK:等待信号,SEL为计数控制信号输出端。
3.2 系统各功能模块的实现
3.2.1 计费模块JIFEI 计费(JIFEI)模块也是本系统的核心,完成起步价计费,等待时间计费,里程计费功能。计费器启动,显示起步价5.0元,之后每来一个行驶里程计费脉冲或者等待时间计费脉冲,计费金额自动加0.1元。计费显示用3位数码管,所以计费最大值为99.9元。其中CH2表示费用的十位,CHI表示费用的个位,CH0表示费用的十分位。B为等待时间计费脉冲信号或里程计费脉冲信号。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
图3-2 JIFEI模块图
3.2.2 计量模块JILIANG
图3-3 JILIANG模块图
本模块是系统的核心模块之一,能够对外部的行驶距离脉冲、等待时间脉冲进行计数。因为行驶距离每脉冲代表10米,所以计满100个数就输出一个行驶距离计费脉冲,因为3公里之内属于起步价,所以前3公里内不输出行驶距离计费脉冲,因为用3位数码管来显示行驶距离,其中两位整数,一位小数,所以行驶距离最小分辨率为0.1公里,行驶距离脉冲每计10个数,行驶距离输出加0.1,行驶距离最大值为99.9公里。其中KM2为里程的十位,KM1为里程的个位,KM0为里程的十分位。等待时间脉冲频率为1HZ,所以一个脉冲代表1秒,60个等待脉冲是1分钟,输出等待时间加1,等待时间满1分钟计一次费,所以对等待时间脉冲计数,计满60个数就输出一个等待计费脉冲。等待时间最大值为99分钟。MIN1为等待时间的十位,MIN0为等待时间的个位。将行驶距离、等待时间送到SELTIME模块,时间与里程计费脉冲送到计费模块完成里程、等待时间的计费功能。B1为超过3公里后,每0.1公里产生的计费脉冲。B2为每等待一分钟产生的计费脉冲。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
3.2.3 显示控制模块SELTIME
图3-4 SELTIME模块图
SELTIME模块起显示控制作用,控制等待时间、行驶里程、费用在数码管上的显示位置。sel为计数控制信号输出端,功能主要是利用其计数的八个状态,使daout在其每个状态下选择某一输入数据,进而将选择的的数据送入到DELED模块。dp为小数点脉冲控制信号,当该模块输出的值为里程的个位、费用的个位时,需要考虑小数点的存在,即此时dp=‘1’,在其他不需要小数点的情况下,dp=‘0’,最后dp将信号输出到DELED模块。3.2.4 显示模块DELED
图3-5 DELED模块图
DELED模块把送入的每个四位数据转换为7段码送出显示,能够使数码管正常显示送入的数据。其中DP为小数点输入信号。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计 出租车计费器系统仿真及分析
4.1 计费系统的仿真
图4-1 出租车启动时计费系统功能仿真图
由图4-1 可知,当出租车未启动时,里程、等待时间、费用均为0。出租车刚启动时,里程、等待时间为0,费用为出租车起步价5元。
图4-2 出租车等待时计费系统功能仿真图
由图4-2可知,当出租车在等待过程中,行驶里程16.2公里,等待时间为32分钟时,出租车的费用为:5+(16.2-3)×1+32×0.1=21.4元,与仿真结果一巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
致。
图4-3 出租车行驶时计费系统功能仿真图
由图4-3可知,当出租车行驶到66.6千米,等待时间60分钟时,由仿真结果可得出费用为74.6元;根据设计要求计算可得费用为:5+(66.6-3)×1+60×0.1=74.6元。仿真结果与计算值一致,验证了设计的正确性。
图4-4 出租车停车时计费系统功能仿真图
当出租车停车时,出租车上的时间、里程和费用清零,为下次计费的开始做准备。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
4.2 单元模块的仿真及分析
4.2.1 译码显示模块的仿真及分析
图4-5 译码显示模块的功能仿真图
图4-5为译码显示模块的功能仿真波形图,DP、S为信号输入端,也是显示控制模块的信号输出端口,ABCDEFGH八个端口为八位二进制的输出端口。假设DOUT=“HGFEDCBA”,由上图可以看出:
1.DP=0时:
当S(3 downto 0)=”0000”,则DOUT=”00111111”; 当S(3 downto 0)=”0001”,则DOUT=”00000110”; 当S(3 downto 0)=”0010”,则DOUT=”01011011”; 当S(3 downto 0)=”0011”,则DOUT=”01001111”; 当S(3 downto 0)=”0100”,则DOUT=”01100110”; 当S(3 downto 0)=”0101”,则DOUT=”01101101”; 当S(3 downto 0)=”0110”,则DOUT=”01111101”; 当S(3 downto 0)=”0111”,则DOUT=”00000111”; 当S(3 downto 0)=”1000”,则DOUT=”01111111”; 当S(3 downto 0)=”1001”,则DOUT=”01101111”;
当S(3 downto 0)等于上述值以外的值时,则DOUT=”00000000”。2.DP=1时: 巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
当S(3 downto 0)=”0000”,则DOUT=”10111111”; 当S(3 downto 0)=”0001”,则DOUT=”10000110”; 当S(3 downto 0)=”0010”,则DOUT=”11011011”; 当S(3 downto 0)=”0011”,则DOUT=”11001111”; 当S(3 downto 0)=”0100”,则DOUT=”11100110”; 当S(3 downto 0)=”0101”,则DOUT=”11101101”; 当S(3 downto 0)=”0110”,则DOUT=”11111101”; 当S(3 downto 0)=”0111”,则DOUT=”10000111”; 当S(3 downto 0)=”1000”,则DOUT=”11111111”; 当S(3 downto 0)=”1001”,则DOUT=”11101111”;
当S(3 downto 0)等于上述值以外的值时,则DOUT=”10000000”。4.2.2 显示控制模块的仿真及分析
图4-6 显示控制模块的功能仿真图
图4-6为显示控制模块功能仿真图,其中clk为时钟脉冲输入端,sel为计数控制信号输出端,daout为sel所控制状态下的输出到数码管的位选信号,dp为小数点控制输出信号。可以看出,当时钟沿上升时刻到来时,计数器的输出sel就自动加1,当计数器输出端加到“111”时,再来一个脉冲上升沿,则计数的输出端sel变为“000”,该显示控制模块的功能主要是利用其计数的八个状态,进而去轮流控制数码管的位选信号。由图4-6可知:当sel=“000”时,则daout=CH0;当sel=“001”时,daout=CH1;当sel=“010”时,daout=CH2;当sel=“011”时,daout=KM0;当sel=“100”时,daout=KM1;当sel=“101”时,daout=KM2;巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
当sel=“110”时,daout=MIN0;当sel=“111”时,daout=MIN1。由于KM1、CH1表示里程的个位和费用的个位,其后都存在小数,故在设计中当显示KM1、CH1时须加入小数点,此时dp=‘1’,在其他没有小数点的情况时dp=‘0’。4.2.3 计量模块的仿真及分析
图4-7 计量模块的功能仿真图
图4-7为计量模块的功能仿真图,START信号为高电平时(即出租车启动)。当DRIVE为高电平且BREAK为低电平时,出租车为行驶状态,此时里程计数模块开始计数,每经过10个CLK1脉冲信号,里程加0.1公里,当里程计数大于3公里时,每计0.1公里产生1个B1脉冲信号。当DRIVE为高电平且BREAK为高电平时,出租车为暂停状态,此时等待时间计数模块开始计数,每经过60个CLK脉冲信号,时间加1分钟,每计1分钟产生一个B2脉冲信号。B1和B2分别为里程计费脉冲和等待时间计费脉冲。4.2.4 计费模块的仿真及分析
图4-8为计费模块的功能仿真图当START处于高电平且DRIVE处于高电平时,每送入一个计费脉冲且计费脉冲处于上升沿时,CH0自动加1(即每送入一个计费脉冲加0.1元)。CH0、CH1、CH2为十进制计数。CH2表示费用的十位,CH1表示费用的个位,CH0表示费用的十分位,计费的最大值为99.9元。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
图4-8 计费模块的功能仿真图 锁定管脚及硬件实现
5.1 锁定管脚图
在验证出租车计费器系统的功能之前,需要清楚实验箱与各个信号之间的对应关系,参照资料得出本设计中各引脚的对应情况如下:
图5-1 顶层原理图
5.2 硬件实现
通过硬件下载,该电路可以完成硬件实现,芯片管脚定义可以直接用编辑.pin文件。完成管脚定义后选择器件,编译后生成.sof文件。选择.sof文件进巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
行下载。
下载完成后,将第一全局时钟CLK1的跳线器接1Hz(作为秒脉冲信号),将第二全局时钟CLK2的跳线器接1Hz(作为十米脉冲信号),将第三全局时钟CLK3的跳线器接32768Hz,用拨位开关模拟控制出租车的启动、行驶、暂停。观察数码管上数据的变化是否符合设计标准。在试验箱上八个数码管从左至右分别显示的是:等待时间的十位、等待时间的个位、里程的十位、里程的个位、里程的十分位、费用的十位、费用的个位、费用的十分位。5.2.1 显示结果的几种情况
图5-2 验证结果1 图5-2表示出租车等待了1分钟,行驶了3.9公里,即时车费为6.0元。根据设计要求计算所得费用为:5元+(3.9-3)公里×1元/公里+1分钟×0.1元/分钟=6.0元,计算结果与试验箱上所得显示结果相同。
图5-3表示出租车等待了3分钟,行驶了6.8公里,即时车费为9.1元。根据设计要求计算所得费用为:5元+(6.8-3)公里×1元/公里+3分钟×0.1元/分钟=9.1元,计算结果与试验箱上所得显示结果相同。
在试验箱验证过程中,我们可以看到,八位数码管的右三位显示起步价05.0,中间三个数码管在以0.1为步长进行加法显示行驶里程,当行驶里程超过3公里之后,每0.1公里计费金额加0.1元,当我们按下等待暂停键,每分钟左边两个数码管加1,其显示的等待时间,当等待时间到1分钟时,计费金额加0.1元,由此我们可以判断,系统设计符合要求。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
图5-3 验证结果2 5.2.2 硬件实现总结
通过对每一模块的仿真和下载,可以实现各个模块的逻辑功能,验证了各个模块的正确性。在出租车计费系统的4个模块中,重点在于计量模块(JILIANG),计费模块(JIFEI),显示控制模块(SELTIME),译码显示模块(DELED)。JILIANG模块主要有汽车的开始、运行、暂停,JILIANG模块主要记录出租车的行驶里程和等待时间,并将等待时间计费脉冲和行驶里程计费脉冲送入JIFEI模块;JIFEI模块主要是完成起步价计费、等待时间计费、行驶里程计费,并完成总费用;SELTIME模块起显示控制作用,控制等待时间、行驶里程、费用在八个数码管上的位置。DELED模块是把送入的每个四位数据转换为7段码,从而能在数码管上正确的显示。这四个模块的组合成完整的出租车系统,在设计过程中还需要改进的是控制出租车计费系统的控制功能。
出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车开始、启动、暂停、停止等功能,由数码管显示出租车等待时间,行驶里程,费用。车暂等待时停止行驶里程计费,车费仅由等待时间计费;出租车正常行驶时,仅根据里程收费方式。若停止则车费清零,等待下一次计费的开始。出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言本设计在实用方面具有一定的价值。
该计费器实现了按预置参数自动计费(最大计费金额为99.9元)、自动计程(最大计程公里数为99.9公里)等功能;能够实现起步价、每公里收费、等待时间计巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
费的参数预置(如:起步价5.0元;3公里后1元每公里;等待时间0.1元每分钟),且预置参数可调范围广。由于采用CPLD大规模可编程逻辑器件,整机功耗小、抗干扰能力强、系统稳定、工作可靠、升级方便。设计体会与总结
通过这次紧张而又充实的EDA课程设计,我感受到了VHDL语言和普通软件语言之间的区别,也能够更加熟练地运用VHDL语言进行逻辑电路的设计了,受益匪浅。我们所做的课题是出租车计费器的设计。老师给了我们课程设计题目,在这半个月的实验操作中,不断的完善自己的设计要求,将自己的想法融入到实验的程序中去。最终通过仿真达到了自己预想的效果。有种先苦后甜的成就感。
同时在本次试验中,我们熟练的掌握了Quartus II软件的使用。学会了如何把自己所设计的程序,通过软件用波形仿真出来,再通过试验箱仿真出来。
在这次课程设计过程中,要感谢陈老师在课程设计上给予我的帮助,提供给我的支持与建议,特别是帮助我解决了我半个月来一直遇到的运行程序警告多的问题,这是我能顺利完成这次报告的主要原因,让我能把课程设计做得更加完善。在此期间,我不仅学到了许多新知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学们,他们也为我解决了不少难题。这些东西是无法再平时上课的过程中学到的,实践出真知,只有在实验中我们才能更好的学到东西,不用纸上谈兵,做无用功。巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
参考文献
[1] 徐飞.EDA技术与实践[M].北京:清华大学出版社,2011.[2] 王行,李衍.EDA技术入门与提高[M].西安:西安电子科技大学出版社,2005.[3] 刘昌华.数字逻辑EDA设计与实践[M].北京:国防工业出版社,2011.[4] 李蓉.基于VHDL语言的出租车自动计费器的设计[J].科技风,2008,24:33.巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计
附
录 JILIANG模块的VHDL程序 巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计 JIFEI模块的VHDL程序 巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计 SELTIME控制模块的VHDL程序 巢湖学院2013级《EDA技术》课程设计
出租车自动计费器设计 DELED模块的VHDL程序
第三篇:EDA出租车自动计费器
EDA课程设计报告
题目:出租车自动计费器
院系:
信工系
班级:
电信二班
学号:
111608060211
姓名:
陈森
目录
摘要...............................................................3 引言...............................................................4 第1章整体设计说明............................................5
1、设计要求................................................................5
2、设计内容及思路.................................................5 第2章各模块的介绍............................................6
1、电平转换模块.........................................................6
2、等待时间显示模块..................................................7
3、行驶里程显示模块..................................................8
4、计费显示模块.........................................................9
5、调用的计数器模块................................................10
6、顶层模块..............................................................10 第3章管脚锁定及硬件连线.................................12 第4章程序下载与调试.......................................14 设计心得体会..................................................15
摘要
Verilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种用文本形式来描述数字系统硬件的结构和行为的Verilog语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。现在,随着系统级FPGA以及片上系统的出现,软硬件协同设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计相结合。
本文介绍了一种采用单片FPGA芯片进行出租车计费器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用FPGA的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使出租车计费器体积更小功能更强大。本设计实现了出租车计费器所需的一些基本功能,计费包括起步价、行车里程计费、等待时间计费,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。主要包括采用了FPGA芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品升级。
引言
人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。现代电子产品在性能提高、复杂度降低的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数万个晶体管;后者的核心就是EDA技术[1]。没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的,反过来,生产制造技术的不断进步又必须对EDA技术提出新要求。EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(Verilog HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件[2]。
Verilog HDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此Verilog HDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用Verilog HDL来完成。另外,Verilog HDL还有以下优点:Verilog HDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心转移到了系统功能的实现和调试上,只需要花较少的精力用于物理实现;Verilog HDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用;Verilog HDL的设计不依赖于特定的器件,方便了工艺的转换。Verilog HDL是一个标准语言,为众多的EDA场上支持,因此移植性好。
第1章整体设计说明
1、设计要求
设计一个出租车自动计费器,计费包括起步价,行车里程计费、等待时间三部分,用三位数码管显示总金额,最大值为99.9元。起步价位5.0元,3km之内按起步价计费,超过3km,每km增加1元,等待时间计费为每分钟0.1元。用两位数码管显示总里程,最大值为99km,用两位数码管显示等待时间,最大值为99min。
2、设计内容及思路
此设计问题分为主控模块、里程计数模块、等待时间计数模块、计费模块和扫描显示模块。
在行车计费模块中,将行驶的里程数转换为与之成正比的脉冲个数。每100个clk1·模拟1km,输出100个脉冲。3km之内为起步价,即300个clk1之内为起步价,以后每km增加1元,即每10个clk1增加0.1元。在等待时间计数模块中,设置行驶状态输入信号为drive,行驶显示信号run,起步价预先固定在电路中,由drive信号异步置数至计费模块,同时使系统显示为当前行驶状态run,里程计数工作,到3km后,每10 个clk1脉冲使计费增
加0.1元,计费显示在数码管上。设置刹车信号break,等待状态显示信号pause,有break信号使系统显示为当前状态pause,等待时间计数模块工作,每分钟计费增加0.1元。
第2章各模块的介绍
1、电平转换模块
module EDGE_TO_PULSE(CLK,IN,OUT);input IN,CLK;output OUT;reg OUT,temp;always@(posedge CLK)
//上升沿有效
begin
if(!temp&&IN)
//上衣一个状态与当前状态不一样 OUT<=1;
//输出以为1 else if(temp==IN)
//上一个状态与当前状态一样 OUT<=0;
//输出为你0 temp<=IN;end endmodule 此模块的在输入行驶的前一个状态与后一个状态不一样时,在上升沿到来时输出高电平,当前一个状态与后一个状态一样时,在上升沿到来时,输出低电平。输出端接计费器的同步置位端,在开车时,将费用置到起步价5元。
模块如下
inst4INCLKOUTEDGE_TO_PULSE
仿真波形如下
2、等待时间显示模块
module TO_BCD2(IN,OUT_H,OUT_L);input [6:0]IN;output [3:0]OUT_H,OUT_L;assign OUT_H=IN/10;
//把输入的十进制数除以10取整得到十位数。assign OUT_L=IN%10;
//把输入的十进制数数除以10取余得个位数。Endmodule 此模块的功能是把7位二进制表示的十进制的输入数据输出成4为二进制表示的16进制数,显示在数码管上。把输入的十进制数除以10取整得到十位数。把输入的十进制数数除以10取余得个位数。模块如下:
TO_BCD2IN[6..0]OUT_H[3..0]OUT_L[3..0]inst7
仿真波形如下所示:
3、行驶里程显示模块
module TO_BCD(IN,OUT_H,OUT_L);input [6:0]IN;output [3:0]OUT_H,OUT_L;assign OUT_H=IN/100;
//行驶里程除以100取整得到最高位。
assign OUT_L=IN%100/10;//行驶里程除以100取余再除以10取整得到个位数,最低位为0.1千米位,就不再显示了。endmodule 此模块的功能跟等待时间显示模块类似,为了计费方便,把里程用三位十进制数表示,最低位表示0.1千米位,不再显示在数码管中,将行驶里程除以100取整得到最高位,除以100取余再除以10取整得到个位数。模块的图形如下所示:
TO_BCDIN[6..0]OUT_H[3..0]OUT_L[3..0] inst11 其仿真波形如图所示:
4、计费显示模块
module TO_BCD_B(IN,OUT_B,OUT_S,OUT_G);input [9:0]IN;output [3:0]OUT_B,OUT_S,OUT_G;assign OUT_B=IN/100;
//金额除以100得到最高位
assign OUT_S=IN%100/10;//金额除100取余再除10取整得到个位数。assign OUT_G=IN%10;//金额除以10取余得到最低位数据 endmodule 此模块的功能是把用10位二进制表示的3位十进制费用,转换为每一位都是用4位二进制表示的16进制数。用于显示在数码管上面。能够显示的最大金额为99.9元。金额除以100得到最高位,金额除100取余再除10取整得到个位数,金额除以10取余得到最低位数据。模块的形状如下所示:
TO_BCD_BIN[9..0]OUT_B[3..0]OUT_S[3..0]OUT_G[3..0]inst 其仿真波形如图所示:
5、调用的计数器模块
以上为调用的三个计数器模块,模块里程计数CNT_TIME和费用计数CNT_KM的输出接在一个或门上,当里程计数和等待时间任何一个计数溢出,都向计费CHARGE模块进位。CHARGE模块上面接着aclr异步清零和aset同步置位端。使得在车启动时把费用置位到5起步价5元,在清零信号发生后,把费用清零。
6、顶层模块
module CONTROLLER(clear,brake,drive,K_OR_T,pause,run,EN_T,EN_K,min,km,CH
ARGE_EN);input clear,brake,drive,K_OR_T;output pause,run,EN_T,EN_K,min,km,CHARGE_EN;reg [6:0] min,km;reg pause,run,EN_T,EN_K;assign CHARGE_EN=(km>=30);always@(brake,drive)case({drive,brake})//定义2位二进制数来表示车的行驶状态
2'b10 :begin EN_K=1;EN_T=0;pause=0;run=1;end //drive为1,break为0的时候车处于行驶状态 2'b11 :begin EN_K=0;EN_T=1;pause=1;run=0;end //drive为1,break为1的时候车处于行驶过程中的等待状态
default :begin EN_K=0;EN_T=0;pause=0;run=0;end endcase always@(posedge K_OR_T,posedge clear)if(clear)begin km=0;min=0;end //当按下清零键的时候,使路程和等待时间都清零
else
case({drive,brake})2'b10 :km=km+1;
2'b11 :min=min+1;default :begin km=km;min=min;end endcase endmodule 该模块的功能是把其他模块连接起来,整体过程是drive信号出现时,车开始行驶,同时计费器初始化起步价为5元。当行驶路程达到3KM后,每增加1KM费用增加0.1元。在此同时,如果brake信号出现后,行驶里程停止计数,等待时间开始计时,每增加1分钟,费用增加0.1元。按下clear清零键后,行驶里程、等待时间和费用全部清零。模块如下: CONTROLLERclearbrakedriveK_OR_TpauserunEN_TEN_Kmin[6..0]km[6..0]CHARGE_ENinst5
顶层模块连线后的图形如下:
仿真波形如下所示:
第3章管脚锁定及硬件连线
所有模块写好,顶层模块连接好,编译无误,仿真以后就可以进行锁定
引脚了。
根据硬件资源和需要选择合适的引脚进行锁定,再根据实验手册锁定好以后的结果如下所示:
引脚锁定好以后,编译无误以后,接下来把导线连接好以后就可以下载了。
第4章程序下载与调试
点击programmer按钮进入下载页面:
选择好硬件以后,点击Start开始下载。调试好以后的结果如下:
设计心得体会
感谢学校给我们提供的EDA课程设计课程,通过本次课程设计,从中感触到了很多。
在课程设计的过程中,增强了同学之间的互动性,在此同时,也对以前学过的EDA知识有了更加深刻的理解。在设计过程中,总是遇到这样或那样的问题。有时发现一个问题的时候,需要做大量的工作,花大量的时间才能解决。自然而然,我的耐心便在其中建立起来了。为以后的工作积累了经验,增强了信心。
我认为,不仅仅是此次考查设计,在整个这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
通过这次设计,本人在多方面都有所提高。同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感谢我们的老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次设计的每个细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。
第四篇:自动洗衣机课程设计报告
课程设计
课程名称: 学院:专业: 姓名:学号: 年级:任课教师:
年月日
文档编写格式,本页在报告完成后删除
目录为参考格式,可根据具体情况修改,目录应为超链接形式。正文中文为宋体小四,其他(包含程序字体)为Consolas,段落间距1.3。除在附录总附上图纸外,还需要打印A3大小图纸两张,内容包括:
1、控制电路设计原理图,绘制软件为Altium Designer,右下角包含以下信息:大图名课程名称指导教师制图人班级学号姓名制图时间
2、系统仿真图(proteus),如无仿真则不用,但需绘制系统PCB(Altium Designer)。
原理图例:
目录
目录
键入章标题(第 1 级)..................................................................................................1 键入章标题(第 2 级)...............................................................................................2 键入章标题(第 3 级)...........................................................................................3 键入章标题(第 1 级)..................................................................................................4 键入章标题(第 2 级)...............................................................................................5 键入章标题(第 3 级)...........................................................................................6 1.1设计背景.............................................................................X 1.2设计要求.............................................................................X 1.3设计思路简介.........................................X 第2章系统开发平台与环境.................................X 1.1 XXXXXXXXX开发环境简介.........................................X 2.2 XXXXXXXXX开发环境简介............X.......................................第3章XXXX硬件系统设计过程...............................X 3.1 XXXX硬件系统总体框图.................................X 3.2 XXXX硬件系统元件选型.................................X 3.3XXXX硬件系统的设计方法................................X.......................................第4章XXXX系统软件设计.......................................X 4.1 程序流程图...........................................X 4.2程序源代码...........................................X..........................第5章系统仿真与调试..........................................X 5.1调试过程............................................X..........................第6章总结(心得体会)..............................................X 参考文献.................................................X 附录 控制电路图纸 仿真电路图纸 程序清单
第五篇:出租车计价器 硬件课程设计
硬件课程设计报告
题目:出租车计价器
目录
1. 引言....................................................................................................................................错误!未定义书签。
1.1设计目的................................................................................................................错误!未定义书签。1.2设计任务................................................................................................................错误!未定义书签。1.3设计思路................................................................................................................错误!未定义书签。
2.需求分析.............................................................................................................................错误!未定义书签。
2.1芯片原理................................................................................................................错误!未定义书签。2.1.1可编程计数器/定时器8253/8254原理.............................................................错误!未定义书签。2.1.2可编程外围接口芯片8255原理.......................................................................错误!未定义书签。2.1.3 12864液晶显示器ST7920原理........................................................................错误!未定义书签。2.2硬件设计................................................................................................................错误!未定义书签。2.3软件设计................................................................................................................错误!未定义书签。2.3.1功能模块图.........................................................................................................错误!未定义书签。2.3.2程序流程图.........................................................................................................错误!未定义书签。2.3.3模块流程图.........................................................................................................错误!未定义书签。
3.详细设计.............................................................................................................................错误!未定义书签。
3.1程序模块分析........................................................................................................错误!未定义书签。3.1.1初始化模块程序分析.........................................................................................错误!未定义书签。3.1.2判断开关程序模块分析.....................................................................................错误!未定义书签。3.1.3圈数统计模块程序分析.....................................................................................错误!未定义书签。3.1.4计算里程模块程序分析.....................................................................................错误!未定义书签。3.1.5显示模块程序分析.............................................................................................错误!未定义书签。3.1.6结束模块程序分析.............................................................................................错误!未定义书签。3.2程序代码................................................................................................................错误!未定义书签。
4.5.6.程序结果.............................................................................................................................错误!未定义书签。分析与测试.........................................................................................................................错误!未定义书签。体会.....................................................................................................................................错误!未定义书签。
附录A:参考文献.....................................................................................................................错误!未定义书签。
一、引言
1.1设计目的
现在各大城市出租车已经成为了一种重要的交通工具,当然出租车的收费问题也成了人们关注的焦点,那么怎么样才能实现一种合理的收费方式让大家都认可呢?在这种要求下,出租车自动计价器就走进了人们的生活,当然这就要求有一种合理公正的计价器收费方式。这不仅关系到出租车计价器的市场,也影响这出租车的市场,这就要求我们设计出更好的计价器来满足人们的需求。
本设计是关于出租车计价器的设计。在本次设计中,我以计价器的基本功能作为设计的重点。为了完成上述设计,我们采用了8254、8255等芯片,用计算机汇编语言进行软件功能的实现。
1.2设计任务
1.实现一个出租车计价器,可以显示起步价。2.一个键来控制是否到达终点,是否计价要清零。3.基于路程的出租车计价方式。
1.3设计思路
利用直流电机来模仿出租车轮子的转动来计算出租车行进的路程。将直流电机的直流端与滑动变阻器相连,通过人工控制滑动变阻器来模拟出租车的行进;并将计数端与8253CLK0端相连,GATE0接高电平,工作方式为方式二。直流电机每转1000圈,8253输出一个高电平,假设出租车已经走了1公里。同时将8253OUT0接入8255方便CPU读取。再将8255与ST7920显示器相连,CPU通过控制8255来控制显示,一旦8255从8253读入一个高电平,则公里数加一,同时价格相应增加。另有一个开关连入8255,用以判断出租车计价器是否启动。
二、需求分析
2.1芯片原理
本节主要在介绍本次设计所用到的芯片的原理,共有可编程计数器/定时器8253/8254、可编程外围接口芯片8255和12864液晶显示器ST7920原理三种芯片。
2.1.1可编程计数器/定时器8253/8254原理
图2-1 8254内部结构图
从图2-1可见,8254内部包含数据总线缓冲器、读/写控制逻辑、控制字寄存器和3个结构完全相同的计数器,这3个计数器分别称为计数器0、计数器1和计数器2。
图2-2 8254管脚图
A1、A0:地址输入线,用来控制8253内部的4个端口,即3个计数器和1个控制字寄存器与CPU系统地址线相连。
CLK0-2:时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。CLK可以是系统的时钟脉冲,也可以由系统时钟分频或者其他脉冲源提供。当用于定时时,这个脉冲必须是均匀的、连续的、周期精确的,而用于计数时,这个脉冲可以是不均匀的、断续的、周期不定的。
GATE0-2:门控输入端,用于外部控制计数器的启动计数和停止计数的操
作。两个或两个以上计数器连用时,可用此信号同步,也可用于与外部某信号的同步。
OUT0-2:计数输出,当计数器从初值开始完成计数操作进,OUT引脚输出相应的信号。
8253的方式控制字
图2-3 8254控制字图
本设计中8254的功能
只是用通道1,采用方式三。采用二进制计数,输入0FFFH。先输入低字节,再输入高字节。当8254从0FFFFH递减到159FH时(即转了60000圈时),8254向总线发信号使程序向下进行。
2.1.2可编程外围接口芯片8255原理
内部结构如图所示,由以下4个部分组成:
图2-4 8255内部结构图
(1)输入/输出端口A、B、C。这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。A口和B口是一个独立的8位I/O口。C口:可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。
(2)A组和B组控制电路。这是两组根据CPU命令控制8255A工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255A的工作方式,也可以根据编程命令来对C口的指定位进行置/复位的操作。A组控制电路用来控制A口及C口的高4位;B组控制电路用来控制B口及C口的低4位
(3)读/写控制逻辑。(同上:它负责管理8255A的数据传输过程。它接收CS*及RD*、WR*、RESET,还有来自系统地址总线的口地址选择信号A0和A1。将这些信号组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令发给这两个部件,以完成对数据、状态信息和控制信息的传输。)
(4)数据总缓冲器。(同上:它是8位的双向的三态缓冲器。作为8255A与系统总线连接的界面,输入/输出的数据,CPU的编程命令以及外设通过8255A传送的工作状态等信息,都是通过它来传输的。)
如图所示8255A的芯片引脚信号。除了电源和地以外,其他信号可以分为两组:
图2-5 8255管脚图
1.和外设一边相连的: PA7-PA0:A组数据信号
PB7-PB0:B组数据信号 PC7-PC0:C组数据信号 2.和CPU一边相连的:
RESET:复位信号,低电平有效。当RESET信号来到时,所有内部寄存器就被清除,同时,3个数据端口被自动设为输入端口。
D7-D0:它们是8255A的数据线,和系统数据总线相连。
CS*:芯片选择信号,低电平有效。在一个系统中,一般根据全部接口芯片来分配若干较低位地址(比如A5、A4、A3)来组成各种芯片选择码,当这几位地址组成某一个代码时,译码器便往8255A的CS*端输出一个低电平,于是8255A被选中。只有当 CS*有效时,读信号RD*和写信号WR*才对8255A有效。
RD*:芯片读出信号低电平有效。WR*:芯片写入信号低电平有效。8255的方式控制字格式
图2-6 8255控制字图
本设计中8255的功能
8255PA0-PA7和PC0-PC2与ST7920相连,控制输出。PB0与8253的OUT1相连,读入8253OUT1 的数据。PB1与开关K0相连,读入K0的数值用于确定是否开启计价器。
2.1.3可编程外围接口芯片8255原理
ST7920控制器系列中文图形液晶模块的软件特性主要由ST7920控制驱动器决定。ST7920同时作为控制器和驱动器,它可提供33路com输出和64路seg输出。在驱动器ST7921的配合下,最多可以驱动256×32点阵液晶。
ST7920是台湾矽创电子公司生产的中文图形控制芯片,它是一种内置12864汉字图形点阵的液晶显示控制模块,用于显示汉字及图形。该芯片共内置8192
个中文汉字(16×16点阵)、128个字符的ASCII字符库(8×16点阵)及64×2256点阵显示RAM(GDRAM)。
为了能够简单、有效地显示汉字和图形,该模块内部设计有2MB的中文字型CGROM和64×256点阵的GDRAM绘图区域;同时,该模块还提供有4组可编程控制的16×16点阵造字空间;除此之外,为了适应多种微处理器和单片机接口的需要,该模块还提供了4位并行、8位并行、2线串行以及3线串行等多种接口方式。利用上述功能可方便地实现汉字、ASCII码、点阵图形、自造字体的同屏显示,所有这些功能(包括显示RAM、字符产生器以及液晶驱动电路和控制器)都包含在集成电路芯片里,因此,只要一个最基本的微处理系统就可以通过ST7920芯片来控制其它的芯片
图2-7 ST7920外观尺寸图
本设计中ST7920的功能
用于显示出租车行驶路程与应收费用。
2.2硬件设计
其中,8253GATE1连+5V高电平,直流电机连0~+5V,8253连280h~287h,8255连288h~28fh。8255PA0-PA7连ST7920显示器D0-D7,PC0连DI,PC1连RW,PC2连E。开关K0连8255PB0。8253CLK1连直流电机计数端。
0~+5V直流电机D0-D7计数ST7920显示屏DIRWE+5VGATE1CLK1PA0-PA7+5VPC0PC1PC2开关K0PB0+5V8253CS8255CS280H-288H289H-28FH总线图2-8硬件连接图
实际连接图如下图所示
图2-9硬件实际连接图
2.3软件设计 2.3.1功能模块图
本节先给出一个程序的功能模块图。
出租车计价器系统计价器开关功能模块读入直流电机转圈数模块ST7920显示功能模块根据里程计算价格模块
图2-10软件功能模块图
2.3.2程序流程图
本节先给出一个程序的整体流程图。
开始结束8253初始化液晶显示屏初始化8255初始化是计价器是否开始工作通过8255读入b0否是否有键盘输入否液晶显示屏初始化是液晶显示屏调用显示价格功能从直流电机读入输入圈数将更改过的路程在显示器中显示出来读到一定圈数走的路程加一比较路程是否大于3公里是价格为(路程-3)*2+7 元将储存的显示字符串内路程价格改为目前路程价格否价格为7元
图2-11软件程序流程图
2.3.3模块流程图
如果对整个程序进行细分则可以分为初始化模块,判断开关模块,圈数统计模块,计算里程模块、结束模块和显示模块。其中初始化模块是8253芯片、8255芯片和显示屏的初始化。判断开关模块是对8255的b0端是否有高电平进行判断。
圈数统计模块是对直流电机传入8253中高电平的数量进行圈数统计。计算里程模块是对里程及价格进行计算的模块。结束模块是程序结束的操作与方法。显示模块是控制显示屏显示计算模块的结果。
初始化模块显示模块调用关判断开关模块开结束模块圈数统计模块计算里程模块调用显示模块图2-12软件模块流程图
三、详细设计
3.1程序模块分析
我们将按模块分析程序的功能并给出模块内的功能流程图。
3.1.1初始化模块分析
在初始化模块中,我们定义了需要使用的8255和8254的接口,需要使用的变量如JSS,要输出的字符串等,初始化了DS,完成了8255的初始化以及显示屏的初始化。其流程图为
开始图3-1初始化模块流程图
3.1.2判断开关模块分析
以上为判断开关模块,在判断开关模块中,系统读入8255PB0的电平,如果是高电平则程序继续进行,如果是低电平则程序调用chushi函数,用屏幕显示“空车欢迎乘坐”,并继续度8255PB0直到有高电平为止。其流程图如下所示:
8255PB0是否为高电平是圈数统计模块否Chushi函数计数变量和对应的字符串置零显示 空车 欢迎乘坐 调用显示模块
图3-2判断开关模块流程图
3.1.3圈数统计模块分析
在圈数统计模块中,我们将直流电机计数端连入8254CLK1中(8253采用方式三),在CLK1中读所记的数,从0FFFFH向下计,一直计到159FH,即转了6000圈后,进入程序的下一段。其流程图如下所示:
读8254计数值否是否到159FH以下是重新将8254计数初值设为0FFFFH计算里程模块
图3-3圈数统计模块流程图
3.1.4计算里程模块分析
我们用地址JSS里表示已经走过的公里,即8254传过来的高电平,同时我们采用价格公式来计算价格,将其里程和价格对应的中文字码表存入要显示的字符串中。我们用地址JSS里表示已经走过的公里,即8254传过来的高电平,同时我们采用价格公式来计算价格,将其里程和价格对应的中文字码表存入要显示的字符串中。
计算公式为: 价格=(里程-3)* 2……(里程>3)
价格= 7…………………..(里程<=3)并调用显示模块来显示这些字码其流程图如下所示:
圈数统计模块计数值JSS加一并十进制化里程数加一里程数是否是大于3是价格为(里程-3)*2调用显示模块否价格为7
图3-4计算里程模块流程图
3.1.5显示模块分析
在显示模块中,我们使用ST7920显示我们要显示的两行字符串。我们采取先显示第一行,再显示第二行的方法,只是用ST7920的中间两行。
调整显示屏指针指向第二行调整显示屏指针指向第三行调整字符串指针指向第一个字调整字符串指针指向第九个字输出输出延时延时
图3-5显示模块流程图
3.1.6结束模块分析
结束模块在程序的尾部在结束模块中,我们规定只要在键盘上按任意一个键就会结束整个程序。如果无键按下,则程序自动跳转到程序头部。其程序流程图如下图所示:
调用DOS中断是否有键按下是结束否判断开关模块
图3-6结束模块流程图
3.2程序代码
IO8253A
EQU 280H IO8253B
EQU 281H IO8253C
EQU 283H
DATA
SEGMENT HZ DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH
DW BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放原始输出 HZ_TAB DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH
DW 0BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放要输出的值 HZ_BG DW 0BFD5H,0B3B5H,0A2A0H,0A2A0H,0BBB6H,0D3ADH,0B3CBH,0D7F8H
DW 0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H;存放“空车欢迎乘坐”
HZ_ADR DB ?
;存放显示行起始端口地址 JSS
DW 0000H DII
DW 0000H GAO
DW 0000H ZHE
DW 0000H NUMBER
DW 0A3B0H,0A3B1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7H,0A3B8H,0A3B9H DATA
ENDS IO_ADDRESS
EQU 288H
CODE SEGMENT ASSUME CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX
MOV DX,IO_ADDRESS ADD DX,3 MOV AL,82H OUT DX,AL
;8255初始化 MOV AL,0FFH MOV DX,300H OUT DX, AL CALL CLEAR
;LCD 清除
LLL:
MOV DX,IO_ADDRESS ADD DX,1 IN AL,DX
;判断开关是否打开 AND AL,01H CMP AL,01H JZ F0 CALL CHUSHI JMP LLL F0: MOV AL,01110110B MOV DX,IO8253C OUT DX,AL
;8254初始化 MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH
;设置计数初值0FFFFH OUT DX,AL F1: MOV AL,01000000B
MOV DX,IO8253C OUT DX,AL MOV DX,IO8253B
IN AL,DX MOV AH,AL IN AL,DX XCHG AH,AL CMP AX,159FH
;查看是否下降到159FH JA F1
;不满足条件继续读值
MOV AL,01110110B
;重置8253 MOV DX,IO8253C OUT DX,AL MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH OUT DX,AL
CALL DISP
;调显示子程序
CALL DDSP
CALL DELAY PUSH DX
MOV AH,06H MOV DL,0FFH INT 21H POP DX
JZ LLL
MOV AH,4CH
;退出
INT 21H L1:
JMP
START;L1
CHUSHI PROC NEAR
LEA SI, HZ_TAB LEA DI,HZ MOV CX,0FH F3: ADD SI,2 ADD DI,2 MOV AX,[DI] MOV [SI],AX LOOP F3
;重置HZ_TAB
MOV AX,0000H LEA BX,JSS MOV [BX],AX LEA BX, HZ_BG MOV CH,2
CALL LCD_DISP LEA BX, HZ_BG MOV CH,3
;显示“空车欢迎乘坐” CALL LCD_DISP RET CHUSHI ENDP
DDSP
PROC NEAR
LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX]
MOV BP,AX AND BP,00FFH ADD BP,BP
MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+6],DX
;将JSS中低八位传入HZ_TAB MOV BP,AX AND BP,0FF00H ROR BP,8 ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+4],DX
LEA BX, HZ_TAB
MOV CH,2
息
CALL LCD_DISP LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AX,0003H
JBE L3 CALL BJ LEA BX,JSS JMP L4
L3:MOV BP,0007H
ADD BP,BP MOV DX,WORD PTR[BP+SI ] MOV WORD PTR[DI+24],DX JMP L4 L4:
LEA BX, HZ_TAB
MOV CH,3
CALL LCD_DISP RET DDSP
ENDP
BJ
PROC NEAR
LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AL,03H
;将JSS中高八位传入HZ_TAB
;显示第2行信;比较路程与3的大小;路程比3小的情况
;显示第3行信息
JAE BJ1 SUB AH,01H ADD AL,0AH SUB AL,03H AAS
;路程减三并十进制化 JMP BJ2 BJ1:
SUB AX,0003H BJ2: MOV CX,AX AND AX,00FFH ADD AL,AL AAA ADD AX,07H AAA
LEA BX,DII MOV [BX],AX;DII MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+24],DX
MOV AX,CX SHR AX,8 AND AX,00FFH ADD AL,AL
AAA LEA BX,GAO MOV [BX],AX;GAO LEA BX,DII MOV DX,[BX];DII AND AX,00FFH AND DX,0FF00H SHR DX,8 AND DX,00FFH ADD AL,DL
AAA LEA BX,ZHE MOV [BX],AX;ZHE MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI]
;路程加七并十进制化;先计算个位
;十位相加
;再加进位
MOV WORD PTR[DI+22],DX
;再计算十位 LEA BX,ZHE MOV DX,[BX] LEA BX,GAO MOV AX,[BX] AND DX,0FF00H AND AX,0FF00H SHR AX,8 SHR DX,8 ADD DL,AL
;百位加进位 AAA MOV BP,DX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+20],DX
;最后计算百位 RET BJ ENDP
DISP
PROC NEAR
;显示子程序
PUSH DX
LEA BX, JSS
MOV AX,WORD PTR[BX]
ADD AL,01H
CMP AL,09H
;判断是否<=9
JLE NUM
;若是则为'0'-'9',ASCII码加30H
MOV AL,00H
ADD AH,01H
CMP AH,0AH
JZ L2 NUM:
MOV WORD PTR[BX],AX
ADD AL,30H
ADD AH,30H
MOV DL,AH
MOV DH,AL
MOV AH,02H
;屏幕显示
INT 21H
MOV DL,DH
MOV AH,02H
;屏幕显示
INT 21H
MOV DL,0DH
;加回车符
INT 21H
MOV DL,0AH
;加换行符
INT 21H
POP DX
RET
;子程序返回 DISP ENDP L2: MOV AH,4CH
;退出
INT 21H
CLEAR
PROC
MOV AL,0CH
CLEAR
FUNCUP
;
;
;
FUNCUP
LCD_DISP
;
址
DISP_SEC:
NEXT:
CONTINUE:
MOV DX, IO_ADDRESS OUT DX,AL
;设置CLEAR命令 CALL CMD_SETUP
;启动LCD执行命令 RET
ENDP
PROC MOV AL, 0FH
;LCD功能设置命令 OUT DX, AL CALL CMD_SETUP MOV AL, 34H
;LCD显示状态命令 OUT DX, AL CALL CMD_SETUP RET
ENDP PROC LEA BX, HZ_TAB CMP CH, 2 JZ DISP_SEC MOV BYTE PTR HZ_ADR, 88H
;第三行起始端口地ADD BX,16
;指向第二行信息 JMP NEXT MOV BYTE PTR HZ_ADR,90H MOV CL,8
PUSH CX MOV AL,HZ_ADR MOV DX, IO_ADDRESS OUT DX, AL CALL CMD_SETUP
;设定DDRAM地址命令 MOV AX,[BX] PUSH AX MOV AL,AH
;先送汉字编码高位 MOV DX,IO_ADDRESS OUT DX,AL CALL DATA_SETUP
;输出汉字编码高字节
CALL DELAY
;延迟
POP AX
MOV DX,IO_ADDRESS
OUT DX, AL
CALL DATA_SETUP
;输出汉字编码低字节
CALL DELAY
INC BX
INC BX
;修改显示内码缓冲区指针
INC BYTE PTR HZ_ADR
;修改LCD显示端口地址
POP CX
DEC CL
JNZ CONTINUE
RET LCD_DISP
ENDP CMD_SETUP
PROC
MOV DX,IO_ADDRESS
制端口
ADD DX,2
NOP
MOV AL,00000000B
(LCD I端=0,W端=0)
OUT DX, AL
CALL DELAY
NOP
MOV AL,00000100B
=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL, 00000000B
0)
OUT DX, AL
CALL DELAY
RET CMD_SETUP
ENDP DATA_SETUP
PROC
MOV DX,IO_ADDRESS
口
ADD DX,2
MOV AL,00000001B
(LCD I端=1)
OUT DX, AL
NOP
CALL DELAY
;指向8255端口控
;PC1置0,PC0置0
;PC2置1(LCD E端
;PC2置0,(LCD E端置
;指向8255控制端
;PC1置0,PC0=1
MOV AL,00000101B
;PC2置1(LCD E端=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL, 00000001B
;PC2置0,(LCD E端=0)
OUT DX, AL
NOP
CALL DELAY
RET DATA_SETUP
ENDP DELAY
PROC
PUSH CX
PUSH DX
MOV CX, 0FFFH X1:
LOOP
X1
POP DX
POP CX
RET DELAY
ENDP
CODE ENDS
END START
四、程序结果
我们利用8254、8255、ST7920显示屏、直流电机等制作出了一个出租车计价器有专用键可以表示是否空车,同时利用直流电机模拟车轮运动,通过路程计算价格,成果如下图所示:
图4-1程序结果图
五、分析与测试
程序中,我遇到的最大的难题就是如何完成正确的十进制计算,因为所有的计算指令都是十六进制的,虽然有的计算里有类似AAA这样的调整指令,但是很多时候就不一定记得起来加上。同时由于需要根据数字来查表对应相应的字符码,而且我是建立一个从零到九的数组,而由于计算错误导致经常出现乱码,而且比较难找到相应的错误。而且有些计算没有十进制转换指令,需要自己编写。
同时我认为我利用提前存储变量来表示走过的路程比利用堆栈要好,因为堆栈容易记混,而变量有独特的名字,利于记忆与调用。而且易于清零、增减。
六、心得体会
这次课程设计中,令我印象最为深刻的就是我们应该有一种坚持的精神,有时候几个小时都没有成果,找不到BUG。显示的就是有问题,这时候我们应该有一种坚持下去的毅力,积极询问老师同学,问题的解决就很快了。
同时我发现编程习惯非常重要,应该有一个提前的规划,不能想到哪写到哪,这样的话,后期的DEBUG会非常麻烦,因为自己也看不懂自己的代码,我们都应该有规范化的代码意识,这样的编程能力才能上升。
参考文献
[1]周荷琴,吴秀清,《微型计算机原理与接口技术》,合肥:中国科学技术大学出版社 2008。[2] 曹国清,《数字电路与逻辑设计》,徐州:中国矿业大学出版社 2003。[3] 8255芯片原理:http://baike.baidu.com/link?url=KHojvZzBGmo26_6iYGTdrdqH6PxQbM1Hnnc8hWQNPIp60L7TWG5LZu_ppSkXo5maU5M4APs4qCGSudiqZ0bdl_ [4]ST7920芯片原理:http://wenku.baidu.com/view/0dafd9232f60ddccda38a0fa.html访问时间2013/10/15 [5]ST7920中文字码表:http://wenku.baidu.com/view/d4abe628647d27284b735127.html访问时间:2013/10/15