找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 5329|回復(fù): 1
收起左側(cè)

藍(lán)牙與NRF24L01家電開關(guān)控制系統(tǒng)設(shè)計(jì)(單片機(jī)源碼+APP+報告與ppt)

[復(fù)制鏈接]
ID:238191 發(fā)表于 2018-9-2 10:55 | 顯示全部樓層 |閱讀模式
題目:藍(lán)牙與NRF24L01家電開關(guān)控制系統(tǒng)設(shè)計(jì)
PPT目錄:
1.系統(tǒng)概述
2.成品圖
3.系統(tǒng)結(jié)構(gòu)
4.模塊功能介紹
5.軟件設(shè)計(jì)
6.測試方案與結(jié)果
7.總結(jié)與分析
8.結(jié)束

制作出來的實(shí)物圖如下:
1.png

本系統(tǒng)結(jié)合藍(lán)牙4.0通信技術(shù)、nRF24L01無線技術(shù),設(shè)計(jì)一套12路無線遙控開關(guān)。
    特點(diǎn):具有成本低、功耗低、操作簡單、同時減少了不必要的工作量,運(yùn)用價值較高。
    缺點(diǎn):控制距離受限制。
0.jpg

3.模塊功能介紹
一.藍(lán)牙模塊
    接收手機(jī)發(fā)送指令,由單片機(jī)對接收到的指令識別,分別控制相應(yīng)的通道(開與關(guān))。

二.NRF24L01收發(fā)模塊
    發(fā)送和接收數(shù)據(jù) , 由單片機(jī)對接收到的數(shù)據(jù)進(jìn)行解碼,分別控制相應(yīng)的通道(開與關(guān))

三.12864液晶模塊

    顯示系統(tǒng)工作狀態(tài),方便人機(jī)對話。

四.上位機(jī)Ds18b20模塊

    檢測環(huán)境溫度,由單片機(jī)把溫度解析分別顯示在12864液晶顯示器。

五.上位機(jī)獨(dú)立按鍵

    切換顯示頁面,選擇通道開關(guān)信號,確定通道要發(fā)送的數(shù)據(jù)。


六.繼電器模塊

    小信號控制大信號的作用。

0.png

5.測試方案與結(jié)果
一.障礙區(qū)域測試:

    1.1.藍(lán)牙手機(jī)有效距離20以內(nèi)
    1.2.NRF24L01上位機(jī)有效距離50米以內(nèi)
   
二.無障礙區(qū)域測試:

    2.1.藍(lán)牙手機(jī)有效距離40以內(nèi)
    2.2.NRF24L01上位機(jī)有效距離100米以內(nèi)

一.總結(jié)與分析
        此次畢業(yè)設(shè)計(jì)的制作,鞏固我們在校期間所學(xué)的知識,提升了單片機(jī)編程能力和軟件調(diào)試經(jīng)驗(yàn),讓我們懂得自己的不足之處。        
        主要作用:增強(qiáng)開關(guān)智能化。
        特點(diǎn):具有成本低、功耗低、操作簡單、同時減少了不必要的工作量,運(yùn)用價值較高。
        不足之處:控制距離受限制,系統(tǒng)屬于單工傳輸狀態(tài),主機(jī)電路制作不夠精練。

無線主機(jī)與上位機(jī)源碼:
  1. #include "STC15F2K.H"
  2. #include "intrins.h"
  3. #include "delay.h"
  4. #include "io.h"
  5. #include "api.h"                                                                                                                                
  6. #include "shoujie.h"
  7. #include "12864.h"
  8. #include "rx_data.h"
  9. #include "lanya.h"


  10. /**************************************************
  11. 函數(shù):main()

  12. 描述:
  13.     主函數(shù)
  14. /**************************************************/
  15. void main(void)
  16. {
  17.         init_io();                                          // 初始化IO口
  18.         RX_Mode();                                             // 設(shè)置為接收模式   
  19.         LCD_init();                                  // 初始化液晶
  20.         SerialIni();                                  // 初始化定時器
  21.         while(1)
  22.         {                                                                                                               
  23.                 gnenqhuan();                          // 藍(lán)牙數(shù)據(jù)處理程序
  24.                 RX_MAIN();                                  // 判斷是否接收到開關(guān)數(shù)據(jù)
  25.             RX_MAIN1();                                  // 判斷是否接收到溫度數(shù)據(jù)
  26.                 sta = SPI_Read(STATUS);          // 讀狀態(tài)寄存器        
  27.         }
  28. }


  29. //
  30. //void t0() interrupt 1
  31. //{
  32. //        TR0=0;
  33. //
  34. //          Count1++;                  //0.5 MS 加一次               
  35. ///************PWM1與PWM2調(diào)速*****************/
  36. //               
  37. //        if(Count1>100)        {   Count1=0;    }         
  38. //        if(Count1<PWM1||Count1==PWM1){ dt_led = 1; }         //改變PWM1的值就可以改變大廳燈的亮度
  39. //        else                                 { dt_led = 0; }
  40. //
  41. ////        if(Count1<PWM2||Count1==PWM2){ ws_led = 1; }         //改變PWM2的值就可以改變臥室燈的亮度
  42. ////        else                                 { ws_led = 0; }
  43. ////
  44. ////        if(Count1<PWM3||Count1==PWM3){ sm_led = 1; }         //改變PWM3的值就可以改變睡眠燈的亮度
  45. ////        else                                 { sm_led = 0; }
  46. //        TR0=1;        
  47. //}
復(fù)制代碼

藍(lán)牙的頭文件:
  1. #ifndef         _lanya_h_
  2. #define         _lanya_h_

  3. int BBuffer[6] = {0};   //從串口接收的雙個數(shù)據(jù) (緩存區(qū))
  4. uchar j=0,shuju=1;
  5. //uchar Count1=0,PWM1=0,PWM2=0,PWM3=0;


  6. void SerialIni(){
  7.    
  8.     SCON = 0x50;     
  9.     AUXR &= 0xBE;   
  10.     AUXR |= 0x00;   
  11.     TMOD &= 0x0F;         
  12.     TMOD = 0x20;   
  13.     TH1  = 0xfd;   
  14.     TL1  = 0xfd;   

  15.     TR1=1;           //定時器1啟動
  16.     ES = 1;          //開放串口中斷
  17.     EA = 1;          //開放CPU中斷
  18. }

  19. void gnenqhuan()  
  20. {
  21.         
  22. if(shuju==1)
  23. {
  24.         while(BBuffer[0])
  25.         {
  26.                 switch(BBuffer[0])                                                                                    //遙控狀態(tài)
  27.                 {                                
  28.         
  29.                         case 101:  
  30.                                                 water_j = 0;
  31.                                                 lcd_com(0x80);        disp_chinese("飲水機(jī)狀態(tài):   開"); break; //飲水機(jī)開                           
  32.                         case 102:   water_j = 1;        
  33.                                             lcd_com(0x80);        disp_chinese("飲水機(jī)狀態(tài):   關(guān)"); break; //飲水機(jī)關(guān)
  34.                                                    
  35.                         case 103:  curtain = 0;        
  36.                                                 lcd_com(0x90);        disp_chinese("窗簾  狀態(tài):   開"); break; //窗簾開                  
  37.                         case 104:  curtain = 1;        
  38.                                                 lcd_com(0x90);        disp_chinese("窗簾  狀態(tài):   關(guān)"); break; //窗簾關(guān)
  39.                                                    
  40.                         case 105:  freezer = 0;               
  41.                                                 lcd_com(0x88);        disp_chinese("冰箱  狀態(tài):   開"); break; //冰箱開
  42.                         case 106:  freezer = 1;        
  43.                                                 lcd_com(0x88);        disp_chinese("冰箱  狀態(tài):   關(guān)"); break; //冰箱關(guān)

  44.                         case 107:  feng_s  = 0;        
  45.                                                 lcd_com(0x98);        disp_chinese("風(fēng)扇  狀態(tài):   開"); break; //風(fēng)扇開
  46.                         case 108:  feng_s  = 1;        
  47.                                                 lcd_com(0x98);        disp_chinese("風(fēng)扇  狀態(tài):   關(guān)"); break; //風(fēng)扇關(guān)

  48.                         case 109:  socket_1 = 0;        
  49.                                                 lcd_com(0x80);        disp_chinese("插座1 狀態(tài):   開"); break; //插座1開
  50.                         case 110:  socket_1 = 1;        
  51.                                                 lcd_com(0x80);        disp_chinese("插座1 狀態(tài):   關(guān)"); break; //插座1關(guān)
  52.                         
  53.                         case 111:  socket_2 = 0;        
  54.                                                 lcd_com(0x90);        disp_chinese("插座2 狀態(tài):   開"); break; //插座2開
  55.                         case 112:  socket_2 = 1;        
  56.                                                 lcd_com(0x90);        disp_chinese("插座2 狀態(tài):   關(guān)"); break; //插座2關(guān)
  57.                         
  58.                         case 113:  socket_3 = 0;        
  59.                                                 lcd_com(0x88);        disp_chinese("插座3 狀態(tài):   開"); break; //插座3開
  60.                         case 114:  socket_3 = 1;        
  61.                                                 lcd_com(0x88);        disp_chinese("插座3 狀態(tài):   關(guān)"); break; //插座3關(guān)
  62.                         
  63.                         case 115:  socket_4 = 0;        
  64.                                                 lcd_com(0x98);        disp_chinese("插座4 狀態(tài):   開"); break; //插座4開
  65.                         case 116:  socket_4 = 1;        
  66.                                                 lcd_com(0x98);        disp_chinese("插座4 狀態(tài):   關(guān)"); break; //插座4關(guān)

  67.                          case 117:  dt_led = 0;        
  68.                                                 lcd_com(0x80);        disp_chinese("大廳燈狀態(tài):   開"); break; //大廳燈開
  69.                         case 118:  dt_led = 1;        
  70.                                                 lcd_com(0x80);        disp_chinese("大廳燈狀態(tài):   關(guān)"); break; //大廳燈關(guān)

  71.                         case 120:  
  72.                                            clr_all();         
  73.                                            lcd_com(0x80);        disp_chinese("★藍(lán)牙智能開關(guān)  ");
  74.                                                                                 break;          //手機(jī)遙控狀態(tài)

  75.                         case 121:  RX_MAIN();                                  // 判斷是否接收到開關(guān)數(shù)據(jù)
  76.                                            RX_MAIN1();                                  // 判斷是否接收到溫度數(shù)據(jù)
  77.                                            sta = SPI_Read(STATUS);          // 讀狀態(tài)寄存器                                
  78.                                                                                 break;          //2.4G遙控狀態(tài)

  79.                     case 122:  sm_led = 0;        
  80.                                                 lcd_com(0x90);        disp_chinese("睡眠燈狀態(tài):   開"); break; //睡眠燈開
  81.                         case 123:  sm_led = 1;        
  82.                                                 lcd_com(0x90);        disp_chinese("睡眠燈狀態(tài):   關(guān)"); break; //睡眠燈關(guān)
  83.                         
  84.                         case 124:  ws_led = 0;        
  85.                                                 lcd_com(0x88);        disp_chinese("臥室燈狀態(tài):   開"); break; //臥室燈開
  86.                         case 125:  ws_led = 1;        
  87.                                                 lcd_com(0x88);        disp_chinese("臥室燈狀態(tài):   關(guān)"); break; //臥室燈關(guān)
  88.                                                                
  89.                         case 126:  socket_5 = 0;        
  90.                                                 lcd_com(0x88);        disp_chinese("插座5 狀態(tài):   開"); break; //插座5開
  91.                         case 127:  socket_5 = 1;        
  92.                                                 lcd_com(0x88);        disp_chinese("插座5 狀態(tài):   關(guān)"); break; //插座5關(guān)
  93.                
  94.                         default:break;
  95.                 }
  96.                                  
  97.         }
  98. }        

  99. }



  100. void Uart2(void) interrupt 4 using 1
  101. {
  102.     if(RI)                           //如果是接收中斷
  103.     {
  104. ……………………

  105. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png

完整的設(shè)計(jì)報告文檔(word格式)和ppt:
0.png

全部資料51hei下載地址:

藍(lán)牙4.0通信技術(shù)和nRF24L01無線技術(shù).rar (3.1 MB, 下載次數(shù): 149)
設(shè)計(jì)報告.zip (3.6 MB, 下載次數(shù): 98)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:459236 發(fā)表于 2019-1-1 11:12 | 顯示全部樓層
可以的
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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