收藏 分销(赏)

基于单片机的自行车里程计速度计设计.doc

上传人:w****g 文档编号:2487719 上传时间:2024-05-30 格式:DOC 页数:35 大小:482KB
下载 相关 举报
基于单片机的自行车里程计速度计设计.doc_第1页
第1页 / 共35页
基于单片机的自行车里程计速度计设计.doc_第2页
第2页 / 共35页
基于单片机的自行车里程计速度计设计.doc_第3页
第3页 / 共35页
基于单片机的自行车里程计速度计设计.doc_第4页
第4页 / 共35页
基于单片机的自行车里程计速度计设计.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、目 录一、概述1、设计目的 12、课题简介 1 二、系统设计 1、总体设计方案 2 2、硬件部分简介 3 (A)AT89c51芯片简介 3 (B)硬件设计 4 3、软件部分 5 (A)初始化程序6 (B)主程序8 (C)中断程序9 (D)里程、速度处理程序11 (E)显示子程序14 (F)延时子程序16 三、调试17 1、硬件调试 17 2、软件调试 17 四、操作说明19五、参考文献20六、 致 谢21七、附录22 1、元器件清单 22 2、整体原理图 23 3、完整程序 24 自行车里程计/速度计的设计一、 概述1、 设计目的本设计采用AT89C51单片机作控制,利用霍尔元件等器件设计一个

2、可用LED数码管显示当前自行车行驶的距离及速度并具有超速报警功能的自行车里程/速度表,使其作为自行车的一种辅助工具,让自行车的功用更强大,给人们带来更多的方便。2、 课题简介 自行车被发明及使用到现在已有两百多年的历史,在这两百年间人类在不断的尝试与研发过程中,自行车发展的目的也从最早的代步工具转换成休闲娱乐的用途,随着生活水平的提高,人们希望自行车的功能更强大,而里程计/速度计正满足了这个需求。现在先进的里程/速度计不仅能显示实时的速度和里程,还显示时间,甚至具有测量骑车人的心跳、显示骑车人热量消耗等功能。 由于时间有限,本设计完成的功能减为两个,即测量并通过LED数码管进行动态显示当前的速

3、度和里程,并在超速时发出警报。 要求达到的各项指标及实现方法如下:1. 利用霍尔传感器产生里程数的脉冲信号。2. 对脉冲信号进行计数。实现:利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。3. 对数据进行处理,要求用LED显示里程总数和即时速度。实现:利用软件编程,对数据进行处理得到需要的数值。最终实现目标:自行车的速度里程表具有里程、速度测试与显示功能,采用单片机作控制,显示电路可显示里程及速度。 1二、系统设计1、总体设计方案 采用AT89C51芯片,用霍尔元件将车轮的转速转换成电脉冲,经过处理后送入单片机。里程及速度的测量,是经过AT89C51的定时/计数器测出总的脉冲数和每转一

4、圈的时间,再经过单片机的计算得出,计算结果通过LED显示器显示出来。传感器是获取自然或生产领域中信息的关键器件,是现代信息系统和各种设备不可缺少的信息采集工具。磁传感器是一种将磁学量信号转变为电信号的器件或装置。随着信息产业、工业自动化、医疗仪器等的飞速发展和计算机应用的普及,需要大量的传感器将被测或被控的非电信号转换成可与计算机兼容的电信号。作为输入信号,这就给磁传感器的快速发展提供了机遇,形成了磁传感器的产业。其中最具代表的磁传感器就是霍尔传感器,在自动检测系统中,利用霍尔传感器测转数是一种最基本的测量工作。单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且包括计算、定时、信息处

5、理等功能当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从引脚12即P3.2外部中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。每次中断代表车轮转动一圈,中断数n轮圈的周长为L的乘积为里程值。计数器T1计算每转一圈所用的时间t,就可以计算出即时速度v。当里程键按下时,里程指示灯亮,LED切换显示当前里程,与当速度键按下时,速度指示灯亮,LED切换显示当前速度,若自行车超速,系统发出报警信号,指示灯闪烁。里程数据自动记忆,也可用于电动自行车、摩托车、汽车等机动车仪表上。设计包括硬件、软件两部分,硬件电路包括AT89C51单片机的外围电路以及LED显示电路等,这里对硬

6、件部分只做简单介绍,主要阐述的是软件部分的设计,包括数据初始化程序的设计、主程序的设计、处理子程序的设计、显示子程序的设计;最后针对仿真过程遇到的问题进行了具体说明与分析,对本次设计进行总结。 22、 硬件部分介绍(A)AT89C51芯片简介 AT89C51是一种带4K字节闪存可编程可擦除的只读存储器即为(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。管脚说明:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管

7、脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电

8、阻拉高,且作为输入。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。P3口也可作为AT89C51的一些特殊功能口,如下表所示: P3.0 RXD P3.1 TXD P3.2 /INT0 P3.3 /INT1 P3.4 T0 P3.5 T1 P3.6 /WR P3.7 /RD RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期

9、两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 3(B)硬件设计自行车里程计/速度计电路原理图见附录。本次设计信号的捕获采用的是霍尔传感器。霍尔器件具有许多优点,它们的结构牢固、体积小、重量轻、寿命长、安装方便、功耗小、频率高(可达1MHz)、耐震动、不怕灰尘、油污、水汽及烟雾等的污染或腐蚀。霍尔线性器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、位置重复精度高。取用各种补偿和保护措施的霍尔器件工作温度范围宽,可达55150。XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷

10、振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。由于输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。P0口作为输出口用于显示历程状态和速度状态。由于P0口没有上拉电阻,因此作为输出口时要加上上拉电阻来驱动LED数码管的点亮。接于引脚10即P3.2、RXD的开关用于控制改变显示的方式,当开关闭合时,显示速度;开关打开时显示里程。第12脚即外部中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。第十三脚即外部中断1用于控制定时器T1的启停,当输入为0时关闭定时器。此控制信号是将轮子圈数的计数脉冲经二

11、分频后形成,这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。P1.4口和P1.5口用于EEPROM存储器24C01的存取控制。11脚输出用于超速时的报警,此时蜂鸣器发出声音,同时LED灯闪烁。LED数码管采用四位相连的共阴极数码管,片选信号分别通过三极管接至21-24管脚即P2.0-P2.4口,从而实现里程和速度的动态显示。自行车的速度里程表的硬件电路设计是基础部分,它包括信号的捕获、放大、整形,单片机的计算处理,数码管的实时显示和单片机外围基本电路的设计,两大主要器件就是传感器和单片机。 43、 软件部分 模块化结构设计即是根据要求和硬件设计的结构,

12、将整个系统的功能分成许多小的功能模块,再根据这些小的功能模块进行程序编写的过程。这样的设计方法,使得系统的整个功能和各部分的功能趋于明朗化。当系统出现问题,就可以根据功能设置找出问题的根源,从而更快地解决问题。所以说,在整个设计过程中,软件设计必须与硬件设计紧密地结合在一起。软件设计包括初始化程序、主程序、行车过程中里程和速度计算子程序、延时子程序、中断服务子程序、显示子程序等。 系统软件总体流程图如图3.1所示 总体设计思路:首先进行初始化,选择车轮周长,P3.0是用于里程和速度切换的,低电平为显示速度,高电平为显示里程。根据P3.0的状态来决定显示内容,P3.0=1时,转到计算速度子程序并

13、进行显示;P3.0=0时,转到计算里程子程序并进行显示。P1.0和P1.1口分别用于显示里程状态和速度状态。P1.2、P1.3、P1.6和P1.7口分别用于设置轮圈的大小,低电平有效。中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。将根据里程寄存器中的内容计算和判断出行驶里程数。中断1用于控制定时器T1的启/停,当输入为0时关闭定时器。此控制信号是将轮子圈数的计数经二分频后形成。这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。初始化P3.0=1?计算里程显示里程计算速度显示速度N开始Y 图 3.1 系统整体流程图 5(A)初

14、始化程序初始化程序主要完成以下工作:将T1设为外部控制定时器方式;外部中断0及外部中断1设为边沿触发方式;将部分内存单元清0;设置轮子周长;开中断及定时器;将EEPROM中的数据调入内存。CLEARMEN:MOV TMOD,#90H ; MOV SP,#75H ; SETB PX0 ; SETB IT0 ; SETB IT1 ; CLR 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 63

15、H,A ; DEC A ; MOV 68H,A ; MOV 69H,A ; MOV 6AH,A ; MOV 6BH,A ; MOV P1,A ;CLEAR1: JB P1.2,KEY1 ; MOV 21H,#0FH LJMP CLEAR2 ;KEY1: JB P1.3,KEY2 ; MOV 21H,#12H LJMP CLEAR2KEY2: JB P1.6,KEY3 ; MOV 21H,#14H LJMP CLEAR2KEY3: JB P1.7,ERR ; 6 MOV 21H,#19HCLEAR2: SETB TR1 ; SETB EA ; SETB EX0 ; SETB ET1 ; SETB

16、 P3.1 ; LCALL VIICREAD ; RETERR: CPL P3.1 ; LCALL DL5S ; LJMP CLEAR1 ;初始化具体过程:首先对P1.2口的内容进行查询,若P1.2=0,则说明P1.2口接的按钮被按下,即选择第一种车轮周长,同时将周长存入21H单元内;若P1.2=1,则第一个按钮没被按下,再对P1.3口的内容进行查询,内容为0则将其周长值存入21H中,不为0则扫描P1.6,内容为0则将其周长值存入21H中,不为0则扫描P1.7,若P1.7为0则将其周长值存入21H中,不为0则说明没有选择车轮直径,此时开始报警,并调用延时子程序。接着再从P1.2口扫描,如此循环

17、,直到有键按下后停止报警。 7初始化P1.2=1?NP1.3=1?P1.6=1?P1.7=1?出错提示将车圈周长调入21H开中断,启动定时器NNNYYYY开报警器并延时关报警器图 3.2 初始化程序流程图(B)主程序主程序根据P3.0口的开关状态选择里程速度显示。START: LCALL CLEARMEN ;START1: JB P3.0,DISPLAYS ; LCALL DISPLAYV ;START2: SJMP START1 ; 8初始化开始P3.0=1?调用里程处理子程序Y调用速度处理子程序N 图3.3 主程序流程图(C)用外部中断0实现的里程计数程序定时中断是为满足定时或计数的需要而

18、设置的。在单片机内部有两个定时/计数器,以对其中的计数结构进行计数的方法,来实现定时或计数功能。当结构发生计数溢出时,即表明定时时间或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志,作为单片机接受中断请求的标志。这种中断请求是在单片机芯片内部发生的,因此无须在芯片上设置引入端。定时/计数器控制寄存器TCON是8位寄存器,地址为88H,可以位寻址。其高4位用于定时/计数器中断控制,低4位借给外部中断,用做中断标志和触发方式选择位。本设计采用定时中断,对自行车的里程和速度进行计数。INTEX0: PUSH ACC ; PUSH PSW ; INC 60H ; CLR A ; CJ

19、NE A,60H,INTEX0OUT ; INC 61H ; CJNE A,61H,INTEX0OUT ; INC 62H ;INTEX0OUT:LCALL VIICWRITE ; SETB EX1 ; POP PSW ; POP ACC ; 9 RETI ;每转一圈时间计数处理程序,每圈时间放在68H6BH单元中INTEX1: PUSH ACC ; PUSH PSW ; CLR EX1 ; JNB 00H,INTEX11 ; MOV TL1,#0FFH ; MOV TH1,#0FFH MOV 6CH,#0FFH MOV 6DH,#0FFHINTEX11: MOV 68H,TL1 ; MOV

20、69H,TH1 MOV 6AH,6CH MOV 6BH,6DH CLR A ; MOV TL1,A ; MOV TH1,A MOV 6CH,A MOV 6DH,A CLR 00H ; POP PSW ; POP ACC ; RETI ;T1计数器中断服务程序。INTT1: PUSH ACC ; PUSH PSW ; INC 6CH ; MOV A,6CH ; JNZ INTT11 ; INC 6DH ; MOV A,6DH ; JNZ INTT11 ; SETB 00H ;INTT11: POP PSW ; POP ACC ; RETI ; 10 关中断开始现场保护开中断中断处理关中断现场恢复

21、开中断中断返回图 3.4 中断流程图(D)里程、速度处理程序里程处理程序外中断0服务程序用于对单片机P3.2口输入的圈脉冲进行计数,为十六进制计数器。60H为低位,62H为高位。每次计数一次后,对里程数据进行一次存储操作。当车轮每转一圈,通过霍尔元件将脉冲数输入单片机内,通过计数器计出脉冲数,再用乘法子程序算出里程数。SSS: MOV 19H,#64H ; MOV 18H,#00H ; MOV 17H,#00H ; MOV 16H,#00H ; MOV 11H,#00H ; MOV 12H,#00H ; MOV 13H,62H ; MOV 14H,61H ; MOV 15H,60H ; LCA

22、LL DIVST ; 11 LCALL BCDST ; MOV A,25H ; ANL A,#0FH ; MOV 70H,A ; MOV A,25H ; SWAP A ; ANL A,#0FH ; MOV 71H,A ; MOV A,24H ; ANL A,#0FH ; MOV 72H,A ; MOV A,24H ; SWAP A ; ANL A,#0FH ; MOV 73H,A ; RET点亮里程指示灯开始将车圈数转换成里程显示里程值返回图 3.5 里程处理程序流程图速度处理程序外中断1服务程序用于处理轮子转动一圈后的计时数据。当标志位(00H)为1时,计数溢出,放入最大时间值(为#0FFH

23、);当标志位为0时,将计数单元(TL1、TH1、6CH、6DH)的值放入68H6BH单元。定时器计出每转一圈所用的时间,用自行车车轮的周长除以时间就得出自行车的速度。VVV: MOV 18H,68H ; MOV 17H,69H ;MOV 16H,6AH ; 12MOV 11H,#00H ;MOV 12H,#00H ;MOV 13H,#36H ;MOV 14H,#0EEH MOV 15H,#80H ;LCALL DIVST ;MOV 14H,#00H ;LCALL BCDST ;MOV A,25H ;ANL A,#0FH ;MOV 70H,A ;MOV A,25H ;SWAP A ;ANL A,

24、#0FH ;MOV 71H,A ;MOV 72H,#00H ;MOV 73H,#00H ;RET ;开始开速度指示灯计算速度报警显示速度NY返回P3.0=1? P3.0=1?22速?图 3.6速度处理程序流程图 13(E)显示子程序采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短

25、暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。本设计P2.0、P2.1、P2.2、P2.3信号一起组成位选通的位选信号,P0.0P0.7信号一起组成段码选通的段选信号,通过软件编程,先把所要显示的数据放入存储单元,然后把数据送入段选通对应的地址,再选通某一个LED,逐步完成四个LED的显示。;里程显示控制程序DISPLAYS:SETB P1.0 ; CLR P1.1 ; SETB P3.7 LCALL SSS ; LCALL DISPLAY ; LJMP START1 ;速

26、度显示程序DISPLAYV:CLR P1.0 ; SETB P1.1 ; CLR P3.7 LCALL VVV ; MOV A,71H ; SUBB A,#04H ; JNC WARING ; SETB P3.1 ;V1: LCALL DISPLAY ; RET ;DISPLAY: MOV R1,#70H ; MOV R2,#0FEH ;PLAY: MOV A,R2 ; MOV P2,A ; MOV A,R1 ; ANL A,#0FH ; MOV DPTR,#TAB ; MOVC A,A+DPTR ; 14 MOV P0,A ; LCALL DL1MS ; INC R1 ; MOV A,R2

27、; JNB ACC.3,ENDOUT ; RL A ; MOV R2,A ; AJMP PLAY ;ENDOUT: SETB P2.0 ; SETB P2.1 ; SETB P2.2 ; SETB P2.3 ; RET ;共阴极段码表TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H DB 00H 15开始显示单元首址取显示数据送段码到P0口取段码表首址调用延时送位选到P2口4位显示结束返回YN修改显示单元地址求下一位位选码图 3.5 显示程序流程图(F)延时子程序;1ms延时程序 利用循环实现延

28、时DL1MS: MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2 ; DJNZ R6,DL1 ; RET;出错闪烁利用延时255msDL5S: MOV R5,#0FFH DL3: LCALL DL1MS ; DJNZ R5,DL3 ; RET 16三、调试1.硬件调试硬件调试时,我们首先检查了接线,对照电路原理图,确保准确无误。其次是检查各个焊点是否有虚焊的情况,检查无误后,接通经稳压后的5V电源。硬件的修改可在元器件参数方面调整,如电阻的阻值等。2.软件调试先用KEIL软件输入完整的程序,进行编译。首先,新建一个项目选择AT89C51,新建一个文件,将程

29、序输入,输完后保存,保存时需加后缀名.ASM。然后将文件添加到新建的工程下。进行检错和编译,窗口如图3.2所示。 图 3.1 KEIL编译窗口编译无误后即可运行,运行时可从Peripherals中调出输出口P0P3来观察输出情况。运行时窗口如图3.1所示。 图 3.2 KEIL运行窗口 17接着再使用PROTEUS仿真软件进行仿真。首先新建一个文件,选择所需的元件并排列好,根据电路原理图进行布线。当完成原理图布线后,利用PROTEUS ISIS编辑环境所提供的电器规则检查命令对设计进行检查,并根据系统提供的错误检查报告修改原理图。直到通过电器规则检查为止。然后在KEIL中生成HEX文件,双击A

30、T89C51芯片,将完整的程序灌入芯片,单击左下角的开始箭头即可开始模拟仿真。在仿真过程中遇到过一些问题,针对这些问题做了些软件方面的调整。 刚开始仿真时,P0口是灰色的,数码管没有点亮。经检查是由于P0口内部没有上拉电阻,因此,必须另外加上,上拉电阻一段接P0口,另一端直接接到电源的正集。接上后数码管点亮,但显示的是乱码经过仔细的检查,发现了程序中的错误,硬件中选用的是共阴极数码管,而程序中错用了共阳极的段码表,从而造成了应该点亮的部分没亮,而不该点亮的部分反而亮了的错误情况。 18四、操作说明 本设计为自行车里程计/速度计,实现了里程速度计的基本功能。接通电源后,由于未选择车轮周长,蜂鸣器报警提示,同时LED灯D3闪烁,直到有键按下。当按下P1.2口所接开关SW2时选择车轮周长1,按下P1.3口所接开关SW3时选择车轮周长2,按下P1.6口所接开关SW4时选择车轮周长3,P1.7口所接开关SW5时选择车轮周长4,选择周长后,每按下开关SW6一次表示车

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服