基于AT89S51单片机的智能超声波避障(4)

2019-04-09 11:14

《单片机应用系统》项目设计报告

第四章 软件设计

系统软件设计说明

在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。

在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制生产。

为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。

模块程序设计法的主要优点是:

1、 单个模块比起一个完整的程序易编写及调试;

2、 模块可以共存,一个模块可以被多个任务在不同条件下调用; 3、 模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。

本系统软件采用模块化结构,由主程序﹑定时子程序、避障子程序﹑中断子程序﹑显示子程序﹑调速子程序﹑算法子程序构成。

第五章.调试

第一步:检测数码管好坏。写一个简单的程序,观察数码管是否点亮。再将 P0口送0xc0,P2口送0x00,观察数码管是否显示正确的数值。为了达到预期效果,多换几个数试试,观察是否显示正确的数值。(调试时候发现有些数 值不正确,检查过程发现段码没有发现短路,板子氧化严重的问题。)

第二步:检测超声波模块。烧好程序,将超声波正对着墙壁,判断测的距离 是否正确。(用USB口供电,发现显示数据比较正确,但是直接用电源,数 值就不准确,半米之内教准,但是半米之外显示不出来。原因:电源问 题,达不到预期电压值。)

第三步:将小车组装好,写进程序,用电脑USB口供电,且用手遮挡小 车控制好距离,观察是否在大于40cm时两个电机一起转动,在小于30cm时候 只有一个电机转动。

第四步:在第三步的基础上用电池供电。观察是否按要求行驶,即:大于 40cm直行,小于30cm时候减速并且转弯。(由于电池达不到预期要求,小车 在行驶时,只能测得半米左右的数据,且小车能做出相应的转弯。)

- 12 -

《单片机应用系统》项目设计报告

第六章结论

历时三个月的设计过程中,我首先边查资料,边在实验室焊接小车的线路板。在焊接过程中,我感觉到即使是一个简单的电路,要想很轻松的焊好,也不是很容易的事情。有时是“虚焊”的原因,有时可能是阻值选错。在焊接显示电路时,我就错将680欧的电阻焊成了6.8千欧。这使我深深感受到理论与实际间的差距。在调试过程中,发现插上编程器后不能烧制程序,通过检查电路发现,AT89S52芯片的使能端没有接VCC。改好之后重新烧制,发现还是不可以,通过再次检查,发现是共阴管的驱动芯片74LS245的引脚出现焊接错误。通过这些调试,提高了我检查电路的能力,以及巩固了电路图的知识。通过这样的设计,提高了我的动手能力。每天在实验室除了焊接线路板,还可以上机编程,使我软件调试知识也提高了。本设计采用的是89S52单片机,这主要是因为该单片机的稳定性比较好。还可以采用其它系列的单片机。比如采用陵阳单片机,就可以简化编程,但其稳定性不是很好。

第七章、展望

1、在本课题的基础上,我们可以在小车的底座下面装一个吸尘装置,这样就可以在小车行驶的过程中吸除一些预先放好的小纸屑。

2、设计出两辆小车,一辆小车放在另一辆的前面。当前面一辆小车起动时候,后面一辆小车也起动,前面一辆小车转弯的时候后面一辆也跟着转弯,前面一辆小车停止时,后面一辆也跟着停止。

第八章、程序

#include #include

sbit TX=P3^0; //触发信号引脚 sbit K1=P3^4; sbit K2=P3^5;

sbit PWM1=P3^6; //pwm信号输出 sbit PWM2=P3^7; static char click=0;

- 13 -

//器件配置文件

《单片机应用系统》项目设计报告

unsigned char ZK1,ZK2; unsigned int time=0; unsigned int timer=0; unsigned char posit=0; unsigned long S=0; unsigned

char

const

discode[]

={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char const positon[3]={ 0x7f,0xbf,0xdf}; unsigned char disbuff[4] ={ 0,0,0,0,};

void delay(void) //误差 0us {

unsigned char a,b,c; for(c=23;c>0;c--) for(b=216;b>0;b--) for(a=184;a>0;a--); }

void Display(void) { }

void Conut(void) {

time=TH0*256+TL0; TH0=0; TL0=0;

S=(time*1.7)/100;

{P0=discode[disbuff[posit]];} P2=positon[posit];

if(++posit>=3)

posit=0;

- 14 -

《单片机应用系统》项目设计报告

disbuff[0]=S00/100; disbuff[1]=S000/10; disbuff[2]=S00 ;

}

void Timer2interrupt() { RCAP2H=0x0fe;

RCAP2L=0x33;

ET2=1; // 断 EA=1; // TR2=1; // }

void zd0() interrupt 1 { TH0=0;

TL0=0;

}

void zd3() interrupt 3 模块 { TH1=0x0f8; TL1=0x30; Display(); timer++; if(timer>=400) { timer=0;

TX=1;

//800MS

//500us

允许T2定时器中

打开总中断 启动T2定时器 中断用来扫描数码管和计800MS启动

启动一次模块

- 15 -

//T1

《单片机应用系统》项目设计报告

} }

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0;

void Timer2(void) interrupt 5 {

TF2=0; // T2定时器发生溢出中断时,需要用户自己清除溢出标记 RCAP2L=0x33; /*恢复定时器初始值*/ ++click;

if (click>=100) click=0; if (click<=ZK1)

PWM1=1;

RCAP2H=0x0fe;

- 16 -


基于AT89S51单片机的智能超声波避障(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:教育最新K12中考生物第一轮复习专项七生物的多样性训练

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: