S-6-1 正文、结论、参考文献等标准格式(理工农科专业学生用)

更新时间:2024-05-27 20:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

淮阴工学院毕业设计说明书(论文)

1 绪论

第 1 页 共 45 页

在全球倡导绿色环保的大趋势下,近年来我国加大了对车辆排放和噪声的管理,由于电动车具有无污染、低噪声和轻便快捷等优点,是一种绿色环保的交通工具,所以从保护环境和经济条件许可等因素综合来看,电动车目前乃至今后都有着广阔的发展空间。

随着人们生活质量的提高,再加上智能化、多功能化产品概念的倡导,又从市场的角度来说,电动车自然会追求智能化,因此配有电量、速度和里程表的电动车成为了生产厂家和消费者的一个关注点。目前市面上电动车的速度表和里程表都是机械的,看起来不够直观与方便。如果能用LED直接显示出来里程数、速度值以及蓄电池电量,对电动车的发展将非常有意义。

1.1 电动车仪表的现状

现在市场上大部分电动车配有指针式仪表,部分没有仪表,很少有用数字直接显示的速度/里程仪表,看起来不够直观与方便。而电量的显示多采用硬件电路直接控制,用发光二极管粗略地显示蓄电池的电量,不采用单片机控制,电路结构相当复杂,而且不能提供精确的电量。目前电动车上安装的大部分都是指针式仪表,那么指针式仪表的基本组成是什么呢?

电动车指针式仪表包含累计行驶里程表、整车速度指针表、电池电压指针表、大灯指示、左右转向灯指示等。累计行驶里程表是由6个十进制的齿轮计数器组成,整车速度指针表是个阻尼转速表,它们共用一个转速输入信号进行换算,通过机械传动实现各自的指示功能。电压指针表采用50伏直流电压表的表头[1]。指针类仪表的集成度比较低,电路的接线比较简单,仪表电路不依赖于控制器电路,能独立工作。这类机械式车速表是由旋转磁场作用于转动盘,使转动盘连同车速表指针发生同向的偏转。当电磁转矩与弹簧产生的阻力矩平衡时,指针偏转停留在某一角度上。指针偏转角与车速成正比,因而可用其表示车速[1~2]。

机械式车速表的缺陷是明显的。由于表盘指针偏转程度正比于软轴转动时产生的磁力,当转速较低的时候,磁力较小,随转速变化的波动较大。因此,低速时车速表指针摆动剧烈、测量及显示精度不高。

1.2 电动车仪表的发展

淮阴工学院毕业设计说明书(论文)

第 2 页 共 45 页

随着电子技术的发展,现在一些电动车已经开始使用液晶仪表,该仪表是以专用霍尔传感器的开关信号传到液晶显示仪表单片机上的一种仪器,通过计算单位时间内车轮的转数,便可得到行驶时速,将行驶时速与时间相乘,则可得到行驶的里程。

另外,也有的无刷电机控制器内部选用单片机作为译码芯片,能把电机运行时速和累计行驶里程直接计算出来,输送到液晶显示仪表,这种液晶显示仪表总成内部就没有单片机了。液晶显示仪表虽然能精确显示各种数据,但是这种仪表的缺点就是抗阳光紫外线辐射能力差,对使用环境温度要求高,所以液晶显示仪表不能长时间放在太阳光底下晒,只能在-10-40℃的环境温度下使用。长时间在高温或低温环境下使用,将导致液晶屏的不可逆损伤,这样液晶屏的显示数值就会模糊,直至无法显示[1~2]。

在世界进入数字化时代的今天,新概念的电动车仪表最直观的变化就是用LED数码管取代指针式表盘,直接用数字显示速度、里程和电量。

1.3 设计的意义

仪表的电子化已经是未来发展的趋势,基于以上的原因,我设计了基于单片机的电动车仪表。该仪表不仅能交替显示速度和里程,还能直观的显示蓄电池的电量。在近几年中,随着计算机技术的飞速发展,促使了大规模集成电路技术的成熟,可供选择的单片机种类也十分多,因此可以满足不同功能的仪表的需要。另外,这些单片机大都能提供功能齐全的开发、仿真系统,使得新产品的开发方便、稳定,大大缩短了开发过程。集成芯片体积小、稳定性高、抗干扰能力强、控制灵活,能适应电动车仪表对高可靠性、防震、防水等工作环境的要求。在生产和调试过程中很容易实现系统化、自动化,大大提高了生产效率,适合大批量生产的需求,促进了单片机的生产成本大大降低。用单片机来实现速度、里程及电量的测量和显示,将大大节省成本,而且性能稳定,便于开发利用[11~15]。

本设计的电动车仪表,综合了里程,速度,电量显示等功能,另外还加入了超速报警功能,使之更加人性化。

这次设计采用了电子集成电路,实现了智能化,具有很强的实用性。由于电动车操作简单,老少皆宜,是城乡居民出行使用的经济时尚型交通工具,将会受到人们的普遍欢迎。

2 系统总体设计

2.1 总体设计思路:

淮阴工学院毕业设计说明书(论文)

第 3 页 共 45 页

假定轮圈的周长为L,在轮圈上安装m个永久磁铁,则测得的里程值最大误差为L/m。经综合分析,本设计中取m=1。当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从外部中断0输入,传感器每获取一个脉冲即对系统提供一次计数中断。每次中断代表车轮转动一圈,根据中断数n与车轮的周长可以计算出里程值。计数器T1计算每转一圈所用的时间t,再根据车轮的周长,就可以计算出即时速度v。里程和速度的显示可以通过按键开关设置为交替显示,当开关不闭合时,里程指示灯亮,LED显示里程值;当开关闭合时,速度指示灯亮,LED切换显示当前速度v;若电动车超速,系统发出报警提示,报警指示灯亮。对于蓄电池电量的测量和显示,采用模数转换芯片将采集到的模拟电压信号转换成数字信号,通过对单片机系统进行软件编程,使单片机能按规定的时序来采集这些数字信号,通过一定的算法计算出被测电压的值,最后单片机系统将计算好了的被测电压值按一定的时序送入电量显示电路模块加以显示。

2.2 系统总体框图

系统总体框图如图2-1所示。

传感器 放大器 波形变换 波形整形 数据存储电路 速度/里程显示 单片机 AT89C52 电量显示 报警电路 电压采集电路 A/D转换电路 图2-1 系统总体框图

本系统由信号预处理电路、单片机AT89C52、LED显示电路、蓄电池电压采集电路、串口数据存储电路、A/D转换电路等组成。其中信号预处理电路包含信号放大、波形变换和波形整形。对待测信号进行放大的目的是降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机相连的TTL信号。经过预处理的脉冲信号进入单片机的外部中断0引脚,用于对轮子圈数的计数输入。轮子每转一圈,霍尔传感器就输出一个低电平脉冲。根据里程寄存器中的内容,计算行驶的里程数。经二分频后的脉冲信号进入外部中断1引脚,用于控制定时器T1的启/停,

淮阴工学院毕业设计说明书(论文)

第 4 页 共 45 页

当输入为0时关闭定时器。这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出电动车的速度。里程数是采用I2C总线并通过E2PROM来存储,既节省了所需单片机的口线和外围器件,同时也简化了显示部分的软件编程。

3 系统软件设计

3.1 软件设计思路

由于一个完整的单片机系统,包括软硬件两个方面,硬件是系统可靠运行的“载体”,是基础,而软件则是使“载体”产生动力的发电机,二者相辅相成,缺一不可,所以在硬件电路设计的基础上,我对基于单片机的电动车仪表进行了软件方面的设计。这次设计主要采用模块化的设计方法,首先要确定用什么样的主程序,然后根据这个主程序进行分析,从而设计出所需要的子程序模块,接着对每个模块进行分析,根据它们的功能要求来设计相对应的软件,最后运用Keil与Proteus软件的联调来进行仿真与调试。

基于单片机的电动车仪表设计的软件设计包括主程序、里程测量程序、速度测量程序、A/D转换程序、里程显示子程序、速度显示子程序、延时子程序等几大部分,下面就其主要部分分别加以设计分析。

3.2 主程序设计

在主程序中,需要完成对各接口芯片的初始化、电动车里程和速度初始化、中断向量的设计以及开中断、开定时器等工作。另外,在主程序中还需要设置里程寄存器、速度寄存器、电量寄存器,并对它们进行初始化。然后,主程序将根据各个标志寄存器的内容,分别完成计算里程、测量速度和测量电量等不同的操作。

由电路仿真图可知(见图4-6)可知,P1.3和P1.7端口分别用于显示速度状态和里程状态。P1.6口用于里程显示和速度显示的切换,低电平为显示速度,高电平为显示里程。外中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器就输出一个低电平脉冲。将根据里程寄存器中的内容,计算行驶里程数。外中断1用于控制定时器T1的启/停,当输入为0时关闭定时器。此控制信号是将轮子圈数的计数脉冲经二分频后形成。这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出电动车的速度。

主程序流程图如图3-1所示。

淮阴工学院毕业设计说明书(论文)

图3-1 主程序流程图 注释:

Y 调用里程处理子程序 调用速度处理子程序 N P1.6=1? 调用电量处理子程序 初始化 开始 第 5 页 共 45 页

(1)在本系统初始化程序中,主要完成以下工作:将T1设置为外部控制定时器方式;外中断0以及外中断1设置为边沿触发方式;将部分内存单元清零;开中断及定时器;将EEPROM中的数据调入内存等。

(2)程序完成了启动定时器、开中断,将EEPROM中的数据读入,先调用电量处理子程序,然后根据P1.6口的开关状态选择里程显示或速度显示,如果是P1.6口选择是1,那就调用里程处理子程序,如果是P1.6口选择是0,那就调用速度处理子程序,如此循环。

3.3 电压转换程序

测量蓄电池电量的原理:这里主要是利用TLC549模数串口芯片,TLC549芯片的基准电压脚外接电压为+5V,由于蓄电池的电压(48V)超过了TLC549的电源电压,所以要将蓄电池的电压经过R1和R2分压后进入TLC549芯片的模拟输入,进行模拟采样。输入的模拟量,经过TLC549芯片的内部A/D转换器,转换成8位二进制数,其最小的分辨

淮阴工学院毕业设计说明书(论文)

第 6 页 共 45 页

率为0.0196(VREF=0.0196V),D为转化的数字量,再通过V=[(R1+R2)/R2]*(D/255)*5(V)可以求得模拟电压,最后通过数码管就可将所测得电量显示出来。

用TLC549串口芯片的话,先选中该芯片,将该芯片的CS脚为低电平,在进行读取数据时,将CLK先拉高再拉低,在CLK下降沿的时候,将数据移出,这样不断的循环8次。

电压转换程序的流程图如图3-2所示。

返回 图3-2 电压转换程序的流程图

调用电量显示程序 否 是否有8次? 是 数据处理 CLK置0 CLK置1 对模拟电压进行采样 CS置0选中芯片 开始 将数据通过DOUT送入单片机 3.4 里程测量程序

采用外部中断0服务程序对行驶圈数进行计数,该计数值为十六进制数。由图3-3可知,60H~62H单元存放圈数,轮子每转一圈,即产生一次外部中断,计数值加1。

淮阴工学院毕业设计说明书(论文)

第 7 页 共 45 页

每计数一次后,对里程数据进行一次存储操作。根据计数器计出脉冲数,用脉冲数除以电动车行驶0.1公里所要转的圈数,就可以算出电动车的里程数。把这个里程数与存储器原来的里程数相加即可得到目前的总里程数。总里程数的显示是设定出现在电动车开动,单片机开机经过初始化后显示出来,这样以来用户可以清楚的知道自己的车子已经运行了多少公里了。

累加器恢复 开外中断1 溢出进位61H、62H 计数没溢出,转INTEX0OUT 清A 车轮圈数加1 状态字堆栈保护 累加器堆栈保护 状态字恢复

中断返回 图3-3里程测量流程图 3.5 速度测量程序

采用外部中断1控制定时器T1的启动和停止。当外部中断1输入为0时,定时器T1停止,当外部中断1输入为1时,定时器T1启动。外部中断1的输入信号是将轮子圈数的计数脉冲经二分频后形成。这样每次定时器T1的计数时间为轮子转一圈所用的时间。由图3-4可知,68H~6BH单元存放轮子转一圈的时间。定时器计出每转一圈的时间,用电动车车轮的周长除以转一圈所用的时间就得出电动车的速度。

淮阴工学院毕业设计说明书(论文)

清A

计时单元置0

堆栈恢复 清溢出标志 将时间计数值移入暂存单元68H–6BH 溢出时,计时单元赋#0FFH 关外中断1 堆栈保护 第 8 页 共 45 页

溢出标志为0转INTEX11,将时间计数值放入暂存单元68H–6BH

返回 图3-4 速度测量流程图

3.6 里程显示子程序

当显示里程时,如图3-5所示,先关闭速度指示灯,开里程指示灯,再将轮子的圈数转换为公里数,然后在数码管中显示公里数,最后子程序返回。

子程序返回 图3-5 里程显示程序流程图

显示公里数 将圈数转换成公里数 关闭速度指示灯,开启里程指示灯 淮阴工学院毕业设计说明书(论文)

3.7 速度显示子程序

第 9 页 共 45 页

当要显示速度时,如图3-6所示,首先进行关里程指示灯,开启速度指示灯,接着调用速度转换子程序,然后与设定速度比较,超速报警,最后调用显示子程序在数码管中显示出来。

关闭里程指示灯,开启速度指示灯 调每圈时间转换为速度子程序 是否超速? N Y 报警 关报警器 显示速度 子程序返回

图3-6 速度显示程序的流程图

4 软件调试

4.1 Keil的概述

Keil C51是Keil公司针对80C51系列单芯片,在Windows平台上开发出的一套工具软件,透过Keil uVision2的IDE(整合发展环境),提供80C51汇编语言与C51语言的编辑、编译/连结、除错/模拟测试,并具备完善的项目管理系统(Project),以及系统文件说明等功能[20]。

Keil uVision2的功能结构说明如下:

淮阴工学院毕业设计说明书(论文)

结等建构项目的功能。

第 10 页 共 45 页

(1)Keil uVision2 IDE提供项目管理的整合作业环境,拥有编译、组译、连

(2)提供各种厂牌型号80C51核心兼容单芯片系统的开发使用。

(3)C51提供ANSI C程序语言编译器(ANSI C Compiler);A51提供8051汇编程序组译器(Macro Assembler)。

(4)在程序的连结时,提供ANSI 标准链接库、LIB51链接库管理员与RTX51实时操作系统。

(5)Keil uVision2 Debugger:有强大的除错工具和平行仿真系统。可执行单步执行,芯片内部缓存器、内存、输出入界面的实时监看功能[19~20]。 4.1.2 Keil的使用

Keil uVision2使用简介如下:

(1)点击Keil uVision2→Project→New Project可新建一个工程,点击“保存”按钮后,选择对应的单片机型号。本设计采用AT89C52,所以选择Atmel的AT89C52,点击“确定”按钮。

(2)点击Keil uVision2→File→New可新建一个工程文件。点击Keil uVision2→File→Save可保存新建的工程文件。如果采用C语言编程,工程文件的名称后缀为.c,如果采用汇编语言编程,工程文件的名称后缀为.asm。本设计采用汇编语言,工程文件保存到keil目录里,工程文件名为che.asm,然后点击保存。

(3)在Source Group 1上右键单击Add Files to Group ‘Source Group 1’为工程添加相应的工程文件。在弹出的对话框中选中工程文件,再点击‘Add’按钮,然后点击‘Close’按钮即可将工程文件添加到工程当中。

(4)在工程文件中写入单片机程序,点击保存按钮保存文件。然后点击Keil uVision2→Project→Build tartget可编译修改过的源文件。点击Keil uVision2→Project→Rebuild tartget可重新编译所有的源文件。

(5)如果程序出现错误,在Output Window窗口会有错误和警告提示,修改并重新编译程序内容,直到Output Window窗口出现“0 Error(s),0 Warning(s)”。如图4-1所示。

淮阴工学院毕业设计说明书(论文)

第 11 页 共 45 页

图4-1输出提示信息

至此,我们在Keil C51上做了一个完整工程的全过程。但这只是纯软件的开发过程,如何使用程序下载器看一看程序运行的结果呢?

单击“Project”菜单,再在下拉菜单中单击“Options for Target‘Targrt1’”,单击“Output”中单击“Create HEX File” 选项,点击“确定”,使程序编译后产生HEX代码,供下载器软件使用。就可把程序下载到AT89C52单片机中。如图4-2所示。

图4-2 设置生成HEX代码

4.2 Proteus介绍

4.2.1 概述

由于微电子技术的迅猛发展,单片机在汽车、通信、办公自动化、工业控制、高级玩具、家用电器等方面都得到了广泛的应用。单片机作为嵌入式系统的核心器件,其系统设计包括硬件电路设计和程序设计两个方面,调试过程一般分为软件调试、硬

淮阴工学院毕业设计说明书(论文)

第 12 页 共 45 页

件测试、系统调试3个过程。软件调试一般比较容易进行,但如果要进行硬件电路测试和系统调试则比较麻烦,因为要进行这两个过程必须在电路板制作完成、元器件焊接完毕之后进行,而且电路板的制作、元器件的安装、焊接费时费力。如果采用作为单片机系统仿真软件Proteus,则不用制作具体的电路板也能够完成以上工作。毫无疑问,在使用Proteus进行系统虚拟开发成功之后再进行实际制作,必然可以提高开发效率、降低开发成本、提高开发速度,而这些因素对于企业来讲是非常重要的。 4.2.2 Proteus 软件介绍

Proteus是基于SPICE3F5仿真引擎的混合电路仿真软件,不仅能够仿真模拟、数字电路以及模数混合电路,更具特色的是它能够仿真基于单片机的电子系统。Proteus不但完全支持MCS-51及其派生系列单片机的设计系统,另外也能仿真基于AVR和PIC系列的单片机系统。Proteus软件可提供的模拟、数字、交(直)流等元器件达30多个元件库,共计数千种。此外,对于元件库中没有的器件,使用者也可依照需要自己创建。软件调试方面,其自身只带汇编编译器,不支持C语言。但可以将它与Keil C51集成开发环境连接,将用汇编和C语言编写的程序编译好之后,可以立即进行软、硬件结合的系统仿真,像使用仿真器一样来调试程序[21]。 4.2.3 Proteus 的工作过程

运行Proteus 的ISIS 程序后,进入该仿真软件的主界面。在工作前,要设置view 菜单下的捕捉对齐和system 下的颜色、图形界面大小等项目。通过工具栏中的p(从库中选择元件命令)命令,在pick devices 窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source 菜单的Define code generation tools 菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source菜单的Add/Remove source files 命令下,加入单片机硬件电路的对应程序;通过debug 菜单的相应命令仿真程序和电路的运行情况。Proteus 软件所提供了30 多个元件库,数千种元件。元件涉及到数字和模拟、交流和直流等[21]。 4.2.4 Proteus 软件所提供的调试手段

Proteus 提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。对于单片机硬件电路和软件的调试,Proteus 提供了两种方法:一种是系统总体执行效果,一种是对软件的分步调试以看具体的执行情况。对于总体执行效果的调试方法,只需要执行debug 菜单下的execute 菜单项或F12 快捷键启动执行,用debug 菜单下的pause animation 菜单项或pause 键暂停系统的运行;或

淮阴工学院毕业设计说明书(论文)

第 13 页 共 45 页

用debug 菜单下的stop animation 菜单项或sHift-break 组合键停止系统的运行。其运行方式也可以选择工具栏中的相应工具进行。对于软件的分步调试, 应先执行debug 菜单下的start/restart debugging 菜单项命令,此时可以选择step over 、step into 和 step out 命令执行程序(可以用快捷键F10、F11 和ctrl+F11),执行的效果是单句执行、进入子程序执行和跳出子程序执行。在执行了start / restart debugging命令后,在debug 菜单的下面要出现仿真中所涉及到的软件列表和单片机的系统资源等,可供调试时分析和查看。

4.3 Proteus与Keil的联调

(1)当Proteus里的硬件图画好后,双击AT89C52,出现如图4-3的对话框:

图 4-3图形编辑窗口

(2)单击“Program File:”后面的文件夹,打开刚保存的keil文件夹,选中“che.hex”,出现如图4-4的框图:

图 4-4选择程序执行文件

(3)单机“打开”,出现如图4-5的对话框,单机“OK”,程序便被加载入单

淮阴工学院毕业设计说明书(论文)

片机里,可以进行仿真调试了。

第 14 页 共 45 页

图 4-5添加程序执行文件

(4)当改变一次汇编语言软件程序,就要在Keil C51里再编译一次产生hex文件,这样才能在Proteus里看到改变程序后的仿真结果。

4.4 调试结果以及现象分析

在Proteus绘制好原理图后,调入已编译好的目标代码文件*.HEX,可以在Proteus的原理图中看到模拟的实物运行状态和过程。Proteus具有设计灵活,便于仿真的特点,可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。因此在单片机开发应用中,Proteus将获得愈来愈广泛的应用。

如图4-6为里程仿真图1,由图可知,开关没有闭合,而且是发光二极管D1亮,而发光二极管D2不亮,表明此时显示的是里程状态,数码管显示为004,表示此时电动车所行使的里程是0.4公里,电动车蓄电池此时的电量为48V。

淮阴工学院毕业设计说明书(论文)

第 15 页 共 45 页

图4-6 里程仿真图1

如图4-7为里程仿真图2,由图可知,开关没有闭合,而且是发光二极管D1亮,而发光二极管D2不亮,表明此时显示的是里程状态,数码管显示为014,表示此时电动车所行使的里程是1.4公里,电动车蓄电池此时的电量为40V。

图4-7 里程仿真图2

如图4-8为速度仿真图,由图可知,开关闭合,而且是发光二极管D1不亮,而发光二极管D2亮,表明此时显示的是速度状态,数码管显示为018,表示此时电动车所

淮阴工学院毕业设计说明书(论文)

而且喇叭不报警,电动车蓄电池此时的电量为35V。

第 16 页 共 45 页

行使的速度为18Km/h。由于小于电动车最大限速20Km/h,所以发光二极管D3不亮,

图4-8 速度仿真图

如图4-9为报警显示仿真图,由图可知,开关闭合,而且是发光二极管D1不亮,而发光二极管D2亮,表明此时显示的是速度状态,数码管显示为025,表示此时电动车所行使的速度为25Km/h。由于大于电动车最大限速20Km/h,所以发光二极管D3亮,而且喇叭报警,电动车蓄电池此时的电量为21V。

图4-9 报警显示仿真图

4.5 调试故障及原因分析

淮阴工学院毕业设计说明书(论文)

在软件仿真过程中遇到的一些问题,具体故障和解决方法如下:

1、数码管显示不正确

第 17 页 共 45 页

本次设计的电量显示电路采用的是共阴极接法,在仿真时错用共阳极数码管,导致数码管不能正确显示。

2、LED不断闪烁

本设计采用动态显示方式编写软件,应选择合适的延时周期。如果时间选择不合适,LED就会不停闪烁,这时可适当调整时间常数即可解决问题。

淮阴工学院毕业设计说明书(论文)

结 论

第 18 页 共 45 页

本次设计的电动车仪表能够显示出电动车行驶的总里程数、行驶速度以及蓄电池所剩的电量,具有超速报警提醒以及里程数据自动记忆的功能,也可应用于摩托车、汽车等机动车上。

本论文着重对电动车仪表进行了软件方面的设计,软件采用汇编语言编写,采用模块化设计思想,程序可读性强。通过仿真、实验验证了系统的可行,能满足设计要求,达到了设计的指标,实现了对电动车速度、里程和电量的计算功能,并能用LED显示出来。

总体上来讲,主要因为时间跟自身水平有限,软件程序还有一些可以改进的地方。

淮阴工学院毕业设计说明书(论文)

致 谢

第 19 页 共 45 页

首先,我要感谢我的指导老师白秋产老师。白老师以其严谨求实的治学态度、高度的敬业精神和大胆创新的进取精神对我产生了重要的影响。在他的耐心指导和大力支持下我完成了本次设计。同时,在此次毕业设计过程中我也学到了许多了关于单片机方面的知识,实验技能也有了很大的提高。

另外,我还要特别感谢同学们对我做毕业设计的帮助,以及感谢我的父母对我的鼓励,使我得以顺利完成论文。同时还要感谢我们电子与电气工程学院的各位领导,为我们的毕业设计准备了充足硬件设施。为保证我们的设计能顺利完成,还特别开设了几个实验室给我们使用。同时,指导老师不时地询问我们毕业设计的进展情况,不断给予讲解,使设计能顺利进行。

在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请再次接受我诚挚的谢意!

淮阴工学院毕业设计说明书(论文)

参 考 文 献

第 20 页 共 45 页

1 吴文琳,电动自行车结构与使用维修.机械工程出版社,2005 2张新德,电动自行车维修技术.机械工程出版社,2006

3 杨素行,模拟电子技术基础简明教程.高等教育出版社,1997

4 余孟尝,数字电子技术基础简明教程.高等教育出版社,1998

5 雷玉堂,王庆有,何加铭,张伟风.光电检测技术.中国计量出版社,1996 6 罗自维.传感器应用.电子工业出版社,1992

7 李军,贺庆之.检测技术及仪表.中国工业出版社,1996

8 黄贤武,郑筱霞.传感器原理与应用.成都:电子科技大学出版社,1999 9 刘振玉.光电技术.北京:北京理工大学出版社,1989

10 黄贤武,郑筱霞.传感器原理与应用.成都:电子科技大学出版社,1999 11 丁镇生.传感器及传感技术应用.北京:电子工业出版社,1998

12 黄贤武,郑筱霞,曲波.传感器实际应用电路设计.成都:电子科技大学出版社,1997

13 李钟实.实用电子报警器精选百例.北京:科学技术文献出版社,1997 14 李华.MCS-51系列单片机实用接口技术.北京:北京航空学院出版社,1993 15 余永权.单片机与家用电器智能化技术.电子工业出版社,1991

16 谢筑森.单片机开发与典型应用设计.中国科学技术大学出版社,1997 17 公茂法.单片机人机接口实例集.北京:北京航空学院出版社,1998

18 楼然苗,李光飞.51系列单片机设计实例.北京:北京航空航天大学出版社,2003

19 周立功.单片机实验与实践.北京:北京航空航天大学出版社,2004

20 严天峰.单片机应用系统设计与仿真调试.北京航空航天大学出版社,2005

21 徐爱钧.单片机原理实用教程-基于Proteus虚拟仿真.电子工业出版社,2009

淮阴工学院毕业设计说明书(论文)

附录A

内存的设定:

第 21 页 共 45 页

由于本系统处理的功能较多,因此一部分内存单元用于特定的用处。其主要内存单元及用处如下:

50H:EEPROM器件寻址字节存放单元; 51H:EEPROM传送字节数存放单元; 30H:EEPROM发送数据缓冲单元; 40H:EEPROM读出数据存放单元; 0A0H:EEPROM寻址字节写; 0A1H:EEPROM寻址字节读; 62H:DPTR计数扩展高8位; 6CH:定时器T1计数扩展高8位; 6DH:定时器T1计数扩展高8——16位; 60H、61H、62H:里程计数单元;

68H、69H、6AH、6BH:存放自行车每圈的时间数; 70H、71H、72H、73H:显示BCD码数据存放用; 11H——15H:存放被除数; 16H——19H:存放除数

附录B

完整的che.asm代码源程序:

;*************************************************; ;; SPEED/MILE FOR BIKE PROGRAM ;; ;************************************************* ;

; 60H,61H,62H作里程计数单元,6CH,6DH作T1计数扩充单元, ; 68H,69H,6AH,6BH存放自行车每圈时间数,70H,71H,72H,73H ; 作显示BCD码存放数用,11H--15H存放被除数,16H-19H存放除数 ;定义

VSDA EQU P1.5 ;EEPROM数据传送口

淮阴工学院毕业设计说明书(论文)

VSCL EQU P1.4 SLA EQU 50H

;EEPROM时钟传送口

第 22 页 共 45 页

;EEPROM器件寻址字节存放单元

NUMBYT EQU 51H ;EEPROM传送字节数存放单元 MTD EQU 30H MRD EQU 40H

SLAW EQU 0A0H SLAR EQU 0A1H DPHH EQU 62H TH1H EQU 6CH

TH1HH EQU 6DH CLK BIT P3.7 ;CS549 BIT P3.6 DOUT BIT P3.5 GW BIT P3.1 SW BIT P3.0 SJGW EQU 43H SJSW EQU 42H GW1 BIT P1.2 SW1 BIT P1.1 BW1 BIT P1.0 SJGW1 EQU 70H SJSW1 EQU 71H SJBW1 EQU 72H

;;;;;;;;;;;;;;;;;;;; ;; PROGRAM INPUT ;; ;;;;;;;;;;;;;;;;;;;;

ORG 0000H LJMP START ORG 0003H

LJMP INTEX0

;EEPROM发送数据缓冲单元 ;EEPROM读出数据存放单元

;EEPROM寻址字节写 ;EEPROM寻址字节读

;DPTR计数扩展高8位 定时器T1扩展高8位

; 定时器T1扩展高8-16位

定义I/O口 ;程序执行开始地址 ;跳到START

;外中断0中断程序入口 ;跳至INTEX0中断服务程序

淮阴工学院毕业设计说明书(论文)

ORG 000BH RETI

;定时器T0中断程序程序 ;中断返回

;外中断1中断程序入口

第 23 页 共 45 页

ORG 0013H

LJMP INTEX1 ORG 001BH

;跳至INTEX1中断服务程序

;定时器T1中断程序程序

;跳至INTEX1中断服务程序 ;串行口中断入口地址 ;中断返回

LJMP INTT1 ORG 0023H RETI

ORG 002BH RETI

;定时器T2中断程序程序

; 中断返回

;************************************************************ ; PROGRAM CLEAR ; 上电初始化程序

;************************************************************ CLEARMEN: MOV TMOD ,#90H ;T1为16位外部控制定时器

MOV SP,#75H ;堆栈在75H开始 SETB PX0 SETB IT0 SETB IT1 CLR A

;外中断0优先级为1 ;外中断0用边沿触发 ; 外中断1用边沿触发 ;清A

;清内存中特定单元 ; ; ; ; ; ; ; ; ;

MOV 20H,A MOV 6CH,A MOV 6DH,A MOV 70H,A MOV 71H,A MOV 72H,A MOV 73H,A MOV 60H,A MOV 61H,A MOV 62H,A

淮阴工学院毕业设计说明书(论文)

MOV 63H,A DEC A

; 清内存中特定单元 ; A 为#0FFH ;内存置数据#0FFH ;内存置数据#0FFH ;内存置数据#0FFH ;内存置数据#0FFH

第 24 页 共 45 页

MOV 68H,A MOV 69H,A MOV 6AH,A MOV 6BH,A

SETB TR1 ;开定时器T1 SETB EA SETB EX0 SETB ET1

;开中断允许

;开外中断0 ;开定时中断T1

SETB P3.4 ;关报警器

;将EEPROM中原里程数据调入内存

LCALL VIICREAD

RET ;子程序返回

;********************************************************

; PROGRAM START

;********************************************************** START: LCALL CLEARMEN ;上电初始化 START0: LCALL ADC

LCALL LOOP LCALL VDAT JB P1.6,DISPLAYS

; P1.6=1,显示里程

; 显示速度

LCALL DISPLAYV

START2: SJMP START0

; 转START0循环

;************************************************************ ;INTEX0 PROGRAM

;里程计数程序,用外中断0实现,计数用60H-62H内存单元

;************************************************************* INTEX0: PUSH ACC

PUSH PSW INC 60H

;累加器堆栈保护

;状态字堆栈保护

; 圈加1

淮阴工学院毕业设计说明书(论文)

CLR A

; 清A

CJNE A,60H,INTEX0OUT INC 61H

第 25 页 共 45 页

; 计数没溢出转INTEX0OUT ; 溢出进位(61H加1) ; 计数没溢出转INTEX0OUT ;溢出进位(62H加1)

CJNE A,61H,INTEX0OUT INC 62H

INTEX0OUT: LCALL VIICWRITE ;里程数据存入EEPROM

SETB EX1

;开外中断1

POP PSW POP ACC RETI

;状态字恢复 ;累加器恢复 ;中断返回

;****************************************************** ;INTEX1 PROGRAM

;每转1圈时间计数处理程序,每圈时间放在68H-6BH单元中 ;***************************************************** INTEX1: PUSH ACC ;堆栈保护

PUSH PSW CLR EX1

;

; 关外中断1

; 溢出标志为0转INTEX11

JNB 00H,INTEX11 MOV TL1,#0FFH MOV TH1,#0FFH MOV 6CH,#0FFH MOV 6DH,#0FFH

;溢出时计时单元赋#0FFH(显示速

; 度为零) ; ;

INTEX11: MOV 68H,TL1 ; 将时间计数值移入暂存单元68H-6BH

MOV 69H,TH1 MOV 6AH,6CH MOV 6BH,6DH CLR A

; ; ; ;清A

;计时单元置0 ; ;

MOV TL1,A MOV TH1,A MOV 6CH,A

淮阴工学院毕业设计说明书(论文)

MOV 6DH,A CLR 00H POP PSW POP ACC RETI

;

;清溢出标志

;堆栈恢复 ;

;中断返回

第 26 页 共 45 页

;******************************************************************** ;INTT1 PROGRAM

;T1计数器中断服务程序。(计数器T1由外中断1输入控制,当为高电平时计时开始)

;******************************************************************** INTT1: PUSH ACC

;堆栈保护

;

;6CH计时单元加1 ; 移入A

; 不等于0转INTT11 ;进位,6DH单元加1 ; 移入A

; 不等于0转INTT11 ;计时器溢出,置溢出标志

PUSH PSW INC 6CH

MOV A,6CH JNZ INTT11 INC 6DH

MOV A,6DH JNZ INTT11 SETB 00H

INTT11: POP PSW

POP ACC RETI

; 恢复堆栈

;

;中断返回

;**************************************** ;DISPLAY S ;里程显示控制程序

;****************************************

DISPLAYS: SETB P1.3 ;点亮LED1(显示里程状态)

CLR P1.7 ;关闭速度指示灯 LCALL SSS

;将圈数转为公里数

;显示公里数据

LCALL DISPLAY

淮阴工学院毕业设计说明书(论文)

LJMP START0

;跳回START0

;****************************************** ;DISPLAY V ;速度显示控制程序

;*******************************************

DISPLAYV: CLR P1.3 ;关闭 LED1(里程)灯

第 27 页 共 45 页

SETB P1.7 ;点亮LED2(显示时速状态) LCALL VVV

;每圈时间换算为Km/h程序

;将十位数(BCD码)值移入A ;与预定报警值比较

MOV A,71H SUBB A,#02H JNC WARING SETB P3.4

;时速超过20时报警

;关报警灯

V1: LCALL DISPLAY

RET

;子程序返回

;报警灯LED3点亮(并鸣叫) ;转V1退出

WARING: CLR P3.4

AJMP V1

;************************************************************ ;VIICWRITR

;归一化EEPROM存入程序(12MHZ时钟),存入数在50H起单元 ;************************************************************* VIICWRITE: ACALL WMOV9

MOV SLA , #SLAW MOV NUMBYT ,#09H LCALL WRNBYT RET

WMOV9: MOV 5FH,#50H

MOV R0,#MTD MOV R1,#5FH MOV R2,#09H

WMOV: MOV A,@R1

淮阴工学院毕业设计说明书(论文)

MOV @R0,A INC R0 INC R1

第 28 页 共 45 页

DJNZ R2,WMOV RET

;************************************************************** ;VIICREAD

; 归一化EEPROM读出程序(12MHZ时钟),读出数在60H-67H单元

;***************************************************************** VIICREAD: MOV MTD,#50H

MOV SLA,#SLAW MOV NUMBYT,#01H LCALL WRNBYT MOV SLA,#SLAR MOV NUMBYT,#08H LCALL RDNBYT ACALL RMOV8 RET

RMOV8: MOV R0,#MRD

MOV R1,#60H MOV R2,#08H

RMOV: MOV A,@R0

MOV @R1,A INC R0 INC R1 DJNZ R2,RMOV RET

;****************************************** ;VIIC PROGRAM

;I2C串行归一化存储子程序

淮阴工学院毕业设计说明书(论文)

;**************************************** STA: SETB VSDA

SETB VSCL 第 29 页 共 45 页

NOP NOP NOP NOP

CLR VSDA NOP

CLR VSDA NOP NOP NOP NOP

CLR VSCL RET

STOP: CLR VSDA

SETB VSCL NOP NOP NOP NOP

SETB VSDA NOP NOP NOP NOP

CLR VSDA CLR VSCL RET

淮阴工学院毕业设计说明书(论文)

MACK: CLR VSDA

SETB VSCL 第 30 页 共 45 页

NOP NOP NOP NOP

CLR VSCL SETB VSDA RET

MNACK: SETB VSDA

SETB VSCL NOP NOP NOP NOP

CLR VSCL CLR VSDA RET

CACK: SETB VSDA

SETB VSCL CLR F0 MOV C,VSDA JNC CEND SETB F0

CEND: CLR VSCL

RET

WRBYT: MOV R0,#08H WLP: RLC A

JC WR1 AJMP WR0

淮阴工学院毕业设计说明书(论文)

WLP1: DJNZ R0,WLP

RET

WR1: SETB VSDA

第 31 页 共 45 页

WR0: CLR VSDA

RDBYT: MOV R0,#08H RLP: SETB VSDA

WRNBYT: MOV R3,NUMBYT

SETB VSCL NOP NOP NOP NOP

CLR VSCL CLR VSDA AJMP WLP1

SETB VSCL NOP NOP NOP NOP

CLR VSCL AJMP WLP1

SETB VSCL MOV C,VSDA MOV A,R2 RLC A MOV R2,A CLR VSCL DJNZ R0,RLP RET

淮阴工学院毕业设计说明书(论文)

第 32 页 共 45 页

WRDA: MOV A,@R1

RDNBYT: MOV R3,NUMBYT

RDN: MOV R1,#MRD RDN1: LCALL RDBYT

ACK: LCALL MACK

LCALL STA MOV A,SLA LCALL WRBYT LCALL CACK JB F0,WRNBYT MOV R1,#MTD

LCALL WRBYT LCALL CACK JB F0,WRNBYT INC R1 DJNZ R3,WRDA LCALL STOP RET

LCALL STA MOV A,SLA LCALL WRBYT LCALL CACK JB F0,RDNBYT

MOV @R1,A DJNZ R3,ACK LCALL MNACK LCALL STOP RET

INC R1 SJMP RDN1

淮阴工学院毕业设计说明书(论文)

;DISPLAY PROGRAM

第 33 页 共 45 页

;**************************************************************

;显示程序,显示BCD在70H-73H单元内,采用LED共阳数码管

;*************************************************************** DISPLAY: MOV DPTR ,#TAB

MOV A,SJGW1 MOVC A,@A+DPTR SETB GW1 MOV P0,A ACALL DLMS1 CLR GW1 MOV A,SJSW1 MOVC A,@A+DPTR SETB SW1 MOV P0,A ACALL DLMS1 CLR SW1 MOV A,SJBW1 MOVC A,@A+DPTR SETB BW1 MOV P0,A ACALL DLMS1 CLR BW1 RET

;****************************** ; 共阳段码表(0-9)

;********************************;

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

,;****************************************** ;SSS PROGRAM

淮阴工学院毕业设计说明书(论文)

;里程处理程序,将车圈数换算成公里数

;*********************************************; SSS: MOV 18H,#64H ; 除数赋值

MOV 17H,#00H ; 除数赋值 MOV 16H,#00H ; 除数赋值 MOV 11H,#00H ; 被除数赋值 MOV 12H,#00H ; 被除数赋值 MOV 13H,62H ; 被除数赋值 MOV 14H,61H ; 被除数赋值 MOV 15H,60H ; 被除数赋值 LCALL DIVST ; 调除法程序

LCALL BCDST ; 调二进制转BCD码程序 MOV A,25H ; 结果处理,将25H数移入A ANL A,#0FH ; 将高四位置为0 MOV 70H,A ; 放入70H单元 MOV A,25H ; 25H数移入A SWAP A ; 高低四位交换 ANL A, #0FH ; 将高四位置为0 MOV 71H,A ; 放入71H单元 MOV A,24H ; 24H数移入A ANL A, #0FH ; 将高四位置为0 MOV 72H,A ; 放入72H单元 RET

;****************************************** ;VVV PROGRAM

;时速处理程序,最大显示速度为99Km/h

;*********************************************; VVV: MOV 18H,68H ; 除数赋值

MOV 17H,69H ; 除数赋值 MOV 16H,6AH ; 除数赋值

第 34 页 共 45 页

淮阴工学院毕业设计说明书(论文)

MOV 11H,#00H ; 被除数赋值 MOV 12H,#00H ; 被除数赋值 MOV 13H,#36H ; 被除数赋值 MOV 14H,#0EEH ; 被除数赋值 MOV 15H,#80H ; 被除数赋值 LCALL DIVST ; 调除法程序 MOV 14H,#00H ; 舍去一位

LCALL BCDST ;二进制转BCD码程序 MOV A,25H ;以下将速度值放入显示单元 ANL A,#0FH ;高四位为0 MOV 70H,A ;放入70H内 MOV A,25H ;再取数 SWAP A ;高低四交换 ANL A,#0FH ;高四位为0 MOV 71H,A ;放入71H内 MOV 72H,#00H RET

;****************************************** ;延时程序

;*********************************************; DLMS1: MOV R6,#10H DL1: MOV R7,#248 DL2: DJNZ R7,DL2

DJNZ R6,DL1 RET

第 35 页 共 45 页

;************************************************************** ;除法子程序

;除法子程序,用作四位除法,除数在16H-19H,被除数在11H-15H ;****************************************************************; DIVST: CLR C

淮阴工学院毕业设计说明书(论文)

MOV A,13H SUBB A,18H MOV A,12H SUBB A,17H MOV A,11H SUBB A,16H 第 36 页 共 45 页

JNC LOOP4 MOV B,#10H

NDIV1: CLR C

MOV A,15H RLC A MOV 15H,A MOV A,14H RLC A MOV 14H,A MOV A,13H RLC A MOV 13H,A MOV A,12H RLC A MOV 12H,A MOV A,11H RLC A MOV 11H,A MOV F0,C CLR C MOV A,13H SUBB A,18H MOV 1AH,A MOV A,12H

淮阴工学院毕业设计说明书(论文)

SUBB A,17H MOV 19H,A MOV A,11H SUBB A,16H JB F0,NDIV2 JC NDIV3

NDIV2: MOV 11H,A

MOV A,19H MOV 12H,A MOV A,1AH MOV 13H,A INC 15H

NDIV3: DJNZ B,NDIV1

CLR F0

DIVEND: RET LOOP4: SETB F0

SJMP DIVEND

第 37 页 共 45 页

;************************************************************** ;BCD码转换程序

;将14H、15H单元内容内数据转换成十进制BCD码放在24H、25H单元内 ;****************************************************************; BCDST: MOV R7,#10H

CLR C MOV 25H,#00H MOV 24H,#00H

KKK: MOV A,15H

RLC A MOV 15H,A MOV A,14H RLC A

淮阴工学院毕业设计说明书(论文)

MOV 14H,A MOV A,25H ADDC A,25H DA A MOV 25H,A MOV A,24H ADDC A,24H DA A MOV 24H,A DJNZ R7,KKK RET

第 38 页 共 45 页

;***************************************************************; ;A/D转换程序

;***************************************************************; ADC: MOV SP,#80H

LCALL TLC549 ;启动TLC549进行A/D转换 LCALL DELAY1

LOOP: LCALL TLC549 ;读取上次ADC值,再次启动TLC549

LCALL DELAY1 ; 进行A/D转换

MOV P2,A ;将读取的A/D转换值送往P2口显示 RET

TLC549: CLR CS549 ;选中TLC549

NOP NOP

MOV C,DOUT ;接受第一位数据 RLC A NOP

NOP

MOV R0,#07 ;置循环次数

SPIIN: SETB CLK

淮阴工学院毕业设计说明书(论文)

NOP NOP

第 39 页 共 45 页

CLR CLK ;产生有效沿,以便从器件锁存数据 NOP NOP

MOV C,DOUT ;接受下一位数据(从最高位开始) RLC A

DJNZ R0,SPIIN ;8位数据未接收完,则继续接收下一位 CLR CLK NOP NOP

SETB CLK NOP NOP

CLR CLK

SETB CS549 ;结束SPI总线操作,关闭从器件 RET

DELAY1: MOV R7,#40 ;延时子程序

DJNZ R7,$ RET

;***************************************************************; ;电压测量数据处理

;***************************************************************; VDAT: MOV R2,#00H

MOV R3,A MOV R6,#00H MOV R7,#0FFH CALL MULD2 MOV R0,#30H MOV R1,#34H

淮阴工学院毕业设计说明书(论文)

MOV A,R2 MOV @R1,A INC R1 MOV A,R3 MOV @R1,A INC R1 MOV A,R4 MOV @R1,A INC R1 MOV A,R5 MOV @R1,A INC R1 MOV @R1,#00H INC R1 MOV @R1,#00H INC R1 MOV @R1,#00H INC R1 MOV @R1,#0FFH CALL DIVD4 MOV R1,#38H MOV @R1,#00H INC R1 MOV @R1,#00H INC R1 MOV @R1,#00H INC R1 MOV @R1,#0AH CALL DIVD4 MOV 43H,33H

第 40 页 共 45 页

本文来源:https://www.bwwdw.com/article/cf77.html

Top