ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:132.91KB ,
资源ID:5119990      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5119990.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机毕业设计.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机毕业设计.docx

1、单片机毕业设计1 选题目的和意义自行车被发明及使用到现在已有两百多年的历史,在这两百年间人类在不断的尝试与研发过程中,自行车发展的目的也从最早的代步工具转换成休闲娱乐的用途,随着生活水平的提高,人们希望自行车的功能更强大,而里程计/速度计正满足了这个需求。现在先进的里程/速度计不仅能显示实时的速度和里程,还显示时间,甚至具有测量骑车人的心跳、显示骑车人热量消耗等功能。对于自行车爱好者来说,本设计更是有着很重要的意义,增加了出行的安全性和便捷性,本设计主要针对具有远距离跋涉性质的自行车设计的。中国是一个自行车大国,从前景来说,随着社会的进一步发展,我国的私家车总量越来越大,堵车现象也越来越严重,

2、影响了社会效率,必然还会有大量的人选择骑自行车,因此为自行车提供便捷也将成为一个热门话题和热门课题。本设计采用AT89C51单片机作控制,利用霍尔元件等器件设计一个可用LED数码管显示当前自行车行驶的距离及速度并具有超速报警功能的自行车里程/速度表,使其作为自行车的一种辅助工具,让自行车的功用更强大,给人们带来更多的方便。2 关于本课题的国内外现状目前国内自行车里程/速度计等设备的发明具有测量骑车人的心跳,显示骑车人热量消耗等功能,让人能清楚的知道当前的速度、时间、里程等数据。如佛山高明华劲电子公司的自行车里程表MS601,能动态显示形式路程、骑车时间、实时速度等,此外山地自行车爱好者为了测算

3、自己的骑行里程,他们使用了具有类似功能的码表。国外很多大学生喜好山地自行车,为了在山地,丘陵,高原等地形中,更加安全舒适,他们自行研究设计速度里程计,此外还设有显示温度,湿度,心跳,脉搏等,功能齐全,在发达的欧洲国家,比如瑞士,国民对自行车这种环保交通工具比较钟爱,因此科研机构或个人也有很多致力于研究自行车配件的,为了让人们在骑自行车时更加舒适,安全,人性化。3 设计思路 采用AT89C51芯片,用霍尔元件将车轮的转速转换成电脉冲,经过处理后送入单片机。里程及速度的测量,是经过AT89C51的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,计算结果通过LED显示器显示出来。

4、传感器是获取自然或生产领域中信息的关键器件,是现代信息系统和各种设备不可缺少的信息采集工具。磁传感器是一种将磁学量信号转变为电信号的器件或装置。随着信息产业、工业自动化、医疗仪器等的飞速发展和计算机应用的普及,需要大量的传感器将被测或被控的非电信号转换成可与计算机兼容的电信号。作为输入信号,这就给磁传感器的快速发展提供了机遇,形成了磁传感器的产业。其中最具代表的磁传感器就是霍尔传感器,在自动检测系统中,利用霍尔传感器测转数是一种最基本的测量工作。本课题的主要功能是测量并通过LED数码管进行动态显示当前的速度和里程,并在超速时发出警报。本课题要求达到的各项指标及实现方法如下:1. 利用霍尔传感器

5、产生里程数的脉冲信号。2. 对脉冲信号进行计数。 实现:利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。3. 对数据进行处理,要求用LED显示里程总数和即时速度。实现:利用软件编程,对数据进行处理得到需要的数值。最终实现目标:自行车的速度里程表具有里程、速度测试与显示功能,采用单片机作控制,显示电路可显示里程及速度。总体设计思路:首先进行初始化,选择车轮周长,P3.0是用于里程和速度切换的,低电平为显示速度,高电平为显示里程。根据P3.0的状态来决定显示内容,P3.0=1时,转到计算速度子程序并进行显示;P3.0=0时,转到计算里程子程序并进行显示。P1.0和P1.1口分别用于显示里程

6、状态和速度状态。P1.2、P1.3、P1.6和P1.7口分别用于设置轮圈的大小,低电平有效。中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。将根据里程寄存器中的内容计算和判断出行驶里程数。中断1用于控制定时器T1的启/停,当输入为0时关闭定时器。此控制信号是将轮子圈数的计数经二分频后形成。这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。系统的原理框图4 系统分析单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且包括计算、定时、信息处理等功能。当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从引脚12即

7、P3.2外部中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。每次中断代表车轮转动一圈,中断数n轮圈的周长为L的乘积为里程值。计数器T1计算每转一圈所用的时间t,就可以计算出即时速度v。当里程键按下时,里程指示灯亮,LED切换显示当前里程,与当速度键按下时,速度指示灯亮,LED切换显示当前速度,若自行车超速,系统发出报警信号,指示灯闪烁。里程数据自动记忆,也可用于电动自行车、摩托车、汽车等机动车仪表上。设计包括硬件、软件两部分,硬件电路包括AT89C51单片机的外围电路以及LED显示电路等,这里对硬件部分只做简单介绍,主要阐述的是软件部分的设计,包括数据初始化程序的设计、主程序的

8、设计、处理子程序的设计、显示子程序的设计;最后针对仿真过程遇到的问题进行了具体说明与分析,对本次设计进行总结。5 硬件分析AT89C51芯片简介AT89C51是一种带4K字节闪存可编程可擦除的只读存储器即为FPEROMFlash Programmable and Erasable Read Only Memory的低电压、高性能CMOS 8位微处理器,俗称单片机。管脚说明:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在F

9、IASH编程时,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”时,其管脚被内部上拉电阻拉高,且作为输入。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

10、P3口也可作为AT89C51的一些特殊功能口,如下表所示: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。PSEN:外部程序存储器的选通信号。在

11、由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。 TC4024芯片简介 AT24C01芯片简介6程序设计模块化结构设计即是根据要求和硬件设计的结构,将整个系统的功能分成许多小的功能模块,再根据这些小的功能模块进行程序编写的过程。这样的设计方法,使得系统的整个功能和各部分的功能趋于明朗化。当系统出现问题,就可以根据功能设置找出问题的根源,从而更快地解决问题。所以说,在整个设计过程中,软件设计必须与硬件设计紧密地结合在一起。软件设计包括初始化程序、主程序、行车过程中里程和速度计算子程序、延时子程序、中断服务子程序、显示子程序等。

12、6.1 流程图6.2 源程序代码主要内存单元及用处:50H:EEPROM器件寻址字节存放单元51H:EEPROM传送字节数存放单元30H:EEPROM发送数据缓冲单元40H:EEPROM读出数据存放单元0A0H:EEPROM寻址字节写入0A1H:EEPROM寻址字节读出62H:DPTR计数扩展高8位6CH:定时器T1计数扩展高8位6DH:定时器T1计数扩展高816位60H、61H、62H:里程计数单元68H、69H、6AH、6BH:存放自行车每圈时间数70H、71H、72H、73H:显示BCD码数据存放用11H-15H:存放被除数16H19H:存放除数6.2.1初始化程序初始化程序主要完成以下

13、工作:将T1设为外部控制定时器方式;外部中断0及外部中断1设为边沿触发方式;将部分内存单元清0;设置轮子周长;开中断及定时器;将EEPROM中的数据调入内存。CLEARMEN:MOV TMOD,#90H ;T1为16位外部控制定时器 MOV SP,#75H ;堆栈从75H开始 SETB PX0 ;外部中断0优先级为1 SETB IT0 ;外部中断0用边沿触发 SETB IT1 ;外部中断1用边沿触发 CLR A ;清A MOV 20H,A ;清内存中特定单元 MOV 6CH,A ;清内存中特定单元 MOV 6DH,A ;清内存中特定单元 MOV 70H,A ;清内存中特定单元 MOV 71H,

14、A ;清内存中特定单元 MOV 72H,A ;清内存中特定单元 MOV 73H,A ;清内存中特定单元 MOV 60H,A ;清内存中特定单元 MOV 61H,A ;清内存中特定单元 MOV 62H,A ;清内存中特定单元 MOV 63H,A ;清内存中特定单元 DEC A ;A为0FFH MOV 68H,A ;内存置数据0FFH MOV 69H,A ;内存置数据0FFH MOV 6AH,A ;内存置数据0FFH MOV 6BH,A ;内存置数据0FFH MOV P1,A ;P1口置1CLEAR1: JB P1.2,KEY1 ;根据P1.2设置状态 MOV 21H,#0FH LJMP CLEA

15、R2 ;转CLEAR2KEY1: JB P1.3,KEY2 ;根据P1.3设置状态 MOV 21H,#12H LJMP CLEAR2KEY2: JB P1.6,KEY3 ;根据P1.6设置状态 MOV 21H,#14H LJMP CLEAR2KEY3: JB P1.7,ERR ;根据P1.7设置状态 MOV 21H,#19HCLEAR2: SETB TR1 ;开定时器T1 SETB EA ;开中断允许 SETB EX0 ;开外中断0 SETB ET1 ;开定时中断T1 SETB P3.1 ;关报警器 LCALL VIICREAD ;将EEPROM中原里程数据调入内存 RETERR: CPL P

16、3.1 ;未设置车轮周长,开始报警 LCALL DL5S ;延时5S 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、化流程图6.2.2 主程序主程序根据P3.0口的开关状态选择里程速度显示。START: LCALL CLEARMEN ;上电初始化START1: JB P3.0,DISPLAYS ;P3.0=1,显示里程 LCALL DISPLAYV ;P3.0=0,显示速度START2: SJMP START1 ;循环 主程序流程图6.2.3用外部中断0实现的里程计数程序定时中断是为满足定时或计数的需要而设置的。在单片机内部有两个定时/计数器,以对其中的计数结构进行计数的方法,来实现定时或计数功能。当结构发生计数溢出时,即表明定时时间或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志,作为单

18、片机接受中断请求的标志。这种中断请求是在单片机芯片内部发生的,因此无须在芯片上设置引入端。定时/计数器控制寄存器TCON是8位寄存器,地址为88H,可以位寻址。其高4位用于定时/计数器中断控制,低4位借给外部中断,用做中断标志和触发方式选择位。本设计采用定时中断,对自行车的里程和速度进行计数。INTEX0: PUSH ACC ;累加器堆栈保护 PUSH PSW ;状态字堆栈保护 INC 60H ;圈数加1 CLR A ;清A CJNE A,60H,INTEX0OUT ;计数器没溢出转INTEX0OUT INC 61H ;溢出进位(61H加1) CJNE A,61H,INTEX0OUT ;计数器

19、没溢出转INTEX0OUT INC 62H ;溢出进位(62H加1)INTEX0OUT:LCALL VIICWRITE ;里程数据存入EEPROM SETB EX1 ;开外部中断1 POP PSW ;状态字恢复 POP ACC ;累加器恢复 9 RETI ;中断返回;每转一圈时间计数处理程序,每圈时间放在68H6BH单元中INTEX1: PUSH ACC ;累加器堆栈保护 PUSH PSW ;状态字堆栈保护 CLR EX1 ;关外部中断1 JNB 00H,INTEX11 ;溢出标志为0转INTEX11 MOV TL1,#0FFH ;溢出时计时单元赋#0FFH(显示速度为零) MOV TH1,#

20、0FFH MOV 6CH,#0FFH MOV 6DH,#0FFHINTEX11: MOV 68H,TL1 ;将时间计数值移入暂存单元68H-6BH MOV 69H,TH1 MOV 6AH,6CH MOV 6BH,6DH CLR A ;清A MOV TL1,A ;计数单元置零 MOV TH1,A MOV 6CH,A MOV 6DH,A CLR 00H ;清溢出标志 POP PSW ;状态字堆栈恢复 POP ACC ;累加器堆栈恢复 RETI ;中断返回;T1计数器中断服务程序。(计数器T1由外部中断1输入控制,当为高电平时计时开始)INTT1: PUSH ACC ; 累加器堆栈保护 PUSH P

21、SW ;状态字堆栈保护 INC 6CH ;6C计时单元加1 MOV A,6CH ;6C单元内容移入A JNZ INTT11 ;不为0,转INTT11 INC 6DH ;进位,6DH单元加1 MOV A,6DH ;移入A JNZ INTT11 ;不为0,转INTT11 SETB 00H ;计时器溢出,置溢出标志位INTT11: POP PSW ;状态字堆栈恢复 POP ACC ;累加器堆栈恢复 RETI ;中断返回 图 3.4 中断流程图6.2.4里程、速度处理程序6.2.4.1里程处理程序外中断0服务程序用于对单片机P3.2口输入的圈脉冲进行计数,为十六进制计数器。60H为低位,62H为高位。

22、每次计数一次后,对里程数据进行一次存储操作。当车轮每转一圈,通过霍尔元件将脉冲数输入单片机内,通过计数器计出脉冲数,再用乘法子程序算出里程数。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 ; 被除数赋值 LCALL DIVST ;调除法程序 11 LCALL BCDST ; 跳到二进制

23、转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 MOV A,24H ; 将24H内容移入A SWAP A ; 交换高低字节 ANL A,#0FH ; 高四位为0 MOV 73H,A ; 移入73H RET里程处理程序流程图6.2.4.2速度处理程序外中

24、断1服务程序用于处理轮子转动一圈后的计时数据。当标志位(00H)为1时,计数溢出,放入最大时间值(为#0FFH);当标志位为0时,将计数单元(TL1、TH1、6CH、6DH)的值放入68H6BH单元。定时器计出每转一圈所用的时间,用自行车车轮的周长除以时间就得出自行车的速度。VVV: MOV 18H,68H ;除数赋值 MOV 17H,69H ;除数赋值 MOV 16H,6AH ;除数赋值 12 MOV 11H,#00H ;被除数赋值 MOV 12H,#00H ;被除数赋值 MOV 13H,#36H ;被除数赋值 MOV 14H,#0EEH ;被除数赋值 MOV 15H,#80H ;被除数赋值

25、 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 ;72H为0 MOV 73H,#00H ;73H为0 RET ;子程序返回速度处理程序流程图 136.2.5显示子程序采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h

26、同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。本设计P2.0、P2.1、P2.2、P2.3信号一起组成位选通的位选信号,P0.0P0.7信号一起组成段码选通的段选信号,通过软件编程,先

27、把所要显示的数据放入存储单元,然后把数据送入段选通对应的地址,再选通某一个LED,逐步完成四个LED的显示。;里程显示控制程序DISPLAYS:SETB P1.0 ;点亮LED1 CLR P1.1 ;关闭速度指示灯 SETB P3.7 LCALL SSS ;将圈数转为公里数 LCALL DISPLAY ;显示公里数据 LJMP START1 ;跳回START1;速度显示程序DISPLAYV: CLR P1.0 ;关闭LED1(里程指示灯) SETB P1.1 ;点亮LED2(速度指示灯) CLR P3.7 LCALL VVV ;每圈时间换算为KM/H程序 MOV A,71H ;将十位数(BCD

28、码)值植入A SUBB A,#04H ;与预定报警值比较 JNC WARING ;时速超过40时报警 SETB P3.1 ;关报警灯V1: LCALL DISPLAY ;显亮一次 RET ;子程序返回DISPLAY: MOV R1,#70H ;显示单元首址 MOV R2,#0FEH ;扫描字PLAY: MOV A,R2 ;扫描字送入A MOV P2,A ;放到端口P2 MOV A,R1 ;取显示数据 ANL A,#0FH ;高四位清0 MOV DPTR,#TAB ;取段码表首址 MOVC A,A+DPTR ;查显示数据对应段码 MOV P0,A ;段码输出 LCALL DL1MS ;点亮1MS

29、 INC R1 ;指向下一显示数据地址 MOV A,R2 ;取扫描字 JNB ACC.3,ENDOUT ;已扫描到第四位,转ENDOUT退出 RL A ;循环左移 MOV R2,A ;放回R2 AJMP PLAY ;转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显示程序流程图6.2.5延时子程序;1ms延时程序 利用循环实现延时DL1MS: MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2 ;循环19H次 DJNZ R6,DL1 ;循环14H次 RET;出错闪烁利用延时255msDL5S: MOV R5,#0FFH DL3: LCALL DL1MS ;调用1ms延时 DJNZ R5,DL3 ;循环255次 RET

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1