標(biāo)題:
C51單片機(jī)的智能小車程序設(shè)計(jì) 含遙控端與小車端 注釋很詳細(xì)
[打印本頁]
作者:
paredes
時(shí)間:
2020-11-24 14:14
標(biāo)題:
C51單片機(jī)的智能小車程序設(shè)計(jì) 含遙控端與小車端 注釋很詳細(xì)
電賽用的程序設(shè)計(jì),包含了轉(zhuǎn)彎、無線控制、循跡和人體溫度檢測(cè)
單片機(jī)源程序如下:
#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; //發(fā)送按鍵
sbit beep=P0^2; //喇叭
sbit LED=P1^7; //發(fā)送數(shù)據(jù)時(shí)顯示燈
extern Tem;
void delay_ms(uint z) //延時(shí)函數(shù)
{
uint y;
while(z--)
for(y=110;y>0;y--);
}
void main()
{
uchar Rx_Buf[32]; //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)
uchar Tx_Buf[]={1}; //發(fā)送的信息1
init_NRF24L01();
LED=1; //初始燈6熄滅
while(NRF24L01_Check()) //檢查不到24l01則報(bào)警
{
beep=1;
delay_ms(200);
beep=0;
delay_ms(200);
}
while(1)
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時(shí)變成發(fā)送模式
{
if(KEY8==0) //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
{
delay_ms(5);//消抖動(dòng)
if(KEY8==0)
{
while(!KEY8);
TX_Mode(); //發(fā)送模式
nRF24L01_TxPacket(Tx_Buf); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(300);
LED=1;
delay_ms(300); //發(fā)送后LED6閃一下
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
}
if(Rx_Buf[0]==1) //若接收到對(duì)應(yīng)的數(shù)據(jù)則實(shí)現(xiàn)對(duì)應(yīng)功能
{
Rx_Buf[0]=0; //清空數(shù)據(jù)
LED=1;
delay_ms(300);
LED=0;
delay_ms(300); //接收到數(shù)據(jù) 后閃爍
}
switch(Rx_Buf[0]) //對(duì)數(shù)據(jù)進(jìn)行分析來控制燈亮
{
case 0:
break;
case 1:
Rx_Buf[0]=0; //清空數(shù)據(jù)
m1 = 0;
m2 = 0;
m3 = 0;
m4 = 0;
break;
case 2:
Rx_Buf[0]=0; //清空數(shù)據(jù)
M_up(); //前進(jìn)
break;
case 3:
Rx_Buf[0]=0; //清空數(shù)據(jù)
M_back(); //后退
break;
case 4:
Rx_Buf[0]=0; //清空數(shù)據(jù)
M_left(); //向左行駛
break;
case 5:
Rx_Buf[0]=0; //清空數(shù)據(jù)
M_right(); //向右行駛
break;
case 6:
Rx_Buf[0]=0; //清空數(shù)據(jù)
M_stop(); //停止
break;
case 7:
Rx_Buf[0]=0; //停止
delay(20); //延時(shí)程序 1
LCD_show(16,2);
LcdBusy();
LCD_init ();
display(Tem); // 顯示子程序
SMB_ack();
break;
case 8:
Rx_Buf[0]=0; //停止
Ultrasonic(); //小車端超聲波檢測(cè)
Ultrasonic2(); //人體端超聲波檢測(cè)
break;
}
}
}
復(fù)制代碼
#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 ; //發(fā)送數(shù)據(jù)時(shí)顯示燈+接收到數(shù)據(jù)后的功能實(shí)現(xiàn)燈
void delay_ms(uint z) //延時(shí)函數(shù)
{
uint y;
while(z--)
for(y=110;y>0;y--);
}
void main()
{
uchar Tx_Buf1[]={1,2,3,4,5,6,7,8}; //發(fā)送的信息1
uchar Rx_Buf[32]; //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)
init_NRF24L01();
LED=0; //初始燈6熄滅
beep = 0;
while(NRF24L01_Check()) //檢查不到24l01則報(bào)警
{
beep=0;
delay_ms(200);
beep=1;
delay_ms(200);
}
while(1)
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時(shí)變成發(fā)送模式
{
if(KEY1==0) //按了按鍵1,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
{
delay_ms(5);//消抖動(dòng)
if(KEY1==0)
{
while(!KEY1);
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=1; //將1發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50); //發(fā)送后LED1閃一下
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
else if(KEY2==0)
{
delay_ms(5);//消抖動(dòng)
if(KEY2==0)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=2; //將2發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY2==1)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=6; //將2發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
}
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
else if(KEY3==0)
{
delay_ms(5);//消抖動(dòng)
if(KEY3==0)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=3; //將3發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY3==1)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=6; //將6發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
}
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
else if(KEY4==0) //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
{
delay_ms(5);//消抖動(dòng)
if(KEY4==0)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=4; //將4發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY4==1)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=6; //將6發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
}
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
else if(KEY5==0)
{
delay_ms(5);//消抖動(dòng)
if(KEY5==0)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=5; //將5發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
if(KEY5==1)
{
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=6; //將6發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
}
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
else if(KEY6==0) //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
{
delay_ms(5);//消抖動(dòng)
if(KEY6==0)
{
while(!KEY6);
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=6; //將6發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
else if(KEY7==0) //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
{
delay_ms(5);//消抖動(dòng)
if(KEY7==0)
{
while(!KEY7);
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=7; //將7發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
else if(KEY8==0) //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
{
delay_ms(5);//消抖動(dòng)
if(KEY8==0)
{
while(!KEY8);
TX_Mode(); //發(fā)送模式
Tx_Buf1[0]=8; //將7發(fā)送過去
nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)
LED=0;
delay_ms(50);
LED=1;
delay_ms(50);
break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
}
}
}
if(Rx_Buf[0]==1) //若接收到對(duì)應(yīng)的數(shù)據(jù)則實(shí)現(xiàn)對(duì)應(yīng)功能
{
Rx_Buf[0]=0; //清空數(shù)據(jù)
LED=0;
delay_ms(300);
LED=1;
delay_ms(300); //接收到數(shù)據(jù) 后閃爍
}
}
}
復(fù)制代碼
51hei.png
(3.92 KB, 下載次數(shù): 98)
下載附件
2020-11-24 16:46 上傳
所有程序51hei提供下載:
智能小車.zip
(137.92 KB, 下載次數(shù): 75)
2020-11-24 14:13 上傳
點(diǎn)擊文件名下載附件
小車
下載積分: 黑幣 -5
作者:
51hei團(tuán)團(tuán)
時(shí)間:
2020-11-24 16:48
程序很好,可惜沒有原理圖啊
作者:
cwb2038
時(shí)間:
2022-7-14 10:53
謝謝分享·,能提供原理圖就更好了!
作者:
cwb2038
時(shí)間:
2022-9-4 16:07
謝謝分享,可惜沒有原理圖!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1