找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2915|回复: 1
打印 上一主题 下一主题
收起左侧

简单寻迹程序

[复制链接]
跳转到指定楼层
楼主
ID:383059 发表于 2018-8-7 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<stdio.h>
#include<Step_Moter.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit open=P0^0;//软开关
sbit ENA=P1^0;
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit IN3=P1^3;
sbit IN4=P1^4;
sbit ENB=P1^5;
sbit ENC=P3^0;
sbit IN5=P3^1;
sbit IN6=P3^2;
sbit IN7=P3^3;
sbit IN8=P3^4;
sbit END=P3^5;
sbit left=P0^1;//左红外检测模块
sbit centre=P0^2;//中间传感器
sbit right=P0^3;//右红外检测模块

uchar t;                       
uchar PWM1,PWM2,PWM3,PWM4;
uchar k=0;
/*延时函数*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=114;y>0;y--);      
}
/*中断服务特殊功能寄存器配置*/
void init()
{
TMOD|=0x01;/*定时器0定时*/
TH0=(65535-100)/256;
TL0=(65535-100)%256; //定时0.1ms
ET0=1;
EA=1;
TR0=1;
}                                                     
void main()
{
if(open==0)
{
// Robot_Walk();//循迹过程中的齐步走动作
  init();
  ENA=1;
  ENB=1;
  ENC=1;
  END=1;

  IN1=0;
  IN2=1;
  IN3=0;
  IN4=1;

  IN5=1;
  IN6=0;
  IN7=1;
  IN8=0;
  
  PWM1=25;  
  PWM2=25;
  PWM3=25;  
  PWM4=25;
  
  delay(500);
   
  while(1)
  {
   if(left==0 && centre==0 && right==0)k=1;
   if(left==0 && centre==0 && right==1)k=2;//偏右,左移
   if(left==0 && centre==1 && right==0)k=3;
   if(left==0 && centre==1 && right==1)k=4;//偏右,左移
   if(left==1 && centre==0 && right==0)k=5;//偏左,右移
   if(left==1 && centre==0 && right==1)k=6;//直行
   if(left==1 && centre==1 && right==0)k=7;//偏左,右移
   if(left==1 && centre==1 && right==1)k=8;//停止
   
   switch(k)
   {
    case 2:
     PWM1=PWM2=80;
     PWM3=PWM4=10;
     break;
    case 4:
     PWM1=PWM2=80;
     PWM3=PWM4=10;
     break;
    case 5:
     PWM1=PWM2=10;
     PWM3=PWM4=80;
     break;
    case 7:
     PWM1=PWM2=10;
     PWM3=PWM4=80;
     break;
    case 6:
     PWM1=PWM2=PWM3=PWM4=50;
     break;
    case 8:
     PWM1=PWM2=PWM3=PWM4=0;
     break;
    default:
     PWM1=PWM2=PWM3=PWM4=30;
     break;
   }
  }
}
else
{
  ENA=ENB=ENC=END=0;
}
}
/*中断服务程序*/
void Timer() interrupt 1
{
    TR0=0;//赋初值时,关闭定时器
    TH0=(65536-100)/256;//赋初值定时
    TL0=(65536-100)%256;//0.1ms
    TR0=1;//打开定时器
    t++;
if(t>=100)
  t=0;
    if(t<=PWM1)
     ENA=1;
else
  ENA=0;
if(t<=PWM2)
  ENB=1;
else
  ENB=0;
if(t<=PWM3)
  ENC=1;
else
  ENC=0;
if(t<=PWM4)
  END=1;
else
  END=0;
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:450030 发表于 2018-12-23 11:04 | 只看该作者
可以的,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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