这是我proteus画的图,目的是让轮子在超声波测出的距离小于我设置的值时后退,大于时前进的功能,但超声波模块好像不起作用。
#include <REGX52.H>
#include<intrins.h>
sbit Echo=P1^1; //³¬Éù²¨²â¾à·¢Éä¶Ëλµã
sbit Trig=P1^2; //³¬Éù²¨²â¾à½ÓÊÕ¶Ëλµã
unsigned int sum; //³¬Éù²¨²â¾à½á¹û
//unsigned int mindistance=50; //С³µÓëÕÏ°ÎïµÄÏÞÖƾàÀë
void Delay20us() //@12.000MHz
{
unsigned char i;
_nop_();
i = 7;
while (--i);
}
void ultrasonic() //³¬Éù²¨²â¾à³ÌÐò
{
TMOD=0x11; //¶¨Ê±Æ÷1£¬2¶¼Ê¹ÓÃ
TL1=0; //ÉèÖö¨Ê±Æ÷³õʼֵ
TH1=0; //ÉèÖö¨Ê±Æ÷³õʼֵ
Trig=1; //·¢ÉäÒ»¶ÎÂö³å£¬ÖÁÉÙ20us
Delay20us();
Trig=0;
while(!Echo); //µÈ´ý³¬Éù²¨Ä£¿éµÄ·µ»ØÂö³å
TR1=1; //´ò¿ª¶¨Ê±Æ÷
while(Echo); //µÈ´ý³¬Éù²¨Ä£¿é·µ»ØÂö³å½áÊø
TR1=0; //Í£Ö¹¶¨Ê±Æ÷
sum=((TH1*256+TL1)*0.034)/2+1; //¼ÆËãÓëÕÏ°ÎïµÄ¾àÀë
}
这个是我写的超声波模块有关的代码
#include <REGX52.H>
#include"Timer0.h"
sbit IN1=P2^0;
sbit IN2=P2^1;
sbit IN3=P2^6;
sbit IN4=P2^7;
unsigned int number;
void advance() //Ç°½ø
{ Duty_cycle_B=number;
Duty_cycle_A=number;
IN3=0;
IN4=1;
IN1=0;
IN2=1;
}
void back() //ºóÍË
{
Duty_cycle_A=number;
Duty_cycle_B=number;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
这个是我直流电机有关的代码
#include <REGX52.H>
#include"Timer0.h"
#include"direction.h"
#include"ultrasonic.h"
#include"Delay.h"
unsigned int mindistance=50; //С³µÓëÕÏ°ÎïµÄÏÞÖƾàÀë
void main()
{
Timer0_Init();
number=100;
while(1)
{
ultrasonic();
if(sum<mindistance)
{
back();
}
else {
advance();
}
Delay(60);
}
}
这个是我的主函数
,请大家帮忙看看哪里出了问题,是函数写错了还是proyeus的图有问题,谢谢大家!