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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

nrf24l01無線輸液監測系統 單片機程序與原理圖

[復制鏈接]
跳轉到指定樓層
樓主
nrf24l01芯片做的單片機無線輸液監測系統的全部資料分享給大家
程序和原理圖




所有資料51hei提供下載:
程序和原理圖.zip (440.51 KB, 下載次數: 69)



單片機源程序如下:
  1. /*-----------------------------------------------
  2.   名稱:外部中斷0電平觸發
  3.   內容:通過中斷接口P3.2連接的獨立按鍵測試,按一次P1口的LED燈反向,
  4.         這里使用電平觸發,所以一直按鍵不松開和一次按鍵效果不相同,按下會看到燈全部亮
  5.                 說明中斷一直在作用,用示波器看則是高頻方波
  6. ------------------------------------------------*/
  7. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  8. #include <intrins.h>
  9. #include "nrf24l01.h"
  10. typedef bit BOOL ;//用BOOL代替bit
  11. sbit rs        = P3^7; //復位端
  12. sbit rw = P3^6; //寫數據端
  13. sbit ep = P3^5;        //使能端
  14. sbit led = P1^6;
  15. uchar cisu = 0;
  16. uchar code dis1[] = {"NO1"};
  17. uchar code dis3[] = {'0','1','2','3','4','5','6','7','8','9'};
  18. uchar code dis2[] = {"count:"};
  19. int count = -1;
  20. bit flag = 0,t0_flag = 0;
  21. uchar shuju = 0;
  22. uint time_count = 0;
  23. void display_1602(void);
  24. void delay(uchar ms)
  25. {                                                       
  26.         uchar i;
  27.         while(ms--)
  28.         {
  29.                 for(i = 0; i< 250; i++)
  30.                 {
  31.                         _nop_();
  32.                         _nop_(); //空執行消耗CPU時間達到等待的效果
  33.                         _nop_();
  34.                         _nop_();
  35.                 }
  36.         }
  37. }

  38. /*******************LCD側忙函數********************/
  39. BOOL lcd_bz()
  40. {                                               
  41.         BOOL result;
  42.         rs = 0;
  43.         rw = 1;
  44.         ep = 1;
  45.         _nop_();
  46.         _nop_();
  47.         _nop_();
  48.         _nop_();
  49.         result = (BOOL)(P0 & 0x80); //檢測P0最高位是否為1
  50.         ep = 0;
  51.         return result;//返回側忙結果       
  52. }

  53. void lcd_wcmd(uchar cmd)
  54. {                                                        // 寫入指令數據到LCD
  55.         while(lcd_bz());
  56.         rs = 0;
  57.         rw = 0;
  58.         ep = 0;
  59.         _nop_();
  60.         _nop_();       
  61.         P2 = cmd; //將8位指令通過P0口傳給1602
  62.         _nop_();
  63.         _nop_();//用于產生一個脈沖寬度
  64.         _nop_();
  65.         _nop_();
  66.         ep = 1;
  67.         _nop_();
  68.         _nop_();
  69.         _nop_();
  70.         _nop_();
  71.         ep = 0;               
  72. }

  73. void lcd_pos(uchar pos)
  74. {                                               
  75.         lcd_wcmd(pos | 0x80);
  76. }

  77. void lcd_wdat(uchar dat)       
  78. {                                                        //寫入字符顯示數據到LCD
  79.         while(lcd_bz());
  80.         rs = 1;
  81.         rw = 0;
  82.         ep = 0;
  83.         P2 = dat;//將8位數據通過P0口傳給1602
  84.         _nop_();
  85.         _nop_();
  86.         _nop_(); //用于產生一個脈沖寬度
  87.         _nop_();
  88.         ep = 1;
  89.         _nop_();
  90.         _nop_();
  91.         _nop_();
  92.         _nop_();
  93.         ep = 0;       
  94. }

  95. void lcd_init()
  96. {       
  97.         lcd_wcmd(0x38);          ////16*2顯示,5*7點陣,8位數據
  98.         delay(1);
  99.         lcd_wcmd(0x0c);          //顯示開,關光標
  100.         delay(1);
  101.         lcd_wcmd(0x06);          //移動光標
  102.         delay(1);
  103.         lcd_wcmd(0x01);          //清除LCD的顯示內容
  104.         delay(1);
  105. }
  106. void Init_Timer0(void)
  107. {
  108. TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  109. TH0=(65535- 50000)/256;              //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
  110. TL0=(65535- 50000)%256;
  111. ET0=1;           //定時器中斷打開
  112. //  TR0=1;           //定時器開關打開
  113.         EA=1;          //全局中斷開
  114.   EX0=1;         //外部中斷0開
  115.   IT0=1;         //邊緣
  116. }
  117. void main(void)
  118. {       
  119.   uchar tx_buf[4]={0x00,0x00,0x00,0x00};//必須是4位數組
  120.         uchar i,ge,shi,bai;
  121.   led = 1;
  122.         NRF24L01Int();
  123.         lcd_init();                                //初始化LCD       
  124.         Init_Timer0();
  125.         lcd_pos(0X00);                                //設置顯示位置為第一行的第5個字符
  126.         i = 0;
  127.         while(dis1[i] != '\0')
  128.         {                                                //顯示字符"welcome!"
  129.                 lcd_wdat(dis1[i]);
  130.                 i++;
  131.         }
  132.                  delay(100);
  133.                 lcd_pos(0x40);                        //設置顯示位置為第二行第0個字符
  134.         i = 0;
  135.         while(dis2[i] != '\0')
  136.         {
  137.                 lcd_wdat(dis2[i]);        //顯示字符"  www*PRECHIN*com  "
  138.                 i++;
  139.         }
  140. //         while(1)
  141. //         {
  142. //                                          NRFSetTxMode(tx_buf);
  143. //                                  while (CheckACK());
  144. //         }
  145.   while(1)
  146.   {
  147.                
  148.                 if(flag == 1)
  149.                 {
  150. //                          ge = (shuju)/2%10;
  151. //                         shi = (shuju)/2/10%10;
  152. //             bai = (shuju)/2/100;
  153. //                         tx_buf[0] = bai;
  154. //                         tx_buf[1] = shi;
  155. //                         tx_buf[2] = ge;
  156.                        
  157.                   ge = (shuju)/2%10;//進行數據處理
  158.                         shi = (shuju)/2/10%10;//進行數據處理
  159.             bai = (shuju)/2/100;//進行數據處理
  160.                         tx_buf[0] = shuju/2;//進行數據處理
  161.                         tx_buf[1] = shuju/2;//進行數據處理
  162.                         tx_buf[2] = 0x01;//從機編號
  163.                         tx_buf[3] = cisu++;//計發送次數
  164.                         /* 數據發送6次 防止有數據丟失  */
  165.                                 NRFSetTxMode(tx_buf);
  166.                                 while (CheckACK());
  167.                           delay(1);
  168.                                 NRFSetTxMode(tx_buf);
  169.                                 while (CheckACK());
  170.                           delay(1);
  171.                                 NRFSetTxMode(tx_buf);
  172.                                 while (CheckACK());
  173.                           delay(1);
  174.                                 NRFSetTxMode(tx_buf);
  175.                                 while (CheckACK());
  176.                           delay(1);
  177.                                 NRFSetTxMode(tx_buf);
  178.                                 while (CheckACK());
  179.                           delay(1);
  180.                                 NRFSetTxMode(tx_buf);
  181.                                 while (CheckACK());
  182.                           delay(1);               
  183.                 /*進行液晶屏顯示部分設置*/               
  184.                 lcd_pos(0x48);
  185.                 lcd_wdat(dis3[ge]);
  186.                 lcd_pos(0x47);
  187.                 lcd_wdat(dis3[shi]);
  188.                 lcd_pos(0x46);
  189.                 lcd_wdat(dis3[bai]);
  190.                 /*LED燈的控制部分*/
  191.                 led = 0;
  192.                  delay(200);       
  193.                                  led = 1;
  194.                  delay(200);
  195.                                  led = 0;
  196.                  delay(200);       
  197.                                  led = 1;
  198.                           EA = 1;
  199.                           flag = 0;
  200.                           t0_flag = 0;
  201.                 }
  202. //                 if((count>=0)&&(count % 2 == 0))
  203. //                 {
  204. //                         ge = (count)/2%10;
  205. //                         shi = (count)/2/10%10;
  206. //             bai = (count)/2/100;
  207. //                         lcd_pos(0x48);
  208. //                 lcd_wdat(dis3[ge]);
  209. //                 lcd_pos(0x47);
  210. //                 lcd_wdat(dis3[shi]);
  211. //                 lcd_pos(0x46);
  212. //                 lcd_wdat(dis3[bai]);
  213. //                 }                       
  214.   }
  215. }
  216. /*------------------------------------------------
  217. ……………………

  218. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼



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

使用道具 舉報

沙發
ID:1 發表于 2017-8-7 23:35 | 只看該作者
一對二數據中轉
  1. /****************************************Copyright (c)****************************************************
  2. **                                       遼寧科技大學
  3. **                                    
  4. **                                         電子協會
  5. **
  6. **--------------File Info---------------------------------------------------------------------------------
  7. ** File Name:           main.c
  8. ** Last modified Date:
  9. ** Last Version:
  10. ** Description:         主函數
  11. **
  12. **--------------------------------------------------------------------------------------------------------
  13. ** Created By:          王愷
  14. ** Created date:        2013/03/28
  15. ** Version:             V1.0
  16. ** Descriptions:                 NRF24L01無線模塊測試程序
  17. **                                                波特率:4800
  18. **--------------------------------------------------------------------------------------------------------
  19. ** Modified by:
  20. ** Modified date:
  21. ** Version:
  22. ** Description:
  23. **
  24. *********************************************************************************************************/


  25. /*********************************************************************************************************
  26.   包含頭文件
  27. *********************************************************************************************************/
  28. #include "reg51.h"
  29. #include "intrins.h"
  30. #include "nrf24l01.h"
  31. #include "main.h"

  32.   bit no1 = 0,no2 = 0;
  33.   sbit key1 = P3^2;
  34.         unsigned char rx_buf1[4]={0x99,0x99,0x99,0x99};        //必須是4位數組
  35.         unsigned char rx_buf2[4]={0x99,0x99,0x99,0x99};        //必須是4位數組
  36.         unsigned char rx_buf[4]={0x00,0x00,0x00,0x00};        //必須是4位數組

  37. void UART_Send_Str(unsigned char *s);
  38. void SendByte(unsigned char dat);

  39. /*------------------------------------------------
  40.                     串口初始化
  41. ------------------------------------------------*/
  42. void UART_Init(void)
  43. {

  44.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  45.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  46.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
  47.     TR1   = 1;                  // TR1:  timer 1 打開                        
  48.     EA    = 1;                  //打開總中斷
  49.    // ES    = 1;                  //打開串口中斷
  50. }  
  51. void Delay10ms()                //@12.000MHz
  52. {
  53.         unsigned char i, j;

  54.         i = 117;
  55.         j = 184;
  56.         do
  57.         {
  58.                 while (--j);
  59.         } while (--i);
  60. }



  61. /*********************************************************************************************************
  62. ** Function name:       main
  63. ** Descriptions:        主函數(接收)
  64. ** input parameters:    無
  65. ** output parameters:   無
  66. ** Returned value:                無
  67. //*********************************************************************************************************/
  68. void main()
  69. {
  70.          
  71.         uchar number = 0,i = 1,j=0,k = 0;

  72.          uchar number1 = 0;
  73.    uchar data1[20] = {0};

  74.         NRF24L01Int();
  75.         UART_Init();
  76.         /*
  77.          *        接收
  78.          */
  79.         while (1)
  80.         {


  81.                         if(no1 == 0)
  82.                         {
  83.                           s_dizhi(0);//設置地址
  84.                                 NRF24L01Int();
  85.                 NRFSetRXMode();//設置為接收模式
  86.                 if (NRFRevDate(rx_buf))//開始接受數
  87.                   {       

  88.                           SendByte(65); //A
  89.                                 SendByte(70); //F
  90.                           SendByte(rx_buf[0]); //此為數據       
  91.                                 SendByte(rx_buf[1]); //此為數據       
  92.                                 SendByte(rx_buf[2]); //從機編碼               
  93.                                 SendByte(rx_buf[3]);   //從機發送的次數       
  94.                                 SendByte(70); //F
  95.                           SendByte(65); //A
  96.                                 NRF24L01Int();//進行初始化并且切換地址掃描
  97. //                                 if(dizhi == 1)no1 = 1;
  98. //                                 if(dizhi == 2)no2 = 1;

  99.             }
  100.                         }
  101.                 if(no2 == 0)
  102.                         {
  103.                           s_dizhi(1);//設置地址
  104.                                 NRF24L01Int();
  105.                  NRFSetRXMode();//設置為接收模式
  106.                 if (NRFRevDate(rx_buf))//開始接受數
  107.                   {       
  108.                           SendByte(65); //A
  109.                                 SendByte(70); //F
  110.                           SendByte(rx_buf[0]);  //此為數據               
  111.                                 SendByte(rx_buf[1]);  //此為數據               
  112.                                 SendByte(rx_buf[2]);  //從機編碼               
  113.                                 SendByte(rx_buf[3]);  //從機發送的次數       
  114.                                 SendByte(70); //F
  115.                           SendByte(65); //A
  116.         NRF24L01Int();
  117. //                                 if(dizhi == 1)no1 = 1;
  118. //                                 if(dizhi == 2)no2 = 1;

  119.             }
  120.                         }
  121.        
  122.         }
  123. }

  124.    void SendByte(unsigned char dat)
  125. {
  126. SBUF = dat;
  127. while(!TI);
  128.       TI = 0;
  129. }
  130. /*------------------------------------------------
  131.                     發送一個字符串
  132. ------------------------------------------------*/
  133. void UART_Send_Str(unsigned char *s)
  134. {
  135. while(*s!='\0')// \0 表示字符串結束標志,通過檢測是否字符串末尾
  136.   {
  137.   SendByte(*s);
  138.   s++;
  139.   }
  140. }
  141. /*------------------------------------------------
  142.                      串口中斷程序
  143. ------------------------------------------------*/
  144. void UART_SER (void) interrupt 4 //串行中斷服務程序
  145. {
  146.     unsigned char Temp;          //定義臨時變量
  147.    
  148.    if(RI)                        //判斷是接收中斷產生
  149.      {
  150.           RI=0;                      //標志位清零
  151.           Temp=SBUF;                 //讀入緩沖區的值
  152.           P1=Temp;                   //把值輸出到P1口,用于觀察
  153.       SBUF=Temp;                 //把接收到的值再發回電腦端
  154.          }
  155.    if(TI)                        //如果是發送標志位,清零
  156.      TI=0;
  157. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲黄色高清视频 | 午夜成人免费视频 | 亚洲天堂精品久久 | 亚洲小视频在线观看 | 午夜精品三区 | 天天天操 | 成人亚洲一区 | 欧美在线一区二区三区 | 精品久久1| 久国产视频 | 亚洲第一在线 | 超碰人人在线 | 亚洲精品中文在线观看 | 欧美在线播放一区 | 欧美jizzhd精品欧美巨大免费 | 国产欧美精品一区二区 | 天天综合日日夜夜 | 伊人在线| 午夜激情在线视频 | 国产欧美在线观看 | www.国产精品 | 四虎永久在线精品免费一区二 | 国产高清一二三区 | 久久福利电影 | 很黄很污的网站 | 亚洲网站在线播放 | 一级毛片视频在线观看 | 国产999精品久久久 日本视频一区二区三区 | 91精品国产91久久久久久吃药 | 国内精品伊人久久久久网站 | 综合久久一区 | 欧美日韩视频 | 亚洲风情在线观看 | 国产精品久久久久免费 | 国产精品1区2区 | 亚洲人成网站777色婷婷 | 毛片视频网站 | 成人精品国产免费网站 | 操视频网站 | 国产精品福利在线观看 | 成人欧美一区二区三区1314 |