单片机课程设计-哈工大-测速小车结题报告资料_第1页
单片机课程设计-哈工大-测速小车结题报告资料_第2页
单片机课程设计-哈工大-测速小车结题报告资料_第3页
单片机课程设计-哈工大-测速小车结题报告资料_第4页
单片机课程设计-哈工大-测速小车结题报告资料_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

哈尔滨工业大学课程设计说明书(论文)Harbin Institute of Technology课程设计说明书(论文)设计题目:测速小车 院 系:电气学院测控系 班 级:班 设 计 者: 学 号: 指导教师:胡瑞强 设计时间:2013.9.112013.9.13哈尔滨工业大学课程设计考核表题目:学生姓名: 班级: 学号:实验部分考核考核内容分值得分基本设计任务的完成情况40附加设计任务的完成情况10对教师提问的回答情况10总结报告评分评分内容分值得分内容完整、字数达标20层次清晰、重点突出、分析透彻10书写规范、文字流畅5有独特见解、有一定的创新5总成绩: 指导教师签字:结题报告1 课题完成情况1. 总体完成情况说明在为期两周的课程设计过程中,我们完成了测速小车的设计与调试,最终完成了基本任务要求。在第一周里,我们选定了测速小车的课题,并完成了开题报告,在这一阶段内,我们熟悉并了解了宝贝车机器人的控制原理,单片机主控模块的接线方式,数字编码器的工作原理和硬件连接电路。我们还编制了让小车前进,加速,减速,左右转弯的子程序。在写代码过程中,熟悉了相关软件的使用方法。在第二周里,我们查阅了资料,详细了解并掌握了1602液晶显示模块的工作及控制原理,并编制了四位初始化子函数和显示初始化子函数。在验证显示环节的过程中,还用protues进行了仿真。接下来,我们完成了计数器,定时器的设置,并且对测得的脉冲数进行转换,使其变成速度,并显示在1602上。最后我们设置了小车的运动轨迹,使其可以测量不同的速度,并完成了结题报告。总的来说,我们完成了测量速度的完整显示,开题报告和结题报告的书写。2. 程序设计子程序名如下,具体函数见附录/*-子函数声明-*/void init_devices(void); /初始化函数void t0_init(void); void t1_init(void);void t2_init(void);void LCM_init(void);void init_4bit(void);/*-小车运动子函数申明-*/void Forward(void);void Left_90(void);void Right_90(void);void Right_180(void);/*-功能实现子函数申明-*/void Measure_Speed(void); /测速子函数void Data_Conversion(float speed); /速度数据类型转换函数void display(uchar x,uchar y,uchar *s); /问候语显示子函数void Display_List_Char(uchar x,uchar y,uchar *s); /字符显示子函数void Set_xy_LCM(uchar x,uchar y); /显示位置设置子函数void Data_Conversion(float speed); /速度转换子函数/*-1602数据指令写入函数-*/void Write_Data_LCM(uchar dat);void Write_Command_LCM(uchar com);/*-延时-*/void delay_nus(unsigned int i);void delay_1ms(void); void delay_nms(unsigned int n);2 问题及解决办法1. 在完成液晶屏初始化后,仿真也可以显示字符,但将程序烧入单片机后不能正常显示。原因:仿真是选择的是1602液晶显示模块的八位显示模式,而实际的液晶屏硬件连接为四位模式。之后,我们重新编制了相应的四位初始化程序,实现了显示功能。2. 根据指导书上硬件图连接后,发现无法显示速度。原因:硬件连接图上P1.1和P1.0只是一种示例,并不是实际对应的P1.1和P1,0口。实际编码器的脉冲输入口应为P3.4和P3.5,这两个外部计数的输入端口。改变接线后可以正常显示。3. 当全速前进时,左右两轮显示速度不一致。原因:左右两轮控制脉冲的接入时间不一致,并且传感器在检测过程中可能存在干扰。这是系统误差,无法消除。4. 对于float型的变量,1602无法正常显示。解决办法:使用一个库函数sprintf 将float转换成字符串型数据并进行显示。三心得体会课程设计是将课本知识运用到实践中的很好机会,在课题的研究过程中,我们遇到问题又会重新回到课本,对基础知识进一步理解和掌握,同时又把知识和实际问题结合起来,对知识的理解上升了一个层次。并且智能车的设计,更能激发我们学习的兴趣,每个人都有一颗年轻的心,在设计过程中,我们不仅掌握了知识,并且也找到了很多乐趣。并且我们小组内两人分工合作,促进我们养成团队协作精神。当然设计和调试过程并不是一帆风顺,我们遇到一个有一个或大或小的问题,我们通过讨论,请教老师,参考实例,查阅资料也解决了这些问题。任何探索都不会是一马平川,我们肯定会遭遇坎坷,而通过课程设计也培养了我们发现问题,解决问题的习惯。在做工程时遇到问题如何处理,我有了一次切身的体验。在工作时,不管大事还是小事,尤其是一些不起眼的细节,更要保持一丝不苟的作风。另外,在这两周的单片机课设中,我要十分感谢胡老师的辛苦指导,胡老师从小车原理的介绍到程序的调试,都给予了非常大的帮助。也正是因为胡老师的辛勤监督,才使得我们按要求、认真的完成了两周的课设,顺利完成了测速小车的设计。虽然课设就要结束了,但胡老师教导的严谨的工作作风,“规格严格,功夫到家”的校训,将永远影响着我以后的学习、研究、工作,让我在做每一件事情时,都认真严格的要求自己,追求卓越。4 参考文献1胡瑞强,李成伟,周庆东等单片机原理及应用课程设计指导书 哈尔滨:测控实验中心2张毅刚,彭喜元等 单片机原理及应用 北京:高等教育出版社3张毅刚 基于Proteus的单片机课程的基础实验与课程设计 北京;人民邮电出版社4彭伟 单片机C语言程序设计实训100例 北京:电子工业出版社5苏小红,陈慧鹏等 C语言大学实用教程 北京:电子工业出版社6李东,黄庆成等 计算机组成技术教程 北京:电子工业出版社附录 源程序代码/*/测速小车程序设计 班/ 王斌峰 /*#include#include #include #include #include #define uchar unsigned char /宏定义#define uint unsigned intsbit right=P10; /左右电机引脚定义sbit left=P11;sbit rw=P21; /1602控制端定义sbit rs=P22;sbit en=P20;float RightSpeed,LeftSpeed; /全局变量 左右轮速度uchar str_temp10; /全局变量 转化后速度显示数组uchar time=0; /全局变量 中断次数计数变量/*-子函数声明-*/void init_devices(void); /初始化函数void t0_init(void); void t1_init(void);void t2_init(void);void LCM_init(void);void init_4bit(void);/*-小车运动子函数申明-*/void Forward(void);void Left_90(void);void Right_90(void);void Right_180(void);/*-功能实现子函数申明-*/void Measure_Speed(void); /测速子函数void Data_Conversion(float speed); /速度数据类型转换函数void display(uchar x,uchar y,uchar *s); /问候语显示子函数void Display_List_Char(uchar x,uchar y,uchar *s); /字符显示子函数void Set_xy_LCM(uchar x,uchar y); /显示位置设置子函数void Data_Conversion(float speed); /速度转换子函数/*-1602数据指令写入函数-*/void Write_Data_LCM(uchar dat);void Write_Command_LCM(uchar com);/*-延时-*/void delay_nus(unsigned int i);void delay_1ms(void); void delay_nms(unsigned int n);/*-定时器2定时中断子程序-*/void Timer2(void) interrupt 5TF2=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; /计数开始,开定时器并允许中断/*-主函数-*/void main(void)init_devices();/器件初始化delay_nus(800);Write_Command_LCM(0x0c); /关显示Write_Command_LCM(0x01); /清屏 display(0,0,Hi,wellcome to);/显示问候语display(1,0,wbf&zdx Group);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(); /*-子函数-*/void init_devices(void)/初始化子程序 t0_init(); t1_init(); t2_init(); LCM_init();void t0_init(void)/T0初始化 TMOD = 0x05;/方式一计数 ET0=1; TH0=TL0=0; /设置计数起点void t1_init(void)/T1初始化 TMOD |= 0x50;/方式一计数 ET1=1; TH1=TL1=0; /设置计数起点void t2_init(void)/T2初始化 RCAP2H=19456/256; /定时一秒,设置计数起点 RCAP2L=19456%256;void LCM_init(void)/LCM初始化 rw=0; en=0; init_4bit(); Write_Command_LCM(0x28); /8位数据+双行显示+5*10点阵 delay_nus(1000); Write_Command_LCM(0x06); /光标增量方式+不移位 delay_nus(1000);void init_4bit(void) unsigned char rd_four; rd_four = 0x28; rw=0; rs=0; P0 = rd_four; delay_nus(1000); en=1; delay_nus(2000); en=0;/*-1602数据指令写入函数-*/void Write_Command_LCM(unsigned char com) /LCM写命令子函数 unsigned char com_H=0,com_L=0; rw=0; rs=0; com_H=com&0xf0; com_L=(com4)&0xf0; P0 = com_H; delay_nus(1000); en=1; delay_nus(2000); en=0; P0 = com_L; delay_nus(1000); en=1; delay_nus(2000); en=0;void Write_Data_LCM(unsigned char dat) /LCM写数据子函数 unsigned char dat_H=0,dat_L=0; rw=0; rs=1; dat_H=dat&0xf0; dat_L=(dat4)&0xf0; P0 = dat_H; delay_nus(1000); en=1; delay_nus(2000); en=0; P0 = dat_L; delay_nus(1000); en=1; delay_nus(2000); en=0;void Set_xy_LCM(unsigned char x,unsigned char y) /光标位置设置 if(x=0) Write_Command_LCM(0x80+y); /设置起始地址为0x0y,即确定显示位 else Write_Command_LCM(0xc0+y); /设置起始地址为0x0y,即确定显示位 void Measure_Speed(void) /测速子程序 unsigned char Num_T0,Num_T1; Num_T0=TH0*256+TL0; Num_T1=TH1*256+TL1; RightSpeed=2.54*Num_T0/2; LeftSpeed=2.54*Num_T1/2;/*-液晶模块指定位置显示子程序-*/void Display_List_Char(uchar x,uchar y,uchar *s) uchar length,j; uchar LCM_Data; length=strlen(s); Set_xy_LCM(x,y); if(length=6) for(j=0;jlength;j+) LCM_Data=*s; Write_Data_LCM(LCM_Data); s+; else for(j=0;j4;j+) LCM_Data=*s; Write_Data_LCM(LCM_Data); s+; void display(uchar x,uchar y,uchar *s)uchar j,length;length=strlen(s);Set_xy_LCM(x,y);for (j=0;jlength;j+)Write_Data_LCM(*s);s+;void Data_Conversion(float speed)/数据转换,将float转换为uchar形式 sprintf(str_temp,%f,speed);/*-小车运动子函数-*/void Forward(void) /小车前进子函数 uchar j;for(j=0;j30;j+) right=1; delay_nus(1300); right=0; delay

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论