您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页51单片机循迹小车程序

51单片机循迹小车程序

来源:华拓科技网
精品--

/*功能:寻迹小车

使用芯片:ATS52 或者 STCC52 或ATS51 STCC51

晶振:12MHZ

编译环境:Keil

作者:MH~ */

#include // 引用标准库的头文件

#include

#define uchar unsigned char

#define uint unsigned int

//=================电机驱动=====================

sbit dianji_r = P3^0; //右边电机控制口,低电平转?

sbit dianji_l = P3^7; //左边电机控制口,低电平转

//=============循迹感应接口======================

--精品

精品--

sbit xjmk_r = P3^2;// 右边寻迹模块检测口 INT0

sbit xjmk_l = P3^3;// 左边寻迹模块检测口 INT1

void check_righet();//右边时候检测到黑线测试程序

void check_left();//左边时候检测到黑线测试程序

void delay_50us(uint t);

void delayms(uint Ms);

uchar r_count;//右边传感器检测到的次数计数单元

uchar l_count;

uint time;

//***********************主程序******************************

main()

{

time=50;

--精品

精品--

dianji_r=0;//上电时右侧电机运行

dianji_l=0;//上电时左侧电机运行

EA=1;

EX1=1;

EX0=1;

IT1=0;

IT0=0;

xjmk_r=1;//置IO为1,准备读取数据

xjmk_l=1;

_nop_();

r_count=0;

l_count=0;

while(1)

--精品

精品--

{

_nop_();

// check_righet();//调用右边寻迹检测传感器

// check_left();//

if(r_count>=1)

{

delayms(time);

dianji_r=0;

dianji_l=0;

r_count=0;

_nop_();

}

if(l_count>=1)

--精品

精品--

{

delayms(time);

dianji_r=0;

dianji_l=0;

l_count=0;

_nop_();

}

}

}

void init0int() interrupt 2

--精品

精品--

{

l_count=5;

dianji_l=1;

dianji_r=0;

if(r_count>0)

{ EX0=0;

delayms(20);

if(time>=20)time-=19;

EX0=0;

}

return;

}

void init1int() interrupt 0

--精品

精品--

{

r_count=5;

dianji_r=1;

dianji_l=0;

if(l_count>0)

{ EX1=0;

delayms(20);

if(time>=20)time-=19;

EX1=1;}

return;

}

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

//函数名称:

--精品

精品--

//功能:左边边时候检测到黑线测试程序

void check_left()

{

if(xjmk_l==0)//检测右边的传感器是否感应到黑线

{

delay_50us(1);//延时,去除机械振动

_nop_();

if(xjmk_l==0)//再次检测

{

delay_50us(1);//延时,去除机械振动

if(xjmk_l==0)

{

l_count++;

--精品

精品--

xjmk_l=1;

}

}

}

}

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

//函数名称:

//功能:右边时候检测到黑线测试程序

void check_righet()

{

if(xjmk_r==0)//检测右边的传感器是否感应到黑线

{

delay_50us(1);//延时,去除机械振动

--精品

精品--

if(xjmk_r==0)//再次检测

{

delay_50us(1);//延时,去除机械振动

if(xjmk_r==0)

{

r_count++;

xjmk_r=1;

}

}

}

}

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

//函数名称:void delay_50US(unsigned int t)

--精品

精品--

//功能: 延时50*t(us)

void delay_50us(uint t)

{

uchar j;

for(;t>0;t--)

{

for(j=19;j>0;j--);

}

}

/*====================================================================

设定延时时间:x*1ms

====================================================================*/

--精品

精品--

void delayms(uint Ms)

{

uint i,TempCyc;

for(i=0;i{

TempCyc =70;

while(TempCyc--);

}

}

--精品

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务