单片机课程设计哈工大测速小车结题报告资料Word格式文档下载.docx
- 文档编号:22500654
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:27.55KB
单片机课程设计哈工大测速小车结题报告资料Word格式文档下载.docx
《单片机课程设计哈工大测速小车结题报告资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计哈工大测速小车结题报告资料Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
附加设计任务的完成情况
10
对教师提问的回答情况
总结报告评分
评分内容
内容完整、字数达标
20
层次清晰、重点突出、分析透彻
书写规范、文字流畅
5
有独特见解、有一定的创新
结题报告
一.课题完成情况
1.总体完成情况说明
在为期两周的课程设计过程中,我们完成了测速小车的设计与调试,最终完成了基本任务要求。
在第一周里,我们选定了测速小车的课题,并完成了开题报告,在这一阶段内,我们熟悉并了解了宝贝车机器人的控制原理,单片机主控模块的接线方式,数字编码器的工作原理和硬件连接电路。
我们还编制了让小车前进,加速,减速,左右转弯的子程序。
在写代码过程中,熟悉了相关软件的使用方法。
在第二周里,我们查阅了资料,详细了解并掌握了1602液晶显示模块的工作及控制原理,并编制了四位初始化子函数和显示初始化子函数。
在验证显示环节的过程中,还用protues进行了仿真。
接下来,我们完成
了计数器,定时器的设置,并且对测得的脉冲数进行转换,使其变成速度,并显示在1602上。
最后我们设置了小车的运动轨迹,使其可以测量不同的速度,并完成了结题报告。
总的来说,我们完成了测量速度的完整显示,开题报告和结题报告的书写。
2.程序设计
//*延时*//
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王斌峰
#include<
reg52.h>
#include<
stdio.h>
#include<
string.h>
math.h>
#includevintrins.h>
#defineucharunsignedchar//宏定义
〃左右电机引脚定义
//1602控制端定义
〃全局变量左右轮速度
//全局变量转化后速度显示数组
//全局变量中断次数计数变量
#defineuintunsignedintsbitright=P1A0;
sbitleft=P1A1;
sbitrw=P2A1;
sbitrs=P2A2;
sbiten=卩2人0;
floatRightSpeed,LeftSpeed;
ucharstr_temp[10];
uchartime=0;
//*子函数声明*//
voidinit_devices(void);
//初始化函数
voidt0_init(void);
voidt1_init(void);
voidt2_init(void);
voidLCM」nit(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);
//*1602数据指令写入函数*//
voidWrite_Data_LCM(uchardat);
voidWrite_Command_LCM(ucharcom);
//*定时器2定时中断子程序*//voidTimer2(void)interrupt5
〃中断标志清零
{
TF2=0;
time++;
if(time==20)
time=0;
TR0=TR1=0;
TR2=ET2=0;
Measure_Speed();
〃中断20次,计时一秒
〃中断指针清零
〃计时结束
〃测速,转换,并显示
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,"
TH0=TL0=0;
TH1=TL1=0;
}
TR2=ET2=TR0=TR1=1;
//*主函数*//
voidmain(void)
//计数器清零
//计数开始,开定时器并允许中断
init_devices();
delay_nus(800);
Write_Command_LCM(OxOc);
Write_Command_LCM(OxO1);
display(0,0,"
Hi,wellcometo"
display(1,0,"
wbf&
zdxGroup"
delay_nms(300);
Write_Command_LCM(0x01);
RightSpeed=O;
LeftSpeed=O;
EA=1;
while
(1)
〃器件初始化
//关显示
//清屏
〃显示问候语
〃清屏
//速度初始置零
〃开总中断
//定时,计数开始
〃小车运动控制
Forward。
;
Left_90();
Forward();
Right_180();
//*子函数*//
t0_init();
t1」nit();
t2」nit();
LCM」nit();
}
voidt0_init(void)
TMOD=0x05;
ET0=1;
voidt1_init(void)
TMOD|=0x50;
ET1=1;
〃T0初始化
〃方式一计数
//设置计数起点
〃T1初始化
voidt2_init(void)
〃T2初始化
RCAP2H=19456/256;
//定时一秒,设置计数起点
RCAP2L=19456%256;
voidLCM」nit(void)//LCM初始化
rw=0;
en=0;
init_4bit();
Write_Command_LCM(0x28);
//8位数据+双行显示+5*10点阵
delay_nus(1000);
Write_Command_LCM(0x06);
//光标增量方式+不移位
voidinit_4bit(void)
unsignedcharrd_four;
rd_four=0x28;
rs=0;
P0=rd_four;
en=1;
delay_nus(2000);
//LCM写命令子函数
voidWrite_Command_LCM(unsignedcharcom){
unsignedcharcom_H=0,com_L=0;
com_H=com&
0xf0;
com_L=(com<
<
4)&
0xf0;
P0=com_H;
delay_nus(1000);
en=1;
delay_nus(2000);
en=0;
P0=com_L;
voidWrite_Data_LCM(unsignedchardat)〃LCM写数据子函数
unsignedchardat_H=O,dat_L=O;
rs=1;
dat_H=dat&
0xfO;
dat_L=(dat<
P0=dat_H;
P0=dat_L;
voidSet_xy_LCM(unsignedcharx,unsignedchary)//光标位置设置
if(x==0)
Write_Command_LCM(0x80+y);
//设置起始地址为0x0y,即确定显示位
else
Write_Command_LCM(0xc0+y);
voidMeasure_Speed(void)〃测速子程序
unsignedcharNum_T0,Num_T1;
Num_T0=TH0*256+TL0;
Num_T仁TH1*256+TL1;
RightSpeed=2.54*Num_T0/2;
LeftSpeed=2.54*Num_T1/2;
//*------液晶模块指定位置显示子程序*//
voidDisplay_List_Char(ucharx,uchary,uchar*s){
ucharlength,j;
ucharLCM_Data;
length=strlen(s);
Set_xy_LCM(x,y);
if(length<
=6)
for(j=0;
j<
length;
j++)
LCM_Data=*s;
Write_Data_LCM(LCM_Data);
s++;
4;
}voiddisplay(ucharx,uchary,uchar*s)
ucharj,length;
for(j=0;
Write_Data_LCM(*s);
s++;
voidData_Conversion(floatspeed)〃数据转换,将float转换为uchar形式
sprintf(str_temp,"
%f'
speed);
//*小车运动子函数*//
voidForward(void)
{〃小车前进子函数
ucharj;
30;
right=1;
delay_nus(1300);
right=O;
delay_nus(20000);
left=1;
delay_nus(1700);
left=0;
voidLeft_90(void)//左转90度
uintk;
for(k=0;
k<
20;
k++)
delay_nus(1300);
right=0;
voidRight_90(void)//右转90度
delay_nus(20000);
voidRight_180(void)
{〃右转180度
40;
delay_nus(1700);
voiddelay_nus(unsignedinti)〃Nus延时
i=i/10;
while(--i);
voiddelay_1ms(void)//1ms延时函数
unsignedinti;
for(i=0;
i<
1140;
i++);
voiddelay_nms(unsignedintn)〃Nms延时函数
unsignedinti=0;
n;
i++)
delay_1ms();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 哈工大 测速 小车 报告 资料