基于51单片机的出租车计价器带仿真及程序毕业论文(编辑修改稿)内容摘要:

子程序、和键盘扫描 子程 序四个模块,下面对每一块进行介绍。 系统主程序 本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。 在 main函数编写开始,要进行初始化,包括对系统初始化和对硬件设备进行初始化,并使硬件处于就绪状态。 在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。 系统流程图如下图 41。 初 始 化开 始数 据 处 理键 盘 扫 描结 束 图 41系统主程序流程图 数据处理子程序 每当霍尔传感器输出一个低电平信号就使单片机中断一次,在计数中断服 务程序,里程和金额都相应变化,当然等待时间也换算成里程(当速度小于 5km/h时 5分钟想当于 1公里)。 计算程序根据里程数分别进入不同的计算公式。 如果里程大于 3公里,则执行公式:金额 =( 里程 3) *单价 +5;否则,执行公式:总金额 =起步价。 程序流程图如图 42所示。 计 算 里 程开 始里 程 3 公 里 否是金 额 = 5 元金 额 = 单 价 * ( 里 程 3 ) + 5显 示 金 额结 束 键盘扫描子程序 键盘采用查询的方式,放在主程序中,当没有按键按 下的时候,单片机循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。 5 Proteus软件仿真 本设计需要用 Keil uVision4对 C51程序进行编译,生成“ .hex”文件 ,如图51 : 图 51 Keil uVision4编译 在 Proteus软件中画出仿真电路(如图 52),把 Keil uVision3编译后生成的“ .hex”导入到单片机中,按“运行仿真”键进行仿真。 图 52Proteus仿真 总结 总结在本次设计中,我们采用 AT89S52芯片为核心器件,设计 出了简单的出租车计价器,能够实现显示时间、等待时间、金额和里程,按键控制,空车指示。 选题后,我们便开始复习单片机方面的知识,也查阅、搜索了很多相关资料,进行总体设计与具体设计,同时也学习仿真软件 Proteus和编程软件 Keil uVision3。 由于以前都采用汇编语言实现编程,对用 C语言来实现单片机的编程不太习惯,花费了一些时间来熟悉 C语言的编程。 在设计开始,要形成流程图,它可以使设计有一定的逻辑性与严密性,使得设计思路明确。 采用模块化的设计思想很重要,它方便编写、修改与调试,另外加上必要的注释,便于交流 与理解。 这次课程设计设计完成后,体会颇多,在学与做的过程中,取长补短,不断学习新的知识,吸取经验,达到进步的目的。 通过自身的努力以及相关图书资料的帮助,逐渐熟悉了 Keil uVision PROTEUS和 C语言等软件的使用以及硬件焊接与检测过程中的一些小技巧。 本次设计我学习到不少单片机的知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题。 所焊实物尚有许多不足,个别功能还不能很好的实现,主要原因是考虑问题不周全,电路设计经验少,实际动手能力不足。 恳请各位老师批评指正, 以使我在以后的学习和实践中加以改进和提高。 致谢 毕业设计即将结束,在老师的指导和同学的帮助之下,学生对于出租车计价器设计有了更多新的认知,对出租车计价器设计有了更深一步的认识,对出租车计价器综合设计的整体脉络了解得更加的清晰透彻。 通过毕业设计,学生对自己三年以来所学的知识有更多的认识。 毕业设计,帮助我们总结大学的收获、认清自我。 同时,还帮助我们改变一些处理事情时懒散的习惯。 从最开始时的搜集资料,整理资料,到方案比选,确定方案,再到着手开始设计,每一步都是环环相扣,衔接紧密 ,其中任何一个步骤产生遗漏或者疏忽,就会对以后的设计带来很多的不便。 本次作者的毕业设计是由徐老师指导的 ,在他的悉心指导下,我开阔了眼界 ,明确了思路。 在整个的设计过程中,徐老师提出了许多宝贵的建议和指导,使我能够顺利的完成整个设计,在此,谨向徐老师表示由衷的感谢。 在即将离开学校之际 ,我要感谢在大学生活中任课的众多老师,正是在他们的谆谆教诲下使我顺利完成了大学的基础知识和专业知识的学习。 在此,还要感谢陪伴我共同走过大学时代并给予我帮助的同学和朋友们,感谢你们,祝福你们在以后的日子里开开心心的度过每一天。 参考文献 [1]贺哲荣 .AT89S51单片机硬件设计与编程实例 .北京:中国电力出版社 .2020 [2]李泉溪 .单片机原理与应用实例仿真 .北京 :北京航空航天大学出版社 ,2020. [3]王平 .单片机应用设计与制作 .北京 :清华大学出版社 , 2020. [4]彭为等 .单片机典型系统设计实例精讲 . 北京:电子工业出版社, 2020 [5]王庆利等 .单片机设计案例实践教程 .北京:北京邮电大学出版社, 2020 [6]韩志军等 .单片机应用系统设计 —— 入门向导与设计实例 .北京:机械工业出版社, 2020 [7]皮大能等 . 单片机课程设计指导书 . 北京:北京理工大学出版社, 2020 附 源程序 include include include include include include sbit P10=P1^0。 sbit P12=P1^2。 float distance_km,money。 void timer0isr(void)interrupt 1 using 1 { distance_km+=。 if(distance_km=3)money=5。 else money=5+(distance_km3)*。 } void main(void) { init_lcd()。 clearscreen(0)。 setline(0)。 TMOD=0x06。 distance_km=0。 TH0=0xCE。 TL0=0xCE。 EA=1。 TR0=1。 Init_DS1302()。 while(1) { if(P10==0) { ET0=1。 P12=0。 display(distance_km)。 display1(money)。 } else { ET0=0。 P12=1。 distance_km=0。 money=0。 display(distance_km)。 display1(money)。 } displayc(1,0,0*16,li)。 displayc(1,0,1*16,chen)。 displayc(1,0,2*16,shu)。 displaye(1,0,6*8,num,14)。 displayc(1,3,0*16,jin)。 displayc(1,3,1*16,e)。 displaye(1,3,5*8,num,14)。 display2()。 } } include include define uchar unsigned char define uint unsigned int sbit cs1=P2^0。 sbit cs2=P2^1。 sbit EN=P2^2。 sbit RW=P2^3。 sbit RS=P2^4。 void delay(uchar i) { while(i)。 } void readbusy() { P0=0x00。 RS=0。 RW=1。 EN=1。 while(P0amp。 0x80)。 EN=0。 } void lcd_wcmd(uchar cmd) { readbusy()。 RS=0。 RW=0。 P0=cmd。 EN=1。 _nop_()。 _nop_()。 EN=0。 } void lcd_wdat(uchar dat) { readbusy()。 RS=1。 RW=0。 P0=dat。 EN=1。 _nop_()。 _nop_()。 EN=0。 } void setpage(uchar page) { page=0xb8|page。 //起始页 lcd_wcmd(page)。 } void setline(uchar line) { line = line amp。 0x07。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。