智能制造智能寻迹机器人实验指导书 精品.docx

上传人:b****7 文档编号:10191064 上传时间:2023-02-09 格式:DOCX 页数:53 大小:2.48MB
下载 相关 举报
智能制造智能寻迹机器人实验指导书 精品.docx_第1页
第1页 / 共53页
智能制造智能寻迹机器人实验指导书 精品.docx_第2页
第2页 / 共53页
智能制造智能寻迹机器人实验指导书 精品.docx_第3页
第3页 / 共53页
智能制造智能寻迹机器人实验指导书 精品.docx_第4页
第4页 / 共53页
智能制造智能寻迹机器人实验指导书 精品.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

智能制造智能寻迹机器人实验指导书 精品.docx

《智能制造智能寻迹机器人实验指导书 精品.docx》由会员分享,可在线阅读,更多相关《智能制造智能寻迹机器人实验指导书 精品.docx(53页珍藏版)》请在冰豆网上搜索。

智能制造智能寻迹机器人实验指导书 精品.docx

智能制造智能寻迹机器人实验指导书精品

简介

单片机益智系列——智能寻迹机器人是由益芯科技有限公司为科教方便而研发设计。

根据现代学校对嵌入式系统开发的需求。

依据提高学生实际动手操作能力和思考能力,以加强学生对现实生活中嵌入式系统的应用为参照。

智能寻迹机器人全新的设计模式,良好的电路设计,一体化的机电组合,智趣的系统开发,更是成为加强学生学习兴趣的总动源。

智能寻迹机器人采用现在较为流行的8位单片机作为系统大脑。

以8051系列家族中的AT89S51/AT89S52为主芯片。

40脚的DIP封装使它拥有32个完全IO(GPIO—通用输入输出)端口,通过对这些端口加以信号输入电路,控制电路,执行电路共同完成寻迹机器人。

P0.0,P0.1,P0.2,P0.3分别通过LG9110电机驱动来驱动电机1和电机2。

由电机的正转与反转来完成机器人的前进,后退,左转,右转,遇障碍物绕行,避悬崖等基本动作。

在机器人前进时如果前方有障碍物,由红外发射管发射的红外信号被反射给红外接收管,红外接管将此信号经过P3.7传送入AT89S52中,主芯片通过内部的代码进行机器人的绕障碍物操作,同时主芯片将P3.7的信号状态通过P2.5的LED指示灯显示出来。

机器人行走时会通过P3.5与P3.6的红外接收探头来进行检测。

当走到悬崖处时,P3.5或P3.6将收到一个电平信号,此电平信号将通过相应端口传送入主芯片中,主芯片通过内部代码完成机器人的避悬崖操作。

同时P3.5与P3.6的信号状态将通过P2.6/P2.7显示出来。

在机器人的左转,右转,后退的过程,可以通过观看以P2.0/P0.7为指示灯的运行状态。

P0.4为机器人的声控检测端口,在运行为前进状态时,可以能过声控(如拍手声)来控制它的运行与停止。

P0.6为机器人的声音输出端。

在机器人遇到障碍物时。

进行绕障碍物与避悬崖时可以通过此端口控制蜂鸣器发出报警声。

当为白天或黑夜时可以通过P0.5端口中的光敏电阻来进行判断,以方便完成机器人夜间自动照明等功能。

两个按键以查询/中断两种不同的方式来展现按键操作。

你可以按下S1键来进行机器的停止。

再按下S2键来进行机器人的运行。

这个按键的信息分别被P3.2,P3.4接收到。

IR1为红外遥控接收器,这就为机器人进行远程遥控创造了可能。

这个红外遥控接收头接收到红外信号时将信号经过P3.3送入到主芯片,主芯片对其进行解密后以不同的方式对机器人进行控制。

同时将用户的按键信息通过P2端口上LED数码管显示出来。

P3.0、P3.l中端口的加入,让你完全可以用电脑对其进行控制。

你可以通过对串口发送数据,数据会被显示到LED数码管中,并让机器人执行相应的功能。

电脑的串口软件要求波特率为9600。

8位数据位,这时你就可以快乐的用电脑来对它进行你的完全控制了。

EXKJ-ZN02功能的组合多样,使得学生可以充分发挥自主能力,制作出不同的机器人。

它为学校进行机器人竞赛和项目设计建立了实物平台,是学校教师授课变得更轻松有趣。

同时也能改变学生学习模式和激发学习兴趣。

更是作为验证学生学习效果的有力工具。

良好的电路板设计,让学生制作变得方便容易,其大大提高了学生的制作成功率。

提高了学生对电子电路的兴趣,更是教学过程中不可或缺的教具。

实验一程序状态指示灯演示

一、实验简介:

本程序重点演示了一个最简程序的基本结构,它从顺序、判断、循环的形式表现程序的基本结构,此程序通过闪灯不断的闪动,及闪灯闪动的快慢来表示程序不不同工作状态。

它也是常数字设备中进行状态表示的方法之一(例:

网卡)。

二、实验原理图:

三、实现代码:

//=====================================================================//

//实验名称:

程序状态指示灯演示程序//

//开发日期:

20XX/01/19//

//修改日期:

//

//程序作者:

guojun邮箱:

GuoGuoExkj@126.//

//开发商:

益芯科技有限公司——技术部//

//程序备注:

此程序仅为表现本机功能而演示用,当用作实际工程时请慎用.//

//特别声明:

此程序可作研究之用,但引用,转载,使用请注明出处.//

//=====================================================================//

#include//包含头文件

#defineLEDP1//宏定义显示端口号

voidDelay(unsignedintDelayTime)//定义可变延时函数

{

while(DelayTime--);//延时函数进入倒计时

}

voidmain()//程序主函数码

{

unsignedintCountData=0;//定义一个整形变量,用于闪动次数++

while

(1)//主程序循环体开始

{

if(CountData<30)//判断闪动次数是否位于0-30之间

{

Delay(60000);//用60000作为基数开始延时函数

}

elseif(CountData<60)//判断闪动次数是否位于30-60之间

{

Delay(30000);//用30000作为基数开始延时函数

}

elseif(CountData<90)//判断闪动次数是否位于60-90之间

{

Delay(10000);//用10000作为基数开始延时函数

}

elseif(CountData<120)//判断闪动次数是否位于90-120之间

{

CountData=0;//仅进行一次操作即可退出.

}

CountData=CountData+1;//闪动次数基数++

LED=~LED;//将显示端口进行取反操作

}

}

四、运行效果:

程序运行效果为:

开机后程序以慢速闪动,一段时间后速度开始加快,再等待时间,闪灯的速度达到最快,之后一段时间后,闪动将回到开始状态。

实验二流水灯演示

一、实验简介:

本程序全面的表现了子程序的用法,它从对几个子程序的操作,显示不同的流灯技术,流水灯的不同需要不同的表现的形式,而这里主要介绍了移位操作和内部数据存储及读入操作。

延时函数采用可重入标志,可进行函数的递归调用。

二、实验原理图:

三、实现代码:

//=====================================================================//

//开发日期:

20XX/01/20//

//修改日期:

//

//程序作者:

guojun邮箱:

GuoGuoExkj@126.//

//开发商:

益芯科技有限公司——技术部//

//程序备注:

此程序仅为表现本机功能而演示用,当用作实际工程时请慎用.//

//特别声明:

此程序可作研究之用,但引用,转载,使用请注明出处.//

//=====================================================================//

#include//包含头文件

#defineLedP1//定义显示端口号

unsignedintcodeBToM[]={0x7E,0x3C,0x18,0x00};//定义由两边到中间显示数据

unsignedintcodeMToB[]={0xE7,0xC3,0x81,0x00};//定义由中间到两边显示数据

voidDelay()reentrant//定义可重入的延时函数

{unsignedintDelayTime=10000;//定义延时时间基数

while(DelayTime--);//程序开始延时开始

}

voidLeftToRight()//定义从左边到右边显示函数

{unsignedcharTempCount=0;//定义显示次数变量

Led=0xFE;//定义初步显示数据

for(TempCount=0;TempCount<8;TempCount++)//通过循环进行数据显示

{

Delay();//延时,用在每次移动数据开始处

Led=Led<<1;//由右边向左边移动数据

}

return;//空返回语句,表明此子程序的结束.

}

voidRightToLeft()//定义从右边到左边显示函数

{unsignedcharTempCount=0;//定义显示次数变量

Led=0x7F;//定义初步显示数据

for(TempCount=0;TempCount<8;TempCount++)//通过循环进行数据显示

{

Delay();//延时,用在每次移动数据开始处

Led=Led>>1;//由左边向右移动数据

}

return;//空返语句,表明此子程序的结束.

}

voidBothToMid()//定义由两边到中间显示子程序

{unsignedcharTempCount=0;//定义临时次数变量

Led=0xFF;

for(TempCount=0;TempCount<5;TempCount++)//通过循环依次进行次数运行

{

Delay();//延时,在每次运行前.

Led=BToM[TempCount];//读入当次显示数据.

}

return;//空返回,表明此子程序的结束.

}

voidMidToBoth()//定义由中间到两边子程序

{unsignedcharTempCount=0;//定义临时次数变量

Led=0xFF;

for(TempCount=0;TempCount<5;TempCount++)//通过循环进行数据显示

{

Delay();//延时,在每次数据显示前.

Led=MToB[TempCount];//读入当次显示数据.

}

return;//空返回,表明此次子程序的结束.

}

voidmain()//主程序入口处.

{

while

(1)//无穷循环开始.

{LeftToRight();//从左到右进行显示

RightToLeft();//从右到左进行显示

BothToMid();//由两边到中间进行显示

MidToBoth();//由中间到两边进行显示

}

}

四、运行效果:

程序运行效果为:

开机后,指示灯向从左向右依次点亮,从右向左依次点亮,由两边向中间依次点亮,由中间向两边依次点亮。

 

实验三数码管演示

一、实验简介:

本程序通过对端口的置数操作,展示了数码管的应用技术,数码管是将发光二极管通过一定的形式封装在一个数字的外壳中,可以通过不同的点亮方式来显不同的数字符号。

二、实验原理图:

三、实现代码:

//=============================================================//

//开发日期:

20XX/01/26//

//修改日期:

//

//程序作者:

guojun邮箱:

GuoGuoExkj@126.//

//开发商:

益芯科技有限公司——技术部//

//程序备注:

此程序仅为表现本机功能而演示用,当用作实际工程时请慎用.//

//特别声明:

此程序可作研究之用,但引用,转载,使用请注明出处.//

//==============================================================//

#include//包含头文件

typedefunsignedintuint;//重命名整数类型关键字

typedefunsignedcharuchar;//重命名字符类型关键字

ucharcodeLedShowData[]={0x9F,0x25,0x0D,0x99,0x49,//定义固定存储显示字符

0x41,0x1F,0x01,0x19,0x03};//1,2,3,4,5,6,7,8,9,0

voidDelay()//定义延时函数

{

uintTempTime=20000;//定义延时时间变量

while(TempTime--);//通过循环进行延时

}

voidmain()//主程序开始main()

{ucharCountData=0;//定义计数变量

while

(1)//主程序无限循环开始

{

P2=LedShowData[CountData];//P2端口读入显示数据

CountData++;//计数变量++(加加)

if(CountData>=10)//判断是否超出计数范围

{

CountData=0;//重新置零

}

Delay();//延时函数被调用

}

}

四、运行效果:

程序运行效果为:

程序下载后,数码管将从1-9依次显示,最后将显示数字0.

 

实验四数码管及跑马灯演示

一、实验简介:

本程序主要是将数码管及跑马灯放在一起显示,它主要说明了,如何将在单系中运行多个看似并行运行的子系统.本程序在此将跑马灯子程序放入到一个头文件中,对于一个大的工程这样将有益于程序文件的管理。

二、实验原理图:

三、实现代码:

//===============================================================//

//开发日期:

20XX/01/26//

//修改日期:

//

//程序作者:

guojun邮箱:

GuoGuoExkj@126.//

//开发商:

益芯科技有限公司——技术部//

//程序备注:

此程序仅为表现本机功能而演示用,当用作实际工程时请慎用。

//

//特别声明:

此程序可作研究之用,但引用、转载、使用请注明出处。

//

//===============================================================//

#include//包含端口定义头文件

unsignedcharcodeLedShowData[]={0x9F,0x25,0x0D,0x99,0x49,//定义数码管显示字符

0x41,0x1F,0x01,0x19,0x03};//1,2,3,4,5,6,7,8,9,0

#defineLedP1//定义显示端口

unsignedcharCountData=0;//定义数码管计数器

unsignedintcodeBToM[]={0x7E,0x3C,0x18,0x00};//定义由两边到中间显示数据

unsignedintcodeMToB[]={0xE7,0xC3,0x81,0x00};//定义由中间到两边显示数据

voidDelay()reentrant//定义可重入延时函数

{unsignedintDelayTime=10000;//定义延时时间变量

while(DelayTime--);//通过循环进行延时

P2=LedShowData[CountData];//置数码管显示数据到P2端口

CountData++;//数码管地址计数器++(加1)

if(CountData>=10)//判断计数器累计数值

{

CountData=0;//计数器清零

}

}

#include<跑马灯.h>//包含显示方式头文件

voidmain()//主程序入口

{

while

(1)//无穷循环开始.

{LeftToRight();//从左到右进行显示

RightToLeft();//从右到左进行显示

BothToMid();//由两边到中间进行显示

MidToBoth();//由中间到两边进行显示

}

}

////////////////////////////////////////////////跑马灯.h/////////////////////////////////////////////////////

voidLeftToRight()//定义从左边到右边显示函数

{unsignedcharTempCount=0;//定义显示次数变量

Led=0xFE;//定义初步显示数据

for(TempCount=0;TempCount<8;TempCount++)//通过循环进行数据显示

{

Delay();//延时,用在每次移动数据开始处

Led=Led<<1;//由右边向左边移动数据

}

return;//空返回语句,表明此子程序的结束.

}

voidRightToLeft()//定义从右边到左边显示函数

{unsignedcharTempCount=0;//定义显示次数变量

Led=0x7F;//定义初步显示数据

for(TempCount=0;TempCount<8;TempCount++)//通过循环进行数据显示

{

Delay();//延时,用在每次移动数据开始处

Led=Led>>1;//由左边向右移动数据

}

return;//空返语句,表明此子程序的结束.

}

voidBothToMid()//定义由两边到中间显示子程序

{unsignedcharTempCount=0;//定义临时次数变量

Led=0xFF;

for(TempCount=0;TempCount<5;TempCount++)//通过循环依次进行次数运行

{

Delay();//延时,在每次运行前.

Led=BToM[TempCount];//读入当次显示数据.

}

return;//空返回,表明此子程序的结束.

}

voidMidToBoth()//定义由中间到两边子程序

{unsignedcharTempCount=0;//定义临时次数变量

Led=0xFF;

for(TempCount=0;TempCount<5;TempCount++)//通过循环进行数据显示

{

Delay();//延时,在每次数据显示前.

Led=MToB[TempCount];//读入当次显示数据.

}

return;//空返回,表明此次子程序的结束.

}

四、运行效果:

本程序运行效果:

本程序运行后,可以看到跑马灯按,从左到右,从右到左,从两边到中间,从中间到两边将依次运行。

并且在运行过程中,可以看到数码管依次从1-9-0的顺序显示数字符号。

 

实验五按键中断查询演示

一、实验简介:

本程序通过两个按键对数码管进行操作,分别向用户演示了查询与中断的操作方式,中断中应用了对按键进行查询的方法来判断按键的键值,查询按键方法中则采用了键盘延迟的方法来消除按键重复输入。

二、实验原理图:

三、实现代码:

//===============================================================//

//开发日期:

20XX/01/27编写按键中断与查询的最初代码//

//修改日期:

//

//程序作者:

guojun邮箱:

GuoGuoExkj@126.//

//开发商:

益芯科技有限公司——技术部//

//程序备注:

此程序仅为表现本机功能而演示用,当用作实际工程时请慎用.//

//特别声明:

此程序可作研究之用,但引用,转载,使用请注明出处.//

//================================================================//

#include//包含S51地址头文件

typedefunsignedcharuchar;//重定义无符号字符型

typedefunsignedintuint;//重定义无符号整型

sbitS1=P3^2;//定义S1变量

sbitS2=P3^4;//定义S2变量

ucharDataCount=0;//定义全局计数器

ucharcodeLedShowData[]={0x9F,0x25,0x0D,0x99,0x49,//定义固定存储显示字符

0x41,0x1F,0x01,0x19,0x03};//1,2,3,4,5,6,7,8,9,0

voidKeyDelay()//定义键盘防抖子程序

{uintKeyTime=20000;//定义防抖时间变量

while(KeyTime--);//防抖延时开始

return;

}

voidS1_Break()interrupt0//定义S1(INT0)外部中断0

{

while(0==S1);//判断S1按键键值

DataCount--;//计数器数值减1

if(DataCount>9)//判断计数器是否到最小值

{

DataCount=9;//显示数字0

}

return;

}

voidmain()//主程序开始

{

ET0=1;//设定外部中断触发方式(1->低电平触发)

EX0=1;//开启外部中断0

EA=1;//开记总中断

while

(1)//程序主循环

{

if(0==S2)//通过查询判断键值

{

KeyDelay();//键盘防抖动开延时子程序开始

DataCount++;//计数器加1

}

if(DataCount>9)//判断当前计数器

{

DataCount=0;//将计数器置0

}

P2=LedShowData[DataCount];//通过端口显示计数器数值

}

}

四、运行效果:

程序运行效果:

开机后数码管显示数字"1",当按S1不放时,数码管数字不变,,松开S1按键,数码减1;按S2键不放时,数码管数字会自动加1。

并且数字遵守从0-9循环操作。

实验六话筒声音识别演示

一、实验简介:

本程序主要通过话筒对声音信号进行识别,由于本电路有效的去除杂波,所以仅能对响度较大的声音进行识别(例:

拍手声)。

像正常的说话声对本电路虑除,不会产生信息的输入。

话筒

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

当前位置:首页 > 工程科技 > 材料科学

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

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