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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

nRF24L01+51單片機無線語音點滴報警系統源程序+PCB源文件

[復制鏈接]
跳轉到指定樓層
樓主
使用的51單片機作為主控芯片,兩個51單片機通過24L01通信,一個檢測吊瓶滴液的速度,如果太快太慢或者不滴液都會報警,并發送到主機,輸液者也可以主動通過按鍵呼叫主機,叢機用1602顯示,主機用12864顯示。
主機.7z (63.93 KB, 下載次數: 75) 無線語音點滴系統 從機.7z (76.39 KB, 下載次數: 66)

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "keys.h"
  4. #include "24L01.h"
  5. #include "LCD1602.h"
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. sbit YeDi=P2^0;//紅外信號采集口
  9. sbit Speaker=P2^4;//蜂鳴器

  10. uchar TX_buf[32]=0;
  11. uchar View_Con=0;
  12. uchar View_Change=1;
  13. uchar View_Con_Change=1;
  14. uint  Cap_Data=100;
  15. uint  Cap_View=0;

  16. uchar View_Data[8];

  17. uint YeDi_Num=0;

  18. void InitTimer0(void)
  19. {
  20.     TMOD |= 0x01;
  21.     TH0 = 0x0D8;         //10000us
  22.     TL0 = 0x0F0;
  23.     EA = 1;
  24.     ET0 = 1;
  25.     TR0 = 1;
  26. }

  27. void InitTimer1(void)
  28. {
  29.     TMOD |= 0x10;
  30.     TH1 = 0x0FC;   //1000us
  31.     TL1 = 0x18;
  32.     EA = 1;
  33.     ET1 = 1;
  34.    
  35. }


  36. void main()
  37. {
  38. TX_buf[1]=0;
  39. TX_buf[2]=2;
  40. TX_buf[3]=5;
  41. TX_buf[4]=4;
  42. InitLcd();
  43. Lcd_1602_word(0x80,16,"    NRF24L01    ");      //1602第一行顯示      NRF24L01
  44. //Lcd_1602_word(0xc0,16,"   Connecting   ");       //1602第二行顯示       Connecting
  45. while(NRF24L01_Check());     //檢查24L01是否存在
  46. NRF24L01_Init();    //開機的時候需要初始化24l01
  47. InitTimer0();        //定時計數器0初始化
  48. InitTimer1();        //定時計數器1初始化
  49.     Lcd_1602_word(0xc0,16,"   Connecting   ");
  50. while(1)
  51.   {
  52.    if(Key_Change)     //如果Key_Change為真
  53.     {
  54.      Key_Change=0;
  55.      View_Change=1;
  56.      switch(Key_Value)    //選擇鍵值
  57.       {
  58.        case 1:
  59.               {
  60.                View_Con_Change=1;
  61.                if(View_Con==0)
  62.                 {
  63.                  View_Con=1;
  64.                  TR1 = 1;
  65.                  Cap_View=Cap_Data*100;
  66.                 }
  67.                if(View_Con==2)
  68.                 {
  69.                  View_Con=1;
  70.                  TR1 = 1;
  71.                 }
  72.                break;
  73.               }
  74.        case 2:
  75.                  {
  76.                if(View_Con==0)               //液滴加
  77.                 {
  78.                  if(Cap_Data<=500)
  79.                   Cap_Data+=10;
  80.                 }
  81.                break;
  82.               }
  83.        case 3:
  84.                  {
  85.                if(View_Con==0)
  86.                 {
  87.                  if(Cap_Data>10)              //液滴減
  88.                   Cap_Data-=10;
  89.                 }
  90.                break;
  91.               }
  92.        case 4:
  93.                  {
  94.                if(View_Con==1)
  95.                 {
  96.                  TR1 = 0;
  97.                  YeDi_Num=0;
  98.                  View_Con=2;
  99.                  View_Con_Change=1;
  100.                  TX_buf[0]=0xf5;//蜂鳴器響
  101.                  TX_buf[5]=4;//用戶呼叫
  102.                NRF24L01_TxPacket(TX_buf);
  103.                  NRF24L01_TxPacket(TX_buf);
  104.         
  105.                 }
  106.                break;
  107.               }
  108.       }
  109.     }
  110.    if(View_Change)
  111.     {
  112.       View_Change=0;
  113.       if(View_Con_Change)
  114.        {
  115.            View_Con_Change=0;
  116.         switch(View_Con)
  117.          {
  118.           case 0:Lcd_1602_word(0x80,16,"Infusion Set:   ");Lcd_1602_word(0xc0,16,"                ");break;
  119.            case 1:Lcd_1602_word(0x80,16,"In The Infusion ");Lcd_1602_word(0xc0,16,"                ");Speaker=1;break;
  120.           case 2:
  121.                   {
  122.                  Lcd_1602_word(0x80,16,"****Warning*****");Lcd_1602_word(0xc0,16,"****Warning*****");Speaker=0;
  123.                  if(TX_buf[5]<4)
  124.                   while(1);
  125.                  break;
  126.                 }
  127.          }
  128.        }
  129.      switch(View_Con)
  130.          {
  131.           case 0:
  132.                   {
  133.                  View_Data[0]=Cap_Data/100+0x30;
  134.                  View_Data[1]=Cap_Data%100/10+0x30;
  135.                  View_Data[2]=Cap_Data%10+0x30;
  136.                  View_Data[3]='m';
  137.                  View_Data[4]='l';
  138.                  if(View_Data[0]==0x30)
  139.                   View_Data[0]=' ';
  140.                  Lcd_1602_word(0xcb,5,View_Data);
  141.                  break;
  142.                 }
  143.            case 1:
  144.                   {
  145.                  View_Data[0]=Cap_View/10000+0x30;
  146.                  View_Data[1]=Cap_View%10000/1000+0x30;
  147.                  View_Data[2]=Cap_View%1000/100+0x30;
  148.                  View_Data[3]='.';
  149.                  View_Data[4]=Cap_View%100/10+0x30;
  150.                  View_Data[5]=Cap_View%10+0x30;
  151.                  View_Data[6]='m';
  152.                  View_Data[7]='l';
  153.                  if(View_Data[0]==0x30)
  154.                   {
  155.                    View_Data[0]=' ';
  156.                    if(View_Data[1]==0x30)
  157.                     {
  158.                      View_Data[1]=' ';
  159.                     }
  160.                   }
  161.                  Lcd_1602_word(0xc8,8,View_Data);
  162.                  break;
  163.                 }
  164.          }
  165.     }
  166.   }
  167. }

  168. void Timer0Interrupt(void) interrupt 1
  169. {
  170.     static     uchar YeDi_Con;
  171.     static  uchar Key_Time0_Con;
  172.     TH0 = 0xfc;
  173.     TL0 = 0x18;
  174.     Key_Time0_Con++;
  175.     switch(YeDi_Con)
  176.      {
  177.       case 0:
  178.               {
  179.              if(YeDi==1)
  180.               YeDi_Con++;
  181.              break;
  182.             }
  183.       case 1:
  184.               {
  185.              if(YeDi==0)
  186.               {
  187.                YeDi_Con=2;
  188.                YeDi_Num=0;
  189.                TR1 = 1;
  190.               }
  191.              break;
  192.             }
  193.       case 2:
  194.               {
  195.              if(YeDi==1)
  196.               {
  197.                TR1 = 0;
  198.                YeDi_Con=0;
  199.                if(View_Con==1)
  200.                 {
  201.                  View_Change=1;
  202.                  Cap_View=Cap_View-4;
  203.                  if(YeDi_Num<500)     //小于0.5s則報警
  204.                   {
  205.                    View_Con=2;
  206.                    View_Con_Change=1;
  207.                    TX_buf[0]=0xf5;
  208.                    TX_buf[5]=1;
  209.                    NRF24L01_TxPacket(TX_buf);
  210.                    NRF24L01_TxPacket(TX_buf);
  211.                
  212.                   }
  213.                  if(Cap_View<100)    //小于1毫升,報警
  214.                   {
  215.                    View_Con=2;
  216.                    View_Con_Change=1;
  217.                    TX_buf[0]=0xf5;
  218.                    TX_buf[5]=3;
  219.                    NRF24L01_TxPacket(TX_buf);
  220.                    NRF24L01_TxPacket(TX_buf);
  221.         
  222.                   }
  223.                 }
  224.                TR1 = 1;
  225.                YeDi_Num=0;
  226.               }
  227.              break;
  228.             }
  229.      }
  230.     if(Key_Time0_Con==10)
  231.      {
  232.       Key_Time0_Con=0;
  233.       Key_Acquisition();
  234.      }
  235.    
  236. }

  237. void Timer1Interrupt(void) interrupt 3
  238. {
  239.     TH1 = 0x0FC;
  240.     TL1 = 0x18;
  241.     YeDi_Num++;
  242.     if(YeDi_Num>5000&&View_Con==1)    //大于5s則報警,
  243.      {
  244.       View_Con=2;
  245.       View_Change=1;
  246.       View_Con_Change=1;
  247.       TX_buf[0]=0xf5;
  248.       TX_buf[5]=2;
  249.       NRF24L01_TxPacket(TX_buf);
  250.       NRF24L01_TxPacket(TX_buf);
  251.          Lcd_1602_word(0x80,16,"    ok    ");
  252.      }
  253. }
復制代碼

Fl0Gz7ZJ9F4r2FF-dLTyLMHqeDsS.png (18.11 KB, 下載次數: 109)

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

使用道具 舉報

沙發
ID:58110 發表于 2020-1-2 08:30 | 只看該作者
學習學習,謝謝分享
回復

使用道具 舉報

板凳
ID:947971 發表于 2023-4-24 23:23 | 只看該作者
你好,這個報警電路在哪里呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频中文字幕 | 黄色免费网站在线看 | 国产日产欧产精品精品推荐蛮挑 | 亚洲日本免费 | 国产在线视频一区二区董小宛性色 | 欧美在线视频一区二区 | 天堂视频中文在线 | 成人一级片在线观看 | 精品国产精品一区二区夜夜嗨 | 久久久无码精品亚洲日韩按摩 | 日日综合| 日本不卡一区 | 日韩精品免费看 | 人人艹人人爽 | 久久尤物免费一区二区三区 | 天堂精品 | 日韩成人免费视频 | 亚洲精品无 | 亚洲精品av在线 | 国产成人免费视频网站视频社区 | av中文网 | 久久一视频 | 国产电影精品久久 | 午夜精品福利视频 | 国产男女猛烈无遮掩视频免费网站 | 亚洲一区久久 | 日韩欧美在线视频观看 | 日韩av一区二区在线观看 | 国产精品视频久久 | 亚洲成人自拍 | 中文字幕久久精品 | 国产亚洲欧美在线 | 亚洲综合视频一区 | 欧美天堂在线 | 久久精品亚洲精品 | 久久国产精品色av免费观看 | 久久天堂| 日韩精品 电影一区 亚洲 | 香蕉大人久久国产成人av | 精品毛片 | 亚洲国产一区二区三区在线观看 |