当前位置: 首页 > news >正文

【【超声波避障小车代码】】

超声波避障小车代码

#include <reg51.h> 								//通用51头文件
#include <intrins.h>							//使用了_nop()_函数#define uchar unsigned char				//用 uchar 表示 unsigned char 类型
#define uint	unsigned int				//用 uint  表示 unsigned int  类型sbit ENA	= P0^6;
sbit IN1	=	P3^2;
sbit IN2	= P3^3;
sbit IN3	=	P3^4;
sbit IN4 	= P3^5;
sbit ENB	= P2^0;				sbit Echo = P1^1;									//超声波模块 Echo 接单片机P0.6
sbit Trig = P1^2;									//超声波模块 Trig 接单片机P0.7sbit DJ		= P1^0;void turnleft();
void turnright();
void straight();
void stop();
void count();
void run();
void hcsr04();
void delayms(uint ms);uint stime = 0;									  //测距数据,距离所用时间变量
uint timer = 0;								   	//定时器1,计时变量
uint timercar = 0;
uint S = 0;												//距离
uchar flag =0;										//定时器0溢出标志
uchar s_bai,s_shi,s_ge;						//距离数据,百位,十位,个位
uchar PWMA,PWMB;
uint counter;
uchar i,j;
uchar jiaodu;void  main()
{  TMOD|=0x11;		   			//定时器0定时器1,工作方式1TH0=0;TL0=0;          TH1=0xFE;		   				//500us定时TL1=0x33;ET0=1;            		//定时器0中断使能ET1=1;			   				//定时器1中断使能TR1=1;			   				//定时器1开始计时EA=1;			   					//开启总中断jiaodu = 3;while(1){hcsr04();						count();					 //计算距离run();}
}void delayms(uint ms)
{uint msi,msj;for(msi = 0;msi < ms;msi++)for(msj = 0;msj < 112;msj++);
}void run()
{if(jiaodu ==3 && S >= 15){straight();hcsr04();count();}else if(jiaodu ==3 && S < 15){stop();jiaodu = 2;delayms(200);hcsr04();count();}if(jiaodu == 2 && S >=15){turnright();delayms(500);jiaodu =3;delayms(200);hcsr04();count();}else if(jiaodu == 2 && S < 15){jiaodu = 4;delayms(200);hcsr04();count();}if(jiaodu == 4 && S >=15){turnleft();delayms(500);jiaodu =3;delayms(200);hcsr04();count();}else if(jiaodu == 4 && S <15){jiaodu =3;delayms(200);hcsr04();count();}
}
void straight()	//PWM 15
{IN1 = 1;IN2 = 0;PWMA = 25;IN3 = 1;IN4 = 0;PWMB = 25;
}
void turnleft() //PWM 60
{IN1 = 0;IN2 = 1;PWMA = 25;IN3 = 1;IN4 = 0;PWMB = 25;
}
void turnright()	//PWM 60
{IN1 = 1;IN2 = 0;PWMA = 25;IN3 = 0;IN4 = 1;PWMB = 25;
}
void stop()	//PWM 0
{IN1 = 0;IN2 = 0;PWMA = 0;IN3 = 0;IN4 = 0;PWMB = 0;
}
void hcsr04()
{Trig=1;			              _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 						//大于10us的触发信号Trig=0;while(!Echo);				//当Echo为零时等待TR0=1;			    			//开启计数while(Echo);					//当Echo为1时,计时并等待TR0=0;								//关闭计时
}
void count(void)
{stime=TH0*256+TL0;			//计数器每加一次,1usTH0=0;TL0=0;									//清零定时器0计数S=(stime*1.8)/100;      //换算距离,单位CM
}
void Tmr0_isr() interrupt 1  //T0中断用来计数器溢出,超过测距范围
{flag=1;							 			 //中断溢出标志
}void Tmr1_isr() interrupt 3 //T1中断用来扫描数码管和计500ms测距
{TH1=0xFE;							//500us中断TL1=0x33;i++;j++;counter++;//中断次数,即:多少个0.5msif(counter <= jiaodu) DJ = 1;//高电平占空比由变量jiaodu控制,jiaodu=1时高电平0.5ms,jiaodu=5时高电平2.5msif(counter > jiaodu && counter <= 40) DJ = 0;//低电平占空比,jiaodu=1时低电平19.5ms,jiaodu=5时低电平17.5msif(counter > 40) counter = 0;//脉宽20msif(i < PWMA){ENA = 1;}else {ENA = 0;if(i >= 100){i = 0;}}if(j < PWMB){ENB = 1;}else {ENB = 0;if(j >= 100){j = 0;}}
}          
http://www.lryc.cn/news/130765.html

相关文章:

  • TDI(Time Delay Integration)
  • RHCE——一、安装部署及例行性工作
  • 服务器数据库中了360后缀勒索病毒怎么办?360后缀勒索病毒的加密形式
  • 期权就是股指期货吗,哪个好做一点?
  • week32
  • 【数据库】P1 数据库基本常识
  • c语言——计算两个数的乘积
  • 单机模型并行最佳实践
  • 编程练习(3)
  • PyTorch学习笔记(十三)——现有网络模型的使用及修改
  • Python爬虫的scrapy的学习(学习于b站尚硅谷)
  • “深入解析JVM:揭秘Java虚拟机的工作原理“
  • 【数据结构与算法】十大经典排序算法-归并排序
  • 基于深度学习创建-表情符号--附源码
  • .netcore grpc的proto文件字段详解
  • 带你了解建堆的时间复杂度
  • 人工智能原理(6)
  • 单片机模块化编程文件创建流程
  • docker image
  • 力扣75——单调栈
  • Webpack和Parcel详解
  • linux系统服务学习(六)FTP服务学习
  • 7.原 型
  • 【图像分类】理论篇(2)经典卷积神经网络 Lenet~Resenet
  • C++系列-内存模型
  • [管理与领导-30]:IT基层管理者 - 人的管理 - 向上管理,管理好你的上司,职业发展事半功倍。什么样的上司不值得跟随?
  • Java进阶篇--迭代器模式
  • 【CAM】CAM(Class Activation Mapping)——可视化CNN的特征定位
  • Maven教程_编程入门自学教程_菜鸟教程-免费教程分享
  • Gof23设计模式之模板方法模式