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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7849|回復: 4
收起左側

NRF24L01+2.4G無線模塊收發c8051f330單片機程序包含PCB SCH文件

  [復制鏈接]
ID:127035 發表于 2016-6-17 22:28 | 顯示全部樓層 |閱讀模式
2.4G無線模塊收發程序,包含PCB  SCH文件及c8051f330單片機代碼

0.png
無線收發原理圖

0.png
無線收發pcb板
  1. /*********************************************************************************
  2. *說明:本文件為數據機密文件,具體加密方法在下面有介紹。
  3. *版本:V1.1.1
  4. *編寫:謝金波    西安電子科技大學
  5. *建立日期:2014.12.6
  6. *修訂日期:無
  7. *修訂內容:無
  8. *********************************************************************************/
  9. /*數據加密算法為:源數據加上序號->奇偶位分體->序奇先1、序偶先2->字節四位調換
  10. *數據解密算法為:字節四位調換->序奇先1、序偶先2->奇偶位分體->數據減去序號->信息數據*/
  11. #include "password.h"
  12. #define OrderNumber 1
  13. #define DataFirst   2
  14. #define DataSecond  3
  15. unsigned int SendDataArray[4];
  16. unsigned int ReceiveDataArray[4];
  17. unsigned char TxBuf[6]={0,0,0,0,0,0};         
  18. unsigned char RxBuf[6]={0,0,0,0,0,0};
  19. /*調用前將數據放在最后一字節,前三字節為組號,第四字節為序號*/
  20. /****************************************************************************
  21. * 名    稱:Timer1_ISR()
  22. * 功    能:用于電機驅動的定時器1中斷函數,用于輸出pwm波形
  23. * 入口參數:無
  24. * 出口參數:無
  25. * 說    明: 中斷時間為文件開頭的定義值(初始化為4*100ms)
  26. ****************************************************************************/
  27. void DataEncrypt( void )//加密算法
  28. {
  29.         unsigned int TempData;
  30.         SendDataArray[OrderNumber]=RxBuf[3];
  31.         SendDataArray[DataSecond]=RxBuf[5];
  32.         SendDataArray[DataSecond] += SendDataArray[OrderNumber];//源數據加上序列號
  33.         SendDataArray[DataFirst] = (SendDataArray[DataSecond] & 0xAA);
  34.         SendDataArray[DataSecond] = (SendDataArray[DataSecond] & 0x55);//奇偶分體
  35.         if(SendDataArray[OrderNumber]%2==0)//序號為偶數,先2后1,即數據兩個字節調換位置
  36.         {
  37.                 TempData = SendDataArray[DataFirst];
  38.                 SendDataArray[DataFirst] = SendDataArray[DataSecond];
  39.                 SendDataArray[DataSecond] = TempData;
  40.         }
  41.         TempData = SendDataArray[DataFirst];
  42.         SendDataArray[DataFirst] = ((TempData & 0x0F) + (SendDataArray[DataSecond] & 0xF0));//兩字節四位混合,即第一字節后四位與第二字節前四位組成第一字節
  43.         SendDataArray[DataSecond] = ((TempData & 0xF0) + (SendDataArray[DataSecond] & 0x0F));//兩字節四位混合,即第一字節前四位與第二字節后四位組成第二字節
  44.         RxBuf[4]=SendDataArray[DataFirst];
  45.         RxBuf[5]=SendDataArray[DataSecond];
  46. }
  47. /****************************************************************************
  48. * 名    稱:Timer1_ISR()
  49. * 功    能:用于電機驅動的定時器1中斷函數,用于輸出pwm波形
  50. * 入口參數:無
  51. * 出口參數:無
  52. * 說    明: 中斷時間為文件開頭的定義值(初始化為4*100ms)
  53. ****************************************************************************/
  54. void DataDecrypt( void )//解密算法
  55. {
  56.         unsigned int TempData;
  57.         SendDataArray[OrderNumber]=RxBuf[3];
  58.         SendDataArray[DataFirst]=RxBuf[4];
  59.         SendDataArray[DataSecond]=RxBuf[5];
  60.         TempData = ReceiveDataArray[DataFirst];
  61.         ReceiveDataArray[DataFirst] = ((TempData & 0x0F)+(ReceiveDataArray[DataSecond] & 0xF0));//混合第一字節重組
  62.         ReceiveDataArray[DataSecond] = ((TempData & 0xF0)+(ReceiveDataArray[DataSecond] & 0x0F));//混合第二字節重組
  63.         if(ReceiveDataArray[OrderNumber]%2==0)//序號為偶數,先2后1,即數據兩個字節調換位置
  64.         {
  65.                 TempData = ReceiveDataArray[DataFirst];
  66.                 ReceiveDataArray[DataFirst] = ReceiveDataArray[DataSecond];
  67.                 ReceiveDataArray[DataSecond] = TempData;
  68.         }
  69.         ReceiveDataArray[DataSecond] = (ReceiveDataArray[DataFirst] & 0xAA) + (ReceiveDataArray[DataSecond] & 0x55);//奇偶體合二為一
  70.         ReceiveDataArray[DataSecond] -= ReceiveDataArray[OrderNumber];//減去序號,得到實際數據
  71.         RxBuf[5]=SendDataArray[DataSecond];
  72. }
復制代碼

  1. /**************************************************************************************
  2. *說明:小鍵盤函數文件。本文件包含有鍵盤的采集函數,緩沖區入棧出棧,鍵值讀取等。利用
  3.            定時器0調用掃描函數,得到相應鍵值,然后在主循環中可以隨時讀出鍵值進行相應操作。
  4.            本程序可以采集按下和松開兩種狀態的鍵值,便于應用。
  5. *建立日期:2014.12.6
  6. *修訂日期:無
  7. *修訂內容:無  
  8. **************************************************************************************/
  9. /**************************************************************************************
  10.                              *****鍵盤硬件示意圖*****
  11.             +-------------+
  12.             | 定時器0中斷 |               軟件結構
  13.             +-------------+
  14.                    |
  15.             +-------------+   +-------------+   +-------------+
  16. KEY1_IO -->| Key_ScanIO  |   |  KeyBuff[]  |   |Key_GetKey() |
  17. ... ... -->|  鍵盤掃描   |-->|  鍵盤緩沖   |-->|             |-->應用程序  
  18. KEY4_IO -->|  函    數   |   |  隊列(FIFO) |   |鍵盤讀取函數 |
  19.             +-------------+   +-------------+   +-------------+

  20. 按鍵IO口硬件連接:
  21.                   c8051f330
  22.                +---------------+         
  23.      +---KEY4--|P0.7           |
  24.      |         |               |
  25.      +---KEY3--|P1.0           |     
  26.      |         |               |
  27.      +---KEY2--|P1.1           |
  28.      |         |               |
  29.      +---KEY1--|P1.2           |
  30.      |         +---------------+
  31.     GND
  32. ***************************************************************************************/   
  33. #include "c8051f330.h"

  34. #define KEYBUFF_SIZE   8    /*鍵盤緩沖區大小,根據程序需要自行調整*/

  35. sbit KEY4_IO=P0^7;          //KEY1輸入IO的定義(P0.7)
  36. sbit KEY3_IO=P1^0;          //KEY2輸入IO的定義(P1.0)
  37. sbit KEY2_IO=P1^1;          //KEY3輸入IO的定義(P1.1)
  38. sbit KEY1_IO=P1^2;          //KEY4輸入IO的定義(P1.2)


  39. unsigned char KeyBuff[KEYBUFF_SIZE]; //定義鍵盤緩沖隊列數組(FIFO)
  40. unsigned char Key_IndexW=0;          //鍵盤緩沖隊列寫入指針(頭指針)
  41. unsigned char Key_IndexR=0;          //鍵盤緩沖隊列讀取指針(尾指針)
  42. unsigned char Key_Count=0;           //鍵盤緩沖隊列內記錄的按鍵次數
  43. unsigned char key_flag=0;

  44. bit P_KEY1=1;               //存放KEY1前一次狀態的變量
  45. bit N_KEY1=1;               //存放KEY1當前狀態的變量
  46. bit P_KEY2=1;               //存放KEY2前一次狀態的變量
  47. bit N_KEY2=1;               //存放KEY2當前狀態的變量
  48. bit P_KEY3=1;               //存放KEY3前一次狀態的變量
  49. bit N_KEY3=1;               //存放KEY3當前狀態的變量
  50. bit P_KEY4=1;               //存放KEY4前一次狀態的變量
  51. bit N_KEY4=1;               //存放KEY4當前狀態的變量


  52. #define KEY1_ON   0x01
  53. #define KEY2_ON   0x02         /*按下鍵值宏定義*/
  54. #define KEY3_ON   0x04
  55. #define KEY4_ON   0x08
  56. #define KEY1_OFF  0x03
  57. #define KEY2_OFF  0x05         /*松開鍵值宏定義*/
  58. #define KEY3_OFF  0x06
  59. #define KEY4_OFF  0x07
  60. #define NOKEY     0x00

  61. #define KEY_ON  0          /*IO口低電平表示按下*/
  62. #define KEY_OFF 1

  63. bit KEY_EA;
  64. #define DISABLE_INT;  KEY_EA=EA;   EA=0; /*關閉中斷的宏定義*/
  65. #define RESTORE_INT;  EA=KEY_EA;         /*恢復中斷的宏定義*/

  66. /****************************************************************************
  67. * 名    稱:Key_InBuff()
  68. * 功    能:將一次鍵值壓入鍵盤緩沖隊列
  69. * 入口參數:Key:被壓入緩沖隊列的鍵值
  70. * 出口參數:無
  71. ****************************************************************************/
  72. void Key_InBuff(unsigned char Key)
  73. {
  74.   if(Key_Count>=KEYBUFF_SIZE) return;//若緩沖區已滿,放棄本次按鍵
  75.   DISABLE_INT;
  76.   Key_Count++;                       //按鍵次數計數增加
  77.   KeyBuff[Key_IndexW] = Key;         //從隊列頭部追加新的數據
  78.   if (++Key_IndexW >=  KEYBUFF_SIZE) //循環隊列,如果隊列頭指針越界
  79.    {
  80.     Key_IndexW = 0;                  //隊列頭指針回到數組起始位置
  81.    }
  82.   RESTORE_INT;
  83. }
  84. /****************************************************************************
  85. * 名    稱:Key_GetKey()
  86. * 功    能:從鍵盤緩沖隊列內讀取一次鍵值
  87. * 入口參數:無
  88. * 出口參數:若無按鍵,返回0,否則返回一次按鍵鍵值。
  89. * 說    明: 調用一次該函數,會自動刪除緩沖隊列里一次按鍵鍵值。
  90. ****************************************************************************/
  91. unsigned char Key_GetKey()
  92. { unsigned char Key;
  93.   if(Key_Count==0)  return(NOKEY);     //若無按鍵,返回0
  94.   DISABLE_INT;//隊列操作過程中不允許被定時中斷執行ScanIO函數,保護全局變量正確
  95.   Key_Count--;                     //按鍵次數計數減1
  96.   Key=KeyBuff[Key_IndexR];         //從緩沖區尾部讀取一個按鍵值
  97.   if (++Key_IndexR >= KEYBUFF_SIZE)//循環隊列,如果隊列尾指針越界
  98.      {                             
  99.       Key_IndexR = 0;             //隊列尾指針回到數組起始位置
  100.      }
  101.   RESTORE_INT;                    //恢復中斷允許
  102.   return Key;  
  103. }
  104. /****************************************************************************
  105. * 名    稱:Key_ScanIO()
  106. * 功    能:掃描鍵盤IO口并判斷按鍵事件
  107. * 入口參數:無
  108. * 出口參數:無,鍵值壓入緩沖隊列
  109. * 說    明: 該函數需要每隔1/10秒至1/100秒調用一次。最好放在定時中斷內執行。
  110.             如果中斷間隔太長,可能丟鍵;間隔太短不能消除抖動。
  111. ****************************************************************************/
  112. void Key_ScanIO()
  113. {
  114.    P_KEY1=N_KEY1;  //保存KEY1前一次的狀態
  115.    N_KEY1=KEY1_IO; //讀取KEY1當前的狀態
  116.    
  117.    P_KEY2=N_KEY2;  //保存KEY2前一次的狀態
  118.    N_KEY2=KEY2_IO; //讀取KEY2當前的狀態
  119.    
  120.    P_KEY3=N_KEY3;  //保存KEY3前一次的狀態
  121.    N_KEY3=KEY3_IO; //讀取KEY3當前的狀態

  122.    P_KEY4=N_KEY4;  //保存KEY4前一次的狀態
  123.    N_KEY4=KEY4_IO; //讀取KEY4當前的狀態
  124.       
  125. //*********************自鎖方式讀鍵盤*********************************
  126.    if((P_KEY1==KEY_OFF)&&(N_KEY1==KEY_ON)&&key_flag==0) {key_flag=1;Key_InBuff(KEY1_ON);}         //KEY1按下
  127.    if((P_KEY1==KEY_ON)&&(N_KEY1==KEY_OFF)&&key_flag==1) {key_flag=0;Key_InBuff(KEY1_OFF);} //KEY1松開
  128.    if((P_KEY2==KEY_OFF)&&(N_KEY2==KEY_ON)&&key_flag==0) {key_flag=2;Key_InBuff(KEY2_ON);}         //KEY2按下
  129.    if((P_KEY2==KEY_ON)&&(N_KEY2==KEY_OFF)&&key_flag==2) {key_flag=0;Key_InBuff(KEY2_OFF);} //KEY2松開
  130.    if((P_KEY3==KEY_OFF)&&(N_KEY3==KEY_ON)&&key_flag==0) {key_flag=3;Key_InBuff(KEY3_ON);}
  131.    if((P_KEY3==KEY_ON)&&(N_KEY3==KEY_OFF)&&key_flag==3) {key_flag=0;Key_InBuff(KEY3_OFF);}  
  132.    if((P_KEY4==KEY_OFF)&&(N_KEY4==KEY_ON)&&key_flag==0) {key_flag=4;Key_InBuff(KEY4_ON);}
  133.    if((P_KEY4==KEY_ON)&&(N_KEY4==KEY_OFF)&&key_flag==4) {key_flag=0;Key_InBuff(KEY4_OFF);}
  134. }



  135. //********************************************************結束**************************************************************
復制代碼
0.png

所有資料請下載附件:

2.4G無線雙向收發系統V5.0.rar

185.74 KB, 下載次數: 148, 下載積分: 黑幣 -5

評分

參與人數 2黑幣 +65 收起 理由
51hei大小 + 15 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:347662 發表于 2018-6-8 15:59 | 顯示全部樓層
下載學習學習
回復

使用道具 舉報

ID:347662 發表于 2018-6-8 16:00 | 顯示全部樓層
多謝分享
回復

使用道具 舉報

ID:138119 發表于 2019-8-16 22:06 | 顯示全部樓層
很好的資料,支持一下!
回復

使用道具 舉報

ID:359887 發表于 2020-4-30 16:20 | 顯示全部樓層
樓主用的什么畫電路圖啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区,视频 | 羞羞视频免费在线 | 久久综合一区二区三区 | 精品久久国产老人久久综合 | 亚洲天堂日韩精品 | 欧美精品成人一区二区三区四区 | 欧美黄色绿像 | 国产精品视频一二三区 | 巨大黑人极品videos精品 | 中文字幕一区二区三区四区不卡 | 久久久久国产成人精品亚洲午夜 | 欧美精品电影一区 | 天天弄天天操 | 国产黄色一级片 | 一区二区免费 | www日本在线播放 | 97视频在线看 | 亚洲一区二区三区在线免费观看 | 亚洲毛片在线观看 | 91就要激情| 丝袜美腿一区二区三区 | 精品1区| 国产精品欧美精品日韩精品 | 操久久| 免费三级网站 | 亚洲欧美在线视频 | 精品国产欧美一区二区 | 久久精品久久久久久 | 亚洲欧洲小视频 | 看一级毛片 | 亚洲一区二区三区免费在线观看 | 免费观看www7722午夜电影 | 久久久精品久久久 | 亚洲永久精品国产 | 免费观看的黄色网址 | 亚洲综合无码一区二区 | 99re视频在线免费观看 | 福利一区在线观看 | 国产精品二区三区 | 日日操av | 91原创视频在线观看 |