单片机课程设计哈工大测速小车结题报告资料.docx

上传人:b****8 文档编号:9364592 上传时间:2023-02-04 格式:DOCX 页数:17 大小:27.55KB
下载 相关 举报
单片机课程设计哈工大测速小车结题报告资料.docx_第1页
第1页 / 共17页
单片机课程设计哈工大测速小车结题报告资料.docx_第2页
第2页 / 共17页
单片机课程设计哈工大测速小车结题报告资料.docx_第3页
第3页 / 共17页
单片机课程设计哈工大测速小车结题报告资料.docx_第4页
第4页 / 共17页
单片机课程设计哈工大测速小车结题报告资料.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机课程设计哈工大测速小车结题报告资料.docx

《单片机课程设计哈工大测速小车结题报告资料.docx》由会员分享,可在线阅读,更多相关《单片机课程设计哈工大测速小车结题报告资料.docx(17页珍藏版)》请在冰豆网上搜索。

单片机课程设计哈工大测速小车结题报告资料.docx

单片机课程设计哈工大测速小车结题报告资料

HarbinInstituteofTechndogy

课程设计说明书(论文)

设计题目:

测速小车

系:

电气学院测控系

级:

100102班

计者:

号:

扌旨导教师:

设计时间:

2013.9.11—2013.9.13

哈尔滨工业大学

课程设计考核表

总成绩:

指导教师签字:

题目

学生姓名:

班级:

学号:

 

实验部分考核

考核内容

分值

得分

基本设计任务的完成情况

40

附加设计任务的完成情况

10

对教师提问的回答情况

10

 

总结报告评分

评分内容

分值

得分

内容完整、字数达标

20

层次清晰、重点突出、分析透彻

10

书写规范、文字流畅

5

有独特见解、有一定的创新

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#include#include#include#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);

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)

{

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,"cm/s");

 

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;

TR2=ET2=TR0=TR1=1;while

(1)

{

〃器件初始化

//关显示

//清屏

〃显示问候语

〃清屏

//速度初始置零

〃开总中断

//定时,计数开始

〃小车运动控制

Forward。

Left_90();

Forward();

Left_90();

Right_180();

Forward();

}

}

//*子函数*//

{

t0_init();

t1」nit();

t2」nit();

LCM」nit();}

voidt0_init(void)

{

TMOD=0x05;

ET0=1;

TH0=TL0=0;

}

voidt1_init(void)

{

TMOD|=0x50;

ET1=1;

TH1=TL1=0;

}

〃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);//光标增量方式+不移位

delay_nus(1000);

}

voidinit_4bit(void)

{

unsignedcharrd_four;

rd_four=0x28;

rw=0;

rs=0;

P0=rd_four;

delay_nus(1000);

en=1;

delay_nus(2000);

en=0;

}

//*1602数据指令写入函数*//

//LCM写命令子函数

voidWrite_Command_LCM(unsignedcharcom){

unsignedcharcom_H=0,com_L=0;

rw=0;

rs=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;delay_nus(1000);en=1;

delay_nus(2000);en=0;

voidWrite_Data_LCM(unsignedchardat)〃LCM写数据子函数

{

unsignedchardat_H=O,dat_L=O;

rw=0;

rs=1;

dat_H=dat&0xfO;

dat_L=(dat<<4)&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;

}

voidSet_xy_LCM(unsignedcharx,unsignedchary)//光标位置设置

{

if(x==0)

{

Write_Command_LCM(0x80+y);//设置起始地址为0x0y,即确定显示位

}

else

{

Write_Command_LCM(0xc0+y);//设置起始地址为0x0y,即确定显示位

}

}

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

{

LCM_Data=*s;

Write_Data_LCM(LCM_Data);s++;

}

}

else

{

for(j=0;j<4;j++)

{

LCM_Data=*s;

Write_Data_LCM(LCM_Data);s++;

}

}

}voiddisplay(ucharx,uchary,uchar*s)

{

ucharj,length;

length=strlen(s);

Set_xy_LCM(x,y);

for(j=0;j

{

Write_Data_LCM(*s);

s++;

}

}

voidData_Conversion(floatspeed)〃数据转换,将float转换为uchar形式

{

sprintf(str_temp,"%f',speed);

}

//*小车运动子函数*//

voidForward(void)

{〃小车前进子函数

ucharj;

for(j=0;j<30;j++)

{

right=1;

delay_nus(1300);

right=O;

delay_nus(20000);

left=1;

delay_nus(1700);

left=0;

delay_nus(20000);

}

}

voidLeft_90(void)//左转90度

{

uintk;

for(k=0;k<20;k++)

{

right=1;

delay_nus(1300);

right=0;

delay_nus(20000);

left=1;

delay_nus(1300);

left=0;

delay_nus(20000);

}

}

voidRight_90(void)//右转90度

{

uintk;

for(k=0;k<20;k++)

{

right=1;

delay_nus(1700);

right=0;

delay_nus(20000);

left=1;

delay_nus(1700);

left=0;delay_nus(20000);

}

}

voidRight_180(void)

{〃右转180度

uintk;

for(k=0;k<40;k++)

{

right=1;delay_nus(1700);

right=O;

delay_nus(20000);

left=1;

delay_nus(1700);

left=0;delay_nus(20000);

}

}

//*延时*//

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;

for(i=0;i

delay_1ms();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1