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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
跳轉到指定樓層
樓主
ID:127035 發(fā)表于 2016-6-17 22:28 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
2.4G無線模塊收發(fā)程序,包含PCB  SCH文件及c8051f330單片機代碼


無線收發(fā)原理圖


無線收發(fā)pcb板
  1. /*********************************************************************************
  2. *說明:本文件為數(shù)據(jù)機密文件,具體加密方法在下面有介紹。
  3. *版本:V1.1.1
  4. *編寫:謝金波    西安電子科技大學
  5. *建立日期:2014.12.6
  6. *修訂日期:無
  7. *修訂內容:無
  8. *********************************************************************************/
  9. /*數(shù)據(jù)加密算法為:源數(shù)據(jù)加上序號->奇偶位分體->序奇先1、序偶先2->字節(jié)四位調換
  10. *數(shù)據(jù)解密算法為:字節(jié)四位調換->序奇先1、序偶先2->奇偶位分體->數(shù)據(jù)減去序號->信息數(shù)據(jù)*/
  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. /*調用前將數(shù)據(jù)放在最后一字節(jié),前三字節(jié)為組號,第四字節(jié)為序號*/
  20. /****************************************************************************
  21. * 名    稱:Timer1_ISR()
  22. * 功    能:用于電機驅動的定時器1中斷函數(shù),用于輸出pwm波形
  23. * 入口參數(shù):無
  24. * 出口參數(shù):無
  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];//源數(shù)據(jù)加上序列號
  33.         SendDataArray[DataFirst] = (SendDataArray[DataSecond] & 0xAA);
  34.         SendDataArray[DataSecond] = (SendDataArray[DataSecond] & 0x55);//奇偶分體
  35.         if(SendDataArray[OrderNumber]%2==0)//序號為偶數(shù),先2后1,即數(shù)據(jù)兩個字節(jié)調換位置
  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));//兩字節(jié)四位混合,即第一字節(jié)后四位與第二字節(jié)前四位組成第一字節(jié)
  43.         SendDataArray[DataSecond] = ((TempData & 0xF0) + (SendDataArray[DataSecond] & 0x0F));//兩字節(jié)四位混合,即第一字節(jié)前四位與第二字節(jié)后四位組成第二字節(jié)
  44.         RxBuf[4]=SendDataArray[DataFirst];
  45.         RxBuf[5]=SendDataArray[DataSecond];
  46. }
  47. /****************************************************************************
  48. * 名    稱:Timer1_ISR()
  49. * 功    能:用于電機驅動的定時器1中斷函數(shù),用于輸出pwm波形
  50. * 入口參數(shù):無
  51. * 出口參數(shù):無
  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));//混合第一字節(jié)重組
  62.         ReceiveDataArray[DataSecond] = ((TempData & 0xF0)+(ReceiveDataArray[DataSecond] & 0x0F));//混合第二字節(jié)重組
  63.         if(ReceiveDataArray[OrderNumber]%2==0)//序號為偶數(shù),先2后1,即數(shù)據(jù)兩個字節(jié)調換位置
  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];//減去序號,得到實際數(shù)據(jù)
  71.         RxBuf[5]=SendDataArray[DataSecond];
  72. }
復制代碼

  1. /**************************************************************************************
  2. *說明:小鍵盤函數(shù)文件。本文件包含有鍵盤的采集函數(shù),緩沖區(qū)入棧出棧,鍵值讀取等。利用
  3.            定時器0調用掃描函數(shù),得到相應鍵值,然后在主循環(huán)中可以隨時讀出鍵值進行相應操作。
  4.            本程序可以采集按下和松開兩種狀態(tài)的鍵值,便于應用。
  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 -->|  函    數(shù)   |   |  隊列(FIFO) |   |鍵盤讀取函數(shù) |
  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    /*鍵盤緩沖區(qū)大小,根據(jù)程序需要自行調整*/

  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]; //定義鍵盤緩沖隊列數(shù)組(FIFO)
  40. unsigned char Key_IndexW=0;          //鍵盤緩沖隊列寫入指針(頭指針)
  41. unsigned char Key_IndexR=0;          //鍵盤緩沖隊列讀取指針(尾指針)
  42. unsigned char Key_Count=0;           //鍵盤緩沖隊列內記錄的按鍵次數(shù)
  43. unsigned char key_flag=0;

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


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

  122.    P_KEY4=N_KEY4;  //保存KEY4前一次的狀態(tài)
  123.    N_KEY4=KEY4_IO; //讀取KEY4當前的狀態(tài)
  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. //********************************************************結束**************************************************************
復制代碼


所有資料請下載附件:

2.4G無線雙向收發(fā)系統(tǒng)V5.0.rar

185.74 KB, 下載次數(shù): 148, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:347662 發(fā)表于 2018-6-8 15:59 | 只看該作者
下載學習學習
回復

使用道具 舉報

板凳
ID:347662 發(fā)表于 2018-6-8 16:00 | 只看該作者
多謝分享
回復

使用道具 舉報

地板
ID:138119 發(fā)表于 2019-8-16 22:06 | 只看該作者
很好的資料,支持一下!
回復

使用道具 舉報

5#
ID:359887 發(fā)表于 2020-4-30 16:20 | 只看該作者
樓主用的什么畫電路圖啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂综合 | 99精品国产成人一区二区 | 一区二区三区四区在线 | 男女一区二区三区 | 国产精品久久久久久久久久久久 | hitomi一区二区三区精品 | 在线一区视频 | 久久亚洲欧美日韩精品专区 | 国产高清在线精品 | 日本免费在线观看视频 | 精品国产一区二区三区久久久蜜月 | 国产精品精品久久久 | 一区二区三区观看视频 | 午夜精品一区二区三区在线观看 | 成人午夜免费福利视频 | 性在线| 亚洲国产二区 | 日日摸夜夜爽人人添av | 精品国产免费人成在线观看 | 在线资源视频 | 国产精选一区 | 黄色在线观看网站 | 久久夜视频 | 日韩性在线 | 欧美视频一区二区三区 | 国产精品高清一区二区 | 久在线观看 | 日本欧美国产 | 久久精品在线播放 | 91精品国产91久久久久久密臀 | 亚洲国产成人精品久久久国产成人一区 | 欧美日韩一区在线 | 欧美成人一区二区 | 99久久久无码国产精品 | 成年网站在线观看 | 欧美色专区 | 国产欧美日韩在线一区 | 乳色吐息在线观看 | 欧美国产精品一区二区三区 | 日韩福利片 | 国产精品一区二区不卡 |