光电开关和超声波小车。。。

2019-07-15 12:36发布

左右两个光电开关检测小车前方是否有障碍墙(光电开关用键控代替)。超声波让小车微调,走赛道的正中间。舵机控制小车前轮的左右转动(两个程序通过控制舵机左右蔽障),两个程序分开都能用,但和在一起后舵机不动了(keil软件提示没有警告和错误)。求大神看看我的程序是不是有哪里不对~~

PS:单片机用的是89c52.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
禾苗m
1楼-- · 2019-07-16 11:22
舵机子程序:
#include <reg52.h>                //器件配置文件
#include <intrins.h>
#include "delay.h"
#include"count.h"
#include"duozhuan.h"

void Conut(void)
{
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
         S=(time*1.56672)/100;    //晶振11.0592算出来是CM
}

     void  StartModule()                          //启动模块
  {
          Trig=1;                                             //启动一次模块
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          Trig=0;
  }

/********************************************************/
void COMM(void)
{
             StartModule();
             while(!Echo);                //当Echo为零时等待
             TR0=1;                            //开启计数
             while(Echo);                        //当Echo为1计数并等待
             TR0=0;                                //关闭计数
         Conut();                        //计算
                 delay(80);                //80MS
                 if(S>50)
                 {
            rightweirun();
         }
                 if(S>120)
                 {
                   leftweirun();
                 }
}
禾苗m
2楼-- · 2019-07-16 11:31
禾苗m 发表于 2016-11-17 15:45
舵机子程序:
#include                 //器件配置文件
#include

这是超声波的
禾苗m
3楼-- · 2019-07-16 15:21
 精彩回答 2  元偷偷看……
禾苗m
4楼-- · 2019-07-16 17:33
舵机控制子程序:
#include <reg52.H>                //器件配置文件
#include <intrins.h>
#include "delay.h"
#include"duozhuan.h"

/********************************************************/
                                /*左微调 */
void rightweirun(void)
{
Set_PWM0=Set_PWM0+6;
delay(400);
Set_PWM0=Set_PWM0-6;
}
/*****************************************************/
                /*右微调 */
void leftweirun(void)
{
                Set_PWM0=Set_PWM0-6;
                delay(4000);
                Set_PWM0=Set_PWM0+6;
}
/*********************************************************/
              /*左转回正*/
void leftrun(void)
  {
   if(key10==0&& tt1==0)
    {
      delay(3);
          if(key10==0&& tt1==0)
          {       
            tt1=1;   
                Set_PWM0=Set_PWM0+6;
                delay(4000);
                Set_PWM0=Set_PWM0-6;
                delay(4000);
                Set_PWM0=Set_PWM0-6;
                delay(4000);
                Set_PWM0=Set_PWM0+6;
          }
    }            
   }
/*********************************************************/
               /*右转回正*/
void rightrun(void)
{
  if(key11==0&& tt1==0 )
   {
       delay(3);
          if(key11==0&& tt1==0)
          {         
            tt1=1;   
                Set_PWM0=Set_PWM0-6;
                delay(4000);
                Set_PWM0=Set_PWM0+6;
                delay(4000);
                Set_PWM0=Set_PWM0+6;
                delay(4000);
                Set_PWM0=Set_PWM0-6;
          }
   }
}
/*********************************************************/
                 /*无高信号回来*/
void zheng(void)
{
if(key10==1 && key11==1) tt1=0;
}
/*********************************************************/
禾苗m
5楼-- · 2019-07-16 21:18
舵机控制头文件:
#ifndef        __DUOZHUAN_H__
#define __DUOZHUAN_H__


#define uchar unsigned char
#define uint unsigned int

extern unsigned char Set_PWM0; // 占空比调整
extern unsigned char tt1;
sbit key10=P3^2;
sbit key11=P3^3;
void rightweirun(void);
void leftweirun(void);
void leftrun(void);
void rightrun(void);
void zheng(void);


#endif
禾苗m
6楼-- · 2019-07-17 03:10
没人来!!!!!!!!!!!!!!!!!!!!!!!!

一周热门 更多>