网站大量收购独家精品文档,联系QQ:2885784924

EDA出租车计费器设计讲述.docx

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EDA出租车计费器设计讲述

出租车计费器 第 PAGE \* Arabic \* MERGEFORMAT 28页,共28页 出租车计费器的总体设计 1.1 出租车计费设计 该出租车计费器按下开关S1后开始计费和计里程数,分为白天和夜晚。当拨动开关K2为0时,系统使用程序设置的起步价,白天起步价是3元,准行2公里,以后2元/公里;夜晚起步价是9元,准行2公里,以后3元/公里。当拨动开关K2为1时,可由矩阵键盘输入起步价0~9元。当路程大于200公里时,价格会在原来的基础上加50元。 1.2 基本设计思想 时钟输入为一个1KHz的系统时钟,直流电机模块每转一圈输出一个脉冲信号给CPU,另外用按键模块的S1 来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。直流电机模块用来模拟出租车的车轮子,每转动一圈认为是行走1 米,所以每旋转1000 圈,认为车子前进1 公里。系统设计是需要检测电机的转动情况,每转1000圈,分频模块输出一个下降沿信号。车费和里程数在一个8位7段数码管上显示,前4位显示里程,后4位显示费用。路程的单价由16*16点阵显示,拨动开关K1为0时,2元/公里,点阵显示2;拨动开关K2为1时,3元/公里,点阵显示3。 出租车计费器的总体实现 2.1 系统总体框图 该出租车计费器由一个VHDL程序构成,不同功能的实现分别是多个进程控制,主要进程有: 分频模块进程:将每1000个电机脉冲转化为1个输出脉冲; 计程模块进程:记录已行里程; 计费模块进程:计算应付车费; 4*4矩阵键盘进程:设置起步价; 数码管显示进程:将已行里程和应付车费显示在数码管上; 16*16点阵显示进程:显示当前状态的每公里单价。 计程模块 分频模块 计费模块 总程序 (系统时钟) 4*4矩阵键盘 16*16点阵 数码管 图2-1 系统框图 2.2 程序流程图 (1) 分频模块: Y rst或motor信号发生变化 Rst=’0’ Count=0 Temp=0 N motorevent and motor=1 Y Y Count=0 Temp=not temp Count499 N Count=count+1 Glclk=temp 图2-2 分频模块 (2) 计程模块 Meter1=0; Meter10=0; Meter100=0; Meter1K=0; Y rst或glclk信号发生变化 Rst=’0’ N glclkevent and glclk=0 Y Meter1,meter10,meter100,meter1000代表的四位十进制数加1 图2-3 计程模块 (3) 计费模块 Money1=qibujia; Money10=0; Money100=0; Money1000=0; Y rst或clk信号发生变化 Rst=’0’ N clkevent and clk=0 Y 根据路程计算出总价,再把总价的千位、百位、十位、个位取出显示。 图2-4 计费模块 2.3 出租车计费器各功能的实现 (1)分频模块:直流电机motor每输出1000个脉冲,分频器glclk输出一个下降沿脉冲,表示电机已走1公里,meter1加1. if rst=0 then count=0; temp=0; elsif (motorevent and motor=1) then if count499 then count=0; temp=not temp; else count=count+1; end if; end if; glclk=temp; (2)计程模块:glclk的下降沿来临时,路程的个位加1,满9往高位进一,同时低位归0。 process(glclk) begin if(Rst=0) then Meter1=0; Meter10=0; Meter100=0; Meter1K=0; elsif(glclkevent and glclk=0) then if(Meter1=9) then Meter1=0; if(Meter10=9) then Meter10=0; if(Meter100=9) then Meter100=0; if(M

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档