proteus中S51单片机怎么对proteus霍尔传感器器脉冲计

赞助商链接
当前位置: >>
基于单片机的出租车计价器设计
CHANGSHA UNIVERSITY OF SCIENCE & TECHNOLOGY毕业设计(设计)题目:基于单片机的出租车计价器设计学生姓名: 学 班 专 号: 级: 业:张书震
电子信息工程 席燕辉指导教师:2012 年 06 月 基于单片机的出租车计价器设计学生姓名: 学 班 号: 级:张书震
所在院(系) : 电气与信息工程学院 指导教师: 席燕辉完 成 日 期 : 2012 年 6 月 15 日 基于单片机的出租车计价器设计基于单片机的出租车计价器设计摘要随着国内城市现代化的发展,出租车行业突飞猛进,出租车计价器的市场需求量也 大大增加。 出租车计价器是乘客与司机双方的交易准则, 是出租车行业发展的重要标志, 关系着乘客和出租车司机双方的利益。 具有良好性能的计价器无论是对广大出租车司机 朋友还是乘客来说都是很必要的。 传统机械式和半机械式出租车计价器主要依靠传感器接收的脉冲进行计数,依靠齿 轮比进行计价,不可避免的造成计价器易损耗,精度低,不易调整价格,容易作弊等问 题。从加强出租车行业管理及服务质量并且节约成本出发,考虑到单片机已经再各个领 域成熟的应用了几十年,其技术可靠,参考资料丰富,价格低廉,因此本文选取了 AT89S52 这一单片机做为计价器的核心。运用霍尔传感器检测车轮转数,读取掉电存储 单元里面的价格信息,经单片机处理之后显示到 LED 数码管上。用单片机进行的设计, 相对来说功能强大,用较少的硬件和适当的软件相互配合很容易实现设计要求,且灵活 性强,可以通过软件编程来完成更多的附加功能。通过软件就可以轻易的实现计费模式 的切换。本设计采用 LED 数码管提供了友好易读的界面,数据信息一目了然,极大的 方便了司机朋友的使用。关键词:出租车计价器;AT89S52;单价调节; 软硬件设计 基于单片机的出租车计价器设计A DESIGN OF TAXIMETER BASED ON SINGLE CHIP DESIGNABSTRACTWith the development of modern domestic cities, the taxi industry by leaps and bounds, and the rental car mileage fare meter's market demand is also greatly increasing. Taximeter is both passengers and drivers of the transaction criteria, a taxi is the most important tools. It relates to the interests of both transactions. Has a good performance regardless of the meter is a vast number of taxi drivers or passengers are very necessary. Traditional mechanical and semi-mechanical Taximeter rely mainly on the sensor to receive the pulse count, relying on the pricing of gear ratio, the inevitable result of the meter easy to wear and tear, low precision, easy to adjust the price, easy to cheat and other issues.In order to strengthen the rental car trade management and the grade of service,and saves the cost to embark,The single-chip circuitry to AT89S52 as the center, an additional Hall sensor A44E ranging, to realize Taximeter statistics, using AT24C02 realize when the system power-down unit prices and save information such as system time. MCU used for the design, a relatively powerful, with less hardware and appropriate software can easily coordinate with each other to achieve the design requirements, flexibility and strong, can be programmed by software to complete more of the additional Function. Pricing model for the switch, software programming and can easily cite the achievement. Also in this programme that the use of a 8 digital display tube, can be more friendly to use interface. This design uses LED digital tube to provide a friendly and easy to read interface and data information at a glance, which greatly facilitates the use of the driver friends。Key words: Rental car mileage fare meter; AT89S52 ; unit price adjustment; software andhardware design 基于单片机的出租车计价器设计目录1 绪论.......................................................................................................................... 1 1.1 课题背景.............................................................................................................. 1 1.2 本文研究目的 ..................................................................................................... 2 1.3 本文主要内容...................................................................................................... 2 2 总体方案设计.......................................................................................................... 3 2.1 方案论证与比较.................................................................................................. 3 2.2 单片机系统总体设计.......................................................................................... 4 2.3 芯片简介.............................................................................................................. 5 2.3.1 AT89S52 ........................................................................................................ 5 2.3.4 DS1302 ......................................................................................................... 6 2.3.5 A44E ............................................................................................................. 7 2.3.6 AT24C02 ....................................................................................................... 8 2.3.7 74LS138 ...................................................................................................... 10 3 硬件电路设计........................................................................................................ 11 3.1 CPU 模块 ........................................................................................................... 11 3.2 路程测量部分 ................................................................................................... 12 3.3 数据显示部分 ................................................................................................... 13 3.5 时钟部分 ........................................................................................................... 14 3.6 掉电存储电路 ................................................................................................... 14 3.7 按键部分电路 ................................................................................................... 15 3.8 章节总结 ........................................................................................................... 16 4 系统软件设计........................................................................................................ 17 4.1 主程序设计 ....................................................................................................... 17 4.2 里程计数中断服务程序 ................................................................................... 18 基于单片机的出租车计价器设计4.3 仿真结果 ........................................................................................................... 19 4.3.1 仿真软件 Proteus........................................................................................ 19 4.3.2 Proteus 界面介绍....................................................................................... 20 4.3.3 Proteus 仿真结果....................................................................................... 20 5 总 结.................................................................................................................... 22参考文献...................................................................................................................... 23 致谢.............................................................................................................................. 25 附录 A 系统总原理图 ............................................................................................ 26 附录 B 各部分程序 ................................................................................................ 27 附件 附件 1 开题报告(文献综述) 附件 2 译文及原文影印件 基于单片机的出租车计价器设计1 绪论1.1 课题背景出租车行业在我国是八十年代初兴起的一项新兴行业, 随着出租车行业的迅 速发展, 出租车已经成为了城市交通不可分割的部分,出租车计价器是乘客与司 机之间的一把秤,它关系着交易双方的利益,是出租车中最具标志性的工具。一 个性能良好的计价器无论是对广大出租车司机朋友还是乘客来说都是非常重要 的[1]。 出租汽车计价器是一种专用的计量仪器,它安装在出租汽车上,能连续累加 计算, 并指示出行程中任一时刻乘客应付费用的总数,其金额值是计程和计时时 间的函数。 出租车计价器在最初使用时具备的主要功能是根据行驶里程计价,要 求精度高,可靠性好。要将出租车计价系统产品化,应该根据客户不同的需求进 行不同的设计, 在程序中增加一些可以人为改变但又不是可以在运行中随意改变 的参数,以便客户根据不同的需要随时调节单价以及计价方式。 多年来国内普遍使用的车租车计价器计量功能少,操作不便,而且目前世界 上 90%的计价器产自台湾。 现今国内生产计价器的企业仅有数百家, 主要是集中 在珠江三角和江苏等地。这些企业也大都是一些中小型的企业,研发水平有限, 技术水平不高,国际竞争力也不强[2]。 我国最早的计价器几乎都采用机械齿轮构成,只能完成简单的测量功能,从 某种程度上说,早期的计价器就只是个特殊的里程表。随着科学技术的发展,产 生了采用了手摇计算机与机械结构相结合的新一代的计价器。 它在计程的同时还 可完成计价的工作。 大规模集成电路的发展带来了第三代计价器,也就是现在常 见的功能也在不断完善的全电子化的计价器。 现在各大中城市出租车行业都必备出租车计价器, 甚至于没有正规的出租车 计价器的出租车几乎不再有人相信是真的, 所以计价器市场的发展已成为了不可 阻挡的趋势[3]。而部分小城市出租车行业尚不发达,但随着城镇城市化进程的日 益加快, 象征着城市面貌的出租车行业也将加速发展,计价器市场的不断扩张也第 1 页 共 40 页 基于单片机的出租车计价器设计是毫无疑问的,所以未来出租车计价器的市场潜力还是巨大的。1.2 本文研究目的目前的出租车计价器种类繁多,采用的方案也各不相同。从传统简单的逻辑 电路方案到高性能的 FPGA 方案, 极大地丰富了计价器市场。 但是各个方案又都 有其难以避免的缺点, 例如逻辑电路, 由于主要依靠传感器接收的脉冲进行计数, 依靠齿轮比进行计价,不可避免的造成计价器易损耗,精度低,不易调整价格, 容易作弊等问题[4]。 因此本文拟采用一个简单易行,且价格低廉的方案来取代当前的出租车计 价器。考虑到单片机已经再各个领域成熟的应用了几十年,其技术可靠,参考资 料丰富,价格低廉,因此本文选取了 AT89S52 这一单片机做为计价器的核心。 运用霍尔传感器检测车轮转数, 读取掉电存储单元里面的价格信息,经单片机处 理之后显示到 LED 显示屏上。相信这种计价器能够成功的取代当前的出租车计 价器给乘客和出租车司机带来方便和实惠。1.3 本文主要内容本文第一章主要介绍了出租车计价器的一些相关信息, 简要的叙述了本设计 存在的意义。 第二章对当前的各种方案进行了比较论证,最后选取其中综合性能 最好的方案,并且对这一方案里面所采用的各种芯片进行了简要的减少和说明。 第三章则详细的叙述了各个芯片的硬件电路,各部分的功能构成,以及周边电路 的设计。第四章则介绍了各个软件模块的设计方案,软件流程。也简单介绍了本 文模拟用的软件 Proteus 和 Proteus 的仿真的结果。第 2 页 共 40 页 基于单片机的出租车计价器设计2 总体方案设计2.1 方案论证与比较出租车计价器是出租车营运收费的专用计量仪表, 随着电子技术的发展也给 出租车计价器的发展带来了春天,日渐丰富的功能,完善的周边电路,更加人性 化的操作也让出租车计价器技术日新月异, 国内出租车计价器的发展从传统的齿 轮传动组成的机械式到用手摇式计算机代替部分机械元器件的半电子化出租车 计价器[5]。出租车计价器的发展从未有过停止,各种新的解决方案也层出不穷。 面对众多可选择的方案,出租车计价器计费是否能够公平公正准确的计费、是否 能够让乘客信任是才是广大客户最关心的问题,而计价器营运数据是否方便管 理,是否能够实现燃油附加费、税收的方便管理才是出租车司机最关注的[6]。在 查阅了大量的资料和文献之后, 本文最终筛选出了以下的两种较为简单易行又常 见的方案: 方案一:采用单片机技术。单片机有着丰富的 I/ O 端口,可实现基本的里 程计价功能和价格调节、时钟显示功能。其原理如图 2.1 所示。单价显示 按键总价显示AT89s52 单片机AT24C02掉电存储单元显示驱动单元 里程测量单元图 2.1 单片机控制方案 第 3 页 共 40 页 基于单片机的出租车计价器设计方案二:采用 EDA 技术,根据层次化设计理论,该设计问题自顶向下可分 为分频模块,控制模块、计量模块、译码和动态扫描显示模块,其系统框图如图 2.2 所示:时钟信号分频器计费等待信号 计时 译码 公里脉冲 控制器计程 计费/复位显示图 2.2 FPGA 控制方案通过比较以上两种方案,FPGA 设计虽然也能满足要求,但是考虑到成本和 扩展性上不如单片机, 而且维修不方便,在中小规模生产的情况下没有明显的性 价比。而相比来说单片机有较大的活动空间,利用单片机丰富的 IO 端口,及其 控制的灵活性,不但能实现基本的里程计价功能和价格调节、时钟显示功能,而 且能在很大的程度上扩展功能, 还可以方便的对系统进行升级。为此采用了单片 机进行设计, 相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容 易的实现设计要求。2.2 单片机系统总体设计本次设计我们利用单片机 AT89S52 芯片作为设计的核心,利用霍尔传感器第 4 页 共 40 页 基于单片机的出租车计价器设计测距,实现对出租车计价统计,采用 AT24C02 实现在系统掉电的时候保存单价 和系统时间等信息,显示采用 8 位 LED 数码管,分屏显示单价、路程、总金额 以及时间. 当出租车启动时, 单片机检测到霍尔传感器的脉冲信号并进行里程计算。当 无乘客时, 单片机调用芯片 DS1302 程序和 74LS138 串口显示驱动程序, 用 LED 进行时钟显示。当空车灯掰下乘客上车时:通过 DS1302 获取时间信息分辨白天 /晚上,然后调用 AT24C02 程序获取白天、晚上的单价及起始价,便开始计价并 显示时间、里程和金额等信息。当空车灯打上乘客下车时,等待出租车再次启动 后单次金额与里程等信息清零复位,就此完成一次计价。总体框图如 2.3:空车检测 单价显示 键盘控制 总价显示AT24C02掉电存储单元AT89s52 单片机里程测量单元 显示驱动 DS1302时钟电路图 2.3 总体设计框图2.3 芯片简介根据任务书的功能要求和现在所具备的条件,本设计拟采用 5 个芯片,分 别为: AT89S52、AT24C02、74LS138、DS1302、霍尔传感器 A44E。 2.3.1 AT89S52 本文所选用的 AT89S52 是一种低功耗、高性能 CMOS 8 位微控制器,具有 8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制 造,与工业 80C51 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统 可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编第 5 页 共 40 页 基于单片机的出租车计价器设计程 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决 方案[7]。AT89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作, 允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内 容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位 为止[8]。AT89S52 引脚图如图 2.4:图 2.4 单片机引脚图2.3.4 DS1302 设计考虑到计价器的实用性,拟在没有乘客的情况想显示实时时钟,也是作 为各个时段单价自动转换的标准。采用一个可靠的计时芯片是必不可少的。 DS1302 一种高性能、低功耗的实时时钟芯片,工作性能稳定可靠,采用 SPI 三 线接口与 CPU 进行通信;并可采用突发方式一次传送多个字节的时钟信号和 RAM 数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与 31 天可以自动调整, 并且具有闰年补偿功能。 通过设 DS1302 的控制/状态寄存器选第 6 页 共 40 页 基于单片机的出租车计价器设计择日历,时钟方式经过初始校准后即可工作使用;工作电压宽达 2.5~5.5V。可 采用多电源供电[9]。如图 2.5 为 DS1302 的引脚功能图。图 2.5 DS1302 引脚功能图由于采用了备用电池供电,所以在汽车电源关闭的情况下,也能保持时钟 的正常运行。DS1302 由 Vcc1 或 Vcc2 中电压较高的一端供电。X1 和 X2 是外接 32.768kHz 晶振的振荡源。RST 是复位/片选线,通过把 RST 输入置高电平来启 动所有的数据传送。RST 有两种输入功能:第一,RST 接通控制逻辑,允许将 地址/命令序列输入到移位寄存器中;第二,RST 提供了停止单字节和多字节数 据的发送方法。当 RST 被置为高电平时,初始化所有的数据传送,允许操作 DS1302。在传送过程中如果 RST 置为低电平,数据传送则会被立即停止,芯片 的 I/O 引脚变为高阻态。上电运行时,在 Vcc≥2.5V 之前,RST 必须保持低电平。 只有在 SCLK 为低电平时,才能将 RST 置为高电平。I/O 为串行数据输入输出端 (双向),SCLK 则是输入端[10]。 2.3.5 A44E A44E 属于开关型的霍尔器件,其工作电压范围比较宽(4.5~18V) ,其输 出的信号符合 TTL 电平标准,可以直接接到单片机的 IO 端口上,而且其最高测 频率可达到 1MHZ。集成开关型霍尔传感器原理如图 2.6 所示。第 7 页 共 40 页 基于单片机的出租车计价器设计VCC A B C DOUT EGNDV0/V12释放点 (off)010 15 20工作点 (on)Bm/T图 2.6 集成开关型霍耳传感器原理图A44E 集成霍耳开关由稳压器 A、霍耳电势发生器(即硅霍耳片)B、差分放 大器 C、施密特触发器 D 和 OC 门输出 E 五个基本部分组成[11]。在输入端输入 电压 VCC ,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理, 当霍耳片处在磁场中时, 在垂直于磁场的方向通以电流,则与这二者相垂直的方 向上将会产生霍耳电势差 H V 输出, 该 H V 信号经放大器放大后送至施密特触 发器整形, 使其成为方波输送到 OC 门输出。 当施加的磁场达到工作点.(即 OP B ) 时,触发器输出高电压(相对于地电位)使三极管导通,此时 OC 门输出端输出低 电压,通常称这种状态为“开”。当施加的磁场达到释放点(即 rPB )时,触发器输 出低电压,三极管截止,使 OC 门输出高电压,这种状态为“关”。这样两次电压 变换,使霍耳开关完成了一次开关动作[12]。 2.3.6 AT24C02 掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。 AT24C02 是 ATMEL 公司的 2KB 字节的电可擦除存储芯片,采用两线串行的总 线和单片机通讯,电压最低可以到 2.5V,额定电流为 1mA,芯片内的资料可以 在断电的情况下保存 40 年以上,而且采用 8 脚的 DIP 封装,使用方便。 其引脚功能:第 8 页 共 40 页 基于单片机的出租车计价器设计串行时钟信号引脚(SCL):在 SCL 输入时钟信号的上升沿将数据送入 EEPROM 器件,并在时钟的下降沿将数据读出。 串行数据输入/输出引脚(SDA):SDA 引脚可实现双向串行数据传输。该引 脚为开漏输出,可与其它多个开漏输出器件或开集电极器件线或连接。 器件/页地址脚(A2,A1,A0):A2、A1 和 A0 引脚为 24C01 与 24C02 的硬件连 接的器件地址输入引脚。24C01 在一个总线上最多可寻址八个 1K 器件,24C02 在一个总线上最多可寻址八个 2K 器件,A2、A1 和 A0 内部必须连接。 24C04 仅使用 A2、A1 作为硬件连接的器件地址输入引脚,在一个总线上最 多可寻址四个 4K 器件。A0 引脚内部未连接。其电路如图 2.7 所示。图 2.7 AT24C02 引脚图由于 AT24C02 的数据线和地址线是复用的,采用串口的方式传送数据,所 以只用两根线 SCL(移位脉冲)和 SDA(数据/地址)与单片机传送数据。每当 设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重 新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单 元中,供主程序使用[13]。 AT24C02 的存储容量为 2Kb,内容分成 32 页,每页 8B,共 256B,操作时 有两种寻址方式:芯片寻址和片内子地址寻址。 (1)芯片寻址:AT24C02 的芯片地址为 1010,其地址控制字格式为 A0R/W。其中 A2,A1,A0 可编程地址选择位。A2,A1,A0 引脚接 高、低电平后得到确定的三位编码,与 1010 形成 7 位编码,即为该器件的地址 码。R/W 为芯片读写控制位,该位为 0,表示芯片进行写操作。 (2) 片内子地址寻址: 芯片寻址可对内部 256B 中的任一个进行读/写操作, 其寻址范围为 00~FF,共 256 个寻址单位。第 9 页 共 40 页 基于单片机的出租车计价器设计2.3.7 74LS138 74LS138 芯片是常用的 3-8 线译码器,LS 是 TTL 的 ,他的 COMS 版本叫 74HC138。常用在单片机和数字电路的译码电路中。其封装如图 2.9:图 2.9 74LS138 引脚图74LS138 有 3 个附加控制端 S1, S2’和 S3’。当 S1 =1,S2’ + S3’=0 时,Gs 输出 为高电平,译码器处于工作状态。否则译码器被禁止,所有的输出端被锁存在高 电平,如表 2.1:表 2.1 74LS138 真值表三八译码器真值表 输入端 A0 0 0 0 0 1 1 1 1 A1 0 0 1 1 0 0 1 1 A2 0 1 0 1 0 1 0 1 Y0 1 0 0 0 0 0 0 0 Y1 0 1 0 0 0 0 0 0 Y2 0 0 1 0 0 0 0 0 输出端 Y3 0 0 0 1 0 0 0 0 Y4 0 0 0 0 1 0 0 0 Y5 0 0 0 0 0 1 0 0 Y6 0 0 0 0 0 0 1 0 Y7 0 0 0 0 0 0 0 1这三个控制端也被称为“片选”输入端,利用片选的作用可以将多片连接起 来以扩展译码器的功能。第 10 页 共 40 页 基于单片机的出租车计价器设计3 硬件电路设计3.1 CPU 模块该模块主要包括系统初始化、 里程的识别和费率的计算及各种功能模块的的 组织和管理等。 主程序模块在系统中起着重要的作用。鉴于单片机的端口特性不 同,拟将 P0 口、P2 口作为数据输出口,接到数码管;P1 用作存储器数据读写 端口; P3 口作为控制和霍尔传感器信号输入端口。最小系统如图 3.1:图 3.1 AT89S5 最小系统模块由于单片机采用经过整流滤波之后的汽车用 12V 电源,外接的 12M 晶振来 为单片机提供时钟源。由于计价器的工作环境比较差,它要求有抗振动、抗高低 温、抗潮湿、抗电磁干扰等能力,特别是电源方面的干扰,如出租车启动时,发 动机打火、 电瓶充电等造成输入计价器的+12V 电源不稳定。 因此采用+12V 电瓶 电源经过滤波和电源稳压管理芯片 7805 后得到+ 5 V 的稳定电压输出, 保证整个第 11 页 共 40 页 基于单片机的出租车计价器设计系统能够正常工作,电路如图 3.2 所示。图 3.2 电源电路3.2 路程测量部分里程测量是通过安装在车轮上的霍尔传感器 A44E 检测到的信号, 由单片机 处理之后显示到 LED 上的。其原理如图 3.3 所示。霍尔传感器 单片机AT89S52P3.3口磁铁车轮图 3.3 A44E 传感器工作原理图在霍尔电势发生器的两端加上电压 VCC 后,根据霍耳效应原理,当霍耳片 处在磁场中时, 霍尔传感器的输出端输出低电平。当车轮转动一圈时小磁铁提供 一个磁场,则霍尔传感器输出一次低电平完成一次数据采集。车轮每转一圈,霍 尔开关就检测并输出信号,引起单片机的中断,对脉计数。通过计算将脉冲增加第 12 页 共 40 页 基于单片机的出租车计价器设计体现在金额和里程上。 出租车中从霍尔传感器中得到标准的脉冲信号送入单片机 的 P3.3 引脚,利用单片机的 T1 的计数功能完成 1000 次的计数后产生一中断来 完成路程的测量[14]。 费用计算功能:费用计算包括两部分:起步费、行使费。 (1) 起步费用白天 6 元晚上 7 元; (2) 行使费用 1.6/公里; 设车轮周长为 1m,则霍尔传感器每产生 1000 个脉冲便表示车已行程 1km。 我们选择了 P3.3 口作为信号的输入端,内部采用外部中断 1,车轮每转一圈(我 们设车轮的周长是 1 米) ,霍尔开关就检测并输出信号,引起单片机的中断,对 脉计数,当计数达到 1000 次时,也就是 1 公里,单片机就控制将金额自动的增 加,其计算公式:当前单价× 公里数=金额。3.3 数据显示部分设计要求有单价(2 位) 、总金额(4 位)显示输出,时钟显示(包含时分秒 的显示) ,若是采用 LCD 液晶显示,则在光线较强时不能看清数据,也就不能 满足要求。考虑到共阴数码管较为常见,因此我们采用 8 位 LED 数码管来显示。 单片机的 P0 口不能输出高电平,因此需在 P0 口接 8 个上拉电阻,以满足数码 管的工作条件。数码管显示电路如图 3.4:图 3.4 显示原理图第 13 页 共 40 页 基于单片机的出租车计价器设计3.5 时钟部分DS1302 控制字节的最高有效位(位 7)必须是逻辑 1,如果它为 0,则不能 把数据写入 DS1302 中, 位 6 如果为 0, 则表示存取时钟数据, 为 1 表示存取 RAM 数据;位 5 至位 1 指示操作单元的地址;最低有效位(位 0)如为 0 表示要进行 写操作,为 1 表示进行读操作,控制字节总是从最低位开始输出。 在控制指令字输入后的下一个 SCLK 时钟的上升沿时, 数据被写入 DS1302, 数据输入从低位即位 0 开始。同样,在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据,读出数据时从低位 0 位到高位 7。采用双电 源供电,在断电的情况下由干电池组供电,可维持芯片的正常工作[15]。电路如 图 3.5 所示。图 3.5 时钟芯片电路图3.6 掉电存储电路AT24C02 采用的是 I2C 总线式串行器件。 串行器件不仅占有很少的系统资源 和 I/O 线,而且体积也大大缩小。在 I2C 总线上传送信息是的时钟同步信号是有 挂接在 SCL 时钟线上的所有器件的逻辑与完成的。SCL 线上有高电平到低电平 的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使 SCL 线一直保持低电平。 在数据传送过程中,必须确认数据传送的开始和结束。当时钟线 SCL 为高 电平时,数据线 SDA 由高电平跳变为低电平定义为“开始”信号,起始状态应处 于任何其他命令之前[16];当 SCL 线处于高电平时,SDA 线发生低电平到高电平 的跳变为“结束”信号。器件将处于备用方式(StandbyMODE).开始和结束信号都 是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后第 14 页 共 40 页 基于单片机的出租车计价器设计的一段时间内,总线被认为是空闲的。 I2C 总线的数据传送格式是:在 I2C 总线开始信号后,送出的第一个字节数 据是用来选择从器件地址的,其中前 7 位为地址码,第 8 位为方向位(R/W)读写 控制。 方向位为“0”表示发送, 即主器件把信息写到所选择的从器件; 方向位为“1” 表示主器件将从从器件读信息。 开始信号后,系统中的各个器件将自己的地址和 主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则 该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第 8 位(R/W)确 定[17]。 在 I2C 总线上每次传送的数据字节数不限,但每一个字节必须为 8 位,而且 每个传送的字节后面必须跟一个应答位(ACK),ACK 信号在第 9 个时钟周期时 出现。每次都是先传最高位,通常从器件在接收到每个字节后都会作出响应,即 释放 SCL 线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果 从器件正在处理一个实时事件而不能接收数据时, (例如正在处理一个内部中断, 在这个中断处理完之前就不能接收 I2C 总线上的数据字节)可以使时钟 SCL 线 保持低电平,从器件必须使 SDA 保持高电平,此时主器件产生 1 个结束信号, 使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放 SCL 线,主器件继续传送[18]。AT24C02 连接如图 3.6:图 3.6 掉电存储单元3.7 按键部分电路按键部分采用一个拨动式按键和四个按钮式按键组成,按键一端连接单片 机,另一端接地。当某一按键被按下时,对应的端口电平就被拉低。因此只需检 测单片机个端口的电压是否为低电平,就能判断是哪个按键被按下。按键电路如 图 3.7 所示:第 15 页 共 40 页 基于单片机的出租车计价器设计图 3.7 按键控制单元3.8 章节总结本章主要介绍出租车计价器的硬件电路设计,各个部分的电路已经列出。众 所周知单片机的灵活性极大, 因此硬件电路设计出来之后仍然可以根据具体需求 更改软件部分的设计以实现新的功能。 软件设计在单片系统的设计中占了很大的 比重,本论文的软件设计将在下一章中详细介绍。第 16 页 共 40 页 基于单片机的出租车计价器设计4 系统软件设计4.1 主程序设计在主程序模块中, 需要完成对各接口芯片的初始化、出租车起价和单价的初 始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还 需要设置启动/ 清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始 化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计 价等不同的操作。当空车信号灯打下时,表示有乘客上车,并启动计价,将根据 里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过, 则根据里程值、 每公里的单价和起价来计算出当前的累计价格,并将结果存于价 格寄存器中,然后将当前时间和累计价格送到 LED 显示电路显示出来。当到达 目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该 付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行 初始化过程。司机把空车灯打上,就停止计价,显示当前所应该付的金额和对应 的单价,等乘客下车后,启动出租车,计价器检测到传感器的脉冲信号,系统自 动对显示清零,并重新进行初始化过程,完成 1 次计价。程序流程图如 4.1:第 17 页 共 40 页 基于单片机的出租车计价器设计芯片初始化是否有乘客N读取时钟Y是否下车是白天么? Y 白天价格N夜晚价格起步价内?N读取价格Y显示价格图 4.1 主程序流程图4.2 里程计数中断服务程序每当霍尔传感器输出一个低电平信号就使单片机中断一次,里程计数器 T1 对里程脉冲计满 1000 次时,就完成当前行驶里程数的累加操作,并将结果存入第 18 页 共 40 页 基于单片机的出租车计价器设计里程寄存器中。其程序流程如图 4.2 所示。里程中断入口N S0是否按下Y启动T1计数N 计数值 &1000? Y 里程数加一返回图 4.2 里程计数流程图4.3 仿真结果比较了几种常见的电子集成仿真软件之后,本文选定了 Proteus 这一种常见 的,便于仿真的软件来模拟设计结果。 4.3.1 仿真软件 Proteus Proteus 软件是来自英国 Labcenter electronics 公司的 EDA 工具软件,它组合 了高级原理布图、混合模式 SPICE 仿真,PCB 设计以及自动布线来实现一个完整 的电子设计系统[19]。此系统受益于 15 年来的持续开发,被《电子世界》在其对第 19 页 共 40 页 基于单片机的出租车计价器设计PCB 设计系统的比较文章中评为最好产品―“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的 VSM 技术,用户可以对基于微控制器的设计连 同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如 LED/LCD、键盘、 RS232 终端等动态外设模型来对设计进行交互仿真。 4.3.2 Proteus 界面介绍 Proteus ISIS 的工作界面是一种标准的 Windows 界面,包括:标题栏、主菜 单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、 仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口[8]。如图 4.4:图 4.3 Proteus 窗口界面图4.3.3 Proteus 仿真结果 仿真结果基本符合设计的目标: 在空车的情况下, 数码管显示为当前的时间。 在按下空车灯的时候,数码管显示为当前的金额和单价。仿真效果如图 4.5:第 20 页 共 40 页 基于单片机的出租车计价器设计图 4.4 仿真结果图第 21 页 共 40 页 基于单片机的出租车计价器设计5总 结由于使用的是 AT89S52 单片机作为核心的控制元件,灵敏的霍尔开关型器 件 A44E 霍尔传感器,使本出租车计价器具有功能强、性能可靠、电路简单、成 本低实用性强等特点。加上经过优化的程序,使其有很高的智能化水平。但是在 我们设计和调试的过程中,也发现了一些问题,譬如计价的金额位数有限,实际 的里程可能会很远,会超出我们的显示范围。虽然 AT89S52 单片机抗干扰能力 不如 PLC,但是 PLC 价格较贵,不符合以经济为主的设计原则,虽然有上述种 种的不足。 但是用单片机运行效果仍然令人满意, 同时也证明了本方案的正确性。 本款出租车计价器的设计还不够人性化, 比如本次设计按键方面还可以运用 8279 芯片控制,使其具有更高的控制运行功能。8279 是专用键盘、显示控制芯 片,能对显示器进行自动扫描;能识别键盘上键的符号;可充分提高 CPU 的工 作效率。 另外还可以加上语音的提示功能和自动打印票据功能等, 这样以单片为核心 设计的出租车计价器会更加有生命力,以符合当代社会的服务标准。 总的来说,本系统工艺设计比较合理,控制方案选择恰当,硬件设计、 软件设计都基本符合要求。第 22 页 共 40 页 基于单片机的出租车计价器设计参考文献[1]. 吴承琦,孙培生. 出租汽车计价器发展历程回顾、感悟及展望[R].北京.《中 国计量》2008 年 03 期 [2]. 孙培生等编著.出租汽车计价器[M].北京中国计量出版社 [3]. N Flaherty.The 8-bit MCU is Dead, Long Live 8-bit MCU.Electronics world,-30 [4]. 孙育才.单片微型计算机及其应用[M].江苏东南大学出版社 [5]. 张平川 , 许兴广 . 基于单片机电热水器模糊控制系统设计 [J]. 微计算机信 息,2007, (32):145-146 [6]. 李群芳,张士军,黄建.单片微型计算机与接口技术[M].北京电子工业出 版社,-101. [7]. 张小虎 ,刘洁 .基于单片机的出租车计价器编码传感器的设计 [J]. 自动化技术 与应用,):1-3 [8]. 陈伟宏 肖卫初 邱飚.基于 Proteus 的多功能出租车计价器设计.重庆工学院 学报(自然科学版),) [9]. 邱 淑 贤 . 霍 尔 式 汽 车 车 速 传 感 器 检 测 系 统 . 长 春 工 业 大 学 学 报 ( 科 学 版),) [10]. 徐莹 邹德君. 车速传感器采集信号处理电路的设计.辽宁省交通高等专科 学校学报,) [11]. 阎石. 数字电子技术基础[M]. 高等教育出版社,2006.5 中国新技术新产品, [12]. 宋青 , 权伟龙 , 齐新元 . 开关型霍尔传 感器的原理与工程实 现 [J]. 物理实 验,2003 [13]. 余永权 .ATMEL89 系列单片机应用技术 [M]. 北京 : 北京航空航天大学出版 社,2002 [14]. 苏凯,刘国庆.陈国平编著.MCS-51 系列单片机系统原理与设计[M].北京冶金 工业出版社,2003 [15]. 潘新民,王燕芳编著.微型计算机控制技术 M].北京:电子工业出版社,2003第 23 页 共 40 页 基于单片机的出租车计价器设计[16]. 罗亚非 . 凌阳 16 位单片机应用基础 [M]. 北京 : 北京航空航天大学出版 社,2003 [17]. 陈赜.ARM 嵌入式技术实践教程[M] .北京: 北京航空航天大学出版社,2005 [18]. 张小虎,刘洁.基于单片机的出租车计价器编码传感器的设计[J].自动化技术 与应用,):1-3 [19]. S.S. BEDAIR. A multichannel electronic digital taximeter that can deal with more than one passenger simultaneously. Vehicular Technology Conference, 8 - 463第 24 页 共 40 页 基于单片机的出租车计价器设计致谢为期两个月的毕业设计即将接近尾声,在席老师的亲切指导和同学的帮助 下, 此次设计才得以完成, 在此向所有给予我此次毕业设计指导和帮助的老师和 同学表示最诚挚的感谢。 首先,向本设计的指导老师―席燕辉老师表示最诚挚的谢意。在自己紧张 的工作中,仍然尽量抽出时间对我们进行指导,时刻关心我们的进展状况,督促 我们抓紧学习。席老师给予的帮助贯串于设计的完全过程,从借阅参考资料到现 场的实际操作,她都给予了指导,不仅使我学会运用书本中的知识,更学会了学 习操作方法。也懂得了如何把握设计重点,如何合理安排时间和论文的编写,同 时在毕业设计过程中,她和我们在一起共同解决了设备出现的各种问题。 其次,要向给予此次毕业设计帮助的老师们,以及同学们以诚挚的谢意,在 整个设计过程中, 他们也给我很多帮助和无私的关怀,更重要的是为我们提供不 少技术方面的资料, 在此感谢他们, 没有这些资料就不是一个完整的论文。 另外, 也向给予我帮助的所有同学表示感谢。 总之,我的设计是老师和同学共同完成的结果,在设计的两个月里,我们合 作的非常愉快,教会了我许多道理,是我人生的一笔财富,我再次向给予我帮助 的席老师和同学表示感谢!第 25 页 共 40 页 基于单片机的出租车计价器设计附录 A 系统总原理图第 26 页 共 40 页 基于单片机的出租车计价器设计附录 B 各部分程序显示部分子函数: #include &reg52.h& #include &intrins.h& sbit LS138A = P2^2; sbit LS138B = P2^3; sbit LS138C = P2^4; unsigned char LedVal[]={1,2,10,2,6,10,3,5}; void delay(unsigned int i) { for(i; i & 0; i--) for(j = 200; j & 0; j--); } void display() { unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; while(1) { for( i=0; i&8; i++) { P0= Disp_Tab[LedVal[i]]; switch(i) { case 0:LS138A=0; LS138B=0; LS138C=0; case 1:LS138A=1; LS138B=0; LS138C=0; case 2:LS138A=0; LS138B=1; LS138C=0; case 3:LS138A=1; LS138B=1; LS138C=0; case 4:LS138A=0; LS138B=0; LS138C=1; case 5:LS138A=1; LS138B=0; LS138C=1; case 6:LS138A=0; LS138B=1; LS138C=1; case 7:LS138A=1; LS138B=1; LS138C=1; } delay(150); P0=0; } }第 27 页 共 40 页 基于单片机的出租车计价器设计} main() { display(); }AT24C02 的 I2C 总线操作: #include&reg52.h& #define uchar unsigned char sbit sda=P1^4; sbit scl=P1^3; void delay()//延时函数 { ;; } void start() //开始信号 { sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop() //停止 { sda=0;第 28 页 共 40 页 基于单片机的出租车计价器设计delay(); scl=1; delay(); sda=1; delay(); } void respons() //应答,在数据传送 8 位后,等待或者发送一个应答信号 { scl=1; delay(); while((sda==1)&&(i&250))i++; scl=0; delay(); } void init()//初始化函数,拉高 sda 和 scl 两条总线 { sda=1; scl=1; } void write_byte(uchar date)//写一字节,将 date 写入 AT24C02 中 {第 29 页 共 40 页 基于单片机的出租车计价器设计scl=0; for(i=0;i&8;i++) { date=date&&1; sda=CY; scl=1; delay(); scl=0; delay(); } } //scl 拉低数据写完毕 //将要送入数据送入 sda //scl 拉高准备写数据uchar read_byte()//读取一字节,从 AT24C02 中读取一个字节 { uchar i,k; for(i=0;i&8;i++) { scl=1; delay(); k=(k&&1)| scl=0; delay(); }第 30 页 共 40 页//scl 拉高准备读数据//将 sda 中的数据读出 //scl 拉低数据写完毕 基于单片机的出租车计价器设计}void delay1(uchar x)//延时程序,放在写入与读出直接 { uchar a,b; for(a=x;a&0;a--) for(b=100;b&0;b--); } void write_add(uchar address,uchar date)//向 AT24C02 中写数据{ start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop(); }uchar read_add(uchar address)//从 AT24C02 中读出数据 {第 31 页 共 40 页 基于单片机的出租车计价器设计start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); }void main() { init();//初始化 AT24C02 write_add(23,0x55);//在 23 地址处写入数据 0x55; delay1(100); P1=read_add(23);//读出地址为 23 处的数据 while(1); }第 32 页 共 40 页 基于单片机的出租车计价器设计DS1302 时钟部分程序: #include&reg52.h& #include &intrins.h& sbit SCK=P1^2; sbit SDA=P1^1; //时钟 //数据sbit RST = P1^0;// DS1302 复位 sbit LS138A=P2^2; sbit LS138B=P2^3; sbit LS138C=P2^4; bit ReadRTC_F//定义读 DS1302 标志 unsigned char l_tmpdate[7]={0,0,12,15,5,3,8};//秒分时日月周年 08-05-15 12:00:00 unsigned char l_tmpdisplay[8]; code unsigned char write rtc address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; code unsigned char read rtc address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat ); unsigned char Read_Ds1302 ( unsigned char address ); void Read_RTC(void);//read RTC void Set_RTC(void); //set RTC第 33 页 共 40 页 基于单片机的出租车计价器设计void InitTIMER0(void);//inital timer0 void main(void) { InitTIMER0(); Set_RTC(); //初始化定时器 0 //写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽 while(1) { if(ReadRTC_Flag) { ReadRTC_Flag=0; Read_RTC(); l_tmpdisplay[0]=l_tmpdate[2]/16; 们采用数码管 0~9 的显示,将数据分开 l_tmpdisplay[1]=l_tmpdate[2]&0x0f; l_tmpdisplay[2]=10; l_tmpdisplay[3]=l_tmpdate[1]/16; l_tmpdisplay[4]=l_tmpdate[1]&0x0f; l_tmpdisplay[5]=10; l_tmpdisplay[6]=l_tmpdate[0]/16; l_tmpdisplay[7]=l_tmpdate[0]&0x0f; //加入&-& //数据的转换,因我} }第 34 页 共 40 页 基于单片机的出租车计价器设计} void InitTIMER0(void) { TMOD|=0x01;//定时器设置 16 位 TH0=0//初始化值 TL0=0xf0; ET0=1; TR0=1; EA=1; } void Write_Ds1302_Byte(unsigned char temp) { for (i=0;i&8;i++) { SCK=0; SDA=temp&0x01; temp&&=1; SCK=1; } } void Write_Ds1302( unsigned char address,unsigned char dat ) { //每次传输低字节 //循环 8 次 写入数据//右移一位第 35 页 共 40 页 基于单片机的出租车计价器设计RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); //启动Write_Ds1302_Byte(address); //发送地址 Write_Ds1302_Byte(dat); RST=0; } unsigned char Read_Ds1302 ( unsigned char address ) { unsigned char i,temp=0x00; RST=0; _nop_(); _nop_(); SCK=0; _nop_(); _nop_(); RST=1; _nop_(); _nop_(); Write_Ds1302_Byte(address); //发送数据 //恢复第 36 页 共 40 页 基于单片机的出租车计价器设计for (i=0;i&8;i++) { if(SDA) temp|=0x80; SCK=0; temp&&=1; _nop_(); _nop_(); _nop_(); SCK=1; } RST=0; _nop_(); _nop_(); RST=0; SCK=0; _nop_(); _nop_(); _nop_(); _nop_(); SCK=1; _nop_(); _nop_();//循环 8 次 读取数据//每次传输低字节//右移一位//以下为 DS1302 复位的稳定时间第 37 页 共 40 页 基于单片机的出租车计价器设计SDA=0; _nop_(); _nop_(); SDA=1; _nop_(); _nop_(); return (temp); } void Read_RTC(void) { unsigned char i,*p; p=read_rtc_ for(i=0;i&7;i++) { l_tmpdate[i]=Read_Ds1302(*p); p++; } } void Set_RTC(void) { unsigned char i,*p, for(i=0;i&7;i++){ tmp=l_tmpdate[i]/10; //BCD 处理 //设定 日历 //地址传递 //分 7 次读取 秒分时日月周年 //读取 日历 //返回第 38 页 共 40 页 基于单片机的出租车计价器设计l_tmpdate[i]=l_tmpdate[i]%10; l_tmpdate[i]=l_tmpdate[i]+tmp*16; } Write_DsE,0X00);p=write_rtc_ //传地址 for(i=0;i&7;i++) { Write_Ds1302(*p,l_tmpdate[i]); p++; } Write_DsE,0x80); } void tim(void) interrupt 1 using 1 //中断,用于数码管扫描 { static unsigned char i, TH0=0xf5; TL0=0xe0; P0=table[l_tmpdisplay[i]]; switch(i) { case 0:LS138A=0; LS138B=0; LS138C=0; //查表法得到要显示数字的数码段 //7 次写入 秒分时日月周年第 39 页 共 40 页 基于单片机的出租车计价器设计case 1:LS138A=1; LS138B=0; LS138C=0; case 2:LS138A=0; LS138B=1; LS138C=0; case 3:LS138A=1; LS138B=1; LS138C=0; case 4:LS138A=0; LS138B=0; LS138C=1; case 5:LS138A=1; LS138B=0; LS138C=1; case 6:LS138A=0; LS138B=1; LS138C=1; case 7:LS138A=1; LS138B=1; LS138C=1;} i++; if(i==8) { i=0; num++; if(10==num) 调整 { ReadRTC_Flag=1; //使用标志位判断 num=0; } } } //隔段时间读取 1302 的数据。时间间隔可以第 40 页 共 40 页
更多搜索:
赞助商链接
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 霍尔传感器 单片机 的文章

 

随机推荐