C51——点动控制小车

1、main.c文件

#include "reg52.h"//代码里边没有,sbit i/o口,可以不要声明
//#include "intrins.h"//代码里边没有_nop_();可以不要该声明
#include "motor.h"
#include "dalay.h"
#include "uart.h"
#include "esp.h"



void main()
{
	Delay1000ms();

	UartInit();

 // init_esp();
  while(1){
		
    stop();
  }
	  while(1);
}

2、esp.c文件

#include "reg52.h"
#include "dalay.h"
#include "uart.h"

code char LJWL[]="AT+CWJAP=\"Xiaomi_7EC3\",\"xiaomi123\"\r\n";
code char LJFWQ[]="AT+CIPSTART=\"TCP\",\"192.168.31.152\",8880\r\n";
char KQTC[]="AT+CIPMODE=1\r\n";
char KQFS[]="AT+CIPSEND\r\n";
sbit D6=P3^6;
sbit D5=P3^7;
char AT_ok_flag;

void senddata(char c)
{
	SBUF=c;

  while(!TI);
  TI=0;
}
void sendstring(char*str)
{
  while(*str!='\0'){
    senddata(*str);
		str++;
  }
}

void init_esp()
{
Delay1000ms();
	sendstring(LJWL);

	while(!AT_ok_flag);
	D6=0;
	AT_ok_flag=0;
	D6=1;
  sendstring(LJFWQ);
	D5=1;
  while(!AT_ok_flag);
	AT_ok_flag=0;
	sendstring(KQTC);
	D6=0;
	while(!AT_ok_flag);
	AT_ok_flag=0;
  sendstring(KQFS);
	D6=1;
	while(!AT_ok_flag);
	

	if(AT_ok_flag){
    D6=0;
		D5=0;
  }

}

        2.1、esp.h文件

sbit D6=P3^6;
sbit D5=P3^7;

void init_esp();

 3、uart.c文件

#include "reg52.h"
#include "motor.h"
#include "string.h"
#include "dalay.h"
#include "esp.h"

#define SIZE 12
sfr AUXR=0x8E;//不认识AUXR,报错需要声明
char buffer[SIZE];


extern char AT_ok_flag;

void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR=0x01;
	SCON=0x50;//配置串口工作方式1,ren能接收01000000
	TMOD&=0x0F;
	TMOD|=0x20;//定时器1的工作方式8位自动重装配置
	TH1=0xFD;
	TL1=0xFD;//9600波特率的初值
	TR1=1;//启动定时器
	EA=1;//打开总中断
	ES=1;//允许串口中断
}



void uart_toutine()interrupt 4
{
  static int i = 0;
	char tmp;

	if(RI)
	{
  	RI = 0;
			tmp = SBUF;
			if(tmp=='M'||tmp=='W'||tmp=='O'||tmp=='L'){//WIFI GOT IP中既包含W、又包含F,底下条件满足FI,D5亮
				i = 0;
			}
			buffer[i++] = tmp;
			if(buffer[0] == 'O' && buffer[1] == 'K'){
				AT_ok_flag	= 1;
				memset(buffer, '\0', SIZE);
			}
			if(buffer[0] == 'L' && buffer[1] == '0'){
				D5	= 0;
				memset(buffer, '\0', SIZE);
			}
			if(buffer[0] == 'L' && buffer[1] == '1'){
				D5	= 1;
				memset(buffer, '\0', SIZE);
			}
      if(buffer[0] == 'M'){
        switch(buffer[1]){
          case '1':
					  goforward();
				  	Delay10ms();
					  break;
					case '2':
					  goleft();
					  Delay10ms();
					  break;
					case '3':
					  goright();
			  		Delay10ms();
					  break;
					case '4':
						goback();
					  Delay10ms();
					  break;
					default:
						stop();
					  break;
        }
      }
	}
	if(i == 12){
	memset(buffer, '\0', SIZE);
  i = 0;
  }

}

uart.h文件

void UartInit();		//9600bps@11.0592MHz

 4、motot.c文件

#include "reg52.h"

sbit right1=P3^2;
sbit right2=P3^3;
sbit left1=P3^4;
sbit left2=P3^5;

void goback()
{
  left1=1;
	left2=0;
	right1=1;
	right2=0;
}
void goforward()
{
  left1=0;
	left2=1;
	right1=0;
	right2=1;
}
void goleft()
{
  left1=0;
	left2=0;
	right1=0;
	right2=1;
}
void goright()
{
  left1=0;
	left2=1;
	right1=0;
	right2=0;
}
void stop()
{
  left1=0;
	left2=0;
	right1=0;
	right2=0;
}

motor.h文件

void goback();

void goforward();

void goleft();

void goright();

void stop();

 5、dalay.c(延时函数,名字打错,应该是delay自行修改)

#include "intrins.h"

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void Delay10ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 18;
	j = 235;
	do
	{
		while (--j);
	} while (--i);
}

dalay.h文件

	void Delay1000ms();
	void Delay10ms();

 编译时需要添加以上代码,再烧录单片机使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值