找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2416|回复: 1
收起左侧

51单片机寻迹小车全套资料-proteus-PCB

[复制链接]
ID:439809 发表于 2018-12-5 10:29 | 显示全部楼层 |阅读模式

使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51
晶振:12MHZ
编译环境:Keil
作者:zheng


#include <reg52.h>            // 引用标准库的头文件
#include <intrins.h>

#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<Ms;i++)
  {
    TempCyc =70;
    while(TempCyc--);
  }
}


搜狗截图18年12月05日1027_1.png

51单片机循迹小车资料.rar

1.24 MB, 下载次数: 101, 下载积分: 黑币 -5

回复

使用道具 举报

ID:293363 发表于 2018-12-12 09:48 | 显示全部楼层
感谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表