- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- DeepMind研发的围棋AIAlphaGo系统是如何下棋的?讲述.docx
- DLGT-02钢筋混凝土杆塔组立安装作业指导书讲述.doc
- 第13章 图纸集的创建与发布综述.ppt
- DFS服务器相关配置讲述.docx
- DL160G6安装RedhatEnterpriseLinux5.3OS讲述.doc
- DISC行为风格沟通x讲述.pptx
- DMC仿真算例讲述.doc
- DN100电子除垢仪和电子除垢仪价格讲述.doc
- DNV常用词汇讲述.doc
- DNA损伤及修复讲述.pptx
- 幼儿阅读的艺术-一起塑造孩子的阅读世界.pptx
- 社交媒体驱动营销-策略、监测与品牌提升.pptx
- 浙江省2025届高三下学期二模物理试题(附答案解析).docx
- 咨询行业专题研究演讲-研究成果案例分析.pptx
- 机器人编程教育:从理论到实践-大学生机器人编程技能培养.pptx
- 自我防护,校园更安全-提升安全意识,共建和谐校园.pptx
- 公益之光晚宴-汇聚爱心,传递希望.pptx
- [52053546]第38讲+第二次世界大战与战后国际秩序的形成+课件--2026届高三统编版(2019)必修中外历史纲要下一轮复习.pptx
- 校企协同育人中的数字化平台建设与应用.docx
- 培养创新思维的教育方法-创新教育专家演讲.pptx
文档评论(0)