毕业设计51单片机基于出租车计价系统的设计论文.docx
- 文档编号:23275584
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:35
- 大小:372.85KB
毕业设计51单片机基于出租车计价系统的设计论文.docx
《毕业设计51单片机基于出租车计价系统的设计论文.docx》由会员分享,可在线阅读,更多相关《毕业设计51单片机基于出租车计价系统的设计论文.docx(35页珍藏版)》请在冰豆网上搜索。
毕业设计51单片机基于出租车计价系统的设计论文
泸州职业技术学院
毕业论文
基于单片机的出租车计价系统的设计
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
摘要
出租车计价器是乘客与司机双方的交易准则,他是出租车行业发展的重要标志,是现代出租车不可或缺的部分。
它关系着交易双方的利益。
具有良好性能的计价器,无论是对广大出租车司机朋友还是乘客都是很必要的。
因此,出租车计价器的研究也是一个具有应用价值的研究课题。
而采用模拟电路或是数字电路设计的计价器整体电路规模较大,用到的器件多,造成的故障率高,难调试。
相对于普通的模拟电路或数字电路,采用单片机AT89S52型号芯片进行的设计相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可用12864液晶显示屏显示,可以通过软件编程来完成更多的附加功能。
针对计费模式的切换,通过软件编程就可以轻易而举的实现。
避免了机械开关带来的不稳定因素。
关键词:
出租车计价器,AT89S52,12864液晶显示屏
录目
第一章绪论
单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。
由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。
单片机有两种基本结构:
一种是在通用微型计算机中广泛采用的,程序存储器和数据存储器共用一个存储器空间的结构,称为“冯·诺依曼”(VonNeumann)结构。
另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,称为“哈佛”(Harvard)结构,目前的单片机采用此种结构为多。
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有一个应用价值的。
我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。
随着改革开放日益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。
出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),到能够自主计费,以及现在的能够打一发票和语音提示、按时间自主变动单价等功能。
随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。
本次设计的目的在于现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。
而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。
第二章系统组成及功能
第一节系统的组成
本系统有硬件和软件两部分组成。
本系统有硬件采用模块化设计,以AT89S52控制器为核心,与独立键盘电路和显示电路等组成出租车计价系统。
该系统硬件的组成包括单片机为主控模块、LM324、电机、光电传感器、独立按键等。
单片机主控模块完成外围硬件的控制以及一些运算。
独立按键完成开始暂停等功能,单片机控制的出租车计价系统的硬件组成框图如图2-1所示:
如图2-1
第二节系统工作原理
本系统的工作流程图如图2-2所示,有电源给单片机模块供电。
单片机产生的数字信号送给LCD12864显示,和单片机产生高低电平信号传给继电器使电机工作,让光电传感器产生高低电平信号通过LM324放大电路放大后传给单片机进行相关的运算。
如图2-1
第三节系统功能的确定
2.3.1基本功能
(1)显示:
单程价、起步价、可以显示里程、总金额、等待时间、速度。
(2)计费功能:
起步公里数为3公里,价格为8元;若实际运行大于3公里,按单程价格为2元/公里,往返则价格为1.5元/公里,等待计费1.5远/min。
(3)按键功能:
单程/往返分别由“单程”按键和“往返”按键设定;按“暂停”键,计价器可暂停计价;按“清除”键,计价器能将记录数据(里程、等待时间与金额等)自动清0;按“查询”键,能自动显示总等待时间;按“返回”键,仍然显示里程和金额。
2.3.2扩展功能
停车计费功能:
用单片机控制电机转动,并用光电传感器检测转盘转动模拟车速,车速与转盘转速成正比。
车速<5公里/小时的时间累积为总等待时间,每1分钟等待时间相当于里程数增加1公里。
2.3.3系统操作说明
(1)按键S1:
单程按键。
按下该键,里程随脉冲数成正比累加,在里程大于3公里后,金额数按单程价格为2元/公里进行累加。
(2)按键S2:
往返按键。
按下该键,里程随脉冲数成正比累加,在里程大于3公里后,金额数按单程价格为1.5元/公里进行累加。
(3)按键S3:
暂停按键。
到达目的地后,按“暂停”键,计价器可暂停计价。
(4)按键S4:
清除按键。
按“清除”键,计价器能将记录数据(里程、等待时间与价格等)自动清0。
(5)按键S5:
查询按键。
按“查询”键,能自动显示总等待时间。
(6)按键S6:
返回按键。
按下该键,回到显示里程数、金额状态
第三章系统硬件设计
第一节芯片的选择
本设计选用AT89S52芯片,它是一种低功耗、高性能CMOS8位微控制器,具有8K(0000H~1FFFH)在线系统可编程Flash存储器。
片上Flash允许程序存储器在线编程,也适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供灵活、高效的解决方案。
AT89S52具有以下标准功能:
8K(0000H~1FFFH)Flash,256字节(00H~FFH)数据存储器(RAM),64K(0000H~FFFFH)程序存储器(ROM),32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口内晶振及时钟电路。
其中,数据存储器(RAM)用于存放各种运算的中间结果,作缓存和数据暂存,以及设置特征标志等。
AT89S52的片内数据存储器用位寻址方式,最大寻址范围为256字节(00H~FFH)。
按使用情况不同可分成低128字节(00H~7FH)和高128字节(80H~FFH)。
其中低128字节为真正的RAM存储器,高128字节为特殊功能寄存器(SFR)区,如累加器ACC、程序状态字PSW、数据指针DPTR、程序计数器PC等。
整个片内RAM区分布如图3-1所示。
AT89S52的引脚图如图3-2所示:
图3-2AT89S52引脚图
第三节功能电路分析
3.3.1时钟电路
实验板的时钟振荡源电路如图3-3所示。
其中JT为11.0592MHz的晶振,改变两电容CB的值即可对此晶振频率进行调节。
该电路提供单片机工作所需的振荡频率,计算定时器初值即需此晶振频率,在通信时也需知道晶振频率,以对波特率进行计算。
3.3.2复位电路
如图3-4所示为实验板的复位电路,当RESET信号为低电平时,实验板为工作状态,当RESET信号为高电平时,实验板为复位或下载程序状态。
由于AT89S52具有ISP的功能,即可以通过并口线直接将程序下载到单片机内,因此,AT89S52具有两种状态,下载程序状态和运行状态。
该复位电路能实现上电自动复位,也能手动复位,一般复位时RESET应保持20毫秒以上高电平,此复位时间由接地电容控制。
3.3.3键盘电路
如图3-5所示为独立式按键电路,每个按键占用一根I/O口线,每根I/O口线上按键的工作状态不会影响其它按键的工作状态。
这种按键的软件程序简单,但占用I/O口线较多。
(一跟口线接一个按键),适用于键盘数较少的系统中。
图3-5键电路图
图3-6按键实物图
3.3.4LCD12864显示
通过用12864显示出租车的单程价、起步价、可以显示里程、总金额、等待时间、速度等。
现在的LCD价格便宜且适合我们做单片机的显示屏。
应用也十分广泛。
电路连接如图3-7所示。
图3-7显示电路
图3-7LCD12864实物图
第四章系统软件设计
第一节主程序设计
在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
主程序流程图如图4.1所示。
当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。
若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。
当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。
如图4-1主程序流程图
第二节定时中断服务程序
在定时中断服务程序中,每1/40s产生一次中断,当产生40次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。
其程序流程如图4-2所示。
图4-2定时中断服务程序
第三节键盘服务程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。
六个按键分别对应六个简单的子程序。
如果按键S1被按下,则调用第一个子程序:
begin_signal标志置1,将s_or_d标志置0;表示单程开始。
如果按键S2被按下,则调用第一个子程序:
begin_signal标志置1,将s_or_d标志置1;表示往返开始。
如果按键S3被按下,则调用第一个子程序:
begin_signal标志置0;表示暂停。
如果按键S4被按下,则调用第一个子程序:
pulse_counter标志置0,将t置0;表示将显示数据清空。
如果按键S5被按下,则调用第一个子程序:
dispflag标志置1;表示进入查询界面。
如果按键S6被按下,则调用第一个子程序:
dispflag标志置0;表示退出查询界面。
第五章系统测试
第一节硬件调试
第一步:
目测,检测外部的各元件电路是否有断点。
一般先检查有焊接点的线路,因为这些地方是最容易出现断点的可用带放大镜的台灯检查更佳,如图5-1为目测实图。
如图5-1目测实物图
第二步用万用表检测。
先用万用表复核目测中有疑问的连接点,在检测各种电源线与底线是否有短路现象。
将万用表打在欧姆挡,然后将表笔接在被测线路之间,看实数是否有变化,有则表明导通。
如图5-2为万用表测试实物图。
如图5-2
第二节软件调试
软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
查看程序是否有逻辑错误。
如图5-1程序窗口。
如图5-1程序输入窗口
如图5-2为程序编译窗口。
如图5-2程序编译窗口
如果信息栏显示没有错误,表明没有语法错误,然后可以生成“*.HEX”文件下载到芯片里,与硬件联合调试。
结束语
经过这些天有关于出租车计价器的课程设计,使我对单片机的应用有了更深的了解。
在课程设计的过程中,还是碰到了许多的问题。
比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后顺序及调用掌握得还不够好;对于一些相关的应用软件没能熟练掌握。
通过这几天晚上的苦想和反复调试,以及参考网上的程序,最终还是没能把问题解决。
通过这次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握,凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。
在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。
通过本次课程设计,又使我学到了许多书本上无法学到的知识,也使也深该体会到单片机技术应用领域的广泛,不仅使我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的
致谢
首先要感谢我的家人,是他们让我能上大学;在大学里,先要学会学习才能学的更好,是老师教了我怎样学习,到现在能完成毕业设计,都少不了老师的功劳;在整个设计过程中,从硬件电路图到软件编程,应用了相当多的知识,包含了大学三年所学的知识,在此向各位任课老师表示感谢。
在设计过程中,指导老师李庭贵老师给予了我很大帮助,李老师对设计中出现的问题作了及时讲解和耐心指导,使我的设计得以顺利完成。
在此,特向李庭贵老师、何兵老师、等表示感谢;同时,很多同学也给我提供了很多帮助,也向帮助我的同学表示感谢。
附录A
附录B程序清单
#include
#defineuintunsignedint
#defineucharunsignedchar
#definerate15//脉冲数与里程数的比例
sbitP20=P2^0;
sbitP21=P2^1;
sbitP22=P2^2;//接74LS138控制数码管
sbitpulse_in=P1^0;
bitpulse=1;
bitdispflag;
ucharnum,temp;
bitbegin_signal;//开始标志
bits_or_d;//单程还是往返标志
uinttimes;//定时次数
uintpulse_counter;
uintrecord;
uints_temple;
uints,m;//里程数s和金额m
uintt;//等待时间
charbaiwei,shiwei,gewei,xiaoshu;
charkeynum;//键盘的键值
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40};//0~fand'-'的字型码(共阴)
//声明区
voiddelay(uintx);
voidinit();
voiddivide(uintcounter);
voidselect(bita,bitb,bitc);
voiddebouncer(void);
ucharkeyscan(void);
voiddelay(uintx)//延时xms.
{
uinti,j;
for(i=0;i for(j=0;j<=150;j++) ; } voidinit()//定时器初始化 { TMOD=0x01; TH0=(65536-25000)/256;//timer=1/40s TL0=(65536-25000)%256; EA=1; ET0=1; TR0=1; } voiddivide(uintcounter) { if(dispflag==0) { P0=0x00; counter=counter*10/rate; xiaoshu=counter%10; gewei=(counter/10)%10; shiwei=(counter/100)%10; baiwei=(counter/1000)%10; if(counter<=30)m=80; else if(s_or_d==0)m=80+2*(counter-30)+t/300; elsem=80+1.5*(counter-30)+t/300; select(1,1,0);//显示里程数目 P0=table[xiaoshu]; delay (2); select(0,1,0); P0=table[gewei]|0x80; delay (2); select(1,0,0); P0=table[shiwei]; delay (2); select(0,0,0); P0=table[baiwei]; delay (2); xiaoshu=m%10; gewei=(m/10)%10; shiwei=(m/100)%10; baiwei=(m/1000)%10; select(1,1,1);//显示金额数目 P0=table[xiaoshu]; delay (2); select(0,1,1); P0=table[gewei]|0x80; delay (2); select(1,0,1); P0=table[shiwei]; delay (2); select(0,0,1); P0=table[baiwei]; delay (2); } else { P0=0x00; xiaoshu=t%10; gewei=(t/10)%10; shiwei=(t/100)%10; baiwei=(t/1000)%10; select(1,1,0);//显示等待时间 P0=table[xiaoshu]; delay (2); select(0,1,0); P0=table[gewei]; delay (2); select(1,0,0); P0=table[shiwei]; delay (2); select(0,0,0); P0=table[baiwei]; delay (2); } } voidtimer0()interrupt1 { TH0=(65536-25000)/256; TL0=(65536-25000)%256; if(begin_signal==1) { if(pulse_in! =pulse) { delay(10); if(pulse_in! =pulse) {pulse=~pulse; pulse_counter++; } } if(times==39)//1stimercompleted { times=0; if((pulse_counter-record)<5)//如果每秒脉冲小于5,则等待时间增加 t++; record=pulse_counter; } times++; } //s_temple=pulse_counter/2; //divide(s_temple); } voidselect(bita,bitb,bitc) { P20=a; P21=b; P22=c; } voiddebouncer(void)//防抖动程序 { uinti; for(i=0;i<4800;i++); } ucharkeyscan() { P3=0x7f; temp=P3; temp=temp&0x0f; while(temp! =0x0f) { delay(10); temp=P3; temp=temp&0x0f; while(temp! =0x0f) { temp=P3; switch(temp) { case0x7e: num=1; break; case0x7d: num=2; break; case0x7b: num=3; break; case0x77: num=4; break; } while(temp! =0x0f) { temp=P3; temp=temp&0x0f; } } } P3=0xbf; temp=P3; temp=temp&0x0f; while(temp! =0x0f) { delay(10); temp=P3; temp=temp&0x0f; while(temp! =0x0f) { temp=P3; switch(temp) { case0xbe: num=5; break; case0xbd: num=6; break; case0xbb: num=7; break; case0xb7: num=8; break; } while(temp!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 51 单片机 基于 出租车 计价 系统 设计 论文