久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4109|回復: 3
打印 上一主題 下一主題
收起左側

C51單片機的智能小車程序設計 含遙控端與小車端 注釋很詳細

[復制鏈接]
跳轉到指定樓層
樓主
電賽用的程序設計,包含了轉彎、無線控制、循跡和人體溫度檢測

單片機源程序如下:
  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;                                         //發送按鍵
  10. sbit beep=P0^2;                                        //喇叭
  11. sbit LED=P1^7;                        //發送數據時顯示燈
  12. extern Tem;

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

  19. void main()
  20. {
  21.          uchar Rx_Buf[32];          //接收到的數據暫存器,最多32字節數據
  22.    uchar Tx_Buf[]={1};        //發送的信息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))         //等待接收數據,返回1則接收到數據,在等待接收數據期間,可以隨時變成發送模式  
  36.             {
  37.                         if(KEY8==0)                                                 //按了按鍵8,則變成發送模式,發送對應數據,發送完后變成接收模式
  38.                         {        
  39.                                 delay_ms(5);//消抖動
  40.                                 if(KEY8==0)
  41.                                 {
  42.                                          while(!KEY8);
  43.                                         TX_Mode();         //發送模式
  44.                                     nRF24L01_TxPacket(Tx_Buf);                //發送命令數據
  45.                                         LED=0;
  46.                                     delay_ms(300);
  47.                                         LED=1;
  48.                                     delay_ms(300);                                        //發送后LED6閃一下
  49.                                         break;                                                        //退出最近的循環,從而變回接收模式,這句關鍵
  50.                                  }        
  51.                          }
  52.                  }
  53. if(Rx_Buf[0]==1)                                                           //若接收到對應的數據則實現對應功能
  54. {
  55. Rx_Buf[0]=0;                                //清空數據
  56.    LED=1;
  57.          delay_ms(300);
  58.          LED=0;
  59. delay_ms(300);                                //接收到數據 后閃爍         
  60. }
  61.                 switch(Rx_Buf[0])                                //對數據進行分析來控制燈亮
  62.                 {
  63.                         case 0:
  64.                                 break;
  65.                         case 1:
  66.                                 Rx_Buf[0]=0;                                //清空數據
  67.                                 m1 = 0;
  68.                                 m2 = 0;
  69.                                 m3 = 0;
  70.                                 m4 = 0;
  71.                                 break;
  72.                         case 2:
  73.                                 Rx_Buf[0]=0;                                //清空數據
  74.                                 M_up();                                                        //前進
  75.                                 break;
  76.                         case 3:
  77.                                 Rx_Buf[0]=0;                //清空數據
  78.                                 M_back();                                //后退
  79.                                 break;
  80.                         case 4:
  81.                                 Rx_Buf[0]=0;                                //清空數據
  82.                                 M_left();                                                //向左行駛
  83.                                 break;
  84.                         case 5:
  85.                                 Rx_Buf[0]=0;     //清空數據
  86.                                 M_right();                        //向右行駛
  87.                                 break;
  88.                         case 6:
  89.                                 Rx_Buf[0]=0;          //清空數據
  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. }

復制代碼


  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 ;                                         //發送數據時顯示燈+接收到數據后的功能實現燈


  15. void delay_ms(uint z)                        //延時函數
  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};        //發送的信息1
  24.    uchar Rx_Buf[32];          //接收到的數據暫存器,最多32字節數據
  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))         //等待接收數據,返回1則接收到數據,在等待接收數據期間,可以隨時變成發送模式  
  39.             {

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


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


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


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


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


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


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


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

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

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线看片 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 91福利网址 | 手机av免费在线 | 亚洲国产精品自拍 | 一区二区三区四区在线视频 | 国产精品日韩在线观看一区二区 | 国产精品成人品 | 国产黄色在线观看 | 精品久久国产 | 中文字幕亚洲精品 | a在线视频观看 | 91久久夜色 | 九九精品视频在线 | 亚洲国产精品久久久久婷婷老年 | 亚洲欧美综合精品久久成人 | 国产一区二区高清在线 | 国产精品一区在线 | 伊人最新网址 | 久久免费视频2 | 国产久 | 亚洲在线免费观看 | 国产资源在线观看 | 国产在线aa| 91久久精品一区 | 男女羞羞的网站 | 狠狠干av | 亚洲精品乱码久久久久久按摩观 | 中文字幕亚洲精品 | 国产精品一区一区 | 一区二区三区视频在线观看 | 精品一区二区在线看 | 成人网在线观看 | 久久久久久久久99精品 | 精品久久久久久久久久久久 | 精品国产一区二区三区久久狼黑人 | av一级久久| 免费在线性爱视频 | 久久久亚洲综合 | 欧美乱做爰xxxⅹ久久久 | www久久国产|