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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4697|回復(fù): 1
收起左側(cè)

單片機(jī)nRF24L01無線傳感模塊接收和發(fā)送程序

[復(fù)制鏈接]
ID:200249 發(fā)表于 2017-5-13 13:06 | 顯示全部樓層 |閱讀模式
基于51單片機(jī)的nRF24L01無線傳感模塊的接收個發(fā)送的程序。
0.png


單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit RS = P0^2;   //定義端口
  6. sbit RW = P0^1;
  7. sbit EN = P0^0;
  8. sbit DQ = P0^3; //定義總線的I/O管腳
  9. bit crrent;
  10. uint value;   
  11. uchar data disdat[6];
  12. uchar data setdat[4];   
  13. #define TX_ADR_WIDTH    5  
  14. #define TX_PLOAD_WIDTH  2  
  15. uchar const TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x55,0x10,0x10,0x01};  
  16. uchar rx_buf[TX_PLOAD_WIDTH];
  17. uchar tx_buf[TX_PLOAD_WIDTH];
  18. uchar distance_data[2];
  19. uchar flag;
  20. sbit CE=P2^5;               
  21. sbit CSN=P2^0;               
  22. sbit SCK=P2^4;                 
  23. sbit MOSI=P2^1;               
  24. sbit MISO=P2^3;               
  25. sbit IRQ=P2^2;        
  26. uchar  bdata sta;
  27. sbit RX_DR =sta^6;  
  28. sbit TX_DS =sta^5;  
  29. sbit MAX_RT =sta^4;

  30. unsigned char time;
  31. #define READ_REG        0x00   
  32. #define WRITE_REG       0x20  
  33. #define RD_RX_PLOAD     0x61   
  34. #define WR_TX_PLOAD     0xA0   
  35. #define FLUSH_TX        0xE1
  36. #define FLUSH_RX        0xE2  
  37. #define REUSE_TX_PL     0xE3   
  38. #define NOP             0xFF   
  39. #define CONFIG          0x00  
  40. #define EN_AA           0x01  
  41. #define EN_RXADDR       0x02  
  42. #define SETUP_AW        0x03  
  43. #define SETUP_RETR      0x04
  44. #define RF_CH           0x05  
  45.   #define RF_SETUP        0x06  
  46. #define STATUS          0x07  
  47. #define OBSERVE_TX      0x08
  48.   #define CD              0x09  
  49. #define RX_ADDR_P0      0x0A  
  50. #define RX_ADDR_P1      0x0B
  51. #define RX_ADDR_P2      0x0C  
  52. #define RX_ADDR_P3      0x0D  
  53. #define RX_ADDR_P4      0x0E  
  54. #define RX_ADDR_P5      0x0F
  55. #define TX_ADDR         0x10  
  56.   #define RX_PW_P0        0x11  
  57. #define RX_PW_P1        0x12  
  58. #define RX_PW_P2        0x13
  59. #define RX_PW_P3        0x14
  60. #define RX_PW_P4        0x15  
  61. #define RX_PW_P5        0x16  
  62. #define FIFO_STATUS     0x17
  63. void init_io(void)
  64. {
  65. CE=0;  
  66.   CSN=1;
  67.    SCK=0;  
  68. }  
  69. void delay_ms(unsigned int x)
  70. {   
  71.   unsigned int i,j;   
  72.   for(i=0;i<x;i++)   
  73. {        
  74.    j=108;     
  75.    while(j--);   
  76. }
  77. }
  78. uchar SPI_RW(uchar byte)
  79. {  
  80. uchar bit_ctr;     
  81. for(bit_ctr=0;bit_ctr<8;bit_ctr++)      
  82.   {   
  83.   MOSI = (byte&0x80);        
  84. byte = (byte<<1);        
  85. SCK = 1;
  86. byte|=MISO;  
  87. SCK=0;  
  88. }     
  89. return(byte);   
  90. }  
  91. uchar SPI_RW_Reg(uchar reg, uchar value)
  92. {
  93. uchar status;  
  94.    CSN = 0;   
  95. status = SPI_RW(reg);
  96. SPI_RW(value);
  97. CSN = 1;  
  98.   return(status);  
  99. }  
  100. uchar SPI_Read(uchar reg)
  101. {
  102. uchar reg_val;
  103. CSN = 0;  
  104.   SPI_RW(reg);
  105.   reg_val = SPI_RW(0);
  106. CSN = 1;  
  107.    return(reg_val);  
  108.   }
  109. uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
  110. {
  111.         uchar status,byte_ctr;
  112.           CSN = 0;                                    
  113.           status = SPI_RW(reg);                       
  114.           for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
  115.             pBuf[byte_ctr] = SPI_RW(0);   
  116.           CSN = 1;                           
  117.           return(status);
  118. }        
  119. uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)
  120. {
  121. uchar status,byte_ctr;   
  122.   CSN = 0;   
  123. status = SPI_RW(reg);
  124. for(byte_ctr=0;
  125. byte_ctr<bytes; byte_ctr++)
  126. SPI_RW(*pBuf++);
  127. CSN = 1;
  128. return(status);
  129. }  
  130. void TX_Mode(void)
  131. {  
  132. CE=0;  
  133. SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
  134. SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  
  135. SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);  
  136. SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);        
  137. SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
  138. SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);     
  139. SPI_RW_Reg(WRITE_REG + RF_CH,40);            
  140. SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);        
  141. SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);     
  142. CE=1;
  143. }  
  144. void checkflag()
  145. {  
  146. sta=SPI_Read(STATUS);     
  147. if(RX_DR)           
  148. {
  149. SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);  
  150.         flag=1;         
  151.   }     
  152. if(MAX_RT)   
  153.     {
  154. SPI_RW_Reg(FLUSH_TX,0);   
  155.         }
  156.   SPI_RW_Reg(WRITE_REG+STATUS,sta);  
  157. }
  158. void SendByte(unsigned char dat);
  159. void zf_1602(unsigned char x,unsigned char y,unsigned dat);
  160. void Delay4us() //延時4us
  161. {
  162. ;
  163. }
  164. void Delay(unsigned char j)  //一個循環(huán)15us
  165. {
  166. unsigned char i;
  167. while(j--)
  168. {
  169.   i = 5;
  170.   while (--i);
  171. }
  172. }
  173. bit d18b20_qs() //18b20 起始
  174. {

  175. DQ = 1; //DQ復(fù)位
  176. Delay4us();
  177. DQ = 0; //拉低總線
  178. Delay(35);
  179. DQ = 1;
  180. Delay(2);
  181. crrent= DQ;
  182. Delay(2);
  183. return crrent; //返回數(shù)值
  184. }
  185. void d18b20_x(unsigned char dat) //寫 8 位 數(shù) 據(jù)
  186. {
  187. unsigned char i;
  188. for(i=0;i<8;i++)
  189. {
  190.   DQ = 0; //拉低總線
  191.   DQ = dat & 0x01;
  192.   Delay(3); //延時45us
  193.   DQ = 1;
  194.   dat >>= 1; //數(shù)據(jù)右移一位
  195. }
  196. }
  197. unsigned char d18b20_d() //讀 8 位 數(shù) 據(jù)
  198. {
  199. unsigned char i,dat=0;
  200. for(i=0;i<8;i++) //8位計數(shù)器
  201. {
  202.   DQ = 0; //拉低總線
  203.   dat >>= 1; //數(shù)據(jù)右移一位
  204.   DQ = 1;
  205.   if(DQ)
  206.    dat |= 0x80;
  207.   Delay(4);
  208. }
  209. return dat; //返回讀取到數(shù)據(jù)數(shù)據(jù)
  210. }
  211. unsigned int wd() //讀取溫度函數(shù)
  212. {
  213. unsigned char i = 0; //低8位數(shù)據(jù)
  214. unsigned char j = 0; //高8位數(shù)據(jù)
  215. unsigned int k = 0;
  216. d18b20_qs();
  217. d18b20_x(0xCC);
  218. d18b20_x(0x44);
  219. Delay(200);   

  220. d18b20_qs();
  221. d18b20_x(0xCC);
  222. d18b20_x(0xBE);
  223. i = d18b20_d();
  224. j = d18b20_d();
  225. distance_data[0]=j;
  226. distance_data[1]=i;
  227. k = j;  
  228. k <<= 8;
  229. k = k + i;
  230. return k; //返回讀取到的16位數(shù)據(jù)
  231. }
  232. void zh(unsigned int i)  
  233. {
  234. unsigned char x,z;
  235. x = i & 0x0f; //取出小數(shù)
  236. i >>=4;
  237. switch(x) //小數(shù)位轉(zhuǎn)換
  238. {
  239.   case 0: z=0;break;
  240.   case 1: z=1;break;
  241.   case 2: z=1;break;
  242.   case 3: z=2;break;
  243.   case 4: z=3;break;
  244.   case 5: z=3;break;
  245.   case 6: z=4;break;
  246.   case 7: z=4;break;
  247.   case 8: z=5;break;
  248.   case 9: z=6;break;
  249.   case 10: z=6;break;
  250.   case 11: z=7;break;
  251.   case 12: z=8;break;
  252.   case 13: z=8;break;
  253.   case 14: z=9;break;
  254.   case 15: z=9;break;
  255. }
  256. z = z +48; //轉(zhuǎn)換成ascii碼
  257. zf_1602(8,1,z); //寫入1602緩存
  258. z = i & 0xff; //取出整數(shù)
  259. x = z/10; //取出十位
  260. x= x+48;
  261. zf_1602(5,1,x);
  262. x = z%10;
  263. x= x+48;
  264. zf_1602(6,1,x);
  265. }
  266. void Delayus(unsigned char t)
  267. {  
  268. while(--t);
  269. }
  270. void Delayms(unsigned char t)
  271. {
  272.    
  273. while(t--)
  274. {
  275.      //大致延時1mS
  276.      Delayus(245);
  277.   Delayus(245);
  278. }
  279. }
  280. bit m_1602() //判斷1602是否忙
  281. {
  282. P1 = 0xFF;
  283. RS = 0;
  284. RW = 1;
  285. EN = 0;
  286. _nop_();
  287. EN = 1;
  288. return (bit)(P1 & 0x80);
  289. }
  290. void x_1602(bit i,unsigned char j) //參數(shù)一是寫(0、寫指令 1、寫數(shù)據(jù)),參數(shù)二是寫入的8位數(shù)據(jù)
  291. {
  292. while(m_1602())
  293. {
  294.   _nop_();
  295.   _nop_();
  296.   _nop_();
  297.   _nop_();
  298.   _nop_();
  299. }
  300. RS = i;
  301. RW = 0;
  302. EN = 1;
  303. P1 = j;
  304. _nop_();
  305. EN = 0; //產(chǎn)生下降沿
  306. }
  307. void qp_1602() //清屏函數(shù)
  308. {
  309. x_1602(0,0x01); //第一個參數(shù)是:寫入的類型(0、寫指令 1、寫數(shù)據(jù)),第一個參數(shù)是:寫入的數(shù)據(jù)
  310. Delayms(5);
  311. }
  312. //顯示字符
  313. void zf_1602(unsigned char x,unsigned char y,unsigned dat) //參數(shù)一是顯示的列,參數(shù)二是顯示的行,參數(shù)三是顯示的數(shù)據(jù)
  314. {
  315. if(y==0)
  316. {
  317.   x_1602(0,(0x80+x)); //第一行
  318. }
  319. else
  320. {
  321.   x_1602(0,(0xc0+x)); //第二行
  322. }
  323. x_1602(1,dat); //寫入數(shù)據(jù)
  324. }
  325. void zfc_1602(unsigned char x,unsigned char y,unsigned char *dat)
  326. {
  327. if(y==0)
  328. {
  329.   x_1602(0,(0x80+x));
  330. }
  331. else
  332. {
  333.   x_1602(0,(0xc0+x));
  334. }
  335. while(*dat) //&:取地址 *:取值
  336. {
  337.   x_1602(1,*dat);
  338.   dat ++;
  339. }
  340. }
  341. void csh_1602()  //初始化1602
  342. {
  343. x_1602(0,0x38);
  344. Delayms(5);
  345. x_1602(0,0x38);
  346. Delayms(5);
  347. x_1602(0,0x38);
  348. Delayms(5);
  349. x_1602(0,0x38);
  350. x_1602(0,0x08);
  351. x_1602(0,0x01);
  352. x_1602(0,0x06);
  353. Delayms(5);
  354. x_1602(0,0x0c);  
  355. }
  356. void Lcd_User_Chr(void) // 1602 自定義字符(攝氏度的小點)    自定義字符
  357. {
  358. x_1602(0,0x48); //"01 001 000"  第1行地址
  359. x_1602(1,0x03); //"XXX 00001" 第1行數(shù)據(jù)
  360. x_1602(0,0x49); //"01 001 001"  第2行地址
  361. x_1602(1,0x03); //"XXX 11011" 第2行數(shù)據(jù)
  362. x_1602(0,0x4a); //"01 001 010"  第3行地址
  363. x_1602(1,0x00); //"XXX 11101" 第3行數(shù)據(jù)
  364. x_1602(0,0x4b); //"01 001 011"  第4行地址
  365. x_1602(1,0x00); //"XXX 11001" 第4行數(shù)據(jù)
  366. x_1602(0,0x4c); //"01 001 100"  第5行地址
  367. x_1602(1,0x00); //"XXX 11101" 第5行數(shù)據(jù)
  368. x_1602(0,0x4d); //"01 001 101"  第6行地址
  369. ……………………

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

所有資料51hei提供下載:
無線收發(fā)代碼.rar (5 KB, 下載次數(shù): 48)






回復(fù)

使用道具 舉報

ID:184706 發(fā)表于 2019-1-23 15:32 | 顯示全部樓層
好棒啊
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线视频国产一区 | 国产精品中文字幕在线 | 国产999精品久久久久久 | 日韩精品一区二区三区老鸭窝 | 久久久久久久电影 | 久久亚洲综合 | 国产精品免费av | 久久久久www | 成人乱人乱一区二区三区软件 | 国产成人久久精品一区二区三区 | 国产aa| 日韩免费在线视频 | www.99精品 | 国产亚洲一区二区三区在线观看 | 亚洲一区中文字幕在线观看 | 国产高清免费视频 | 国产成人精品久久二区二区91 | 天天久久 | 久久久久久久久久久久久久av | 国产一区二区电影 | 亚洲视频免费在线 | 黄色在线免费观看 | 九热在线 | 国产精品欧美一区二区 | 成人在线电影在线观看 | 久久久久久国产精品久久 | av免费在线观看网站 | 99re视频在线免费观看 | 精品亚洲一区二区三区 | 欧美一区视频 | 成年人在线视频 | 国产东北一级毛片 | 亚洲成人黄色 | 中文字幕不卡一区 | 国产中文字幕网 | 日韩精品一区二区三区中文在线 | 日韩精品久久久久久 | 91视频精选| 成人av播放 | 成人免费视频网 | 91精品国产99 |