基于51单片机的智能小车系统设计

发布时间:2023-02-09  

原理图:


程序运行图:

部分程序:

/*******************************************************************************

* 文件名称:main.c

* 说明:本文件为小车控制的主函数

* 功能:1.看门狗定时器初始化

2.调用函数,进行小车直流电机的开环控制


*******************************************************************************/

#include

#include


/********************************************************

*函数名称:void main()

*函数功能:调用函数

*函数入口:无

*函数出口:无

********************************************************/

void main()

{

WDT_CONTR=0x3b;

timer_init(); //初始化

while(1)

{

keyboard(); //键盘扫描

// jieshou(); //遥控信号检测,要与传感器实物连接才能正常使用.

xunji(); //循迹检测

bizhang(); //避碍物检测

stop(); //目标站点检测

WDT_CONTR=0x3b; //喂狗

}

}



/*******************************************************************************

* 文件名称:kongzhi.c

* 说明:本文件为小车控制的c文件

* 功能:1.检测障碍物传感器查询

2.小车的状态控制


*******************************************************************************/


#include

#define kongzhi_GLOBAL 1

#include


uchar PWM_t,PWM_t0; //PWM_t为脉冲宽度(0~100)时间为0~10ms

uchar time_count; //定时计数

uint number,number1;

uchar flag; //flag为小车状态标志,0:停止,1:前进,2:后退

uchar flag2; //flag2为小车状态恢复寄存区,当小车遇到障碍物停止,等到障碍物排除之后,小车在停止之前的状态就寄存在flag2中

uchar flag3; //flag3为小车避障停止延时标志,初始化为0,等待障碍排除之后赋值为1,开始计时,数秒之后恢复停止前的行进状态

uchar flag4; //--flag4为看门狗复位后状态恢复寄存区

uchar kind = 0; //传感器的种类


/********************************************************

*函数名称:void bizhang()

*函数功能:遇到障碍物时的处理函数

*函数入口:无

*函数出口:无

********************************************************/

void bizhang()

{

zhang_ai = 1;

if(zhang_ai == 0)

{

flag2=flag;

flag=0;

while(zhang_ai == 0)

{

keyboard();

xunji();

stop();

WDT_CONTR=0x3b;

}

flag3=1;

}

}


/********************************************************

*函数名称:void stop()

*函数功能:到达目标点的控制函数

*函数入口:无

*函数出口:无

********************************************************/

void stop()

{

stop_1=1; //目标站点1

if(stop_1==0)flag=0;

stop_2=1; //目标站点2

if(stop_2==0)flag=0;

stop_3=1; //目标站点3

if(stop_3==0)flag=0;

}


/*******************************************************

*函数名称:void timer_init()

*函数功能:定时器初始化设置

*函数入口:无

*函数出口:无

********************************************************/

void timer_init()

{

flag=0;flag3=0;

key = 0xFF;

TMOD = 0x20; //定时器1为模式2(8位自动重装)

TF1 = 0; //清中断标志

TH1 = timer_data; //保证定时时长为0.1ms

TL1 = TH1;

ET1 = 1; //允许T0中断

TR1 = 1; //开始计数

EA = 1; //中断允许

ENA = 0; //电机禁止

PWM_t = PWM_t0; //看门狗复位后速度恢复

flag = flag4; //看门狗复位后小车状态恢复

}

/*******************************************************

*函数名称:void IntTime1() interrupt 3 using 2

*函数功能:定时器中断处理,小车行走控制

*函数入口:无

*函数出口:无

********************************************************/

void IntTime1()interrupt 3 using 2

{

time_count++;

if(flag3)number++;

if(number==6000){number=0;number1++;}

if(number1==8){flag3=0;number1=0;flag=flag2;}

if(flag==0)ENA=0; //小车停止,flag=0,小车停止标志

if(flag==1) //小车前进,flag=1,小车前进标志

{

ENA=1; //PWM波输出使能

DR=0; //直流电机一端接低电平

DR2=0; //直流电机一端接低电平

if(kind==0) //没有传感器检测到黑线,走直线

{ if(time_count{PWM=1;PWM2=1;}

else

{PWM=0;PWM2=0;}

}

if(kind==1) //左边第一个传感器检测到黑线

{

if(time_count{PWM=1;}

else

{PWM=0;}

if(time_count{PWM2=1;}

else

{PWM2=0;}

}

if(kind==2) //左边第二个传感器检测到黑线

{


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>