首页 > 其他分享 >51小车红外循迹及蓝牙代码

51小车红外循迹及蓝牙代码

时间:2024-07-15 11:30:26浏览次数:18  
标签:PWML __ 循迹 51 void 蓝牙 && include PWMR

 

main.c

#include <REGX52.H>
#include "time.h"
#include "motordriver.h"
#include "MoveState.h"
#include "follow.h"
#include "lanya.h"


extern unsigned int PWMR;
extern unsigned int PWML;
unsigned int recive=0;

void main()
{
	  UART_Init();
	if(recive==1)
	{
		PWML=15;
		PWMR=15;
	  go();
	}
		if(recive==2)
	{
		PWML=15;
		PWMR=15;
	  back();
	}
	if(recive==3)
	{
		PWML=15;
		PWMR=0;
	  left();
	}
	if(recive==4)
	{
		PWML=0;
		PWMR=15;
	  right();
	}
	if(recive==5)
	{
		PWML=15;
		PWMR=15;
	  stop();
	}
	if(recive==6)
	{
		PWML=15;
		PWMR=15;
	  left1();
	}
	if(recive==6)
	{
		PWML=15;
		PWMR=15;
	  right1();
	}
		if(recive==7)
	{
		PWML=15;
		PWMR=10;
	  go();
	}
	if(recive==8)//zuozhuan
	{
		PWML=10;
		PWMR=15;
	  go();
	}
	
		Timer0_Init();
		EA=1;
		while(1)
		{
			track();
			
		}
	
	
}

void Uart_Routine(void)  interrupt 4
{
	
	if(RI==1)
	{
		RI=0;
	    recive= SBUF;		//½ÓÊÕÊý¾Ý
		
	}
}



time.c

#include <REGX52.H>

sbit ENA=P1^2;    //定义左电机
sbit ENB=P1^0;    //定义右电机
unsigned int PWMR=0,PWML=0,T0Count=0;
void Timer0_Init()
{
	TMOD=0x01;  //0000 0001	
	TH0=(64536-100)/256;
	TL0=(64536-100)%256;
	TF0=0;
	TR0=1;//打开定时器
	ET0=1;//打开定时器0中断允许
	EA=1;
	PT0=0;
}


void Timer0_Routine() interrupt 1  //中断函数
{

	TL0 = (64536-100)%256;		
	TH0 = (64536-100)/256;		
	T0Count++;
	if(T0Count<PWMR)
	{
	ENB=1;
	}
	else
	{
	ENB=0;
	}
	if(T0Count<PWML)
	{
	ENA=1;
	}
	else
	{
	ENA=0;
	}
	if(T0Count>=100)
	{
		T0Count=0;
	}
}


time.h

#ifndef __TIME_H__
#define __TIME_H__

void Timer0Init(void);

#endif


motordirver.c

#include <REGX52.H>

sbit IN1=P0^1;
sbit IN2=P0^2;
sbit IN3=P0^4;
sbit IN4=P0^3;

void leftmotorforward()
{IN1=0;IN2=1;}//×óµç»úÕýת
void rightmotorforward()
{IN3=0;IN4=1;}//ÓÒµç»úÕýת
void leftmotorstop()
{IN1=1;IN2=1;}//×óµç»úÍ£Ö¹
void rightmotorstop()
{IN3=1;IN4=1;}//×óµç»úÍ£Ö¹
void leftmotorback()
{IN1=1;IN2=0;}//×óµç»ú·´×ª
void rightmotorback()
{IN3=1;IN4=0;}//ÓÒµç»ú·´×ª

motordirver.h

#ifndef __MOTORDRIVER_H__
#define __MOTORDRIVER_H__

void leftmotorforward();
void rightmotorforward();
void leftmotorstop();
void rightmotorstop();
void leftmotorback();
void rightmotorback();

#endif

follow.c

#include <REGX52.H>
#include "time.h"
#include "Delay.h"
#include "MoveState.h"
 
sbit d5=P2^0;
sbit d4=P2^1;
sbit d3=P2^2;
sbit d2=P2^3;
sbit d1=P2^4;


extern unsigned int PWMR;
extern unsigned int PWML;



void track()//Ãð1  ÁÁ0  ¼ì²âµ½ºÚÏßΪÃð
{
	if(d1==0&&d2==0&&d3==0&&d4==0&&d5==1)
	{
		PWML=10;
		PWMR=10;
		go();
	}
	if(d1==0&&d2==1&&d3==1&&d4==0&&d5==1)
	{
		PWML=10;
		PWMR=10;
		go();
	}
	if(d1==0&&d2==0&&d3==0&&d4==0&&d5==0)
	{
		PWML=10;
		PWMR=10;
		go();
	}
	if(d1==1&&d2==1&&d3==1&&d4==1&&d5==1)
	{
		PWML=16;
		PWMR=10;
		right1();
	}
	if(d1==0&&d2==0&&d3==1&&d4==1&&d5==0)
	{
		PWML=16;
		PWMR=10;
		right1();
	}
	if(d1==1&&d2==1&&d3==0&&d4==0&&d5==0)
	{
		PWML=10;
		PWMR=16;
		left1();
	}  
 
	if(d1==0&&d2==0&&d3==0&&d4==1&&d5==0)
	{
		PWML=14;
		PWMR=0;
		go();
	}
	if(d1==1&&d2==0&&d3==0&&d4==0&&d5==0)
	{
		PWML=0;
		PWMR=14;
		go();
	}
	if(d1==0&&d2==1&&d3==0&&d4==0&&d5==0)
	{
		PWML=6;
		PWMR=13;
		go();
	}
	if(d1==0&&d2==0&&d3==1&&d4==0&&d5==0)
	{
		PWML=13;
		PWMR=6;
		go();
	}
}

follow.h

#ifndef __DELAY_H__
#define __DELAY_H__

void track();
#endif

movestate.c

#include <REGX52.H>
#include "motordriver.h"


void go()
  {leftmotorforward();rightmotorforward();}
void left()
  {leftmotorstop();rightmotorforward();}
void right()
  {leftmotorforward();rightmotorstop();}
void stop()
  {leftmotorstop();rightmotorstop();}
void back()
  {leftmotorback();rightmotorback();}
void left1()
	{leftmotorback();rightmotorforward();}
void right1()
  {leftmotorforward();rightmotorback();}

movestate.h

#ifndef __MOVESTATE_H__
#define __MOVESTATE_H__

void go(void);
void left();
void right();
void stop();
void back();
void leftback();
void rightback();

#endif


lanya.c
#include <REGX52.H>

/**
  * @brief  ´®¿Ú³õʼ»¯£¬[email protected]
  * @param  ÎÞ
  * @retval ÎÞ
  */
void UART_Init()
{
	SCON = 0x50;           //·½Ê½1 8λÊý¾Ý ½ÓÊÕµØÖ·Õç±ð½ûÖ¹ ½ÓÊÕʹÄÜ 0101 0000
	PCON = 0x00;         //²¨ÌØÂʲ»Ôö±¶
	TMOD = 0x20;         //T1,8λ×Ô¶¯ÖØ×°
	TH1 = 0xfd;	  		 //²¨ÌØÂÊ9600
	TL1 = 0xfd;
	EA   = 1;
	ES   = 1;
	TR1 = 1;    
}

/**
  * @brief  ´®¿Ú·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý
  * @param  Byte Òª·¢Ë͵ÄÒ»¸ö×Ö½ÚÊý¾Ý
  * @retval ÎÞ
  */
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

///unsigned int recive=0;
//void Uart_Routine(void)  interrupt 4
//{
//	
//	if(RI==1)
//	{
//		RI=0;
//	    recive= SBUF;		//½ÓÊÕÊý¾Ý
//		
//	}
//}
lanya.h

#ifndef __LANYA_H__
#define __LANYA_H__

void UART_Init();
void UART_SendByte(unsigned char Byte);
#endif

标签:PWML,__,循迹,51,void,蓝牙,&&,include,PWMR
From: https://blog.csdn.net/2402_84189794/article/details/140417615

相关文章

  • 基于51单片机控制的简易交通灯设计
    在我们生活中,各个道口上红绿灯随处可见,是疏导交通车辆最常见和最有效的手段。通过查找资料能够发现这一科技从十九世纪就开始出现了。时间追溯到1858年,英国伦敦的各个重要街头就安装了红色和蓝色组成信号灯,它是以燃煤气为光源的扳手式信号灯,一开始是用作指挥马车的行驶,这应......
  • 牛客周赛 Round 51
    A.小红的同余思路+解法:找到唯一一个x满足2x%m=1(0<=x<m)  就可以推出(m+1)*2即可Code: #include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);intm;cin>>m;......
  • 关于51单片机LED板块的学习笔记
    首先看看常见LED灯的内部结构其次下面是MCU原理图上关于LED的部分右侧VCC代表正极,左接两组电阻,目的保护电路,然后是八个LED,左侧有P20到P27八个接口接到下图CPU的对应接口上。这是工作原理图CPU经过一系列的信号传输把信号以高低电平的形式传给LED,因为LED右端始终接正极V......
  • 题解:CodeForces 1511 C Yet Another Card Deck[暴力/模拟]
    CodeForces1511CC.YetAnotherCardDeckDescriptionYouhaveacarddeckof\(n\)cards,numberedfromtoptobottom,i. e.thetopcardhasindex\(1\)andbottomcard —index\(n\).Eachcardhasitscolor:the\(i\)-thcardhascolor\(a_i\......
  • lgP4513 小白逛公园
    有n个公园,小白对第i个公园的评分为A[i],有m次操作:1ab表示在[a,b]范围内选择一段连续的公园遛狗;2ab表示小白对公园a的评分修改为b;对于操作1,输出可以取得的最大评分。分析:线段树维护区间子段和。#include<bits/stdc++.h>usingllong=longlong;constintinf=1e......
  • 问题 I: 深入浅出学算法051-均分纸牌
    题目描述有N堆纸牌,编号分别为1,2,…,N。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。       移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上;在编号为N的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可......
  • 24暑假算法刷题 | Day9 | LeetCode 151. 反转字符串中的单词,28. 找出字符串中第一个匹
    目录151.反转字符串中的单词题目描述题解28.找出字符串中第一个匹配项的下标题目描述题解459.重复的子字符串题目描述题解卡码网55.右旋字符串题目描述题解151.反转字符串中的单词点此跳转题目链接题目描述给你一个字符串s,请你反转字符串中单词的顺......
  • 【80C51单片机】定时器/计数器的理解
    目录定时器/计数器1.定时器怎么定时简单理解(加1经过了多少时间)什么是时钟周期什么是机器周期2.如何设置定时基本结构相关寄存器1.TMOD寄存器2.TCON寄存器代码示例定时器/计数器80C51单片机的定时器和计数器(TimersandCounters)是其重要的外围设备,用于测量时间......
  • 【单片机毕业设计选题24061】-基于蓝牙的单片机通信系统
    系统功能:1、本系统硬件由两块STM32单片机,DHT11,光敏传感器,12864oled和HC-05蓝牙模块组成。2、单片机1+HC-05蓝牙模块做为主机,单片机2+HC-05蓝牙模块做为从机。3、单片机从机将采集到温湿度,光照强度等信息通过蓝牙发送给主机。主要功能模块原理图:电源时钟烧录接口:单......
  • 593、基于51单片机的测量仪(电压,电平,频率,LCD1602)
    完整资料或定制滴滴我(有偿)见文末。目录一、设计功能二、Proteus仿真三、原理图四、程序源码五、资料包括一、设计功能1、单片机型号:STC89C52/51、AT89C52/51、AT89S52/51等等都可通用。2、测量直流信号的电压,电压范围0~5V;3、测量信号的TTL电平,给出高低电......