找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4126|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

C51單片機(jī)的智能小車程序設(shè)計 含遙控端與小車端 注釋很詳細(xì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:848368 發(fā)表于 2020-11-24 14:14 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
電賽用的程序設(shè)計,包含了轉(zhuǎn)彎、無線控制、循跡和人體溫度檢測

單片機(jī)源程序如下:
  1. #include "reg52.h"
  2. #include "nRF24L01.h"
  3. #include "control.h"
  4. #include "MLX90614.h"
  5. #include "Ultrasonic.h"
  6. #include "Ultrasonic2.h"


  7. #define uint unsigned int
  8. #define uchar unsigned char

  9. sbit KEY8=P1^6;                                         //發(fā)送按鍵
  10. sbit beep=P0^2;                                        //喇叭
  11. sbit LED=P1^7;                        //發(fā)送數(shù)據(jù)時顯示燈
  12. extern Tem;

  13. void delay_ms(uint z)                        //延時函數(shù)
  14. {
  15.         uint y;
  16.         while(z--)
  17.                 for(y=110;y>0;y--);
  18. }

  19. void main()
  20. {
  21.          uchar Rx_Buf[32];          //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)
  22.    uchar Tx_Buf[]={1};        //發(fā)送的信息1  
  23.          init_NRF24L01();
  24.          LED=1;                                //初始燈6熄滅   

  25.         while(NRF24L01_Check())                                        //檢查不到24l01則報警
  26.         {
  27.                 beep=1;
  28.                 delay_ms(200);
  29.                 beep=0;
  30.                 delay_ms(200);
  31.         }
  32.         while(1)
  33.         {        
  34.                 RX_Mode();                                                        //接收模式  
  35.                 while(!nRF24L01_RxPacket(Rx_Buf))         //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時變成發(fā)送模式  
  36.             {
  37.                         if(KEY8==0)                                                 //按了按鍵8,則變成發(fā)送模式,發(fā)送對應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
  38.                         {        
  39.                                 delay_ms(5);//消抖動
  40.                                 if(KEY8==0)
  41.                                 {
  42.                                          while(!KEY8);
  43.                                         TX_Mode();         //發(fā)送模式
  44.                                     nRF24L01_TxPacket(Tx_Buf);                //發(fā)送命令數(shù)據(jù)
  45.                                         LED=0;
  46.                                     delay_ms(300);
  47.                                         LED=1;
  48.                                     delay_ms(300);                                        //發(fā)送后LED6閃一下
  49.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  50.                                  }        
  51.                          }
  52.                  }
  53. if(Rx_Buf[0]==1)                                                           //若接收到對應(yīng)的數(shù)據(jù)則實現(xiàn)對應(yīng)功能
  54. {
  55. Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  56.    LED=1;
  57.          delay_ms(300);
  58.          LED=0;
  59. delay_ms(300);                                //接收到數(shù)據(jù) 后閃爍         
  60. }
  61.                 switch(Rx_Buf[0])                                //對數(shù)據(jù)進(jìn)行分析來控制燈亮
  62.                 {
  63.                         case 0:
  64.                                 break;
  65.                         case 1:
  66.                                 Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  67.                                 m1 = 0;
  68.                                 m2 = 0;
  69.                                 m3 = 0;
  70.                                 m4 = 0;
  71.                                 break;
  72.                         case 2:
  73.                                 Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  74.                                 M_up();                                                        //前進(jìn)
  75.                                 break;
  76.                         case 3:
  77.                                 Rx_Buf[0]=0;                //清空數(shù)據(jù)
  78.                                 M_back();                                //后退
  79.                                 break;
  80.                         case 4:
  81.                                 Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  82.                                 M_left();                                                //向左行駛
  83.                                 break;
  84.                         case 5:
  85.                                 Rx_Buf[0]=0;     //清空數(shù)據(jù)
  86.                                 M_right();                        //向右行駛
  87.                                 break;
  88.                         case 6:
  89.                                 Rx_Buf[0]=0;          //清空數(shù)據(jù)
  90.                                 M_stop();                                //停止
  91.                                 break;
  92.                         case 7:
  93.                                 Rx_Buf[0]=0;          //停止
  94.                                 delay(20);              //延時程序        1
  95.                                 LCD_show(16,2);
  96.                                 LcdBusy();
  97.                                 LCD_init ();
  98.                                 display(Tem);           // 顯示子程序
  99.                                 SMB_ack();        
  100.                                 break;
  101.                         case 8:
  102.                                 Rx_Buf[0]=0;          //停止
  103.                                 Ultrasonic();  //小車端超聲波檢測
  104.                                 Ultrasonic2(); //人體端超聲波檢測
  105.                                 break;
  106.                 }                 
  107.         }
  108. }

復(fù)制代碼


  1. #include "reg52.h"
  2. #include "nRF24L01.h"

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. sbit KEY1 = P2^0;
  6. sbit KEY2 = P2^1;
  7. sbit KEY3 = P2^2;
  8. sbit KEY4 = P2^3;
  9. sbit KEY5 = P2^4;
  10. sbit KEY6 = P2^5;
  11. sbit KEY7 = P2^6;
  12. sbit KEY8 = P2^7;

  13. sbit beep = P1^6;                                        //喇叭
  14. sbit LED = P1^7 ;                                         //發(fā)送數(shù)據(jù)時顯示燈+接收到數(shù)據(jù)后的功能實現(xiàn)燈


  15. void delay_ms(uint z)                        //延時函數(shù)
  16. {
  17.         uint y;
  18.         while(z--)
  19.                 for(y=110;y>0;y--);
  20. }

  21. void main()
  22. {
  23.    uchar Tx_Buf1[]={1,2,3,4,5,6,7,8};        //發(fā)送的信息1
  24.    uchar Rx_Buf[32];          //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)
  25.    init_NRF24L01();
  26.    LED=0;                                //初始燈6熄滅  
  27.         beep = 0;
  28.         while(NRF24L01_Check())                                //檢查不到24l01則報警
  29. {
  30.     beep=0;
  31.                 delay_ms(200);
  32.                 beep=1;
  33.                 delay_ms(200);
  34. }

  35.         while(1)
  36.         {        
  37.                 RX_Mode();                                                        //接收模式  
  38.                 while(!nRF24L01_RxPacket(Rx_Buf))         //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時變成發(fā)送模式  
  39.             {

  40.                         if(KEY1==0)                                                 //按了按鍵1,則變成發(fā)送模式,發(fā)送對應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
  41.                         {        
  42.                                 delay_ms(5);//消抖動
  43.                                 if(KEY1==0)
  44.                                 {
  45.                                          while(!KEY1);
  46.                                         TX_Mode();                                                 //發(fā)送模式
  47.                                         Tx_Buf1[0]=1;                                        //將1發(fā)送過去
  48.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  49.                                         LED=0;
  50.                                     delay_ms(50);
  51.                                         LED=1;
  52.                                     delay_ms(50);                                        //發(fā)送后LED1閃一下
  53.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  54.                                  }        
  55.                          }


  56.                          else if(KEY2==0)                                         
  57.                          {        
  58.                                 delay_ms(5);//消抖動
  59.                                 if(KEY2==0)
  60.                                 {
  61.                                         TX_Mode();                                                 //發(fā)送模式
  62.                                         Tx_Buf1[0]=2;                                        //將2發(fā)送過去
  63.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  64.                                         LED=0;
  65.                             delay_ms(50);
  66.                                         LED=1;
  67.                                         delay_ms(50);
  68.                                         if(KEY2==1)
  69.                                         {
  70.                                                 TX_Mode();                                                 //發(fā)送模式
  71.                                         Tx_Buf1[0]=6;                                        //將2發(fā)送過去
  72.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  73.                                         }
  74.                                         break;                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  75.                                  }        
  76.                           }


  77.                           else if(KEY3==0)                                                
  78.                           {        
  79.                                 delay_ms(5);//消抖動
  80.                                 if(KEY3==0)
  81.                                 {
  82.                                         TX_Mode();                                                 //發(fā)送模式
  83.                                         Tx_Buf1[0]=3;                                        //將3發(fā)送過去
  84.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  85.                                         LED=0;
  86.                                     delay_ms(50);
  87.                                         LED=1;
  88.                                     delay_ms(50);
  89.                                         if(KEY3==1)
  90.                                         {
  91.                                                 TX_Mode();                                                 //發(fā)送模式
  92.                                         Tx_Buf1[0]=6;                                        //將6發(fā)送過去
  93.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  94.                                         }
  95.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  96.                                  }        
  97.                           }


  98.                           else if(KEY4==0)                                                 //按了按鍵8,則變成發(fā)送模式,發(fā)送對應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
  99.                           {        
  100.                                 delay_ms(5);//消抖動
  101.                                 if(KEY4==0)
  102.                                 {
  103.                                         TX_Mode();                                                 //發(fā)送模式
  104.                                         Tx_Buf1[0]=4;                                        //將4發(fā)送過去
  105.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  106.                                         LED=0;
  107.                                     delay_ms(50);
  108.                                         LED=1;
  109.                                     delay_ms(50);
  110.                                         if(KEY4==1)
  111.                                         {
  112.                                                 TX_Mode();                                                 //發(fā)送模式
  113.                                         Tx_Buf1[0]=6;                                        //將6發(fā)送過去
  114.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  115.                                         }
  116.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  117.                                  }        
  118.                           }


  119.                                 else if(KEY5==0)                                                
  120.                           {        
  121.                                 delay_ms(5);//消抖動
  122.                                 if(KEY5==0)
  123.                                 {
  124.                                         TX_Mode();                                                 //發(fā)送模式
  125.                                         Tx_Buf1[0]=5;                                        //將5發(fā)送過去
  126.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  127.                                         LED=0;
  128.                                     delay_ms(50);
  129.                                         LED=1;
  130.                                     delay_ms(50);
  131.                                         if(KEY5==1)
  132.                                         {
  133.                                                 TX_Mode();                                                 //發(fā)送模式
  134.                                         Tx_Buf1[0]=6;                                        //將6發(fā)送過去
  135.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  136.                                         }
  137.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  138.                                  }        
  139.                           }


  140.                                 else if(KEY6==0)                                                 //按了按鍵8,則變成發(fā)送模式,發(fā)送對應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
  141.                           {        
  142.                                 delay_ms(5);//消抖動
  143.                                 if(KEY6==0)
  144.                                 {
  145.                                          while(!KEY6);
  146.                                         TX_Mode();                                                 //發(fā)送模式
  147.                                         Tx_Buf1[0]=6;                                        //將6發(fā)送過去
  148.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  149.                                         LED=0;
  150.                                     delay_ms(50);
  151.                                         LED=1;
  152.                                     delay_ms(50);                                       
  153.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  154.                                  }        
  155.                           }


  156.                                 else if(KEY7==0)                                                 //按了按鍵8,則變成發(fā)送模式,發(fā)送對應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
  157.                           {        
  158.                                 delay_ms(5);//消抖動
  159.                                 if(KEY7==0)
  160.                                 {
  161.                                          while(!KEY7);
  162.                                         TX_Mode();                                                 //發(fā)送模式
  163.                                         Tx_Buf1[0]=7;                                        //將7發(fā)送過去
  164.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  165.                                         LED=0;
  166.                                     delay_ms(50);
  167.                                         LED=1;
  168.                                     delay_ms(50);                                       
  169.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  170.                                  }        
  171.                           }


  172.                                 else if(KEY8==0)                                                 //按了按鍵8,則變成發(fā)送模式,發(fā)送對應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
  173.                           {        
  174.                                 delay_ms(5);//消抖動
  175.                                 if(KEY8==0)
  176.                                 {
  177.                                          while(!KEY8);
  178.                                         TX_Mode();                                                 //發(fā)送模式
  179.                                         Tx_Buf1[0]=8;                                        //將7發(fā)送過去
  180.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  181.                                         LED=0;
  182.                                     delay_ms(50);
  183.                                         LED=1;
  184.                                     delay_ms(50);                                       
  185.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  186.                                  }        
  187.                           }

  188.                  }
  189.                  if(Rx_Buf[0]==1)                                                           //若接收到對應(yīng)的數(shù)據(jù)則實現(xiàn)對應(yīng)功能
  190.                  {
  191.                      Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  192.                      LED=0;
  193.                           delay_ms(300);
  194.                           LED=1;
  195.                           delay_ms(300);                        //接收到數(shù)據(jù) 后閃爍         
  196.                  }
  197.         }
  198. }
復(fù)制代碼

所有程序51hei提供下載:
智能小車.zip (137.92 KB, 下載次數(shù): 75)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:328014 發(fā)表于 2020-11-24 16:48 | 只看該作者
程序很好,可惜沒有原理圖啊
回復(fù)

使用道具 舉報

板凳
ID:673647 發(fā)表于 2022-7-14 10:53 | 只看該作者
謝謝分享·,能提供原理圖就更好了!
回復(fù)

使用道具 舉報

地板
ID:673647 發(fā)表于 2022-9-4 16:07 | 只看該作者
謝謝分享,可惜沒有原理圖!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表