51单片机智能小车 |
您所在的位置:网站首页 › C51开发板超声波模块 › 51单片机智能小车 |
材料: (1)51单片机开发板 (2)l298n电机驱动模块1个 (3)四个电机 (4)超声波模块 一、组装 (1)L298N电机驱动模块与开发板接线如下图:
(2)超声波模块接线:
超声波的 ECHO端 插在了P2.6口 超声波传感器的使用方法: 控制口发一个10US 以上的高电平,就可以在接收口等待高电平输出. 一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的, 此时就为此次测距的时间,方可算出距离.如此不断的周期测, 就可以达到你移动测量的值了,测距范围为2-400cm main.c #include "reg52.h" #include "mycaobo.h" typedef unsigned char u8; typedef unsigned int u16; sbit MOTOA=P1^0; sbit MOTOB=P1^1; //右侧电机 sbit MOTOC=P1^2; sbit MOTOD=P1^3; //左侧电机 //定义超声波模块控制管脚 sbit TRIG = P2^5;//发送端 sbit ECHO = P2^6;//接收端 void delay(u16 us) { while(us--); } void delay_10us(u16 us) { while(us--); } //ms延时函数ms void delay_ms(u16 ms) { u16 i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void Car_ForwardRun(void)//前进 { MOTOA=1; MOTOB=0; MOTOC=1; MOTOD=0; } void Car_BackwardRun(void)//后退 { MOTOA=0; MOTOB=1; MOTOC=0; MOTOD=1; } void Car_LeftRun(void)//左转 { MOTOA=1; MOTOB=0; MOTOC=0; MOTOD=1; } void Car_RightRun(void)//右转 { MOTOA=0; MOTOB=1; MOTOC=1; MOTOD=0; } void Car_StopRun(void)//停止 { MOTOA=0; MOTOB=0; MOTOC=0; MOTOD=0; } u8 overflow_flag=0; //标志定时器是否溢出 void delay_20us(void) //延时20us { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } void Timer0Init(void) { TMOD|=0X01;//选择为定时器0模式 TH0=0; TL0=0; ET0=1;//打开定时器1中断允许 EA=1;//打开总中断 TR0=0; } void Timer0() interrupt 1 { overflow_flag=1;//溢出标志位置1 DigDisplay(); } u16 Get_Distance(void) { u16 time_data,out_TH0,out_TL0; TRIG = 0; // 先给控制端初始化为0 Timer0Init(); //初始化定时器 overflow_flag=0;//置溢出标志位为0 TRIG = 1; delay_20us(); TRIG = 0; //等待接收端出现高电平 while(!ECHO); TR0 = 1; //启动计时器 开始计时 while(ECHO); //等待高电平结束 TR0 = 0; //关闭低电平 out_TH0 = TH0; //取定时器的值 out_TL0 = TL0; out_TH0 =20&&distane=10&&distane=0&&distane |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |