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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机课设.docx

1、单片机课设河南理工大学单片机应用与仿真训练设计报告题目:出租车计价器设计姓 名: 学 号: 专业班级: 电信09-2班 指导老师: 所在学院:电气工程与自动化学院2012年12月8日摘要出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。本设计是以AT89S52 单片机为主

2、控器,利用A44E 霍尔传感器测量转速,通过转速的测量和计算实现出租车多功能计价器的设计。该系统由单片机最小系统,键盘电路,测速电路及显示电路等五部分组成。以最小系统为核心,通过测量电路,算法设计,按键控制,输出显示来实现司机对出租车计价系统的控制。显示部分由两个四位八段的共阳极数码管构成,通过键盘电路来实现对计价器的模式切换。该系统能显示里程和金额、分别可以精确到小数点后一位; 可通过按键设置单程和往返价格: 当车速在5 公里/小时 以下时,进入等待模式,等待时间等于5分钟时,相当于里程数增加1公里。本系统能实现市场上出租车计价器的基本功能外,可通过按键控制进入暂停,等待时间查询以及空车指示

3、模式,并进行清零和复位。时钟电路采用12MHZ的晶振作为系统的时钟源具有较高的准确性。经实际测试,本设计基本实现了设计所期望的基本功能要求,同时通过算法设计实现了部分创新功能。关键词: 单片机AT89S52 ,霍尔传感器,出租车计费器目录1 概述 31.1 出租车计价器设计要求 31.2 课程设计的目的和意义 31.3 功能论述 32 系统总体方案及硬件设计 42.1 系统总体方案论证与比较 42.2 系统的硬件设计 52.2.1 单片机各引脚功能说明 52.2.2 最小系统 62.2.3 键盘电路 72.2.4 霍尔传感器测速电路 83 软件设计 103.1 系统主程序模块 103.2中断子

4、程序 103.3里程计算子程序 123.4 键盘扫描与显示程序 124 Proteus软件仿真图 135 课程设计体会 14参考文献 15附1:源程序代码 16附2:系统原理图 261 概述1.1 出租车计价器设计要求基本要求:(1) 能显示里程,单位为公里,最后一位为小数位。(2) 能显示金额数,单位为元,最后一位为小数位。(3) 可设定单程价格和往返价格,单程价格为2 元/公里, 往返价格为1. 5 元/公里。(4) 车速小于5 公里/小时的时间累积为总等待时间,每5 分钟等待时间相当于里程数增加1 公里。(5) 起步公里数为3 公里, 价格为5 元,若实际距离大于3 公里,按规则实际距离

5、计算价格。(6) 按暂停键,计价器可暂停计价,按查询键,可显示总等待时间。1.2 课程设计的目的和意义(1) 通过本次课程设计更进一步掌握和理解单片机课程知识和应用,使自己有解决问题的能力。(2) 通过本次课程设计会运用所学知识进行单片机软硬件的设计。(3) 通过本次课程设计提高学生的综合能力、动手能力、文献资料查阅能力,为将来从事有关工作打下一个良好的基础。(4) 学会单片机仿真软件的使用方法和撰写课程设计报告的方法。(5) 通过本次课程设计掌握单片机中按键和数码管显示的使用。1.3 功能论述本设计是以AT89S52 单片机为主控器,利用A44E 霍尔传感器测量转速,通过转速的测量和计算实现

6、出租车多功能计价器的设计。该系统由单片机最小系统,键盘电路,测速电路及显示电路等四部分组成。以最小系统为核心,通过测量电路,算法设计,按键控制,输出显示来实现司机对出租车计价系统的控制。显示部分由两个四位八段的共阳极数码管构成,通过键盘电路来实现对计价器的模式切换。该系统能显示里程和金额、分别可以精确到小数点后一位: 可通过按键设置单程和往返价格;当车速在5 公里/小时以下时,进入等待模式,等待时间等于五分钟时,相当于公里数加一。本系统能实现市场上出租车计价器的基本功能外,可通过按键控制进入暂停,查询以及空车指示模式,并进行清零和复位。时钟电路采用12MHZ的晶振,作为系统的时钟源,具有较高的

7、准确性。2 系统总体方案及硬件设计2.1 系统总体方案论证与比较 方案一:采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给数码管显示,以下是该方案的流程框图,如图2-1所示:图2-1 方案一方案二: 采用单片机作为主控器进行设计。基于单片机的设计功能强大,用较少的硬件和软件组合起来即可实现所要求的功能,并可以修改软件程序来改变一些设定值,方便而易操作,不容易损坏。设计采用89S52 单片机控制,利用霍尔传感器测量速度和里程,利用键盘电路对计费进行控制和设定,然后

8、再数码管上显示出来。此设计易于控制和显示,规模较小,更适于安装在出租车中,实用性强。通过两个方案的比较,很明显的可以看出采用单片机实现出租车计价更经济适用而且功能强大控制简单,因此采用方案二。采用单片机设计的原理框图,如图2-2所示:图2-2 方案二2.2 系统的硬件设计2.2.1 单片机各引脚功能说明AT89S52电路图如图2-1-1所示:图2-2-1 AT89S52电路图VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIA

9、SH编程时,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”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当

10、用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时

11、,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个

12、机器周期两次有效。但在访问外部数据存储器时,这两次有效的信号将不出现。:当保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,将内部锁定为RESET;当端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.2.2 最小系统主控机系统采用了Atmel 公司生产的 AT89S52单片机,它含有256 字节数据存储器,内置8K 的电可擦除FLASH ROM,可重复编程,大小满足主控机软件系统设计,所以不

13、必再扩展程序存储器。复位电路和晶振电路是AT89S52 工作所需的最简外围电路。单片机最小系统电路图如图2-4所示。AT89S52 的最小系统图如下:图2-2-2 最小系统AT89S52 的复位端是一个史密特触发输入,高电平有效。RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接12M 晶振和两个30pF 电容组成系统的内部时钟电路。本部分主要由AT89S52 单片机,复位电路,振荡电路,以及PO 口上拉组成,作为计价系统的核心控制整个系统的正常工作。2.2.3 键盘电路按键控制电路如图2-3所示,单片机的

14、P1.0管脚接启动按键,通过软件编程,当按下按键计数器开始工作,开始计价;同时空车指示灯灭。单片机P1.1管脚接切换开关,其功能是用来切换单双里程单价,其中单程2元,双程1.5元。第三个按钮是结账按钮,接P1.2口,当按下时左边四位数码管显示里程,右边显示总金额,其中也包括等待时间产生的金额。第四个按钮是清除按钮,用来清除所有数据,同时点亮空车指示灯。单片机P3.0管脚接的是查询按钮,用来查询等待时间。暂停按钮接P3.1口,第一次按下停止一切计数,再次按下时恢复正常工作。键盘电路图:图2-2-3 键盘电路图2.2.4 霍尔传感器测速电路本电路采用A44E 霍尔传感器,A44E 属于开关型的霍尔

15、器件,其工作电压范围比较宽(4. 518V) ,其输出的信号符合TTL 电平标准,但仍需接一个4. 7K的上拉电阻,才能有一个较高的明显的电压脉冲输出, 然后接到单片机的IO 端口上,而且其最高检测频率可达到1MHZ 。里程测量是通过霍尔传感器的霍尔效应检测出车轮的运转次数, 然后转变为脉冲信号输入到单片机的P3.1 口。由单片机计算速度和总里程, 霍尔传感器及其电路如下:图2-2-4 霍尔传感器电路2.2.4数码管显示电路本显示单元采用两个四合一共阳极数码管,利用动态扫描显示里程、金额、等待时间及空车指示信号HELLO等。两个数码管分别显示行驶的里程数和总费用,分别和单片机的和连接,当按下查

16、询键时可以显示等待时间,按下结账键时显示最终里程和最终金额,并且可以将通过按键切换单价,按下清零键清零显示HELLO。以下是数码管和单片机引脚的连接图:电路图如下所示:图2-2-4 数码管显示电路3 软件设计3.1 系统主程序模块图3-1 主程序流程图3.2中断子程序图3-2 外部中断子程序流程图图3-3 定时器1中断子程序流程图图3-4 定时器0中断子程序流程图3.3里程计算子程序图3-5 里程计算子程序3.4 键盘扫描与显示程序程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示

17、。如图3-6所示:图3-6 键盘扫描与显示4 Proteus软件仿真图图4-1 总体仿真图5 课程设计体会这段时间的经过我们的认真合作和不懈努力,我们的出租车计价器终于成功地制作完成。从分析设计的要求,完成设计思路,到软件仿真直至最后的硬件焊接,从编写程序到不断的调试改写,以及最后的程序下载硬件调试,我们一步步地认认真真完成。在这个过程中我们遇到了许多问题和困难,使得我们认识到了自身知识的欠缺,由于对所学知识没有很好地掌握,所以我们在做课程设计的同时又对所学知识进行了认真系统的复习。对于我们所遇到的困难和问题,我们敢于直面问题并找出原因及解决办法。在这个过程中,不仅加深了对理论知识的理解,我们

18、的编程、问题分析解决及动手能力也有了潜移默化的提高。特别是程序的调试过程中,经常会出现很多莫名奇怪的错误,弄得自己不知所措,经过查询资料、相互探讨和请教别人,我们从头开始,一步一步查找问题所在,检查每一个变量在程序执行过程中的值,最后找到错误所在并修改。虽然程序写好之后通过仿真可以得到预期结果,但实物与仿真毕竟还是存在差别和很多不确定性。刚开始硬件连接好,但是结果与预期结果差别比较大,对硬件认真检测后发现按键处出现错误,致使个别按键不起作用,对硬件进行了相应的调整。第二次调试时,虽然可以显示所需的东西,但是数码管的亮度很低,几乎看不到,必须得在比较暗的地方才可以勉强看到所显示的结果。经过我们的

19、不断分析思考及网上资料的查询,得知P2口带负载能力比较弱,不足以驱动数码管正常显示,所以我们把P2口和P0口对换了一下,使得数码管正常显示,调试成功。通过这次课程设计,最大的收获就是动手能力、分析解决问题的能力及团队合作得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握,凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在以后的学习中

20、可以通过不断的摸索和实践来提高其他方面的知识。参考文献1 余发山,王福忠.单片机原理及应用技. 北京:中国矿业大学出版社, 2008.21-1622 康华光,电子技术基础. 北京:高等教育出版社, 2006.7-2693 贾宗璞,许合利.C程序程序设. 北京:中国矿业大学出版社,2007.12-1164 XX知道 AT89S52概述:5 XX文库 AT89S52中文资料:附1:源程序代码#include#include#define uint unsigned int#define uchar unsigned char#define DanJia_DanCheng 20#define Dan

21、Jia_WangFan 15#define LunJing 5 /*车轮直径0.5m*/#define LunChang 6.28/m 3.14*0.5/*引脚定义*/sbit KaiShi_Key=P10;sbit QieHuan_Key=P11;sbit JieZhang_Key=P12;sbit Clear_Key=P13;sbit Wait_Key=P30;sbit ZanTing_Key=P31;sbit KongChe_Led=P14;sbit duche_Led=P15;sbit ZanTing_Led=P16;sbit WangFan_Led=P17;uchar code ta

22、ble=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0x89,0x86,0xC7;uchar code wei=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; uint data Count=0;uint data Count1=0,Count2=0;uchar data DanJia=DanJia_DanCheng; /默认单程价格uchar data qian,bai,shi,ge; /显示数据各个位置数字的临时变量uint data LiCheng=0;uint data JinEr=0;

23、uint data Waitime=0;uchar data Second;uint data Minute;uchar data key;uint data Speed=0;uint data Old_Count,New_Count;uchar k=0,n=0,i=0,j=0;uint data_temp;bit KaiShiFlag=0;bit QieHuanFlag=0;void data_process();void delay(uint x) uint y; while(x-) for(y=110;y0;y-);/*数码管显示程序(1)*/void seg_show(uchar w,

24、uchar dat,uchar dp) if(w=dp) P0=weiw; P2=tabledat&0x7f; delay(1); else P0=weiw; P2=tabledat; delay(1); void Separate(uint temp) qian=temp/1000; bai=temp/100%10; shi=temp/10%10; ge=temp%10; /*数码管显示程序(2)*/void show_nint(uchar w,uint dat,uchar dp)/显示w位:从w位显示;dat:显示数据;dp:小数点显示位;最多五位数字显示 Separate(dat); i

25、f(qian!=0) seg_show(w,qian,dp); seg_show(w+1,bai,dp); seg_show(w+2,shi,dp); seg_show(w+3,ge,dp); else if(bai!=0) seg_show(w+1,bai,dp); seg_show(w+2),shi,dp); seg_show(w+3),ge,dp); else if(shi!=0) seg_show(w+2,shi,dp); seg_show(w+3),ge,dp); else if(7=dp) seg_show(w+3,ge,dp); else seg_show(w+2,shi,dp)

26、; seg_show(w+3),ge,dp); /*键盘扫描函数之调用函数*/void Waittimes() show_nint(0,LiCheng,2); show_nint(4,Waitime,7); void Clear() Count=0; LiCheng=0; JinEr=0; Waitime=0; Second=0; Minute=0; KongChe_Led=0; ZanTing_Led=1; WangFan_Led=1; DanJia=DanJia_DanCheng; duche_Led=1; i=0; j=0; k=0; key=0; KaiShiFlag=0; EX0=1

27、; TR0=1; TR1=1;void JieZhang() EX0=0; TR0=0; TR1=0; show_nint(0,LiCheng,2); show_nint(4,JinEr,6);void ZanTing() if(i=1) ZanTing_Led=0; EX0=0; TR0=0; TR1=0; show_nint(0,LiCheng,2); show_nint(4,JinEr,6); else ZanTing_Led=1; EX0=1; TR0=1; TR1=1; key=0; void WeiZhi() show_nint(0,LiCheng,2); /show_nint(6

28、,DanJia,2,6); show_nint(4,JinEr,6); /* 按键扫描函数 */ void keyscan() if(0=QieHuan_Key) delay(5); if(0=QieHuan_Key) while(0=QieHuan_Key) switch(key) case 0:WeiZhi();break; case 1:ZanTing();break; case 2:Waittimes();break; case 3:JieZhang();break; case 4:Clear();break; QieHuanFlag=1; k=!k; if(1=QieHuanFlag) if(1=k) DanJia=DanJia_WangFan; WangFan_Led=0; else if(0=k)

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

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