哈尔滨工业大学课程设计说明书(论文)HHaarrbbiinnIInnssttiittuutteeooffTTeecchhnnoollooggyy课课程程设设计计说说明明书书((论论文文))设计题目:测速小车院系:电气学院测控系班级:100102班设计者:学号:指导教师:胡瑞强设计时间:2013.9.11—2013.9.13哈尔滨工业大学哈尔滨工业大学课程设计说明书(论文)课程设计考核表题目:学生姓名:班级:学号:实验部分考核考核内容分值得分基本设计任务的完成情况40附加设计任务的完成情况10对教师提问的回答情况10总结报告评分评分内容分值得分内容完整、字数达标20层次清晰、重点突出、分析透彻10书写规范、文字流畅5有独特见解、有一定的创新5总成绩:指导教师签字:哈尔滨工业大学课程设计说明书(论文)结题报告一.课题完成情况1.总体完成情况说明在为期两周的课程设计过程中,我们完成了测速小车的设计与调试,最终完成了基本任务要求。在第一周里,我们选定了测速小车的课题,并完成了开题报告,在这一阶段内,我们熟悉并了解了宝贝车机器人的控制原理,单片机主控模块的接线方式,数字编码器的工作原理和硬件连接电路。我们还编制了让小车前进,加速,减速,左右转弯的子程序。在写代码过程中,熟悉了相关软件的使用方法。在第二周里,我们查阅了资料,详细了解并掌握了1602液晶显示模块的工作及控制原理,并编制了四位初始化子函数和显示初始化子函数。在验证显示环节的过程中,还用protues进行了仿真。接下来,我们完成了计数器,定时器的设置,并且对测得的脉冲数进行转换,使其变成速度,并显示在1602上。最后我们设置了小车的运动轨迹,使其可以测量不同的速度,并完成了结题报告。总的来说,我们完成了测量速度的完整显示,开题报告和结题报告的书写。2.程序设计子程序名如下,具体函数见附录//*---------子函数声明-----------*//voidinit_devices(void);//初始化函数voidt0_init(void);voidt1_init(void);voidt2_init(void);voidLCM_init(void);voidinit_4bit(void);//*---------小车运动子函数申明---------*//voidForward(void);voidLeft_90(void);voidRight_90(void);voidRight_180(void);//*---------功能实现子函数申明---------*//voidMeasure_Speed(void);//测速子函数voidData_Conversion(floatspeed);//速度数据类型转换函数voiddisplay(ucharx,uchary,uchar*s);//问候语显示子函数voidDisplay_List_Char(ucharx,uchary,uchar*s);//字符显示子函数voidSet_xy_LCM(ucharx,uchary);//显示位置设置子函数voidData_Conversion(floatspeed);//速度转换子函数//*---------1602数据指令写入函数--------*//voidWrite_Data_LCM(uchardat);哈尔滨工业大学课程设计说明书(论文)voidWrite_Command_LCM(ucharcom);//*----------------延时------------------*//voiddelay_nus(unsignedinti);voiddelay_1ms(void);voiddelay_nms(unsignedintn);二.问题及解决办法1.在完成液晶屏初始化后,仿真也可以显示字符,但将程序烧入单片机后不能正常显示。原因:仿真是选择的是1602液晶显示模块的八位显示模式,而实际的液晶屏硬件连接为四位模式。之后,我们重新编制了相应的四位初始化程序,实现了显示功能。2.根据指导书上硬件图连接后,发现无法显示速度。原因:硬件连接图上P1.1和P1.0只是一种示例,并不是实际对应的P1.1和P1,0口。实际编码器的脉冲输入口应为P3.4和P3.5,这两个外部计数的输入端口。改变接线后可以正常显示。3.当全速前进时,左右两轮显示速度不一致。原因:左右两轮控制脉冲的接入时间不一致,并且传感器在检测过程中可能存在干扰。这是系统误差,无法消除。4.对于float型的变量,1602无法正常显示。解决办法:使用一个库函数sprintf将float转换成字符串型数据并进行显示。三.心得体会课程设计是将课本知识运用到实践中的很好机会,在课题的研究过程中,我们遇到问题又会重新回到课本,对基础知识进一步理解和掌握,同时又把知识和实际问题结合起来,对知识的理解上升了一个层次。并且智能车的设计,更能激发我们学习的兴趣,每个人都有一颗年轻的心,在设计过程中,我们不仅掌握了知识,并且也找到了很多乐趣。并且我们小组内两人分工合作,促进我们养成团队协作精神。当然设计和调试过程并不是一帆风顺,我们遇到一个有一个或大或小的问题,我们通过讨论,请教老师,参考实例,查阅资料也解决了这些问题。任何探索都不会是一马平川,我们肯定会遭遇坎坷,而通过课程设计也培养了我们发现问题,解决问题的习惯。在做工程时遇到问题如何处理,我有了一次切身的体验。在工作时,不管大事还是小事,尤其是一些不起眼的细节,更要保持一丝不苟的作风。另外,在这两周的单片机课设中,我要十分感谢胡老师的辛苦指导,胡老师从小车原理的介绍到程序的调试,都给予了非常大的帮助。也正是因为胡老师的辛勤监督,才使得我们按要求、认真的完成了两周的课设,顺利完成了测速小车的设计。虽然课设就要哈尔滨工业大学课程设计说明书(论文)结束了,但胡老师教导的严谨的工作作风,“规格严格,功夫到家”的校训,将永远影响着我以后的学习、研究、工作,让我在做每一件事情时,都认真严格的要求自己,追求卓越。四.参考文献[1]胡瑞强,李成伟,周庆东等《单片机原理及应用》课程设计指导书哈尔滨:测控实验中心[2]张毅刚,彭喜元等单片机原理及应用北京:高等教育出版社[3]张毅刚基于Proteus的单片机课程的基础实验与课程设计北京;人民邮电出版社[4]彭伟单片机C语言程序设计实训100例北京:电子工业出版社[5]苏小红,陈慧鹏等C语言大学实用教程北京:电子工业出版社[6]李东,黄庆成等计算机组成技术教程北京:电子工业出版社附录源程序代码//***********************************//测速小车程序设计1001102班//1100100420王斌峰//***********************************#includereg52.h#includestdio.h#includestring.h#includemath.h#includeintrins.h#defineucharunsignedchar//宏定义#defineuintunsignedintsbitright=P1^0;//左右电机引脚定义sbitleft=P1^1;sbitrw=P2^1;//1602控制端定义sbitrs=P2^2;sbiten=P2^0;floatRightSpeed,LeftSpeed;//全局变量左右轮速度ucharstr_temp[10];//全局变量转化后速度显示数组uchartime=0;//全局变量中断次数计数变量//*---------子函数声明-----------*//voidinit_devices(void);//初始化函数voidt0_init(void);voidt1_init(void);哈尔滨工业大学课程设计说明书(论文)voidt2_init(void);voidLCM_init(void);voidinit_4bit(void);//*---------小车运动子函数申明---------*//voidForward(void);voidLeft_90(void);voidRight_90(void);voidRight_180(void);//*---------功能实现子函数申明---------*//voidMeasure_Speed(void);//测速子函数voidData_Conversion(floatspeed);//速度数据类型转换函数voiddisplay(ucharx,uchary,uchar*s);//问候语显示子函数voidDisplay_List_Char(ucharx,uchary,uchar*s);//字符显示子函数voidSet_xy_LCM(ucharx,uchary);//显示位置设置子函数voidData_Conversion(floatspeed);//速度转换子函数//*---------1602数据指令写入函数--------*//voidWrite_Data_LCM(uchardat);voidWrite_Command_LCM(ucharcom);//*----------------延时------------------*//voiddelay_nus(unsignedinti);voiddelay_1ms(void);voiddelay_nms(unsignedintn);//*----------定时器2定时中断子程序---------*//voidTimer2(void)interrupt5{TF2=0;//中断标志清零time++;if(time==20)//中断20次,计时一秒{time=0;//中断指针清零TR0=TR1=0;TR2=ET2=0;//计时结束Measure_Speed();//测速,转换,并显示Data_Conversion(RightSpeed);Display_List_Char(0,0,Right:);Display_List_Char(0,6,str_temp);Display_List_Char(0,10,cm/s);Data_Conversion(LeftSpeed);Display_List_Char(1,0,Left:);Display_List_Char(1,6,str_temp);Display_List_Char(1,10,cm/s);TH0=TL0=0;//计数器清零TH1=TL1=0;//计数器清零}TR2=ET2=TR0=TR1=1;//计数开始,开定时器并允许中断哈尔滨工业大学课程设计说明书(论文)}//*---------------主函数--------------*//voidmain(void){init_devices();//器件初始化delay_nus(800);Write_Command_LCM(0x0c);//关显示Write_Command_LCM(0x01);//清屏display(0,0,Hi,wellcometo);//显示问候语display(1,0,wbf&zdxGroup);delay_nms(300);Write_Command_LCM(0x01);//清屏RightSpeed=0;//速度初始置零LeftSpeed=0;EA=1;//开总中断TR2=ET2=TR0=TR1=1;//定时,计数开始while(1)//小车运动控制{Forward();Left_90();Forward();Left_90();Right_180();Forward();}}//*---------------子函数-------------*//voidinit_devices(void)//初始化子程序{t0_init();t1_init();t2_init();LCM_init();}voidt0_init(void)//T0初始化{TMOD=0x05;//方式一计数ET0=1;TH0