红外避障模块c语言程序,51单片机 超声波红外避障 程序

本文提供了一个使用89C52单片机的超声波避障小车的C语言源程序,包括了超声波接口定义、电机控制和舵机操作等关键代码,用于实现避障功能。
摘要由CSDN通过智能技术生成

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

69sjjeojo

2020.07.01

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:58%    等级:9

已帮助:365人

这是一个超声波避障小车的源程序,可以参考下,用的89C52单片机,舵机控制转角避障。

#include

#include

#define Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度

#define ECHO P2_4 //超声波接口定义

#define TRIG P2_5 //超声波接口定义

#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走

#define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转

#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转

#define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走

#define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走

#define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转

unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};

unsigned char const positon[3]={ 0xfe,0xfd,0xfb};

unsigned char disbuff[4] ={ 0,0,0,0,};

unsigned char posit=0;

unsigned char pwm_val_left = 0;//变量定义

unsigned char push_val_left =14;//舵机归中,产生约,1.5MS 信号

unsigned long S=0;

unsigned long S1=0;

unsigned long S2=0;

unsigned long S3=0;

unsigned long S4=0;

unsigned int time=0; //时间变量

unsigned int timer=0; //延时基准变量

unsigned char timer1=0; //扫描时间变量

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

void delay(unsigned int k) //延时函数

{

unsigned int x,y;

for(x=0;x

for(y=0;y<2000;y++);

}

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

void Display(void) //扫描数码管

{

if(posit==0)

{P0=(discode[disbuff[posit]])&0x7f;}//产生点

else

{P0=discode[disbuff[posit]];} if(posit==0)

{ P2_1=0;P2_2=1;P2_3=1;}

if(posit==1)

{P2_1=1;P2_2=0;P2_3=1;}

if(posit==2)

{P2_1=1;P2_2=1;P2_3=0;}

if(++posit>=3)

posit=0;

}

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

void StartModule() //启动测距信号

{

TRIG=1;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

要实现这三种模式切换,需要先了解一些基础知识和技术。 首先,你需要一块51单片机开发板,一个红外遥控器模块、一个超声波模块,以及一些基本的电子元件,如电位器、电容、电阻等。 其次,你需要了解红外遥控、红外循迹和超声波避障的工作原理和实现方法。可以通过查阅相关的资料和文献来了解。 最后,你需要编写相应的程序代码,通过红外遥控器来切换不同的模式,并在不同模式下实现相应的功能。 下面是一个简单的示例代码,实现了红外遥控、红外循迹和超声波避障三种模式的切换: ``` #include <reg51.h> #include <intrins.h> sbit IRIN = P3^2; // 红外接收 sbit TRIG = P1^0; // 超声波触发 sbit ECHO = P1^1; // 超声波接收 unsigned char mode = 0; // 模式选择变量 void delay(unsigned int t) // 延时函数 { unsigned int i,j; for(i=0;i<t;i++) for(j=0;j<120;j++); } void infrared() // 红外遥控模式 { // TODO: 在这里编写红外遥控代码 } void infrared_track() // 红外循迹模式 { // TODO: 在这里编写红外循迹代码 } void ultrasonic() // 超声波避障模式 { // TODO: 在这里编写超声波避障代码 } void main() { while(1) { if(IRIN == 0) // 判断是否接收到红外遥控信号 { delay(1000); // 延时等待稳定信号 if(IRIN == 0) // 还是低电平说明有信号 { infrared(); // 进入红外遥控模式 } } else // 没有接收到红外遥控信号 { switch(mode) // 根据模式选择执行不同的功能 { case 0: // 红外循迹模式 infrared_track(); break; case 1: // 超声波避障模式 ultrasonic(); break; default: // 默认为红外循迹模式 mode = 0; infrared_track(); break; } } } } ``` 在上面的代码中,我们使用了一个变量 `mode` 来记录当前模式,当接收到红外遥控信号时,进入红外遥控模式;否则,在不同的模式下循环执行相应的功能。当 `mode` 变量值非法时,我们默认为红外循迹模式。 当然,这只是一个简单的示例代码,实际上还需要根据具体的硬件设备和功能需求进行相应的调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值