电子设计资料-出租车计价器-程序

合集下载

出租车计价器(1)

出租车计价器(1)

出租车计价器一、设计要求设计并制作一台出租车计价器。

调试时采用小直流电机模拟车轮的转动,小直流电机转盘下装有一个霍尔传感器,电机转盘每转一圈,霍尔传感器产生一个脉冲,每转一圈代表1公里。

基本要求:(1)收费标准2元/ 公里(2)数据输出(字符型液晶LCD1602显示)单价输出3位路途输出5位总金额输出5位(3)按键(1个)系统复位(清零)、启动计价开关(4)拨码开关(1个)用于切换液晶显示。

二、系统设计(1)分析任务要求,写出系统整体设计思路通过分析,需要实现四个主要的功能模块,分别为脉冲计数模块、定时器计时模块、按键的处理以及LCD液晶显示模块等功能。

定时器计时模块主要完成从出租车启动开始计时,直到系统复位重新计时。

启动键触发定时器开始工作,而定时器的运行可以作为脉冲计数的标志,只要定时器计时在运行,每来一个中断都应该计数。

主程序完成键盘的扫描和按键的处理,查询脉冲产生的中断,并完成脉冲的计数。

每个脉冲代表1公里。

(2)选择单片机型号和所需外围器件型号,设计单片机硬件电路原理图采用MCS51系列单片机At89S52作为主控制器,外围电路器件包括LCD液晶模块、拨码开关、复位电路等。

LCD1602液晶模块用单片机的P0口、P2口直接控制。

P0口用于控制LCD的数据线,P2口用于控制LCD的控制线。

拨码开关使用上拉电路连接,向下拨动时为低电平,向上拨动时为高电平。

(3)分析软件任务要求,写出程序设计思路,分配单片机内部资源,画出程序流程图软件的任务要求包括定时器的设置、按键的扫描、按键的功能处理、脉冲的计数、定时器的计时以及总金额的计算等。

程序设计的思路:主程序采用计数器T0实现脉冲的计数,由于每个脉冲代表1公里,因此,当每产生一个脉冲,计价器按照收费标准计价。

主程序在初始化变量和定时器参数设置之后,进入一个循环结构。

三、实验步骤1、套件模块组成SXB-01:51_CPU Module V1.0SXB-03:DC Motor Module V1.0SXB-13:LCD Module V1.03、运行程序显示:(1)K1为高电平时显示:TIME:00:00:00 (出租车计时)DJ:2。

出租车计价器程序

出租车计价器程序
//取整为9r/s,计算得速度约64.476km/h。
float f; //里程数(Km)为简化运算以下全部取整数浮点数
int g; //千米数
uchar j; //千米个位
uchar k; //千米十位
uchar h; //总费用
uchar hge;//总费用个位
uchar hshi;//总费用十位
delay(5);
command(0x38);
delay(5);
command(0x38);
command(0x08); //显示关闭
command(0x01); //显示清屏
command(0x06); //显示光标移动设置
delay(5);
command(0x0C); //显示开及光标设置
}
//**********写数据至LCD************************
#define shuju P0//LCD1602 P0输出显示数据
//********位定义*****************************
sbit rs=P2^1; //LCD1602忙碌检测
sbit rw=P1^5; //LCD1602读写控制
sbit en=P1^6; //LCD1602使能端
}
//*******独立按键检测**********************
void key(void)
{
if(key1==0)
{
delay(15);
if(key1==0)//按键消抖
{
TR0=1;//打开定时器
flag=0;//标志位设置
flag1=1;
}
}
if(key2==0)

基于单片机的出租车计价器的设计

基于单片机的出租车计价器的设计

基于单片机的出租车计价器的设计一、设计目标:设计一个基于单片机的出租车计价器,能够准确计算乘客的乘车距离和费用,并能显示当前的计价信息。

二、设计原理:1. 距离测量:使用速度传感器和车轮直径来测量出租车行驶的距离。

2. 费用计算:根据距离和预设的计价规则,使用单片机进行费用计算。

3. 显示:使用LCD显示屏显示当前的计价信息和距离。

三、硬件设计:1. 单片机:选择合适的单片机,如ATmega8,作为主控制器。

2. 速度传感器:选择合适的速度传感器,如霍尔传感器,用于测量车轮转速。

3. LCD显示屏:选择合适的LCD显示屏,如16x2字符LCD,用于显示计价信息和距离。

4. 按键开关:设计合适的按键开关,用于启动计价器和调整设置。

四、软件设计:1. 初始化设置:在计价器启动时,进行LCD显示屏和速度传感器的初始化设置。

2. 距离测量:通过速度传感器读取车轮转速,根据车轮直径计算出租车行驶的距离。

3. 费用计算:根据距离和预设的计价规则,使用单片机进行费用计算,并将计算结果显示在LCD上。

4. 设置调整:设计按键开关用于调整计价规则和费率设置。

5. 实时显示:将计价信息和距离实时显示在LCD上,方便乘客查看。

五、测试和验证:进行功能测试和实地验证,确保计价器的准确性和稳定性。

包括距离测量的准确性、费用计算的准确性以及LCD显示的正确性。

六、优化和改进:根据测试结果和用户反馈,对计价器进行优化和改进,提高其性能和用户体验。

总结:基于单片机的出租车计价器是一个实用的设计,能够帮助出租车司机和乘客准确计算乘车距离和费用。

通过合理的硬件设计和软件编程,可以实现距离测量、费用计算和实时显示等功能。

在实际使用中,需要进行充分的测试和验证,以确保计价器的准确性和稳定性。

通过不断优化和改进,可以提高计价器的性能和用户体验,满足用户的需求。

基于单片机的出租车计价器的设计

基于单片机的出租车计价器的设计

基于单片机的出租车计价器的设计摘要随着科学技术的发展,电子计算机技术在许多领域得到了广泛的应用,出租车行业也不例外。

本文介绍了一种基于单片机的出租车计价器的设计,该计价器基于单片机AT89C52,实现了出租车行程一口价以及分段式计价的功能,利用程序设计技术实现了对单片机的编程控制,并运用到实际的出租车计价器中。

关键词:出租车计价器;单片机;AT89C52;程序设计1 绪论随着科技的进步,电子技术越来越普及,出租车也不例外,出租车行业的客观情况也发生了根本的变化。

既有出租车公司和创业者将单片机技术应用于出租车行业,以提高出租车行业的秩序,确保出租车行业中的乘客利益,稳定出租车行业的行情,也给其提供了很有希望的发展前景。

2 计价器的设计2.1 单片机原理单片机是由微处理器、存储器、接口和其他组成部分组成的一种集成电路,它具有结构简单、操作灵活、功耗低、价格便宜等优点。

在本次的出租车计价器设计中,将使用一种称为AT89C52(80C51系统)的单片机作为控制单元。

该单片机具有操作速度快,程序容量大,输入和输出可配置端口及特殊功能如定时器、串口等的优点,可以很好地实现出租车计价器的功能。

2.2 硬件设计本次出租车计价器的硬件设计以单片机AT89C52为核心,与其他电路芯片和外部元件连接,实现计价功能,设计的硬件电路图如下:图1 出租车计价器电路示意图电路中,五个按键K1至K5分别对应“起程”、“重新计算”、“下程”、“保险门”,“丝印台”;LCD123是用来显示当前行程总计程以及应付金额;电机M1用来驱动出票机打印票据;电磁铁的驱动电路依靠单片机AT89C52的P3口来控制,使其开及关。

2.3 软件设计在软件设计中,要求单片机AT89C52能够接收到外界的按键信号,发出电磁铁的控制信号,控制LCD123显示以及打印机的输出,借助C语言和Keil μVision 3.0软件编程,将原理图转化为相应的程序代码,使得计价器的功能及其性能更加可靠。

出租车计价器的设计(最终稿)

出租车计价器的设计(最终稿)
在设计过程认真学习了相关的知识,极大地拓宽了我的知识面,我感到收获不小。从开始熟悉这些知识到对整体设计的了解,再从概要设计、详细设计到开始使用软件,以及最后的调试,整个过程感觉很充实。虽然遇到了不少困难,但当我通过自己查资料,向指导老师请教以及与同学互讨论,而设计出解决方案并成功实现时,那种成就感和满足感足以忘却所有的辛苦。但是由于毕业设计时间较短和自己知识的不足,所以该设计还有许多不尽如人意的地方,可能在实际应用中有些功能不到位。
设计题目:出租车计价器的设计
系别:
专业:计算机科学与技术
组别:第十组
学生姓名:000000学号:00000013
起止日期:2008年05月25日~2008年06月15日
指导教师:
教研室主任:
第一章
1.1
设计要求:
1.3Km起计价,起始价5元,每公里1元;
2.传感器输出脉冲为2个/m;
3.每0.5Km改变一次显示,且提前显示(现实里程数和钱数);
五个模块中:脉冲产生模块由CP电源构成,先是模块用7447N驱动芯片和SEVEN_SEG_COM_A显示器构成,计数模块中千进制计数器由4块74LS290D组成。需重点设计为计数和逻辑比较模块。
第三章
3.1
方案一:
采用数字电路控制。其原理方框图如图3-1所示。采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价。
4.画出电路原理图。
设计要求:
1.先进行方案论证,画出功能图;
2.分析要用到的电路模块;
3.使用EWB软件仿真。
1.2
设计思想:
首先,作为计价器电路必须具备里程数显示计价显示自动更新功能,初步计划用千进制计数器配合四位显示器实现;其次,电路中的计价显示应具备判断功能,计划用四位比较器实现;最后,计价器外部机械传感脉冲用cp电源模拟。(本设计题目旨在通过亲自动手实践加深对数字逻辑课程中涉及的硬件系统的工作原理的理解,并掌握初步应用它们基本功能的技能。故本课题的设计应做到所有功能的实现都必须用逻辑门电路、逻辑芯片等非可编程逻辑器件来实现。)

单片机课程设计--出租车计价器

单片机课程设计--出租车计价器

摘要出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。

而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。

而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。

本设计的是一个基于单片机AT89S52的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。

复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。

时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。

在上电时LED数码管显示最初的起步价,里程收费,等待时间收费三种收费。

按暂停键,计价器可暂停计价,按查询键,在LED数码管上可以显示运行时等待的时间。

通过计算可以得出总共的费用和总的路程。

在这里主要是以AT89S52单片机为核心控制器,P0口、P2 口接两片四合一数码管,P1口接按键,通过按键输入。

关键词:单片机 AT89S52;LED数码管;出租车计费器;目录1 概述 (1)1.1 课题简介 (1)1.2 功能要求 (1)2 系统总体方案及硬件设计 (2)2.1 系统工作原理及总体方案 (2)2.2 单片机最小系统单元 (3)2.3 霍尔传感器检测单元 (3)2.4 键盘调整单元 (5)2.5 显示单元 (5)3 软件设计 (7)3.1系统主程序 (7)3.2 按键扫描程序 (8)3.3 中断程序 (9)3.4 计算程序 (10)3.5 显示程序 (10)4 实验仿真 (12)4.1 Proteus介绍 (12)4.2 调试与测试 (12)4.3 里程计价测试 (12)5 课程设计体会 (14)参考文献 (15)附1:系统原理图 (16)1 概述1.1 课题简介出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。

出租车计价器方案设计书程序原理图实物图

出租车计价器方案设计书程序原理图实物图

目录摘要 (Ⅰ)第1章引言 (1)1. 1 出租车计价器概述····················································· (1)1. 2 本设计任务······················································ (1)1.2.1 设计任务······················································ (1)1.2.2 设计要求······················································ (1)1. 3 系统主要功能······················································ (2)第2章出租车计价器硬件设计 (3)2.1 系统的硬件构成及功能························································ (3)2. 2 AT89S51单片机及其引脚说明··························································42.3 AT24C02引脚图及其引脚功能 (6)2. 4 AT24C02 掉电存储单元的设计·························································62.5 里程计算、计价单元的设计 (7)2.6 数据显示单元设计························································ (8)第3章系统软件设计 (10)3. 1 系统主程序设计························································ (10)3. 2 定时中断程序设计····················································· (12)3. 3 里程计数中断服务程序设计····················································· (12)3.4 中途等待中断服务程序设计····················································· (12)3. 5 键盘服务程序设计····················································· (12)3. 6 显示子程序服务程序设计····················································· (12)第4章系统调试与测试结果分析 (13)4. 1 使用的仪器仪表························································ (13)4.2 系统调试 (13)第1章引言本次课程设计利用单片机技术来实现一台多功能出租车计价器,具有性能可靠、电路简单、成本低等特点。

出租车计价器(电子专业课程设计)

出租车计价器(电子专业课程设计)

出租车计价器摘要:出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。

它关系着交易双方的利益。

具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。

因此,汽车计价器的研究也是十分有一个应用价值的。

该系统由AT89S51单片机控制,满足计程、计时、计费、存储等多种计量功能为一体的出租车计价器的实用要求。

相比于普通的模拟电路控制,采用单片机进行的设计相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。

针对计费模式的切换,通过软件编程就可以轻易而举的实现。

避免了机械开关带来的不稳定因素。

关键词:出租车计价器单片机控制目录第一章前言 (1)第二章设计要求 (2)2.1 基本功能 (2)2.3 扩展功能 (2)第三章系统的组成及工作原理 (3)3.1 系统的硬件构成及功能 (3)3.2 AT89S51单片机及其引脚说明 (4)第四章硬件电路方案设计 (7)4.1方案比较与确定 (7)4.2 里程计算、计价单元的设计 (7)4.3 显示单元电路设计 (9)4.4 键盘显示模块设计 (10)第5章系统的软件设计 (12)5.1 系统主程序设计 (12)5.2 定时中断服务程序 (14)5.3 显示服务程序 (14)5.4 键盘服务程序 (15)第6章系统调试与测试结果分析 (17)6.1 使用的仪器仪表和工具 (17)6.2 调试的方法 (17)第7章结论 (18)参考文献 (19)附录 (20)附录1 总体设计电路图 (20)附录2 元件清单 (20)附录3 全部源程序 (21)第一章前言随着我国国民经济的告诉发展,出租车已成为城市公共交通的重要组成部分。

出租车计价器这一专用计算器具必须经当地技监局所属的管理部门坚定认可,且出租车安装计价器整车鉴定合格后才能运营。

针对电子式出租车计价器,建设部于1997年12月1日开始贯彻新的行业标准“CJ5024-1997”,要求“本标准实施之日起,电子式出租车计价器的设计,制造,和检验必须符合本标准的规定”。

出租车计价器程序的设计(完整)

出租车计价器程序的设计(完整)

出租车计价器程序的设计(完整)出租车计价器程序是一个在出租车里程查询和费用计算的应用程序。

它能够简化出租车司机的工作,节省出租车乘客的时间,确保费用的准确计算。

以下是一份关于出租车计价器程序的完整设计,包括需求分析、功能设计、数据结构与算法设计以及界面设计。

需求分析:出租车计价器程序主要面向出租车司机和乘客,满足以下基本需求:对于司机:1. 可以输入起点和终点的地址或位置信息。

2. 可以自动计算车程里程和费用,并将结果显示出来。

3. 可以存储以前的乘车记录,以便统计业绩和分析乘客需求。

4. 可以提供多种语言和计费标准的选择。

对于乘客:1. 可以查询最合适的出租车车辆,方便的下单和乘车。

2. 可以清楚的了解费用计算和支付方式。

3. 可以评价司机和服务质量,提供建议和反馈。

功能设计:根据上述需求,出租车计价器程序的主要功能包括:1. 地址输入功能:允许用户输入起点和终点的地址或位置信息,包括街道、城市、州或国家等信息。

2. 路程计算功能:通过使用谷歌地图或其他地图服务的API,计算车程里程和估算费用。

该功能支持使用不同的度量标准,例如英里、千米或小时费率等。

3. 乘车记录存储功能:存储每位乘客的信息及计费历史,用于分析和管理出租车运营。

4. 多语言支持功能:支持使用多种语言的用户,例如英文、中文、西班牙语、法语等,方便全球用户使用。

5. 流程优化功能:在操作过程中自动提示并引导用户,并根据用户信息进行推荐,简化用户体验。

数据结构与算法设计:出租车计价器程序的核心算法是基于Google Maps API 和其他地图服务API的距离计算和费率计算,使用常见的计费方式,如按里程计费、按时间计费、按时速计费等。

此外,应当使用数据库,来储存乘客和司机的个人信息和历史计费信息。

数据库应该使用关系型数据库的设计,并具有高性能和高可扩展性。

界面设计:出租车计价器程序的界面设计应该是简洁、直观和易于使用的。

在程序的主界面上,必须让用户能够输入起点和终点的地址信息,提供多种语言和计费标准的选择。

出租车计价器(单片机c语言)doc资料

出租车计价器(单片机c语言)doc资料

出租车计价器(单片机c语言)摘要本电路以AT89S51单片机为中心,附加A44E霍尔传感器测距(本电路中用模拟开关替代),实现对出租车计价,采用AT24C02 实现在系统掉电的时候保存单价,输出采用8段数码显示管,显示行驶总里程和总金额。

模拟出租车计价器设计:进行里程显示,预设起步价和起步公里数;行程按全程收费,有复位功能和启动功能,启动后,开始计价。

我们采用单片机进行设计,可以用较少的硬件和适当的软件相互配合来实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能,应用前景广阔。

关键字:出租车计价器; AT89S51单片机; A44E霍尔传感器; 断电保存; 8段数码显示管.目录第 1章绪论 01.1 课题背景 01.2 主要设计内容及基本要求 0第2章系统硬件设计 (1)2.1硬件设计说明 (1)2.2 AT89S51单片机简介 (1)2.3 硬件电路设计 (2)2.4 硬件组成 (3)2.4.1 驱动电路 (3)2.4.2 显示电路 (4)2.4.3 复位电路 (5)2.4.4 掉电保护电路 (5)2.4.5 时钟电路 (6)2.4.6 按键电路 (6)第3章系统调试 (7)3.1 单片机仿真软件在线调试—PROTEUS (7)3.2 电路元件检测 (8)3.3 硬件检测 (8)附录1程序源代码 (12)附录2电路仿真图 (18)总结 (19)第 1章绪论1.1 课题背景我们知道,只要乘坐的出租车启动,随着行驶里程的增加,就会看到司机旁边的计价器里程数字显示的读数从零逐渐增大,而当行驶到某一值时(如2KM)计费数字显示开始从起步价(如4元)增加。

当乘客到站时,按下停止按键,计费数字显示总里程和总金额,它可以很直观的反映用户使用情况。

1.2 主要设计内容及基本要求利用AT89S51单片机,设计简单的出租车计价器。

在出租车计价器的总体设计中,我主要负责出租车计价器硬件设计。

其中主要的外围功能电路有:驱动电路,按键控制电路,掉电保护电路,时钟部分,数码管显示电路等。

出租车计价器源程序

出租车计价器源程序

/************************************************ 课程设计出租车计价器C51源程序,实现出租车计* 价器基本功能。

** 版权声明:* 未经本人允许不得应用于商业用途,可用* 于交流学习。

** Sunday, July 01 2012* **************************************************************/#include<reg52.h>#include<absacc.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define _NOP_(); {_nop_();_nop_();_nop_();_nop_();};#define OP_WRITE 0xa0 // 器件地址以及写入操作#define OP_READ 0xa1 // 器件地址以及读取操作#define key_set 0// = P3^3;#define key_down 1// = P3^4;#define key_up 2// = P3^5;#define key_ok 3//= P3^6;/** USR_DAT ,PRESET_DAT saved daytime: distance,price,night: distance,priceTIME : hour , min , sec*/uchar data USR_DAT[4] = {3,2,3,6};//uchar PRESET_DAT[4] = {3,2,3,3};uchar data ITEMS[3] = {0,0,0};//存放-里程,单价,费用uchar data TIME[3] = {0,0,12};//存放时间-秒,分,时uchar cycle_time; //100->考虑到5km/h,运转周期是1.44s-->0.02s计数72次uint stop_time,stop_time_all,mileometer,temp_s,speed;uchar cycle_time_info,lock = 1,lock_items = 1;//信号量;uchar key_pressed_time,key_num;//set按键按下次数uchar hour,min,sec,count;uchar code STR1[] = " Time:";//uchar code SPACE[] = " ";//uchar code STR2[] = "S: P: A: "; //里程,单价,应收取费用uchar code STR3[] = "Stop time: min";uchar code STR_SET[] = " Setting ";uchar code STR_SET_HOUR[] = " Setting hour ";uchar code STR_SET_MIN[] = " Setting min ";uchar code STR_SET_PRICE[] = " Setting price ";uchar code STR_SET_START[] = " Setting start ";uchar code DAY[] = " Day: ";uchar code NIGHT[] = " Night: ";uchar code STR_RST[] = "Reset? No < > Y ";sbit lcd_rs = P2^0;sbit lcd_rw = P2^1;sbit lcd_e = P2^2;sbit LED = P1^1;sbit SDA = P1^7;sbit SCL = P1^6;void delay(uchar z);void lcd_write_cmd(uchar cmd);void lcd_write_dat(uchar dat);void lcd_init();void lcd_display(uchar addr,uchar dat);void lcd_display_2(uchar addr,uchar dat);void lcd_display_3(uchar addr,uchar dat);void lcd_write_str(uchar addr,uchar *str);void time0_init();void time1_init();void display_time();void display_reset();void display_items();void display_set_time();void display_stop_time();void ex_int_init();void set_items();uchar key_scan();void key_set_dat();/*24c02相关*/void start();void stop();uchar shin();bit shout(uchar write_data);void write_byte( uchar addr, uchar write_data);uchar read_current();uchar read_addr(uchar addr);void save_user_dat();void restore_user_dat();void main(void){// uchar set_ok = 0;time0_init();time1_init();ex_int_init();lcd_init();restore_user_dat();while(1){// lcd_display_2(0x02,cycle_time_info);set_items();key_num = key_scan();if(!key_pressed_time){if(lock||(cycle_time >= 72)||(stop_time > 0))display_stop_time();elsedisplay_time();display_items();}else{key_set_dat();}}}/** 函数名:key_scan()* 函数作用:扫描按下的按键并返回相应的键值* */uchar key_scan(){P3 |= 0xfb;if((P3 & 0xfb) != 0xfb)delay(200);if((P3 & 0xfb) != 0xfb){switch (P3 & 0xfb){case 0xeb:return key_down;case 0xdb:return key_up;case 0xf9:return key_ok;default:return 0;}}}/** 函数名:uchar key_set_dat(uchar key_pressed_time) * 函数输入:set键按下的次数,以及键值* 函数输出://完成设置返回0,未完成返回1* 函数作用:根据set按键按下的次数,执行相应的设置: * 1.复位包括里程和费用* 2.时间设置:时,分* 3.参数设置:白天起步距离和单价* 4.参数设置:晚上起步距离和单价* */void key_set_dat(){switch(key_pressed_time){case 1:{ display_reset();if(key_num == key_up){ //2ITEMS[0] = 0;ITEMS[2] = 0;mileometer = 0;stop_time_all = 0;cycle_time = 0;key_pressed_time = 0;}if(key_num == key_down){ //1key_pressed_time ++;}if(key_num == key_ok){key_pressed_time = 0;}// key_num = 0;}break;case 2:{lcd_write_str(0x80,STR_SET_HOUR);lcd_display(0x40+0x06,' '-0x30);lcd_display(0x40+0x07,' '-0x30);display_set_time();//hourif(key_num == key_up)TIME[2] ++;if(key_num == key_down)TIME[2] --;if(key_num == key_ok){key_pressed_time = 0;}// key_num = 0;}break;case 3:{lcd_write_str(0x80,STR_SET_MIN);lcd_display(0x40+0x09,' '-0x30);lcd_display(0x40+0x0a,' '-0x30);display_set_time();if(key_num == key_up)//minTIME[1] ++;if(key_num == key_down)TIME[1] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 4:{lcd_write_str(0x80,STR_SET_PRICE);lcd_write_str(0x80+0x40,DAY);lcd_display_2(0x40+0x08,USR_DAT[1]);// lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[1] ++;if(key_num == key_down)USR_DAT[1] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 5:{lcd_write_str(0x80,STR_SET_PRICE);lcd_write_str(0x80+0x40,NIGHT);lcd_display_2(0x40+0x08,USR_DAT[3]); // lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[3] ++;if(key_num == key_down)USR_DAT[3] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 6:{lcd_write_str(0x80,STR_SET_START);lcd_write_str(0x80+0x40,DAY);lcd_display_2(0x40+0x08,USR_DAT[0]); // lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[0] ++;if(key_num == key_down)USR_DAT[0] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 7:{lcd_write_str(0x80,STR_SET_START);lcd_write_str(0x80+0x40,NIGHT);lcd_display_2(0x40+0x08,USR_DAT[2]); // lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[2] ++;if(key_num == key_down)USR_DAT[2] --;if(key_num == key_ok)key_pressed_time = 0;}break;default:key_pressed_time = 0;}// save_user_dat(); _-->会引起WARNING L15: MULTIPLE CALL TO SEGMENT}/** 函数名:set_items()* 函数作用:设置计算显示的里程,设置相应时间的单价,计算应收取费用* 即是设置ITEMS数组* */void set_items(){ITEMS[0] = (mileometer * 2)/1000;/* while(lock_items){temp_s = ITEMS[0];lock_items --;lcd_display(0x0d,lock_items);} */if(TIME[2] > 18 || TIME[2] < 6) //晚上六点后,早上六点前实行夜间收费标准{ITEMS[1] = USR_DAT[3];if(ITEMS[0] > USR_DAT[2]){/*if((ITEMS[0] - temp_s) != 0){ITEMS[2] += ITEMS[1];lock_items ++;}*/ITEMS[2] = (ITEMS[0] - USR_DAT[2])*ITEMS[1] + 5 + stop_time_all/300;}elseITEMS[2] = 5 + stop_time_all/300; //起步价 5 元}else{ITEMS[1] = USR_DAT[1]; //ITEMS[0]里程 ITEMS[1] 单价 ITEMS[2]结算if(ITEMS[0] > USR_DAT[0]){/* if((ITEMS[0] - temp_s) != 0){ITEMS[2] += ITEMS[1];lock_items ++;} */ITEMS[2] = (ITEMS[0] - USR_DAT[0])*ITEMS[1] + 5 + stop_time_all/300;}elseITEMS[2] = 5 + stop_time_all/300;}}/** 函数名:ex_int_init()* 函数作用:初始化外部中断* */void ex_int_init(){EX0 = 1;IT0 = 1;IP = 0x0a;//将定时器中断0,1优先级设为最高EX1 = 1;IT1 = 1;//下降沿触发}/** 函数名:ex1_int() interrupt 2* 函数作用:设置时间,用户数据:白天和晚上的起步距离和单价USR_DAT* */void ex1_int() interrupt 2{EX1 = 0;delay(200);EX1 = 1;key_pressed_time ++;}/** 函数名: void ex_int() interrupt 0* */void ex0_int() interrupt 0{if((cycle_time >= 72)||(stop_time > 0)) //此时说明速度小于5km/h{stop_time_all += (stop_time + cycle_time/50);cycle_time_info ++;}elsecycle_time_info = 10;if(cycle_time_info > 10)lock = 1;elselock = 0;stop_time = 0;cycle_time = 0;// if(stop_time_all >= 300){// ITEMS[2] += stop_time_all/300;//stop_time_all %= 300;// }// else{// while(lock){ /*获取信号量*/// lock --;// stop_time = sec;//暂时借用stop_time寄存器// };// display_stop_time();// /*// * 完成工作在display_stop_time显示 1s 后返回显示display_time */ // if((sec - stop_time) != 0){// display_time();// stop_time = 0;// lock ++ ;//释放信号量// }// }mileometer ++ ;if(mileometer%2 == 0)LED = !LED;}/** 函数名:void time1_init()* 函数作用:初始化定时器1,为工作方式一* */void time1_init(){TMOD = TMOD | 0x10;TH1 = (65535 - 20000)/256;TL1 = (65535 - 20000)%256;EA = 1;ET1 = 1; //定时器终端控制位TR1 = 1; //定时器控制位}/** 函数名称:void time1() interrupt 3* 函数作用:时钟计数函数计时时间用于测速 * */void time1() interrupt 3{TH1 = (65535 - 20000)/256;TL1 = (65535 - 20000)%256;cycle_time ++;if(cycle_time == 100){ //100stop_time += 2;cycle_time = 0;}// lcd_display_3(0x40+ 0x02,stop_time); // lcd_display_3(0x40+ 0x06,cycle_time);}/** 函数名:void display_set_time()* 函数作用:显示设置时间界面* */void display_set_time(){// lcd_write_str(0x80,STR_SET);lcd_write_str(0x80+0x40,STR1);lcd_display(0x40+0x08,'-'-0x30);lcd_display(0x40+0x0b,'-'-0x30);lcd_display(0x40+0x0e,' '-0x30);lcd_display_2(0x40+0x06,TIME[2]);lcd_display_2(0x40+0x09,TIME[1]);lcd_display_2(0x40+0x0c,TIME[0]);}/** 函数名:display_reset()* 函数作用:复位确定界面* Setting* Reset? No < > Y* */void display_reset(){lcd_write_str(0x80,STR_SET);lcd_write_str(0x80+0x40,STR_RST);}/** 函数名:display_stop_time()* 函数作用:显示停车或者小与5km/h的时间* Stop time:00 min* */void display_stop_time(){lcd_write_str(0x80,STR3);lcd_display_2(0x0a,stop_time_all/60); }/** 函数名:display_items()* 函数作用:显示里程,单价,应收取费用* S: P: A:* */void display_items(){// lcd_write_str(0x80+0x40,STR2); //第二行lcd_display(0x40+0x00,'S'-0x30);lcd_display(0x40+0x01,':'-0x30);lcd_display(0x40+0x04,' '-0x30);lcd_display(0x40+0x05,'P'-0x30);lcd_display(0x40+0x06,':'-0x30);lcd_display(0x40+0x09,' '-0x30);lcd_display(0x40+0x0a,'['-0x2f);//$lcd_display(0x40+0x0b,':'-0x30);lcd_display_2(0x40+0x02,ITEMS[0]); //里程lcd_display_2(0x40+0x07,ITEMS[1]); //单价lcd_display_3(0x40+0x0c,ITEMS[2]); //费用}/** 函数名称:display_time()* 函数作用:在lcd上显示出时钟时,分,秒* Time: 00-00-00* */void display_time(){lcd_write_str(0x80,STR1);lcd_display(0x06,' '-0x30);lcd_display(0x09,'-'-0x30);lcd_display(0x0c,'-'-0x30);lcd_display_2(0x07,TIME[2]);lcd_display_2(0x0a,TIME[1]);lcd_display_2(0x0d,TIME[0]);lcd_display(0x0f,' '-0x30);}/** 函数名:void time0_init()* 函数作用:初始化定时器0,为工作方式一* */void time0_init(){TMOD = TMOD | 0x01;TH0 = (65535 - 50000)/256;TL0 = (65535 - 50000)%256;EA = 1;ET0 = 1; //定时器终端控制位TR0 = 1; //定时器控制位}/** 函数名称:void time0() interrupt 1* 函数作用:时钟计数函数* */void time0() interrupt 1{TH0 = (65535 - 50000)/256;TL0 = (65535 - 50000)%256;count ++;if(count >= 20){count = 0;TIME[0] ++;}if(60 <= TIME[0]){TIME[0] = 0;TIME[1] ++;save_user_dat(); // 1 min保存用户数据}if(60 <= TIME[1]){TIME[1] = 0;TIME[2] ++;}if(24 <= TIME[2])TIME[2] = 0;}/************************************************** ****************** lcd 相关操作函数* ********************* * ************************************************/ /** 函数名:delay(uchar z)* 函数作用:单位延时约100us* */void delay(uchar z) //延时函数100us{uint x,y;for(x=z;x>0;x--)for(y=100;y>0;y--);}/** 函数名:lcd_write_cmd()* 函数作用:lcd写指令* */void lcd_write_cmd(uchar cmd){XBYTE[0xfcff] = cmd;delay(1);}/** 函数名:lcd_write_dat()* 函数作用:lcd写数据* */void lcd_write_dat(uchar dat){XBYTE[0xfdff] = dat;delay(1);}/** 函数名:lcd_init()* 函数作用:lcd初始化* */void lcd_init(){delay(16);lcd_write_cmd(0x3f);delay(5);lcd_write_cmd(0x3f);delay(1);lcd_write_cmd(0x3c);lcd_write_cmd(0x08);//lcd初始化完成//lcd使用方式设置// lcd_write_cmd(0x38);lcd_write_cmd(0x08);//屏幕关lcd_write_cmd(0x01);//清屏lcd_write_cmd(0x03);//光标归位lcd_write_cmd(0x0c);//光标方式设置不显示光标lcd_write_cmd(0x06);//指针自动加一整屏不移动}/** 函数名:lcd_display(uchar addr,uchar dat)* 输入参数:显示地址(首行addr,下行0x40+addr),显示数据的ascii * 函数作用:在特定位置显示一位特定数据* */void lcd_display(uchar addr,uchar dat){lcd_write_cmd(0x80 + addr);lcd_write_dat(dat + 0x30);//数字转换成ascii}/** 函数名:lcd_display_2(uchar addr,uchar dat)* 输入参数:显示地址(首行addr,下行0x40+addr),显示数据的ascii * 函数作用:在特定位置显示两位特定数据* */void lcd_display_2(uchar addr,uchar dat){lcd_write_cmd(0x80 + addr);lcd_write_dat(dat/10 + 0x30);//数字转换成asciilcd_write_dat(dat%10 + 0x30);}/** 函数名:lcd_display_3(uchar addr,uchar dat)* 输入参数:显示地址(首行addr,下行0x40+addr),显示数据的ascii * 函数作用:在特定位置显示三位特定数据* */void lcd_display_3(uchar addr,uchar dat){lcd_write_cmd(0x80 + addr);lcd_write_dat(dat/100 + 0x30);//数字转换成asciilcd_write_dat(dat%100/10 + 0x30);lcd_write_dat(dat%100%10 + 0x30);}/** 函数名:lcd_write_str* 输入参数:首地址,字符串首地址指针* 函数作用:写字符串数据* */void lcd_write_str(uchar addr,uchar *str) {lcd_write_cmd(addr);do{lcd_write_dat(*str);str ++;}while(*str != '\0');}/*************************** 24C00相关函数*************************//** 启动*/void start(){SDA = 1;SCL = 1;_NOP_();SDA = 0;_NOP_();SCL = 0;}/** 停止*/void stop(){SDA = 0;_NOP_();SCL = 1;_NOP_();SDA = 1;}/** 24C00移出数据到MCU*/uchar shin(){uchar i,read_data;for(i = 0; i < 8; i++){SCL = 1;read_data <<= 1;read_data |= SDA;SCL = 0;}return(read_data);}/** MCU移出数据到24C00*/bit shout(uchar write_data){uchar i;bit ack_bit;for(i = 0; i < 8; i++) // 循环移入8个位{SDA = (bit)(write_data & 0x80);_nop_();SCL = 1;_NOP_();SCL = 0;write_data <<= 1;}SDA = 1; // 读取应答_NOP_();SCL = 1;_NOP_();ack_bit = SDA;SCL = 0;return ack_bit; // 返回AT24C02应答位}/** 在指定地址addr处写入数据write_data*/void write_byte(uchar addr, uchar write_data) {start();shout(OP_WRITE);shout(addr);shout(write_data);stop();delay(10);}/** 读取当前地址数据*/uchar read_current(){uchar read_data;start();shout(OP_READ);read_data = shin();stop();return read_data;}/** 读取特定地址数据*/uchar read_addr(uchar addr) {start();shout(OP_WRITE);shout(addr);return(read_current()); }/** 将用户数据存储EEPROM 24C00* USR_DAT[4] ITEMS[3]*/void save_user_dat(){uchar i = 0;for(;i < 4;i ++)write_byte(i,USR_DAT[i]);for(;i < 7;i ++)write_byte(i,ITEMS[i]); }/** 恢复用户数据*/void restore_user_dat(){uchar i = 0;for(;i < 4;i ++)USR_DAT[i] = read_addr(i);for(i = 0;i < 3;i ++)ITEMS[i] = read_addr(i); }。

电子技术课程设计--出租车里程计价器

电子技术课程设计--出租车里程计价器

1设计任务描述1.1 设计题目:出租车里程计价器1.2 设计要求1.2.1 设计目的(1) 掌握出租车里程计价器的构成、原理与设计方法;(2) 熟悉集成电路的使用方法。

1.2.2 基本要求(1) 设计秒脉冲产生信号;(2) 行驶里程信号用传感器产生,假设车轮每转一圈为2米。

出租车起价费为3公里8元,此后为每500米加收1元;(3) 等候时间为15分钟计价器加收1元,等候时间信号由时钟产生;(4) 计价表的计数、寄存、译码显示系统。

1.2.3 发挥部分(1) 里程数的计数、寄存、译码显示系统;(2) 白天、晚上的转换,晚上为3公里10元,此后为每450米加收1元;(3) 等待时间每隔15分钟产生一报警信号,扬声器工作。

2 设计思路拿到课程设计的题目——出租车里程计价器,首先想到的就是自己乘坐出租车的经历,结合一年来对数字电子和模拟电子知识的学习,我的基本设计思路如下:由安装在车轮上的传感器产生信号,经过555施密特触发器整形,用74LS390设计一50进制计数器,即产生0.1公里信号,计数最小单位为0.1公里,最大显示99.9公里。

计价电路分为白天和夜间两部分,白天是325分频,计数器预置9元,夜间是275分频,计数器预置10元。

为实现三公里之内计价器保持预置数值不加钱,通过一比较器和或门从公里计数器得到高电平控制价钱计数器的使能端。

三公里之后计价器开始工作,计数、译码、显示乘车费用。

设计中还增加了等候时间显示电路,由555多谐振荡器产生1000赫兹信号分频之后就有秒脉冲信号。

当乘客下车需要等待时,使多谐振荡器开始工作,显示等待时间,十五分钟之后,经555单稳态触发器和振荡器驱动扬声器工作,以提醒司机和乘客,等待时间已经达到15分钟。

设计中不仅满足了出租车计价器的基本要求,加入的发挥部分也使得整个设计更加合理。

另外当换乘下一位乘客时,所有计数器的清零端(需预置的计数器的预置端)统一清零,然后进行下一步的工作。

数电课设报告——出租车计价器

数电课设报告——出租车计价器

课程设计任务书学生姓名:专业班级:指导教师:许建霞工作单位:信息工程学院题目: 出租车计价器的设计与实现初始条件:本设计既可以使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等,也可以使用单片机系统构建多功能数字钟。

用数码管显示行驶里程、停车时间和计费值。

要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求)1、课程设计工作量:1周。

2、技术要求:1)设计一个出租车计价器。

要求用4位数码管显示行驶里程、停车时间和计费值,采用按键切换显示物理量。

2)出租车的起步价为3元,当里程行驶到1km后,费用为4元;当里程行驶到1.5km后,费用为5元;,当里程行驶到2km后,费用为6元;当里程行驶到2.5km后,费用为7元;当里程行驶到3km后,费用为8元;此后每公里计费为0.7元/0.5km。

停车每达3分钟,增加0.7元。

3)具有秒、分为60进制计数功能,能显示分、秒停车状态的计时结果,格式为:00:00min。

按照轮胎转动1圈为1m计算,计算并显示行驶的里程结果,格式为:000.0km。

能显示乘车费用,格式为:000.0元。

4)确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。

3、查阅至少5篇参考文献。

按《武汉理工大学课程设计工作规范》要求撰写设计报告书。

全文用A4纸打印,图纸应符合绘图规范。

时间安排:1、2013年5 月17日,布置课设具体实施计划与课程设计报告格式的要求说明。

2、年月日至年月日,方案选择和电路设计。

3、年月日至年月日,电路调试和设计说明书撰写。

4、2013年7月5日,上交课程设计成果及报告,同时进行答辩。

指导教师签名:年月日系主任(或责任教师)签名:年月日目录1. 1 原理图的设计 (4)1.1方案的选择、比较 (4)1.1.1 方案一 (4)1.1.2 方案二 (5)1.1.3 方案比较选择 (6)1.2 方案二的说明及电路 (6)1.2.1 AT89S52单片机及最小系统 (6)1.2.2 振荡电路 (7)1.2.3 按键单元 (7)1.2.4 显示单元 (8)1.2.5 存储单元 (9)1.3 系统总程序 (10)1.3.1系统总程序 (10)1.3.2 行驶路程子程序 (11)1.3.3 等待时间子程序 (12)1.4主要电路图及工作原理 (14)2 仿真结果分析 (15)3 分析测试数据 (16)4收获、体会、建议 (17)5元器件清单 (18)5.1单片机主板BOM清单 (18)5.2 显示部分器件 (19)6 主要参考文献资料 (20)附录一 (22)附录二 (23)摘要随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。

EDA课程设计出租车计价器

EDA课程设计出租车计价器

初始化:设置计价器 参数,如起步价、单 价、里程等
输入:获取乘客上车 地点、下车地点等信 息
计算:根据输入的信 息,计算车费
输出:显示车费结果, 并提示乘客支付
结束:乘客支付后, 结束计价器程序
计时模块设计
功能:记录出租车行驶时间
实现方法:使用定时器或系统时间 获取时间,并记录在数据库中
添加标题
添加标题
绿色化:EDA技术将更加绿色化,能够更 好地保护环境和资源
THANKS
汇报人:
EDA课程设计出租车计 价器
,a click to unlimited possibilities
汇报人:
目录
01 添 加 目 录 项 标 题 03 E D A 技 术 应 用 05 计 价 器 软 件 程 序 设 计 07 总 结 与 展 望
02 计 价 器 系 统 概 述 04 计 价 器 硬 件 电 路 设 计 06 计 价 器 系 统 测 试 与 验 证
计价器系统的基本组成
计价器硬件:包括显示屏、键盘、打印机等 计价器软件:包括操作系统、计价器应用软件等 数据存储:包括计价器数据、交易记录等 通信模块:用于与出租车管理系统进行数据传输和通信
计价器的工作原理
计价器通过GPS定位获取 车辆位置信息
根据行驶距离和时间计算 车费
计价器显示车费信息,包 括起步价、里程费、等待 费等
Part Four
计价器硬件电路设 计
硬件电路设计概述
计价器硬 件电路设 计主要包 括:主控 芯片、显 示屏、键 盘、传感 器等部分。
主控芯片 负责控制 整个系统 的运行, 包括数据 处理、显 示控制、 键盘输入 等。
显示屏用 于显示计 价信息, 如里程、 时间、金 额等。

电子线路CAD课程设计报告出租车计价器

电子线路CAD课程设计报告出租车计价器

规划电路板边框(尺寸) 从网络表文件导入封装及封装错误的修改 元件封装布局 焊盘设定 自动布线参数设置 自动布线 检查与修改
第五章 课程设计总结
由于使用的是单片机作为核心的控制元件, 以及灵敏的霍尔开关型器件, 是本出租车计价 器具有功能强、性能可靠、电路简单、成本低的特点,加上经过优化的程序,使其有很高的智 能化水平。 但是在我们设计和调试的过程中,也发现了一些问题,譬如计价的金额位数有限,实际的 里程可能会很远,会超出我们的显示范围。计价器的设计还不够人性化,比如加上语音的提示 功能,可能会更有生命力。
………13
第七章 总电路原理图……………………………………………………………………
…………14
第八章 参考文献………………………………………………………………………………….……16
第一章 引言
随着生活水平的提高,人们已经不再满足于衣食住的享受,出行的舒适已经受到越来越多 人的关注。于是,出租车行业低价高质的服务给人们带来了出行的享受。但是总存在着买卖纠 纷,困扰着行业的发展。而在出租车行业中解决这矛盾的最好的方法就是使用计价器,用规范 的价格来为乘客提供更加方便快捷的服务。 同时, 出租车计价器是乘客与司机双方的交易准则, 是出租车行业发展的重要标志,它关系着交易双方的利益。现在,城市建设日益加快,象征着 城市面貌的出租车行业也将加快发展,计价器的普及是毫无疑问的,所以未来出租车行业计价 器的市场是很有潜力的。本文是为了探索计价器的设计而制作的。随着计算机和信息技术的发 展,EDA(Electronic Design Automation ,电子设计自动化)技术已经代替了传统手工设计和 制作印刷电路板的方法,成为现代电子工程领域的一门新技术。 EDA 技术的发展和推广极大地 推动了电子工业的发展, 由此各类 EDA 工具软件也如雨后春笋般地蓬勃发展起来。 原理图设计、 PCB 设计、 电路仿真和 PLD 设计都是 EDA 设计技术中的重要组成部分, 而 Altium 公司 (原 Protel Technology 公司)推出的 Protel DXP 软件全面集成了 EDA 设计几大技术,而且它还包含了电 路仿真印刷电路板的信号完整性分析、可编程逻辑器件 FPGA 数字电路设计和 VHDL 硬件描述语 言的应用

EDA简易出租车计价器设计

EDA简易出租车计价器设计

程后自动归零。
(4) 译码显示模块
Page 4
该模块经过8选1选择器将计费数据(4位BCD码)、
计时数据(2位BCD码)、计程数据(2位BCD码)动态
显示输出。其中计费数据jifei4~jifei1送入显示译码模块进
行译码,最后送至以百元、十元、元、角为单位对应的数
码管上显示,最大显示为999.9元;计时数据送入显示译
码模块进行译码,最后送至以分为单位对应的数码管上显
示,最大显示为59分;计程数据送入显示译码模块进行译
码,最后送至以公里为单位的数码管上显示,最大显示为
99公里。其系统组成框图如图2.1所示。
Page 5
时钟信 分频器 计费


等待信


计时
公里脉




计费/
计程
复位
Page 6
3 出租车计费器的层次化设计方案
(1) 分频模块 分频模块对频率为240Hz的输入脉冲进行分频,产生频率为16Hz、 15Hz、1Hz的3种频率。该模块产生频率信号用于计费,每个1Hz脉 冲为0.1元计费控制,15Hz为1.5元的计费控制,16Hz信号1.6元计费 控制。 (2) 控制模块 计价器控制模块主要完成对计价器状态的控制。
Page 3
(3) 计量模块
计量模块完成计价、计时和计程功能。
计价部分:行程在3公里内,而且等待累计时间小于2分钟,起步费为
10元;3公里外以每公里按1.6元计费,等待累计时间超过2分钟按每分钟1.5
元计费。
计时部分:计算乘客的等待累计时间。计时器的量程为59分钟,满量
程后自动归零。
计程部分:计算乘客所行驶的公里数。计程器的量程为99千米, 满量

数字电路课程设计---出租车里程计价器 昌锋

数字电路课程设计---出租车里程计价器 昌锋

铜陵学院数字电路课程设计报告书(09版)For personal use only in study and research; not for commercial useFor personal use only in study and research; not for commercial useFor personal use only in study and research; not for commercial use姓名:昌锋班级:07自动化(本)学号:02时间:2009年5月课程设计题目:出租汽车自动计价器[设计要求]:用中、小规模集成电路设计与制作出租汽车自动计价器。

具体要求如下:1、能计汽车行驶的里程和停车等候时间。

2、能自动显示出该收的车费和停车等候费。

3、每公里该收的行车费(如0.45元)各十分钟应该收的行等候费(如0.25元)均有拨码开关可预先设置。

[设计器材]:74LS48(及配合LED),74LS160,74LS00,74LS32,74LS04,74LS08,74LS86,74LS112,CC4072,5G555,电阻、电容若干,干簧继电器,拨码开关。

[设计摘要]:本设计主要介绍了基于电子工作平台Electronics Workbench (EWB)出租车计价器控制电路的设计。

整个自动控制系统由四个主要电路构成:里程计数及显示、计价电路、基本里程判别电路、秒信号发生器(用555多谐振荡器实现)及等候计时电路和清零复位电路。

以Electronics Workbench (EWB)软件作为开发平台,采用图形方式创建电路、构造电路、调用元器件和测试仪器,该工作平台可以对电子元器件进行一定程度的非线性仿真,不仅测试仪器的图形与实物相似,而且测试结果与实际调试基本相似。

该设计不仅仅实现了显示计程车计费的功能,其多功能表现在它可以显示计程车累计走的总路程和里程单价。

加法器是构成计算机内部算术运算器(ALU)的基本单元,加法器的逻辑功能是实现两个二进制数的相加,因计算机内部的加、减、乘、除算术运算通常是利用加法器来实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<reg52.h>#define uchar unsigned charsbit P3_4=P3^4;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x86,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[4];int qw,bw,sw,gw,a,b,c;void disp(void){for(c=3;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void scjs(void)interrupt 3{TH1=0X3C;TL1=0xB0;a=a+1;if(a==2){a=0;P3_4=!P3_4;if(P3_4==0){b=TH0*256+TL0;///yw=sz[0]=b/100000;//ww=sz[0]=b/10000%10;qw=sz[0]=b/1000%10;bw=sz[1]=b/100%10;sw=sz[2]=b/10%10;gw=sz[3]=b%10;disp();}}}main(){IE=0X88;TH1=0X3C;TL1=0XB0;TR0=1;TR1=1;a=0;while(1);}2#include<reg52.h>#define uchar unsigned charsbit P3_4=P3^4;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f;void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void scjs(void)interrupt 3{TH1=0X3C;TL1=0xB0;a=a+1;if(a==2){a=0;P3_4=!P3_4;if(P3_4==0){b=TH0*256+TL0;d=34;e=6;f=7;qw=sz[0]=b/100000;bw=sz[1]=b/10000%10;sw=sz[2]=b/1000%10;gw=sz[3]=b/100%10;yw=sz[4]=b/10%10;ww=sz[5]=b%10;disp();}}}main(){TMOD=0x15;IE=0X88;TH1=0X3C;TL1=0XB0;TR0=1;TR1=1;a=0;while(1);}3#include<reg52.h>#define uchar unsigned charsbit P3_4=P3^4;sbit jia=P2^0;sbit jian=P2^1;sbit gl=P2^2;sbit hp=P2^3;unsigned char keycnt=0;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f;d=46; //单价e=00; //公里数f=00;//jiage=d*e; //金额void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void KEY() //按键扫描程序{unsigned char i,j;if(hp==0){for(i=20;i>0;i--) //延时去干扰for(j=248;j>0;j--);if(hp==0){keycnt++;switch(keycnt) //按下次数判断{case 1: //第一次按下d=40;break;case 2: //第二次按下d=50;break;case 3: //第三次按下d=60;keycnt=0; //重新开始判断键值break;}while(hp==0);}}void scjs(void)interrupt 3 {TH1=0X3C;TL1=0xB0;a=a+1;if(a==2){a=0;P3_4=!P3_4;if(P3_4==0){//b=TH0*256+TL0;f=e*d/10;qw=sz[0]=d/10%10;bw=sz[1]=d%10;sw=sz[2]=e/10%10;gw=sz[3]=e%10;yw=sz[4]=f/10%10;ww=sz[5]=f%10;if(jia==0){d++;}if(jian==0){d--;}if(gl==0){e=5;}disp();KEY();}}}main(){void KEY();TMOD=0x15;IE=0X88;TH1=0X3C;TL1=0XB0;TR0=1;TR1=1;a=0;while(1);}4#include<reg52.h>#define uchar unsigned charsbit P3_4=P3^4;sbit jia=P2^0;sbit jian=P2^1;sbit gl=P2^2;sbit hp=P2^3;sbit j=P2^4;unsigned char keycnt=0;unsigned **t=0;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g;d=46; //单价e=00; //公里数f=00;//jiage=d*e; //金额void jishuqi(){if(j==0)cnt++;if(cnt=100)e++;cnt=0;}void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void KEY() //按键扫描程序{unsigned char i,j;if(hp==0){for(i=20;i>0;i--) //延时去干扰for(j=248;j>0;j--);if(hp==0){keycnt++;switch(keycnt) //按下次数判断{case 1: //第一次按下d=46;break;case 2: //第二次按下d=12;break;case 3: //第三次按下d=78;keycnt=0; //重新开始判断键值break;}while(hp==0);}}}void scjs(void)interrupt 3 {TH1=0X3C;TL1=0xB0;a=a+1;if(a==2){a=0;P3_4=!P3_4;if(P3_4==0){//b=TH0*256+TL0;if(e>3)f=g;else f=5;//g=e*d/10;//f=e*d/10+5;qw=sz[0]=d/10%10;bw=sz[1]=d%10;sw=sz[2]=e/10%10;gw=sz[3]=e%10;yw=sz[4]=f/10%10;ww=sz[5]=f%10;if(jia==0){d++;}if(jian==0){d--;}if(gl==0){e=5;}disp();KEY();jishuqi();}}}main(){void KEY();TMOD=0x15;TH1=0X3C;TL1=0XB0;TR0=1;TR1=1;a=0;while(1);}5#include<reg52.h>#define uchar unsigned charsbit P3_4=P3^4;sbit jia=P2^0;//价格加sbit jian=P2^1;//价格减sbit gl=P2^2; //公里sbit hp=P2^3; //换屏sbit j=P2^4;//记数unsigned char keycnt=0;unsigned **t=0;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g;d=46; //单价e=03; //公里数f=05;//jiage=d*e; //金额/*void jishuqi(){if(j==0)cnt++;e++;cnt=0;}*/ /*void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void KEY() //按键扫描程序{unsigned char i,j;if(hp==0){for(i=20;i>0;i--) //延时去干扰for(j=248;j>0;j--);if(hp==0){keycnt++;switch(keycnt) //按下次数判断{case 1: //第一次按下d=46;break;case 2: //第二次按下d=12;break;case 3: //第三次按下d=78;keycnt=0; //重新开始判断键值break;}while(hp==0);}}}void led(void){qw=sz[0]=d/10%10;bw=sz[1]=d%10;sw=sz[2]=e/10%10;gw=sz[3]=e%10;yw=sz[4]=f/10%10;ww=sz[5]=f%10;}void scjs(void)interrupt 3 {TH1=0X3C;TL1=0xB0;a=a+1;if(a==2){a=0;P3_4=!P3_4;if(P3_4==0){//b=TH0*256+TL0;//f=5;if(jia==0){d++;}if(jian==0){d--;}if(gl==0){e++;}if(e>3){g=e*d/10;f=g;}//f=e*d/10+5;led();disp();KEY();jishuqi();}}}main(){void KEY();TMOD=0x15;IE=0X88;TH1=0X3C;TL1=0XB0;TR0=1;TR1=1;a=0;while(1);}6#include<reg52.h>#define uchar unsigned char sbit P3_4=P3^4;sbit jia=P2^0;//价格加sbit jian=P2^1;//价格减sbit gl=P2^2; //公里sbit hp=P2^3; //换屏sbit j=P2^4;//记数unsigned char keycnt=0;unsigned **t=0;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g;d=46; //单价e=03; //公里数f=05;//jiage=d*e; //金额void jishuqi(){if(j==0){cnt++;**t){case 10:e++;cnt=0;break;while(hp==0);}}}void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void KEY() //按键扫描程序{unsigned char i,j;if(hp==0){for(i=20;i>0;i--) //延时去干扰for(j=248;j>0;j--);if(hp==0){keycnt++;switch(keycnt) //按下次数判断{case 1: //第一次按下d=46;break;case 2: //第二次按下d=12;break;case 3: //第三次按下d=78;keycnt=0; //重新开始判断键值break;}while(hp==0);}}}void led(void){qw=sz[0]=d/10%10;bw=sz[1]=d%10;sw=sz[2]=e/10%10;gw=sz[3]=e%10;yw=sz[4]=f/10%10;ww=sz[5]=f%10;}void scjs(void)interrupt 3{TH1=0X3C;TL1=0xB0;a=a+1;{a=0;P3_4=!P3_4;if(P3_4==0){//b=TH0*256+TL0; //f=5;if(jia==0){d++;}if(jian==0){d--;}if(gl==0){e++;}if(e>3){g=e*d/10;f=g;}led();disp();KEY();jishuqi();}}}main(){void KEY(); TMOD=0x15;IE=0X88;TH1=0X3C;TL1=0XB0;TR0=1;a=0;while(1);}7#include<reg52.h>#define uchar unsigned charsbit P3_4=P3^4;sbit jia=P2^0;//价格加sbit jian=P2^1;//价格减sbit gl=P2^2; //公里sbit hp=P2^3; //换屏sbit j=P2^4;//记数unsigned char keycnt=0;unsigned **t=0;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g,u,v,w,z;d=46; //单价e=03; //公里数f=05;u=12;//时v=00;//分w=00;//秒//jiage=d*e; //金额void jishuqi(){{cnt++;**t){case 10:e++;cnt=0;break;while(hp==0);}}}void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void KEY() //按键扫描程序{unsigned char i,j;if(hp==0){for(i=20;i>0;i--) //延时去干扰for(j=248;j>0;j--);if(hp==0){keycnt++;switch(keycnt) //按下次数判断{case 1: //第一次按下d=46;break;case 2: //第二次按下d=12;break;case 3: //第三次按下d=78;keycnt=0; //重新开始判断键值break;}while(hp==0);}}}void led(void) //显示时间{z=TH0*256+TL0;if(z>3){w++;z=0;}if(w>59){v++;w=0;}if(v>59){u++;v=0;}if(u>23){u=0;}qw=sz[0]=u/10%10;bw=sz[1]=u%10;sw=sz[2]=v/10%10;gw=sz[3]=v%10;yw=sz[4]=w/10%10;ww=sz[5]=w%10;}void led1(void) //显示价格里程金额{qw=sz[0]=d/10%10;bw=sz[1]=d%10;sw=sz[2]=e/10%10;gw=sz[3]=e%10;yw=sz[4]=f/10%10;ww=sz[5]=f%10;}void scjs(void)interrupt 3 {TH1=0X3C;TL1=0xB0;a=a+1;if(a==3){a=0;P3_4=!P3_4;if(P3_4==0){//b=TH0*256+TL0;//f=5;if(jia==0){d++;}if(jian==0){d--;}if(gl==0){e++;}if(e>3){g=e*d/10;f=g;}led();disp();KEY();jishuqi();}}}main(){void KEY();TMOD=0x15;IE=0X88;TH1=0X3C;TL1=0XB0;TR0=1;TR1=1;a=0;while(1);}8#include<reg52.h>#define uchar unsigned charsbit P3_4=P3^4;sbit jia=P2^0;//价格加sbit jian=P2^1;//价格减sbit gl=P2^2; //公里sbit hp=P2^3; //换屏sbit j=P2^4;//记数unsigned char keycnt=0;unsigned **t=0;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g,u,v,w,z;d=46; //单价e=03; //公里数f=05;u=12;//时v=00;//分w=00;//秒//jiage=d*e; //金额void jishuqi(){if(j==0){cnt++;**t){case 10:e++;cnt=0;break;while(hp==0);}}}void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}void KEY() //按键扫描程序{unsigned char i,j;if(jian==0){for(i=20;i>0;i--) //延时去干扰for(j=248;j>0;j--);if(hp==0)keycnt++;switch(keycnt) //按下次数判断{case 1: //第一次按下d=46;break;case 2: //第二次按下d=12;break;case 3: //第三次按下d=78;keycnt=0; //重新开始判断键值break;}while(hp==0);}}}void shizhong(void){z=TH0*256+TL0;if(z>1){w++;z=0;}if(w>59){v++;w=0;}if(v>59){u++;v=0;}if(u>23){}}void led(void) //显示时间{if(jian==0){u++;}if(gl==0){v++;}if(hp==0){w++;}qw=sz[0]=u/10%10;bw=sz[1]=u%10;sw=sz[2]=v/10%10;gw=sz[3]=v%10;yw=sz[4]=w/10%10;ww=sz[5]=w%10;}void led1(void) //显示价格里程金额{KEY();qw=sz[0]=d/10%10;bw=sz[1]=d%10;sw=sz[2]=e/10%10;gw=sz[3]=e%10;yw=sz[4]=f/10%10;ww=sz[5]=f%10;}void scjs(void)interrupt 3{TH1=0X3C;TL1=0xB0;a=a+1;if(a==12)a=0;P3_4=!P3_4;if(P3_4==0){//b=TH0*256+TL0; //f=5;/*if(jia==0){d++;}if(jian==0){d--;}if(gl==0){e++;}*/if(e>3){g=e*d/10;f=g;}shizhong();if(jia==0)led();elseled1();disp();jishuqi();}}}main(){void KEY(); TMOD=0x15;IE=0X88;TH1=0X3C;TR0=1;TR1=1;a=0;while(1);}9最终程序#include<reg52.h>#include <stdio.h>#include <absacc.h>#define uchar unsigned charsbit P3_4=P3^4;sbit jia=P2^0;//价格加sbit jian=P2^1;//价格减sbit gl=P2^2; //公里sbit hp=P2^3; //换屏sbit j=P2^4;//记数unsigned char keycnt=0;unsigned **t=0;bit write=0; //写24C08 的标志;//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,}; //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,}; uchar sz[6];int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g,u,v,w,z;d=46; //单价e=00; //公里数f=05;v=00;//分w=00;//秒//jiage=d*e; //金额/////////24C08 读写驱动程序////////////////////sbit scl=P3^4; // 24c08 SCLsbit sda=P3^5; // 24c08 SDAvoid delay1(unsigned char x){ unsigned int i;for(i=0;i<x;i++);;}void flash(){ ; ; }void x24c08_init() //24c08 初始化子程序{scl=1; flash(); sda=1; flash();}void start() //启动(I方C)总线{sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();} void stop() //停止(I方C)总线{sda=0; flash(); scl=1; flash(); sda=1; flash();}void writex(unsigned char j) //写一个字节{ unsigned char i,temp;temp=j;for (i=0;i<8;i++){temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();} scl=0; flash(); sda=1; flash();}unsigned char readx() //读一个字节{unsigned char i,j,k=0;scl=0; flash(); sda=1;for (i=0;i<8;i++){flash(); scl=1; flash();if (sda==1) j=1;else j=0;k=(k<<1)|j;scl=0;}flash(); return(k);}void clock() //(I方C)线时钟{unsigned char i=0;scl=1; flash();while ((sda==1)&&(i<255))i++;scl=0; flash();}////////从24c02 的地址address 中读取一个字节数据/////unsigned char x24c08_read(unsigned char address){unsigned char i;start(); writex(0xa0);clock(); writex(address);clock(); start();writex(0xa1); clock();i=readx(); stop();delay1(10);return(i);}//////向24c02 的address 地址中写入一字节数据info///// void x24c08_write(unsigned char address,unsigned char info){EA=0;start(); writex(0xa0);clock(); writex(address);clock(); writex(info);clock(); stop();EA=1;delay1(50);}/////////////24C08 读写驱动程序完/////////////////////void Delay(unsigned int tc) //延时程序{while( tc != 0 ){unsigned int i;for(i=0; i<100; i++);tc--;}}/////////////////////////////////////////////////////////////////////////////void jishuqi(){if(j==0){cnt++;**t){case 30:e++;cnt=0;break;while(hp==0);}}}void disp(void){for(c=5;c>=0;c--){SBUF=tab[sz[c]];while(!TI);TI=0;}}/*void KEY() //按键扫描程序{unsigned char i,j;if(jian==0){for(i=20;i>0;i--) //延时去干扰for(j=248;j>0;j--);if(hp==0){keycnt++;switch(keycnt) //按下次数判断{case 1: //第一次按下d=46;break;case 2: //第二次按下d=12;break;case 3: //第三次按下d=78;keycnt=0; //重新开始判断键值break;while(hp==0);}}}*/void shizhong(void){z=TH0*256+TL0;if(z>1){w++;z=0;}if(w>59){v++;w=0;}if(v>59){u++;v=0;}if(u>23){u=0;}}void led(void) //显示时间{if(jian==0){u++;}if(gl==0){v++;}if(hp==0){w++;}qw=sz[0]=u/10%10;bw=sz[1]=u%10;sw=sz[2]=v/10%10;gw=sz[3]=v%10;yw=sz[4]=w/10%10;ww=sz[5]=w%10;}void led1(void) //显示价格里程金额{//KEY();if(jian==0){d=46;}if(gl==0){d=78;}if(hp==0){e=0;3.-f=0;}qw=sz[0]=d/10%10;bw=sz[1]=d%10;sw=sz[2]=e/10%10;gw=sz[3]=e%10;yw=sz[4]=f/10%10;ww=sz[5]=f%10;jishuqi();x24c08_write(2,e);}void scjs(void)interrupt 3{TH1=0X3C;TL1=0xB0;a=a+1;if(a==12){a=0;P3_4=!P3_4;if(P3_4==0){//b=TH0*256+TL0; //f=5;/*if(jia==0){d++;}if(jian==0){d--;}if(gl==0){e++;}*/if(e>3){g=e*d/10;f=g;}shizhong();if(jia==0)led();elseled1();disp();jishuqi();}}}main(){x24c08_init(); //初始化24C08e=x24c08_read(2);//读出保存的数据赋于//void KEY();TMOD=0x15;IE=0X88;TH1=0X3C;TL1=0XB0;TR0=1;TR1=1;a=0;while(1);}。

相关文档
最新文档