标题:
C51单片机的智能小车程序设计 含遥控端与小车端 注释很详细
[打印本页]
作者:
paredes
时间:
2020-11-24 14:14
标题:
C51单片机的智能小车程序设计 含遥控端与小车端 注释很详细
电赛用的程序设计,包含了转弯、无线控制、循迹和人体温度检测
单片机源程序如下:
#include "reg52.h"
#include "nRF24L01.h"
#include "control.h"
#include "MLX90614.h"
#include "Ultrasonic.h"
#include "Ultrasonic2.h"
#define uint unsigned int
#define uchar unsigned char
sbit KEY8=P1^6; //发送按键
sbit beep=P0^2; //喇叭
sbit LED=P1^7; //发送数据时显示灯
extern Tem;
void delay_ms(uint z) //延时函数
{
uint y;
while(z--)
for(y=110;y>0;y--);
}
void main()
{
uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据
uchar Tx_Buf[]={1}; //发送的信息1
init_NRF24L01();
LED=1; //初始灯6熄灭
while(NRF24L01_Check()) //检查不到24l01则报警
{
beep=1;
delay_ms(200);
beep=0;
delay_ms(200);
}
while(1)
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式
{
if(KEY8==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY8==0)
{
while(!KEY8);
TX_Mode(); //发送模式
nRF24L01_TxPacket(Tx_Buf); //发送命令数据
LED=0;
delay_ms(300);
LED=1;
delay_ms(300); //发送后LED6闪一下
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
}
if(Rx_Buf[0]==1) //若接收到对应的数据则实现对应功能
{
Rx_Buf[0]=0; //清空数据
LED=1;
delay_ms(300);
LED=0;
delay_ms(300); //接收到数据 后闪烁
}
switch(Rx_Buf[0]) //对数据进行分析来控制灯亮
{
case 0:
break;
case 1:
Rx_Buf[0]=0; //清空数据
m1 = 0;
m2 = 0;
m3 = 0;
m4 = 0;
break;
case 2:
Rx_Buf[0]=0; //清空数据
M_up(); //前进
break;
case 3:
Rx_Buf[0]=0; //清空数据
M_back(); //后退
break;
case 4:
Rx_Buf[0]=0; //清空数据
M_left(); //向左行驶
break;
case 5:
Rx_Buf[0]=0; //清空数据
M_right(); //向右行驶
break;
case 6:
Rx_Buf[0]=0; //清空数据
M_stop(); //停止
break;
case 7:
Rx_Buf[0]=0; //停止
delay(20); //延时程序 1
LCD_show(16,2);
LcdBusy();
LCD_init ();
display(Tem); // 显示子程序
SMB_ack();
break;
case 8:
Rx_Buf[0]=0; //停止
Ultrasonic(); //小车端超声波检测
Ultrasonic2(); //人体端超声波检测
break;
}
}
}
复制代码
#include "reg52.h"
#include "nRF24L01.h"
#define uint unsigned int
#define uchar unsigned char
sbit KEY1 = P2^0;
sbit KEY2 = P2^1;
sbit KEY3 = P2^2;
sbit KEY4 = P2^3;
sbit KEY5 = P2^4;
sbit KEY6 = P2^5;
sbit KEY7 = P2^6;
sbit KEY8 = P2^7;
sbit beep = P1^6; //喇叭
sbit LED = P1^7 ; //发送数据时显示灯+接收到数据后的功能实现灯
void delay_ms(uint z) //延时函数
{
uint y;
while(z--)
for(y=110;y>0;y--);
}
void main()
{
uchar Tx_Buf1[]={1,2,3,4,5,6,7,8}; //发送的信息1
uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据
init_NRF24L01();
LED=0; //初始灯6熄灭
beep = 0;
while(NRF24L01_Check()) //检查不到24l01则报警
{
beep=0;
delay_ms(200);
beep=1;
delay_ms(200);
}
while(1)
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式
{
if(KEY1==0) //按了按键1,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY1==0)
{
while(!KEY1);
TX_Mode(); //发送模式
Tx_Buf1[0]=1; //将1发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50); //发送后LED1闪一下
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY2==0)
{
delay_ms(5);//消抖动
if(KEY2==0)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=2; //将2发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY2==1)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=6; //将2发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
}
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY3==0)
{
delay_ms(5);//消抖动
if(KEY3==0)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=3; //将3发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY3==1)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=6; //将6发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
}
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY4==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY4==0)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=4; //将4发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY4==1)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=6; //将6发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
}
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY5==0)
{
delay_ms(5);//消抖动
if(KEY5==0)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=5; //将5发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY5==1)
{
TX_Mode(); //发送模式
Tx_Buf1[0]=6; //将6发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
}
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY6==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY6==0)
{
while(!KEY6);
TX_Mode(); //发送模式
Tx_Buf1[0]=6; //将6发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY7==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY7==0)
{
while(!KEY7);
TX_Mode(); //发送模式
Tx_Buf1[0]=7; //将7发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY8==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY8==0)
{
while(!KEY8);
TX_Mode(); //发送模式
Tx_Buf1[0]=8; //将7发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
}
if(Rx_Buf[0]==1) //若接收到对应的数据则实现对应功能
{
Rx_Buf[0]=0; //清空数据
LED=0;
delay_ms(300);
LED=1;
delay_ms(300); //接收到数据 后闪烁
}
}
}
复制代码
51hei.png
(3.92 KB, 下载次数: 98)
下载附件
2020-11-24 16:46 上传
所有程序51hei提供下载:
智能小车.zip
(137.92 KB, 下载次数: 75)
2020-11-24 14:13 上传
点击文件名下载附件
小车
下载积分: 黑币 -5
作者:
51hei团团
时间:
2020-11-24 16:48
程序很好,可惜没有原理图啊
作者:
cwb2038
时间:
2022-7-14 10:53
谢谢分享·,能提供原理图就更好了!
作者:
cwb2038
时间:
2022-9-4 16:07
谢谢分享,可惜没有原理图!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1