一、研究课题的目的和意义
1) 研究目的:
随着汽车工业的迅速发展,其与电子信息产业的融合速度也显著提高,汽车开始向电子化、多媒体化和智能化方向发展,使其不仅作为一种代步工具、同时能具有交通、娱乐、办公和通讯等多种功能。关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。可见其研究意义很大。本设计就是在这样的背景下提出的,为了适应机电一体化的发展在汽车智能化方向的发展要求,提出简易智能小车的构想,目的在于:通过独立设计并制作一辆具有简单智能化的简易小车,获得项目整体设计的能力,并掌握多通道多样化传感器综合控制的方法。设计的智能电动小车应该能够具有自动寻迹、小灯显示等功能。
此项设计以AT89S52单片机为控制核心,逐步实现小车的导盲行走功能。
2) 研究意义:
1、加深课堂上的学习
由于单片机教学例子有限,因此,单片机智能车能综合学生课堂上的知识来
实践,使学习者更好的了解单片机的发展。通过此次的单片机寻轨车制作,使学生从理论到实践,初步体会单片机项目的设计、制作、调试和成功完成项目的过程及困难,以此学会用理论联系实际。通过对实践中出现的不足与学习来补充教学上的盲点。
2、从理论转为实际运用
智能汽车是一种高新技术密集的新型汽车,是在网络环境下利用信息技术、 智
能控制技术、 自动控制、 模式识别、 传感器技术、 汽车电子、 电气、计算机和机械等多个学科的最新科技成果,使汽车具有自动识别行驶道路、 自动驾驶等先进功能.随着控制技术、 计算机技术和信息技术的发展,智能车在工业生产和日常生活中已经扮演了非常重要的角色.近年来, 智能车在野外、道路、 现代物流及柔性制造系统中都有广泛运用,已成为人工智能领域研究和发展的热点。
二、研究内容
1) 系统设计:
智能导盲小车采用后轮驱动,左右后轮各用一个直流减速电机驱动,通过调制后面两个轮子的转速从而达到控制转向的目的 在车体前部分别装有左中右三或者两个红外反射式传感
器,当小车左边的传感器检测到黑线时,说明小车车头向右边偏移,这时主控芯片控制左轮电机减速,车体向左边修正 同理当小车的右边传感器检测到黑线时,主控芯片控制右轮电机减速,车体向右边修正 当黑线在车体的中间,中间的传感器一直检测到黑线,这样小车就会沿着黑线一直行走。
2) 硬件设计:
2.1主控芯片的选择
本次设计的主控芯片选择为STC89C52 STC89C52是一种低功耗高性能CMOS 8位微控制器,具有8K的系统可编程Flash存储器,使用高密度非易失性存储器技术制造,与80C51产品指令和引脚完全兼容片上Flash允许程序存储器在系统可编程,亦适于常规编程器 在单芯片上,拥有灵巧的8位CPU和在线系统可编程 Flash,使得 STC89C52为众多嵌入式控制应用系统提供高灵活 超有效的解决方案
2.2车体的选择
在本次智能寻迹小车的选择过程中,我们选择了后面两轮驱动,前万向轮转向的小车,即后左右轮分别用两个转速和力矩基本完全相同的直流减速电机进行驱动,车头前部装一个万向轮 这样,当我们通过I/O口控制两个直流减速电机的转速和转向时就可以实现小车的左转 右转和直行
因此,我们将选择体积轻容易控制的小车做为车体。
3.3寻迹模块设计
寻迹模块我们可以用光敏电阻组成 光敏电阻的阻值可以跟随周围环境光线的变化而变化 当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱 因此当光敏电阻在白线和黑线上方时,阻值会发生明显的变化 将阻值的变化值经过比较器就可以输出高低电平 但是这种方式受环境影响大,工作不稳定,因此,我们将研究几种方案,选择性价比和各方面更好的红外传感器。
3.4小灯模块设计
由于单片机STC89C52管脚出来的电流较小,我们将选择一种电路来提高小灯的电压,使小灯能基本显示并且使小灯能表示智能车的动作,即是智能车上有两个后灯,分别安装在智能车后面左右,当左灯亮时表示小车左拐,右灯亮时表示右拐,两个灯全亮时表示前进。
3) 基本要求
1. 智能小车的移动速度控制(主要是直流电机的控制方法)
2. 超声波传感器的测距范围1cm8m ,精度1mm.
3. 红外传感器的测量范围:
感应角度?100 椎角,工作温度-15-+70度,延时时间0.5-200秒。 4 语音报警模块
5. 可扩展的其他功能,如GPS可导航,语音输入模块实现语音指挥功能,这些功能根据需要扩展.
三、本课题研究的步骤、方法及进度安排
1)本课题研究的方法
控制电路主要由一片单片机组成。STC89C52主要实现对路面黑线的检测,以纠正小车的行走方向;以及控制小车匀速行驶。主要运用单片机STC89C52的知识,模电的相关知识和了解红外线传感器的工作原理。
2)研究进度计划
第01~02周:阅读文献,翻译英文资料,完成开题报告;
第03~04周:确定系统总体功能,深入研究需要的传感器和语音报警模块; 第05~06周:硬件电路各模块的设计与搭建;
第07~08周:硬件电路各模块的调试;
第09~10周:软件程序的编写;
第11~12周:软件程序的整体调试;
第13~14周:测试并完善系统设计;
第15~16周:撰写、修改论文,准备答辩。
3)课题的研究目标及科学解决问题
预期结果是实现智能车能基本自动寻轨并沿轨迹前进,小灯能基本表示小车的动作。 由于红外线传感器敏感度和距离都有限制,因此,我们将在实现红外线接收的时候,寻找更好的解决办法,使传感器更加灵敏并使小车正确行驶。
从STC89C52管脚出来的电流较小,我们将寻找一种更好的电路,使小灯能基本显示,因此,将学习模电,寻找一种好的电路解决小灯供电不足的情况。大概一个月能想好小灯电路的设计部分。
四、主要参考文献 [1] 导盲机器人是为视觉障碍者提供环境导引的辅助工具。它属于服务机器人范畴,通过多种传感器对周围环境进行探测,将探测的信息反馈给视觉障碍者,帮助弥补他们视觉信息的缺失。世界上视觉障碍者数量众多,而他们只能用60%的感觉来获取经验。因而设计一款实用的导盲机器人来帮助视觉障碍者是十分重要的。本文在综述国内外现有导盲辅助工具特点的基础上,确定了导盲机器人的总体方案。机器人行走机构采用1个舵轮和2个从动轮的轮式结构,舵轮由电机驱动,控制车体行进方向,机器人前进的动力由使用者提供。机器人采用单片机控制,配备视觉传感器、红外传感器、超声波传感器等检测环境信息,并具有语音提示功能。引入有限状态机理论,运用MATLAB/Stateflow对导盲机器人的输入控制时序逻辑以及轨迹跟踪逻辑进行了建模与仿真,为下一步的实体样机的设计与改进提供了理论依据。设计了机器人的硬件电路,编写了控制程序,进行了图像反馈信息的处理。研制了导盲机器人样机,进行了路面探测、障碍识别、轨迹跟踪、人机合作等导盲实验,并将实际运动数据进行分析,很好的验证了系统的可行性。(韩雪峰.导盲机器人[J].哈尔滨工程大学.2009.)
[2] 盲人或是视觉有缺陷的人在社会生活中常常遇到诸多困难,其中之一是在行走的过程中难以识别和避
开障碍物。研发一种成本较低、多功能、易维护、易于功能升级和扩展的移动避障小车,尽可能准确、快速感知周围环境信息,从而辅助其避开障碍物,其选题有着实际应用价值。本文利用超声波传感器对小车周围多方向障碍物的距离进行检测,采用FPGA技术实现环境获取、数据处理,控制避障小车引导
使用者行走。本文使用了模糊控制理论的方法,用不同的隶属度函数对不同方向上的距离进行模糊化,将距离隶属度矩阵与传感器方向关系矩阵进行模糊合成,对模糊合成的矩阵进行分析,有重点和优先关系的采用相应控制策略。本文不同于以往一些需要对各种情况进行一一列举建立规则库的控制方法,而是引入危险区域和安全区域的概念。在避障系统的数据处理之中,通过一种实时算法对模糊合成的最大隶属度和最大隶属度所在方向进行分析处理,对障碍物是否在安全和危险区域进行判断以确定障碍物是否对小车行驶产生潜在威胁,并采取相应措施。危险域的建立可以把那些少则上百多则上千的规则建立和查找简单化,因此本设计的实现变得简洁,有效。本文完成了避障小车的软硬件设计、制作和调试。实验结果表明该避障小车在一定的环境下达到了令人较为满意的避障效果。(邹波.基于多超声波测距与模糊控制避障系统的设计与实现[J].西南交通大学,2010.)
[3] 本文结合机器人竞赛,介绍了自主式寻迹机器人小车的设计和具体实现。机器人以凌阳公司的
SPCE061A为平台。机器人由传感器、控制器和驱动器等模块组成。采用反射式红外传感器来辨别路线。传感器模块包括了消除干扰信号的电路。对反射光强进行测量,以此为依据设置阈值电压以保证系统的可靠性和准确性。控制模块预置了导航地图并实现访问景点的PID控制算法。驱动模块的电机速度采用PWM方式进行控制。(朱益斌,胡学龙,朱亚锋,等.自主式寻迹机器人小车的设计[J].国外电子技术测量,2006,25(7):40~42)
[4] 控制系统在时域和复域中的数学模型及其结构图和信号流图;比较全面地阐述了线性控制系统的时域分析法、根轨迹法、频域分析法以及校正和设计等方法;对线性离散系统的基础理论、数学模型、稳定性及稳态误差、动态性能分析以及数字校正等问题,进行了比较详细的讨论;在非线性控制系统分析方面,给出了相平面和描述函数两种常用的分析方法,对目前应用日益增多的非线性控制的逆系统方法也作了较为详细的介绍;最后两章根据高新技术发展的需要,系统地阐述了线性系统的状态空间分析与综合,以及动态系统的最优控制等方法(胡寿松.自动控制原理.科学出版社,2007.)
日期:20xx年08月14日
项目总结
-----循迹壁障循光小车 程序如下所示:
系统1(上):
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar Rem_Code[3];
uint TimeCount;
sbit Get_Rem=P2^0;
sbit AO= P2^4;
sbit BO = P2^5;
sbit CO = P2^6;
sbit DO= P2^7;
void delay_ms(int z)
{
int i,j;
}
void delay8(uint t)
for(i=z;i>=0;i--) for(j=110;j>=0;j--);
日期:20xx年08月14日
{
while(--t);
}
void Delay100us(void)
{
delay8(13); //8-18
}
void Remote_Process(void)
{
if(TimeCount>0)//当按键按下释放后该值不在赋值就同通过递减直到该值等Delay100us(); uchar i,j,Count=0; 于0
if(Get_Rem==0)//如果有低电平就进入解码 { for(Count=0;Count<100;Count++) //判断12毫秒左右的引导码 { Delay100us(); //100us*100=10ms if(Get_Rem==1) //如果在延时10毫秒期间有高电平出现就是干 { //等于0后表示按键释放 TimeCount--; } 扰信号退出解码
{ return;
日期:20xx年08月14日
} } while(Get_Rem==0);//等待低电平结束 for(j=0;j<3;j++) //8位地址码 + 4位数据码 { for(i=0;i<8;i++) { Count=0; do { Delay100us(); Count++; if(Count>20)//如果在大于2毫秒高电平还没有结束认为是干扰退出解码
{ //理论上是1.2毫秒,我们2毫秒留有余量,防止遥控批量中的误差
do { Delay100us(); Count++; if(Count>20)//如果在大于2毫秒低平还没有结束认为是 Count=0; return; } }while(Get_Rem==1);//计算高平时间并等待结束
日期:20xx年08月14日 干扰退出解码
位
ACC=Rem_Code[2];
if(ACC==0xc0)
{ return; } }while(Get_Rem==0);//计算低电平时间并等待结束 Rem_Code[j]<<=1;//数据从高位开始接收所以每次向左移一 if(Count<8) //如果低电平时间小于800毫秒认为该位为1 如果不加,则为0 { Rem_Code[j]++; } } } { AO = 1; BO = 0; CO = 1; DO = 1; delay_ms(10); BO = 1; } if(ACC==0x30)
日期:20xx年08月14日
{ AO = 1; BO = 1; CO = 1; DO = 0; delay_ms(10); } if(ACC==0x0c) { AO = 0; BO = 1; CO = 1; DO = 1; DO = 1; delay_ms(10); } AO = 1; if(ACC==0x03) { AO = 1; BO = 1; CO = 0; DO = 1; delay_ms(8); } CO = 1; if(TimeCount==0)
日期:20xx年08月14日
}
} TimeCount=1000;//按键按下标志
void main()
{
while(1)
{
Remote_Process();//遥控处理
}
}
1.系统2(下):
/************************************************ 按键A:壁障模式
按键B:循迹模式
按键C:循光模式
按键D:停止
************************************************/
#include"AT89x52.h"
//#include"global.h"
#include"intrins.h"
//#include"51hei.H"
#define uchar unsigned char
日期:20xx年08月14日
#define uint unsigned int
//uchar Rem_Code[3];
//uint TimeCount;
//sbit Get_Rem=P2^7;
//sbit sb = P3^2; //外部中断
sbit AO= P2^4;
sbit BO = P2^5;
sbit CO = P2^6;
sbit DO= P2^7; //与上面的单片机连接的端口 //与上面的单片机连接的端口 //与上面的单片机连接的端口 // 与上面的单片机连接的端口 sbit hw1 = P1^1; //后外端口
sbit hw2 = P1^2;
sbit hw3 = P1^0;
sbit gm1 = P0^6;
sbit gm2 = P0^7;
sbit IB1=P1^5;
sbit IA1=P1^6;
sbit IB2=P1^3;
sbit IA2=P1^4;
sbit ENA=P2^2;
sbit ENB=P2^3;
sbit Led_on=P0^0;
int n=0;
int m=0;
//驱动端口
日期:20xx年08月14日
int ms_100_you=100;
int ms_100_zuo=100;
//int ms_10 = 12;
//占空比的时间片 // 占空比的时间片
int ms_houtui_200 = 300;
int ms_hwled = 1000;
int ms_hwbee_50 = 50;
sbit bee = P0^5;
sbit ECHO = P2^1;
sbit TRIG = P2^0;
unsigned int time = 0;
unsigned int timer = 0;
unsigned char hw_flag;
unsigned long S = 0;
int ceshi_time=200;
int Flag=0;
//void Remote_Process();
//超声波壁障时后退的时间片 //红外的流水灯的时间片 //超声波的端口
void qian_jin_fast() //快速前进
{
if (ms_100_zuo<=100 && ms_100_zuo>58)
//左轮速度 { IA2=0; IB2=1; } else if(ms_100_zuo<=58&& ms_100_zuo>0) { // 15
日期:20xx年08月14日
IA2=1;
IB2=1;
}
else if(ms_100_zuo<=0)
{
ms_100_zuo=100;
}
if (ms_100_you<=100 && ms_100_you>10) {
IA1=1;
IB1=0;
}
else if(ms_100_you<=10 && ms_100_you>0) {
IA1=1;
IB1=1;
}
else if (ms_100_you<=0)
{
ms_100_you=100;
}
}
void qian_jin_slow() //慢速前进
{
if (ms_100_you<=100 && ms_100_you>65) // 15 //右轮速度
日期:20xx年08月14日
{
IA1=1;
IB1=0;
}
else if(ms_100_you<=65 && ms_100_you>0) {
IA2=1;
IB2=1;
}
else if (ms_100_you<=0)
{
ms_100_you=100;
}
if (ms_100_zuo<=100 && ms_100_zuo>35) {
IA2=0;
IB2=1;
}
else if(ms_100_zuo<=35 && ms_100_zuo>0) {
IA2=1;
IB2=1;
}
else if(ms_100_zuo<=0)
{
ms_100_zuo=100;
}
// 15 // 15
日期:20xx年08月14日
}
//快速后退 void hou_tui_fast()
{
if (ms_100_zuo<=100 && ms_100_zuo>65) //左轮速度 {
IA2=1;
IB2=0;
}
else if(ms_100_zuo<=65&& ms_100_zuo>0)
{
IA2=1;
IB2=1;
}
else if(ms_100_zuo<=0)
{
ms_100_zuo=100;
}
if (ms_100_you<=100 && ms_100_you>14)
{
IA1=0;
IB1=1;
}
else if(ms_100_you<=14 && ms_100_you>0)
{
IA1=1;
// 15 // 15 //右轮速度
日期:20xx年08月14日
IB1=1;
}
else if (ms_100_you<=0)
{
ms_100_you=100;
}
}
void hou_tui_slow() //慢速后退
{
if (ms_100_zuo<=100 && ms_100_zuo>75) {
IA2=1;
IB2=0;
}
else if(ms_100_zuo<=75 && ms_100_zuo>0) {
IA2=1;
IB2=1;
}
else if(ms_100_zuo<=0)
{
ms_100_zuo=100;
}
if (ms_100_you<=100 && ms_100_you>65) {
// 15
日期:20xx年08月14日
IA1=0;
IB1=1;
}
else if(ms_100_you<=65 && ms_100_you>0) {
IA2=1;
IB2=1;
}
else if (ms_100_you<=0)
{
ms_100_you=100;
}
}
void zuo_zhuan() //左转
{
if (ms_100_zuo<=100 && ms_100_zuo>65) {
IA2=1;
IB2=0;
}
else if(ms_100_zuo<=65&& ms_100_zuo>0) {
IA2=1;
IB2=1;
}
else if(ms_100_zuo<=0)
// 15 //左轮速度// 15
日期:20xx年08月14日
{
ms_100_zuo=100;
}
if (ms_100_you<=100 && ms_100_you>8) {
IA1=1;
IB1=0;
}
else if(ms_100_you<=8 && ms_100_you>0) {
IA1=1;
IB1=1;
}
else if (ms_100_you<=0)
{
ms_100_you=100;
}
}
void you_zhuan() //右转
{
if (ms_100_zuo<=100 && ms_100_zuo>56) {
IA2=0;
IB2=1;
//右轮速度// 15 //左轮速度
日期:20xx年08月14日
}
else if(ms_100_zuo<=56&& ms_100_zuo>0) {
IA2=1;
IB2=1;
}
else if(ms_100_zuo<=0)
{
ms_100_zuo=100;
}
if (ms_100_you<=100 && ms_100_you>10) {
IA1=0;
IB1=1;
}
else if(ms_100_you<=10 && ms_100_you>0) {
IA1=1;
IB1=1;
}
else if (ms_100_you<=0)
{
ms_100_you=100;
}
}
void stop_zhuan()
// 15 // 15 //右轮速度
日期:20xx年08月14日
{
IA1=1;
IB1=1;
IA2=1;
IB2=1;
}
/******************************光敏控制的函数*********************************************/
void gm_judge()
{
}
/*************************************红外控制函数if (gm1 == 1 && gm2 == 0) zuo_zhuan(); else if(gm1 == 0 && gm2 == 1) you_zhuan(); else qian_jin_fast(); **********************************************/
void hw_judge()
{
if((hw1==0 && hw2==0) || (hw1!=0 && hw2!=0 && hw3==1)) qian_jin_fast();//前
else if(hw1==0 && hw2!=0) you_zhuan(); // 右 else if(hw1!=0 && hw2==0) zuo_zhuan(); //做
//停 else if(hw1!=0 && hw2!=0 && hw3==0) stop_zhuan();
}
/************************************超声波计算距离的函数******************************************************/
void Conut(void)
{
time = TH0 * 256 + TL0;
TH0 = 0;
日期:20xx年08月14日
TL0 = 0;
S=(time * 1.7) / 100; //算出来是CM if(S<=10&&S>0) {
P0=0xe0;
}
/********************************超声波信号发送和接收函数**********************************************/
void chaoshengbo()
{
} else if(S>10&&S<=20) { P0=0xf0; } else if(S>20&&S<=30) { P0=0xf8; } else if (S>30&&S<=40) { P0=0xfc; } else { P0=0xff; } switch(m)
日期:20xx年08月14日
}
{ case 0:if (ECHO!=0) {TR0=1;m=1;} else if(ECHO==0) {TR0=0;m=0;} break; case 1: { if (ECHO!=0) {m=1;} else if(ECHO==0){TR0=0;m=2;} } break; case 2:{Conut();m=0;} break; }
//void delay8(uint t)
//{
//while(--t);
//}
//
//void Delay100us(void)
//{
//delay8(13); //8-18
//}
//
////因为他的格式是00表示"0"11表示"1"01表示"F"所以我们要把12位乘以2等于24位刚好是3个字节
////第一二个字节是地址码,第三个字节是数据码
////发射芯片采用的是PT2262芯片用4.7M的震荡电阻315M发射
////遥控我们全部默认地址码是 FFFFFFFF 单片机解码出来就是0x55 0x55 ////遥控处理函数
//void Remote_Process(void)
//{
日期:20xx年08月14日
// uchar i,j,Count=0;
// Delay100us();
// if(TimeCount>0)//当按键按下释放后该值不在赋值就同通过递减直到该值等于0
// {//等于0后表示按键释放
// TimeCount--;
// }
//
// if(Get_Rem==0)//如果有低电平就进入解码
// {
//
//
//
// for(Count=0;Count<100;Count++)//判断12毫秒左右的引导码 { Delay100us();//100us*100=10ms if(Get_Rem==1)//如果在延时10毫秒期间有高电平出现就是干扰信号退出解码
//
//
//
//
//
//
//
//
//
//
//
//
//
// { return; } } while(Get_Rem==0);//等待低电平结束 for(j=0;j<3;j++)//8位地址码加4位数据码 { for(i=0;i<8;i++) { Count=0; do { Delay100us(); Count++;
日期:20xx年08月14日
// if(Count>20)//如果在大于2毫秒高电平还没有结束认为是干扰退出解码
//
差
//
//
//
//
//
//
//
//
//
出解码
//
//
//
//
//
//
//
//
//
//
//
// { } }while(Get_Rem==0);//计算低电平时间并等待结束 Rem_Code[j]<<=1;//数据从高位开始接收所以每次向左移一位 return; } }while(Get_Rem==1);//计算高平时间并等待结束 Count=0; do { Delay100us(); Count++; if(Count>20)//如果在大于2毫秒低平还没有结束认为是干扰退return; {//理论上是1.2毫秒,我们2毫秒留有余量,防止遥控批量中的误 if(Count<8)//如果低电平时间小于800毫秒认为该位为1 { Rem_Code[j]++; } } } //huqin
// ACC=Rem_Code[2];
//
//
//
if(ACC==0x0c) //a { Flag=1;
日期:20xx年08月14日
//
// delay8(5); }
//b // if(ACC==0xc0)
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//// { Flag=2; delay8(5); } if(ACC==0x03) // c { Flag=3; delay8(5); } if(ACC==0x30) //d { Flag=4; delay8(5); } if(TimeCount==0)//为0表示是新的一次按下对其进行处理 {//如过该值大于0表示已经按下不在处理,保证按下一次只做一次处理 // if((Rem_Code[0]==Addr_Code_H)&&(Rem_Code[0]==Addr_Code_L)) // { if(Rem_Code[2]==Key_A)//如果数据与A键的值相等表示A键按下对其处理
//
//
//
//
//
//
// {//试验用A键来控制继电器的开关 // Com_Relay;//继电器取反 // Nokia3310();//显示继电器的状态 // Bz_Out();//蜂鸣器响一声 // } // }
日期:20xx年08月14日
// // // // } //}
//P2_2=0; }
TimeCount=1000;//按键按下标志
// void hw_judge() //{
// if((hw1==0&&hw2==0)||(hw1!=0&&hw2!=0&&hw3==1)) hw_flag=1; //前 // else if(hw1==0&&hw2!=0) hw_flag=2;
// 右 //左 //停
// else if(hw1!=0&&hw2==0) hw_flag=3;
// else if(hw1!=0&&hw2!=0&&hw3==0) hw_flag=4; //} //
//void hw_movement() //{
// switch(hw_flag) // { // // // // // } // }
/*****************************
主
case 1: qian_jin_fast();break; case 2: you_zhuan();break; case 3: zuo_zhuan();break; case 4: stop_zhuan();break;
函数
******************************************/ void main() {
//设T0为方式1,GATE=1;
TMOD=0x11;
日期:20xx年08月14日
TH0 = 0; TL0 = 0;
TH1 = (65536-1000)/256;
ET0=1; //允许T0中断 TL1 = (65536-1000)%256; ET1=1;
TR1=1;
EA=1;
Led_on = 1;
ENA=1;
ENB=1;
// IT0 = 0;
// EX0 = 1;
while(1)
{
while (Flag==1)
{
chaoshengbo();
}
while(Flag==5)
{
qian_jin_fast();
}
while(Flag==2)
{
//允许T1中断 //开启定时器 //开启总中断
日期:20xx年08月14日
hw_judge(); bee=1;
}
}
//void zd0() interrupt 0
//{
// Remote_Process();
// ms_10 = 12;
// sb = 1;
//}
} while(Flag==3) { gm_judge(); bee=1; } while(Flag==4) { stop_zhuan(); bee=1; } while (Flag==0) { stop_zhuan(); }
日期:20xx年08月14日
/**定时器1***/
void zd3() interrupt 3 //T1中断用来扫描数码管和计800MS启动模块 {
int i = 0;
TH1 = (65536-1000) / 256;
TL1 = (65536-1000) % 256;
/****************************端口
*******************************************/
if(AO == 0)
Flag = 1;
else if(BO == 0)
Flag = 2;
else if(CO == 0)
Flag = 3;
else if(DO == 0)
Flag = 4;
//
// ms_10--;
// if(ms_10<=0)
// {
// sb = 0;
// // ms_10 = 12;
// }
ms_100_zuo--;
ms_100_you--;
// if (Flag==4)
// {
信号处理
日期:20xx年08月14日
// bee = 1;
// ceshi_time--;
// if (ceshi_time<=0)
// {
// Flag=5;
// ceshi_time=300;
// }
// }
/*************************红外的*****************************************/ if (Flag==2)
{
ms_hwled--;
if (ms_hwled<=1000&& ms_hwled>750) {
P0=0xfc;
}
else if ( ms_hwled<=750 && ms_hwled>500) {
P0=0xfa;
}
else if ( ms_hwled<=500 && ms_hwled>250) {
P0=0xf6;
}
else if ( ms_hwled<=250 && ms_hwled>0) {
P0=0xee;
}
else if ( ms_hwled<=0)
流水灯效果
日期:20xx年08月14日
{ ms_hwled=1000; } }
// else if(Flag == 2)
// {
// bee = 1;
// }
// else if(Flag==1)
// {
// if(S<=35 && S>0)
// {
// ms_houtui--;
// if (ms_houtui<=100)
// {
// hou_tui_fast();
// }
// else if (ms_houtui<=50)
// { n=n%2;
//
//
////
//// switch (n) { case 0:you_zhuan();bee=0;break; case 1:zuo_zhuan();bee=0;break; // case 0:you_zhuan();break; // case 1:zuo_zhuan();break; // }
//
// }
// }
// else
日期:20xx年08月14日
// {
// qian_jin_fast();
// bee=1;
//
// }
/*************************超声波壁障效果 ms_houtui=100; ********************************************/
else if(Flag==1)
if(S<=30 && S>0)
{ Led_on = 0; { ms_houtui_200--; hou_tui_fast(); if(ms_houtui_200<=0) { n=n%2; switch (n) } { case 0:you_zhuan();bee=0;break; case 1:zuo_zhuan();bee=0;break; } // ms_houtui = 100; } else { ms_houtui_200=300;
日期:20xx年08月14日 qian_jin_fast();
bee=1;
}
timer++;
if(timer>= 800)
{
n++;
timer=0;
TRIG=1; i = 0;
for(;i<20;i++)
_nop_();
TRIG=0;
}
}
}
//800MS 启动一次模块
江西理工大学创新实验报告题目循迹小车的制作学院电气工程与自动化学院专业自动化班级学生黄学号113盼时间20xx年8月2号自动循迹小…
青岛理工大学琴岛学院课程设计报告课题名称智能循迹机器人小车学院机电工程系专业班级电气工程及其自动化学号20xx020xx29学生许…
电子作品设计报告项目名称智能小车学院机电工程学院专业应用电子技术班级组别第三组姓名杨磊赖焕宁梁广生指导老师杨青勇玉宁1目录摘要3关…
电子信息专业实验报告课程电子信息系统综合设计实验MCU部分实验题目智能机器小车设计实验总分学生姓名学号学生姓名学号学生姓名学号实验…
电子作品设计报告项目名称智能循迹小车1摘要本组的智能循迹小车是采用自主设计的车体以两个直流电机来驱动小车各个模块自行设计通过反射式…
本科生毕业设计档案材料题目智能公交小车系统的设计学生姓名学号系部专业年级指导教师湖南人文科技学院教务处制100为优秀8089为良好…
毕业论文设计开题报告论文题目智能小车的无线控制器设计系部名称信息工程系专业班级测控XX学生姓名XX学号XX指导教师XX教师职称讲师…
长春工程学院毕业设计论文电气与信息学院毕业设计论文开题报告1长春工程学院毕业设计论文基于单片机的智能小车设计开题报告一课题的目的和…
天津理工大学本科毕业设计开题报告届20xx学院自动化专业自动化20xx年3月5日天津理工大学教务处制表天津理工大学教务处制表天津理…
唐山学院毕业设计论文开题报告设计论文题目基于单片机的智能小车倒停车控制系统设计与实现信息工程系别电气工程及其自动化专业王刚姓名吕宏…
毕业设计论文开题报告题目完成智能小车沿黑上自动寻路的设计姓名章曜盛学号1030342105专业班级指导教师20xx2年月日湖州职业…