毕业设计(论文)-基于单片机的车用数字仪表的设计及实现.doc_第1页
毕业设计(论文)-基于单片机的车用数字仪表的设计及实现.doc_第2页
毕业设计(论文)-基于单片机的车用数字仪表的设计及实现.doc_第3页
毕业设计(论文)-基于单片机的车用数字仪表的设计及实现.doc_第4页
毕业设计(论文)-基于单片机的车用数字仪表的设计及实现.doc_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕毕 业业 设设 计计 基于单片机的车用数字仪表的设计及实现 学生姓名学生姓名: 学号学号: 系系 部:部: 机械工程系 专专 业:业: 机械电子工程 指导教师:指导教师: 二零一五年 五月 诚信声明 本人郑重声明:本论文及其研究工作是本人在指导教师的指导下 独立完成的,在完成论文时所利用的一切资料均已在参考文献中列出。 本人签名: 年 月 日 毕业设计任务书毕业设计任务书 设计题目: 基于单片机的车用数字仪表的设计及实现 系部: 机械工程系 专业: 机械电子工程 学号: 学生: 指导教师(含职称): 1设计的主要任务及目标 学习并掌握单片机及相关知识;完成各相关信号的采集、处理,实现车速、里程、 油量等的显示。在查阅资料的基础上,完成系统整体方案设计,系统硬件设计,完成相 关元器件的选型,完成系统组成框图的绘制,在掌握电子线路图绘制工具软件的基础上, 完成相关电路图及系统原理图的绘制;完成系统软件设计包括软件流程图的绘制及程序 的编制及调试。 2设计的基本要求和内容 (1)、认真阅读任务书,通过查阅相关文献资料,在了解课题研究目的意义及现状等 基础上,构建设计方案并进行充分论证,并撰写开题报告; (2)、进行系统总体设计,熟悉开发环境; (3)、系统硬件设计,系统软件设计; (4)、毕业设计说明书; 3主要参考文献 1 李晓林.单片机原理与接口技术 M.第 2 版.电子工业出版社 2013 2 徐沐龙.单片机原理及应用 M.机械工业出版社 2013 4进度安排 设计各阶段名称起 止 日 期 阅读任务书,通过查阅资料,撰写开题报 告并进行开题答辩; 3 月 3 日3 月 23 日 系统总体方案设计,硬件选型及原理图绘 制; 3 月 24 日4 月 13 日 绘制软件流程图,中期答辩; 4 月 14 日5 月 4 日 程序编制及调试; 5 月 5 日6 月 1 日 撰写设计说明书,准备毕业答辩 6 月 2 日6 月 22 日 审核人: 年 月 日 太原工业学院毕业设计 I 基于单片机的车用数字仪表的设计及实现 摘 要:本设计是基于单片机的车用数字仪表,其中控制部分采用 at89c51rb 芯 片,外围电路采用全数字技术,实现了高效实用的车用数字仪表。它能够实时显示 汽车的速度,行驶里程,车内的温度,以及当前的时间。对于现在的汽车仪表是一 个很大的改进和升级。同时还能改善汽车仪表的美观性,为更方便的设计出各式各 样的汽车仪表提供基础。 本设计还完成了外围数据采集芯片的应用,驱动程序的编写,以及基于 protues 的整体仿真。实现了车用数字仪表的整个程序正常运行。 关键词:关键词:单片机,数字仪表,仿真 Design and implementation of digital instrument for vehicle based on single chip microcomputer Abstract:In this design, based on vehicle digital instrument of single chip microcomputer, the at89c51rb chip and the digital technology were prepared to the sections of controlling and peripheral circuit respectively to make high-effective and practical vehicle digital instrument come true. It can also realize the real-time display involving the speed of cars, the mileages, the temperature in the cars and the current time, which not only improved and upgraded significantly present motor meter, but beautified motor meter to provide foundation for the easy design of various motor meter. It also finished the application on chip of peripheral data acquisition, the compiling of drive program, as well as the whole simulation of Protues, making the whole program of vehicle digital operate normally. Keywords: Single chip microcomputer,Digital instrument,Simulation 太原工业学院毕业设计 II 目目 录录 1 前言 .1 1.1 研究背景.1 1.2 国内外研究进展.1 1.3 本课题研究内容.1 2.1 方案一 .3 2.2 方案二 .3 2.3 确定方案.4 3 车用数字仪表硬件设计 .5 3.1 主控系统 .5 3.1.1 单片机选择 .5 3.1.2 最小系统设计 .5 3.2 外围硬件 .7 3.2.1 车速模块设计 .7 3.2.2 温度模块设计 .9 3.2.3 时间模块设计 .10 3.2.4 显示模块设计 .11 3.2.5 存储模块设计 .12 3.3 电源设计 .14 3.3.1 电源硬件电路设计 .14 4 车用数字仪表软件设计 .15 4.1 开发语言选择 .15 4.2 程序流程设计 .15 4.2.1 基本流程设计 .15 4.2.2 速度算法设计 .18 4.2.3 里程算法设计 .18 4.3 驱动程序设计 .18 4.3.1 LCD 驱动程序.18 4.3.2 DS18B20 驱动程序设计.19 4.3.3 DS1302 驱动程序设计.23 太原工业学院毕业设计 III 4.3.4 SPI 存储芯片驱动程序设计.24 5 基于 PROTUES 模拟仿真 .29 6 总结 .30 参考文献 .31 致 谢 .32 附 录 .33 附录 1:系统硬件原理图.33 附录 2:源程序.33 太原工业学院毕业设计 1 1 前言前言 1.1 研究背景研究背景 车用仪表是驾驶员获知汽车信息的重要接口界面,是驾驶员了解汽车状况的直 接方法。然而,传统汽车仪表采用模拟电子技术,体积大,效率低,美观性差,故 障率高。为此,人们提出了很多方案来改善汽车仪表。但都不尽如人意。随着电子 技术的飞速发展,微处理器性能的不断提高,使得以微处理器为核心的电子控制技 术飞速发展。由此,车用数字仪表代替传统汽车仪表成为可能。 车用数字仪表应用单片机控制,数字电路设计实现。由于其单片机体积小,处 理速度非常快,所以可以设计出美观实用的车用数字仪表。并且单片机超长的寿命, 和低错误性,使得基于单片机的车用仪表既安全可靠又长久节约。因此,车用数字 仪表的设计及实现具有重要的经济价值和社会意义。 1.2 国内外研究进展国内外研究进展 汽车仪表从刚开始的机械式,到后来的模拟电子电路式经历了两个阶段的发展, 到现在,数字电路式汽车仪表开始出现,它先进的技术和物美价廉的特性,决定它 即将全面取代传统的汽车仪表。 从去年出台的2013-2017 年中国汽车仪器仪表行业分析及市场预测报告中可 以看出未来我国汽车仪器仪表行业发展方向为: (1)提高国产汽车仪表的质量和稳定性。 (2)不断的创新,将智能技术和其他科技应用在汽车仪表的设计中,提高汽车 仪表的集成度,智能化。 (3)研发高端汽车数字仪表,提高国产汽车仪表市场份额。 由此可见,国外相对国内发展领先,国内数字仪表存在很多问题,需要我们不 断努力创新改进,发展新型,可靠,高精度,数字化,集成化的车用仪表。 1.3 本课题研究内容本课题研究内容 太原工业学院毕业设计 2 本设计研究以单片机为控制元件,由速度传感器,存储芯片,数字温度传感器, 显示器件,步进电动机,时钟芯片等外围元件组成数字仪表。系统主要由七部分组 成,日期时间模块,汽车速度采集模块,里程存储模块,电动机模块,计算控制模 块,车内温度采集模块,显示信息模块。 (1)日期时间模块,日期时间芯片完成日期时间存储。 (2)汽车速度采集模块,传感器完成汽车车轮转速的采集。 (3)里程存储模块,单片机掉电时,把里程信息存入存储芯片,掉电保护里程 数据。 (4)电动机模块,单片机处理的车速信息转换为电动机的转动角度,实时显示 车速。 (5)计算控制模块,由单片机完成数据的计算和传递。 (6)车内温度采集模块,温度芯片完成温度信息采集。 (7)显示信息模块,显示汽车的车内温度,日期时间和里程信息。 太原工业学院毕业设计 3 2 方案方案设计设计 本设计要求有较高的实用性,为此,充分考虑方案的经济性和可行性以及用户 的习惯性之后,在第一章论述的基础上,查阅有关资料,得出以下设三种计方案。 2.1 方案一方案一 At89c51 速度传感器 温度传感器 存储器 LED 时钟芯片 图 2.1 方案一系统框图 本方案采用传统的 AT89C51 单片机,集合外围电路。各类传感器实现信号的采 集,由单片机处理后,送到 LED 数码管显示。系统框图如图 2.1。由六部分组成,日 期时间模块,汽车速度采集模块,里程存储模块, MCU 计算控制模块,车内温度采 集模块,LED 显示信息模块。 AT89C51 是应用最广泛的单片机之一,其结构简单,代码执行快速可靠。LED 数 码管应用方便简单。但是,AT89C51 单片机结构简单,执行快的同时,也牺牲了一部 分功能。它没有看门狗功能,且内存容量有限。LED 方便,但其存在体积大,不够美 观,信息显示量有限等缺点。 2.2 方案二方案二 太原工业学院毕业设计 4 At89c51rb2 速度传感器 温度传感器 存储器 LCD 步进电动机 时钟芯片 图 2.2 方案二系统框图 图 2.2 中,由七部分组成,日期时间模块,汽车速度采集模块,里程存储模块, 步进电动机模块,MCU 计算控制模块,车内温度采集模块,LCD 显示信息模块。 控制模块采用 AT89C51rb2。相比 AT89C51,AT89C51rb2 系统结构变化很小,使 用也很方便。在控制能力,可靠性等方面也十分接近。重要的是,AT89C51rb2 有自 带的看门狗功能,能很好的防止程序的跑偏死飞现象。速度显示方案为步进电动机 带动指针实时显示。与现在市场上的迈速表在用户体验上保持一致。显示部分应用 LCD 显示屏。能容纳更多的信息量。 2.3 确定方案确定方案 比较方案一和方案二的优缺点,可以看出,方案二的设计,更好的考虑了现实 问题和用户体验,具有更强的可行性和应用价值。所以采用方案二进行设计。 太原工业学院毕业设计 5 3 车用数字仪表硬件设计车用数字仪表硬件设计 在上一章确立方案的基础上,本章进行车用数字仪表的硬件选型和电路设计。 包含:单片机最小系统电路设计、数据采集器件的比较选择和硬件电路设计、液晶 显示,步进电机电路连接等几部分。 3.1 主控系统主控系统 单片机采用超大规模集成电路技术,把 CPU、RAM、ROM、I/O 口等集成在一 块电路芯片上。单片机还带有中断系统,定时器计数器功能。从上世纪开始,随着 单片机的不断发展,其应用领域不断扩展到各行各业。可以毫不夸张的说,单片机 的数量比人类的总人口还多。 3.1.1 单片机选择单片机选择 AT89C51RB2 是一种带 16K 字节 FLASH 存储器(FPEROMFlash Programmable and Erasable Read Only Memory)8 位单片机。相比 AT89C51,AT89C51RB2 系统结 构变化很小,使用也很方便。在控制能力,可靠性等方面也十分接近。重要的是, AT89C51RB2 有自带的看门狗功能,能很好的防止程序的跑偏死飞现象,兼容标准的 MCS-51 指令集。AT89C51RB2 单片机应用在本设计中既廉价又实用。 3.1.2 最小系统设计最小系统设计 (1)控制部件及振荡器 单片机的控制部分包括定时电路,控制电路,传输电路等。单片机是时钟驱动 器件,没有时钟晶振,单片机就不能工作。单片机以晶振频率为基准,发出 CPU 时 序,来控制完成各种功能。如数据运算和传送,地址锁存,外部程序存储器选通 PSEN,以及通过 P3.6 和 P3.7 发出数据存储器读 RD 和写 WR 等控制信号,并且接 收处理外接的复位 RST 和外部程序存储器访问控制 EA 信号。 单片机的驱动方式分为两种,一种是以外部晶振为基准的内部时钟方式,另一 太原工业学院毕业设计 6 种是以外部时钟为基准的方式。如图 3.1 和 3.2 所示。 图 3.1 内部振荡器方式 图 3.2 外部振荡器方式 本设计采用外部晶振为基准的内部时钟方式,如图 3.1。晶振与 AT89C51rb2 的 反向放大器连接,接口为 XTAL1、XTAL2。由此组成一个自激振荡电路,向 AT89C51rb2 内部时钟电路提供振荡时钟。自激振荡电路的频率主要取决于晶体的振 荡频率,晶体选择 12MHZ。电容 10pF25pF 之间,可以起到频率微调的作用。 (2)复位电路 单片机的复位原理为,在 RST 端持续给出两个周期的高电平。单片机复位方法 分为两种,上电自动复位和手动复位。 (1)上电自动复位:在每次接通电源上电时,都会自动进行复位,复位后单片 机内部的各寄存器值变为初始状态。实现原理为,在 RST 端加一个 RC 电路。上电 时 RST 与 Vcc 电压相同。经过两个机器周期后,电容逐渐存电,电压上升。RST 端 的电压下降。电路参数 C 取 23uf,R 取 1K,可在 RST 端产生足够的高电平脉冲, 使单片机能够可靠的上电自动复位。 (2)手动复位:当需要手动复位时,可以人为产生两个机器周期以上的高电压。 以实现复位目的。这里可以在 RC 电路上并接一个开关按钮,就能实现人为手动复位 的目的。当需要外部复位时,可以按下复位按钮达到复位目的。电路图如图 3.3。 太原工业学院毕业设计 7 图 3.3 单片机复位电路 3.2 外围硬件外围硬件 通过外围硬件电路的设计,完成硬件选型和电路的连接。 3.2.1 车速模块设计车速模块设计 (1)霍尔数字测速元件 车用数字仪表的测速需要用到霍尔测速元件,它比现阶段所使用的感应电动机 有很多优点,比如体积小寿命长等等。霍尔元件的线性精度很高。开关元件更是有 无触点无抖动等优点。并且,它的工作环境使用性很强,在灰尘油污高低温环境下 都可正常运行。用在测速时,它的频率可以达到 1MHZ,足以满足测速的测量。 本设计选用霍尔开关元件 a3144e,通过把 a3144e 安装在车轮上,车轮每转动一 周,就由 a3144e 产生一定数量的脉冲信号。脉冲信号送到单片机,单片机对脉冲信 号进行计数。每 10ms 对计数值进行计算处理,得出汽车的速度,送给显示单元,这 样便完成了车速计算。本设计把脉冲信号送到单片机的 P3.2 口,使用 P3.2 口的第二 功能,对脉冲信号进行计数,车轮每转一圈,霍尔开关就检测并输出信号,单片机 对脉冲计数。为了增强抗干扰性能,在信号传输中采用光耦合元件。如图 3.4。 太原工业学院毕业设计 8 图 3.4 霍尔传感器 A3144E 和单片机连接电路 (2)步进电动机 步进电动机是应用很广泛的执行元件,由于它的转速,停止位置只取决于脉冲 频率和脉冲数量。所以,很多开环控制系统都采用步进电动机作为执行单元。相比 较,控制系统的执行单元还有伺服电机,伺服电机也有很多优点,它控制精度高, 能实现闭环控制,但是,在本设计中,应用伺服电机的成本会升高。同样的功能, 本设计更趋向于物美价廉的步进电动机,他同样能很好的完成既定目标功能。单片 机的控制精度和步距角有关,为了实现本设计的功能,采用步距角为 0.9 度的步进电 动机。由于步进电动机的驱动电压和单片机的不同,为 12v。所以采用 ULN2003A 作为电压放大之用。步进电动机硬件电路如图 3.5 所示。 由此,车用数字仪表的速度模块由霍尔元件和步进电动机完成实时速度的显示, 步进电机步距角 0.9 度,可以设计 180 度的扇形显示 200KM/小时。这样,迈速表的 分辨率为 1KM/小时。 太原工业学院毕业设计 9 3.5 步进电动机与单片机连接电路 3.2.2 温度模块设计温度模块设计 DS18B20 是一种单总线数字温度传感器,测试温度范围-55-125。温度数据 精度可设置为 9、10、11、12 位,对应的刻度值分别为 0.5、0.25、0.125、 0.0625,对应的最长转换时间分别为 93.75ms、187.5ms、375ms、750ms。出厂默 认精度设置为 12 位数据,刻度值为 0.0625。温度转换时间最长为 750ms。 DS18B20 是达拉斯公司生产的,拥有公司自主研发的单总线通信技术。控制芯 片只需要一根总线。DS18B20 有很多优点,使用方便,且环境适应性强。对电源的 要求也很低。可以工作在寄生电源和单独供电两种模式下。 本设计使用 DS18B20,可以发挥它体积小精度高等优势。而且,车用数字仪表 中使用 DS18B20 也完全可以满足要求。它的耗电量很小。广泛的应用实例也可以为 我的开发提供参考。 DS18B20 硬件连接如图 3.6 所示。 太原工业学院毕业设计 10 图 3.6 DS18B20 与单片机连接电路 3.2.3 时间模块设计时间模块设计 DS1302 是 DALLAS 公司生产的。它是一种涓流充电时钟芯片。DS1302 芯片中 内含有一个实时时钟/日历和 31 字节静态 RAM。DS1302 可以提供秒、分、时、日、 日期、月、年的信息。它还有一个很大的优点,就是可以自动调整每月的天数。并 且可以通过编程设置采用 24 小时或 12 小时的格式。 DS1302 与单片机的通信很简单。采用的是同步串行方式。连接的线也很少,只 用到三根,分别是 RST 复位线,I/O 数据线,SCLK 串行时钟线。他在工作时的耗电 很低。保持信息时只要 1mW。硬件电路如图 3.7 图 3.7 DS1302 与单片机硬件电路 太原工业学院毕业设计 11 3.2.4 显示模块设计显示模块设计 由于需要显示的信息量多,且含有中文信息。本设计采用 PG12864F 图形液晶显 示器。它内置了 T6963C 液晶显示控制器。T6963C 液晶显示控制器多用于中小规模 的液晶显示器件 常被装配在图形液晶显示模块上 以内藏控制器型图形液晶显示模 块的形式出现。 表 3.1 PG12864F 功能引脚 D0-D7T6963C 与 MPU 接口的数据总线,三态 /RD /WR读 写选通信号 低电平有效 输入信号 /CET6963C 的片选信号 低电平有效 C/D通道选择信号 1 为指令通道 0 为数据通 道 /RESET /HALT/RESET 为低电平有效的复位信号 它将 行 列计数器和显示寄存器清零 关显示 /HALT 具有/RESET 的基本功能 还将中 止内部时钟振荡器的工作 DUAL SDSELDUAL=1 为单屏结构 DUAL=0 为双屏结 构 SDDEL=0 为一位串行数据传输方式 MD2,MD3设置显示窗口长度,从而确定了列数据传 输个数的最大值 FS1显示字符的字体选择 本设计采用 PG12864F 的原因是,它可以提供 128*64 的图形显示区,相比较字 符显示屏的优点,它可以自定义很多图形。能完成汉字的显示。唯一的缺点是需要 自行建立汉字字模表。 在连接电路时,把它接在单片机的 P0 口,由于 P0 口没有内部上拉电阻,在作 为输入输出功能使用时,加上拉排阻 RP1。P0 口作为 LCD 的数据通道。其余控制信 号则由 P2.0-P2.4 五个口来控制。本设计默认采用 6*8 的字模格式,所以 FS1 口直接 接地。 硬件电路如图 3.8 所示,其中 P0 口为数据输出,需要加 RP1 拉排阻。 太原工业学院毕业设计 12 3.8 PG12864F 与单片机连接电路 3.2.5 存储模块设计存储模块设计 本设计采用 SPI 接口芯片 25AA010A。 SPI 是串行外设接口(Serial Peripheral Interface)的缩写。SPI,在现在的应用很 是广泛。她是一种高速的,全双工,同步的通信总线。SPI 只需要四根总线。而且体 积很小。在传输速率上又很快。 本设计采用的 25AA010A 有六根线,其中四根是所有基于 SPI 的设备共有的, 它们是 SI(数据输入) 、SO(数据输出) 、SCLK(时钟) 、CS(片选) ,其余两根是 这个系列芯片特有的,HOLD(保持信号) 、WP(写保护) 。 太原工业学院毕业设计 13 表 3.2 25AA010A 引脚功能 SI主设备数据输出,从设备数据输入 SO主设备数据输入,从设备数据输出 SCLK时钟信号,由主设备产生 CS从设备使能信号,由主设备控制 HOLD保持状态信号 WP写保护信号 要想和 SPI 接口的芯片通信,必须使片选信号 CS 为预先规定的使能信号相同时, 才能通信。这样,就能在同一根总线上连接多个 SPI 接口的芯片了。 当 CS 信号为有效时,通讯通过数据线来实现的。SPI 是一种串行接口,顾名思 义,就是通讯的数据是一位一位的传输的。所以,必须有时钟总线 SCLK 来协调两 个元件之间的步调。就好比一个音乐指挥官一样,来统一指挥元件的节奏。这样, SI 和 SO 就知道应该按照什么频率来传输数据了。由于 SCLK 的作用是指挥官,所 以它必须由传输数据的主动方来控制,也就是只能由主设备控制。 这里还有介绍 HOLD ,它是允许传输暂停的控制信号,当 HOLD 为有效信号时, 通讯暂停,单片机可以去完成别的操作,比如说处理中断等。这个功能的实用性就 是既可以保证传输数据的完整性,又不耽误高优选级的事情得到处理。本设计的数 据存储量很小。只需要存储几个字节的里程数据,固而采用的是 25AA010A 芯片, 它的结构小巧,能存储 2kb 的数据,足以满足里程数据的存储。25AA010A 与单片 机的连接如图 3.9 所示。其中时钟信号由 P3.0 提供。数据输入输出分别为 P3.1 口和 P3.2 口。片选信号为 P3.4 口控制。其余两个引脚 HOLD、WP 分别接在 P3.5 口和 P3.6 口。 太原工业学院毕业设计 14 图 3.9 2AA010A 与单片机连接的硬件电路 3.3 电源设计电源设计 汽车的蓄电池低压为 12V,正好可以为步进电动机提供电源。而单片机的工作 电压为 5V 左右。这就要求设计硬件电路来完成 12V 到 5V 电压的转变。 3.3.1 电源硬件电路设计电源硬件电路设计 本设计拟用 LM317T 直流稳压器作为电压转换芯片。输出电压的大小由 R4 和 R3 的比值来确定。D1 是电源指示灯,为一个红色发光二极管。D2 和 D3 起到过压 保护的作用。防止芯片引脚被烧坏。其电路如图 3.10 所示。 图 3.10 电源电路设计 太原工业学院毕业设计 15 4 车用数字仪表软件设计车用数字仪表软件设计 4.1 开发语言选择开发语言选择 汇编语言它是计算机语言,计算机语言说通俗点就是人类与计算机(CPU)沟通 的桥梁,计算机它不认识人类的语言,听不懂也读不懂,要让计算机替我们去完成 我们的工作,就需要我们将要交给计算机完成的任务翻译为计算机语言。汇编语言 是各种语言中的一种,它属于低级的计算机语言,这是相对于面向过程的 C 语言, 以及面向对象的 C+,java 而言。它是除机器语言以外最接近硬件的计算机语言,而 且可以通过学习汇编语言深入的了解操作系统的底层运行机制,并以 CPU 的角度思 考问题。这样可以让你在编写高级语言的程序的时候避免很多错误,并且能更深入 理解高级语言的执行 原理。因为汇编语言属于低级语言,所以既然低级就肯定不容 易被普通用户认识,这需要一定的硬件基础知识和一些计算机工作原理的知识。 C 语言相比较低级语言,有很强的可读性,编程很方便。可以大大提高开发效率。 由于他们各有优缺点。本设计采用混合编程,充分发挥了两种语言的优势,实 时性高的地方用汇编语言,实时低的地方用 C 语言。将汇编语言程序模块嵌入到 C 语言程序。 4.2 程序流程设计程序流程设计 程序的开发,首先的对需求进行分析,得出程序流程图,再在此基础之上进行 程序代码的开发,和修改完善。 4.2.1 基本流程设计基本流程设计 (1)车用数字仪表的程序设计应充分考虑它的实际情况。汽车的车速是一个实 时显示的数据,而且实时性很高,而其他的温度日期等相对实时性低。所以,应该 把汽车的速度模块放在中断中去处理。而且,当单片机掉电时,对里程数据的存储 也至关重要,所以,单片机的掉电中断优选级最高。 下面分三部分介绍系统流程图。其中图 4.1 为主程序框图。 太原工业学院毕业设计 16 图 4.1 主程序图 (2)程序的循环体中应该不断更新各类数据。其中,温度跟新时,先对温度芯 片发出温度转换信号,温度转换的时间大约为 10ms,比较耗时。接下来完成速度里 程的处理。速度里程处理完成后,再执行温度读取,时间读取,LCD 更新等操作。 循环体的流程框图为图 4.2 所示。 开始 温度转换 读取数据 显示初始 化 开中断 循环标志 循环体数据存储 结束 太原工业学院毕业设计 17 是 否 图 4.2 循环体程序框图 (3)中断程序的设计原则应尽可能短小。所以中断程序只完成中断标志置位和 数据读取操作。 温度转换 中断标志判断 步进电机驱动 速度里程计算 刷新 LCD 读取计数器 值 中断标志为 1 返回循环体 太原工业学院毕业设计 18 图 4.3 中断程序框图 4.2.2 速度算法设计速度算法设计 由计数器 T1 对 A3144E 产生的脉冲信号进行计数,定时器 T2 每 0.5 秒产生一次 中断,程序读取计时器值 x,x 则为 0.5 秒 A3144E 产生的脉冲个数。设计车轮轴向 有四个均匀分布的磁极。由此得出车轮转过的圈数为 x/4。根据汽车的车辆周长 y。 可以计算的出车速 v = x*y /(4*0.5) 。 4.2.3 里程算法设计里程算法设计 每次定时器 T2 产生中断后,对里程数据进行累加 x*y/4。 4.3 驱动程序设计驱动程序设计 4.3.1 LCD 驱动程序驱动程序 #define _LCD_H_ /* * 定义引脚 * */ sbit LCD_WR = P20; sbit LCD_RD = P21; sbit LCD_CE = P22; sbit LCD_C_D = P23; sbit LCD_RST = P24; /* * 定义指令 * 太原工业学院毕业设计 19 */ #define CGRAM_ADDR 0X22 /D1 低五位有效,D2 为 0 x00,CGRAM 偏置 地址设置 #define ADDR_POINT 0X24 /D1 低字节,D2 高字节,地址指针位置 #define START 0 x9c /开始显示 #define ZHIFU 0X84 /选择字符发生器 文本特征 /* * 定义驱动函数 * */ void delayms(unsigned int z); /延时若干毫秒 void write_com(unsigned char com); /LCD 液晶写无参数入指令 void write_com1(unsigned char dat1,unsigned char com); /LCD 液晶写入 1 个参数指 令 void write_com2(unsigned char dat1, unsigned char dat2,unsigned char com); /LCD 液晶写入 2 个参数指令 void write_data(unsigned char dat); /LCD 液晶写入数据 void read_data (); /读取状态标志位 void LCD_Init(); /初始化 void Write_hanzi(unsigned char dat,unsigned char addr1); /写汉字 void Write_shuzi(unsigned char dat,unsigned char addr1); /写数字 void Write_CGRAM(unsigned char *dat); /设置 CGRAM unsigned char shuzi(unsigned char shu); /数字转换字摸吗 unsigned char shuzi_1(unsigned char shu); /星期数字转换字摸吗 void vive_time_shuzi(unsigned char dat,unsigned char addr); /显示时间数字 void vive_xingqi_shuzi(unsigned char dat); /显示星期数字 void vive_licheng_shuzi(unsigned char *dat); /显示里程数字 void lcd(unsigned char *table); /lcd 初始化 #endif 太原工业学院毕业设计 20 4.3.2 DS18B20 驱动程序设计驱动程序设计 /* 温度传感器模块 */ #ifndef _DS18B20_H_ #define _DS18B20_H_ sbit DQ = P37; sbit ACC_0 = ACC0; sbit ACC_7 = ACC7; extern bit Tem_Flag ; /温度符号标志 #define Search 0 xf0 /搜索 ROM #define Read 0 x33 /读取 ROM 单个 ds18b20 #define Math 0 x55 /匹配 ROM #define Skip 0 xcc /忽略 ROM 单个时只能跟 读取指令 #define Alarm 0 xec /报警搜索 #define Convert 0 x44 /温度转换指令 #define Write_S 0 x4e /写暂存器 #define Read_S 0 xbe /读暂存器 #define Copy_S 0 x48 /拷贝暂存器 #define Recall 0 xb8 /召回 EEPROM void delayus(unsigned char z); /延时 2us 的整数倍 ,最大 510us void Ds_Init(); /初始化 DS18B20 void Ds_Write_Bit( bit temp); /写一位 bit Ds_Read_Bit(); /读一位 void Ds_Write_Byte(unsigned char temp); /写一个字节 unsigned char Ds_Read_Byte(); /读一个字节 void Ds_Tem_Fresh(); /温度转化 unsigned int Ds_Read_Tem(); /读温度 #endif 太原工业学院毕业设计 21 #include #include bit Tem_Flag ; /温度符号标志 void delayus(unsigned char z) /延时 2us 的整数倍 ,最 大 510us #pragma asm /汇编精确定时 DELAY: DJNZ R7 , DELAY #pragma endasm void Ds_Init() /初始化 DS18B20 DQ = 0; delayus(241); DQ = 1; delayus(241); void Ds_Write_Bit( bit temp) /写一位 if(temp) DQ = 0; delayus(8); DQ = 1; delayus(23); else DQ = 0; delayus(31); DQ = 1; bit Ds_Read_Bit() /读一位 太原工业学院毕业设计 22 bit temp; DQ = 0; delayus(1); DQ = 1; delayus(5); temp = DQ; delayus(26); return (temp); void Ds_Write_Byte(unsigned char temp) /写一个字节 unsigned char i; for(i = 8; i 0; i-) ACC = temp; Ds_Write_Bit(ACC_0); temp = ACC 1; unsigned char Ds_Read_Byte() /读一个字节 unsigned char i , temp; for(i = 8; i 0; i-) /此处循环会用到 ACC 累加器,所以用 temp 传递值 ACC = temp; ACC = ACC 1; ACC_7 = Ds_Read_Bit(); temp = ACC; return (temp); void Ds_Tem_Fresh() /温度转化 太原工业学院毕业设计 23 Ds_Init(); Ds_Write_Byte(Skip); Ds_Write_Byte(Convert); unsigned int Ds_Read_Tem() /读温度 unsigned char temp1 , temp2; Ds_Init(); Ds_Write_Byte(Skip); Ds_Write_Byte(Read_S); temp1 = Ds_Read_Byte(); temp2 = Ds_Read_Byte(); if(temp2 temp1 = (temp2 4)+1; Tem_Flag = 1; /负温度,标志位为 1 else /正温度 temp2 = temp2 temp1 = (temp2 4); Tem_Flag = 0; /正温度,标志位为 0 return (temp1); /整数温度 4.3.3 DS1302 驱动程序设计驱动程序设计 /* 时钟模块 */ #ifndef _DS1302_H_ 太原工业学院毕业设计 24 #define _DS1302_H_ sbit clock_rst = P25; /ds1302 复位线引脚 sbit clock_sclk = P26; /ds1302 时钟线引脚 sbit clock_io = P27; /ds1302 数据线引脚 sbit ACC0 = ACC0; sbit ACC7 = ACC7; #define second_addr 0 x80 /定义“秒”地址 #define minute_addr 0 x82 /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论