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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

磁檢測 紅外 煙霧等基礎傳感器原理與單片機應用程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:448809 發(fā)表于 2018-12-18 13:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
傳感器原理與應用

單片機源程序如下:
  1. /**********************************************************/
  2. //晶振頻率:11.0592MHz
  3. //文件名  :Main.c
  4. //功能說明:磁檢測傳感器讀取實驗
  5. /**********************************************************/

  6. #include <STC12C5A60S2.h>


  7. #define                BUF_LENTH        128                //定義串口接收緩沖長度
  8. unsigned char         uart1_wr=0;                //寫指針
  9. unsigned char         uart1_rd;                //讀指針
  10. unsigned char         xdata RX0_Buffer[BUF_LENTH];        //接收緩沖
  11. unsigned char flag;
  12. unsigned char i;
  13. unsigned char   xdata mbus_Sendbuf[255];
  14. unsigned char   xdata Crc_buf[2];  //聲明存儲CRC校驗值的高8位及低8位的緩存
  15. unsigned int  Crc_return_data;  //聲明CRC校驗值
  16. unsigned char         xdata RX1_Buffer[BUF_LENTH];        //接收緩沖
  17. unsigned char   xdata mbus_buffer[255];
  18. bit                B_TI; //發(fā)送完成標志
  19. sbit  P1_0 = P1^0;//定義P1.0端口

  20. void        uart1_init(void);
  21. void Uart1_TxByte(unsigned char dat);
  22. void Uart1_String(unsigned char code *puts);
  23. void delay_ms(unsigned char ms);
  24. unsigned int cal_crc(unsigned char *snd, unsigned char num);
  25. /*************** 用戶定義參數(shù) *****************************/

  26. #define MAIN_Fosc                11059200UL       
  27. #define Baudrate0                9600UL               
  28.                                                                        
  29. /**********************************************************/


  30. /****************** 編譯器自動生成,用戶請勿修改 ************************************/

  31. #define BRT_Reload                        (256 - MAIN_Fosc / 16 / Baudrate0)                //Calculate the timer1 reload value ar 1T mode


  32. /**********************************************************/

  33. //**********************************************************************
  34. //函數(shù)名:main(void)
  35. //輸入  :無
  36. //輸出  :無
  37. //功能描述:當有磁性物質靠近磁檢測傳感器的時候,D3亮,同時輸出有磁靠近的數(shù)據(jù)
  38. //          P1.0采用準雙向口工作模式 數(shù)據(jù)采用modbus的數(shù)據(jù)格式
  39. //**********************************************************************
  40. void        main(void)
  41. {
  42.         uart1_init();//初始化串口
  43.         while(1)
  44.         {
  45.                 if(flag==1)
  46.                         {                delay_ms(5);
  47.                                                                                                                                                 
  48.                                         if(RX0_Buffer[0x03] == 0x28)
  49.                                         {
  50.                                                            mbus_Sendbuf[3] = 0x01;
  51.                                                            mbus_Sendbuf[4] = 0x00;
  52.                                                            mbus_Sendbuf[2] = (((RX0_Buffer[0x04] * 16) + RX0_Buffer[0x05]) * 2);
  53.                                                            if(P1_0 == 0)
  54.                                                            {
  55.                                                                mbus_Sendbuf[4] = 0x01;
  56.                                                            }
  57.                                                            mbus_Sendbuf[0] = RX0_Buffer[0];  
  58.                                                            mbus_Sendbuf[1] = 0x03;
  59.                                                              
  60.                                                        
  61.                                                            Crc_return_data=cal_crc(mbus_Sendbuf, 5);  //取得將要發(fā)送數(shù)據(jù)的CRC值
  62.                                                    Crc_buf[0]=((Crc_return_data >> 8)&0xff);  //取得CRC值的高8位
  63.                                                    Crc_buf[1]=(Crc_return_data & 0xff);   //取得CRC值的低8位
  64.                                                            mbus_Sendbuf[5]=Crc_buf[1];  //CRC值低8位賦值給將要發(fā)送的數(shù)據(jù)的倒數(shù)第二個字節(jié)
  65.                                                            mbus_Sendbuf[6]=Crc_buf[0];  //CRC值高8位賦值給將要發(fā)送的數(shù)據(jù)的最后一個
  66.                                                          for(i = 0; i < 7; i++)
  67.                                                            {            
  68.                                                                         Uart1_TxByte(mbus_Sendbuf[i]);       
  69.                                                            }
  70.                                                                 flag=0;                          
  71.                                                         uart1_wr=0;                  
  72.                                         }       
  73.                           }
  74.         }
  75. }

  76. /*****************************CRC校驗計算函數(shù)********************************/
  77. unsigned int cal_crc(unsigned char *snd, unsigned char num)

  78. {

  79.    unsigned char i, j;

  80.    unsigned int c,crc=0xFFFF;

  81.    for(i = 0; i < num; i ++)

  82.    {

  83.        c = snd[i] & 0x00FF;

  84.        crc ^= c;

  85.        for(j = 0;j < 8; j ++)

  86.        {

  87.            if (crc & 0x0001)

  88.            {

  89.                crc>>=1;

  90.                crc^=0xA001;

  91.            }

  92.            else crc>>=1;

  93.        }

  94.    }   

  95.    return(crc);
  96. }
  97. //**********************************************************************
  98. //函數(shù)名:uart1_init(void)
  99. //輸入  :無
  100. //輸出  :無
  101. //功能描述:串口初始化函數(shù),通信參數(shù)為9600 8 N 1
  102. //**********************************************************************
  103. void        uart1_init(void)
  104. {
  105.         PCON |= 0x80;                //UART0 Double Rate Enable
  106.         SCON = 0x50;                //UART0 set as 10bit , UART0 RX enable
  107.         AUXR |=  0x01;                //UART0 使用BRT
  108.         AUXR |=  0x04;                //BRT set as 1T mode
  109.         BRT = BRT_Reload;
  110.         AUXR |=  0x10;                //start BRT       

  111.         ES  = 1;
  112.         EA = 1;
  113. }
  114. //**********************************************************************
  115. //函數(shù)名:Uart1_TxByte(unsigned char dat)
  116. //輸入  :需要發(fā)送的字節(jié)數(shù)據(jù)
  117. //輸出  :無
  118. //功能描述:從串口發(fā)送單字節(jié)數(shù)據(jù)
  119. //**********************************************************************
  120. void Uart1_TxByte(unsigned char dat)
  121. {
  122.     B_TI = 0;
  123.         SBUF = dat;
  124.         while(!B_TI);
  125.         B_TI = 0;
  126. }
  127. //**********************************************************************
  128. //函數(shù)名:Uart1_String(unsigned char code *puts)
  129. //輸入  :字符串首地址
  130. //輸出  :無
  131. //功能描述:從串口發(fā)送字符串
  132. //**********************************************************************
  133. /*void Uart1_String(unsigned char code *puts)
  134. {
  135.     for(; *puts != 0; puts++)
  136.         {
  137.         Uart1_TxByte(*puts);

  138.         }
  139. }           */

  140. //**********************************************************************
  141. //函數(shù)名:UART1_RCV (void)
  142. //輸入  :無
  143. //輸出  :無
  144. //功能描述:串口中斷接收函數(shù)
  145. //**********************************************************************
  146. void UART1_RCV (void) interrupt 4
  147. {
  148.         if(RI)
  149.         {
  150.                 RI = 0;
  151.                 RX0_Buffer[uart1_wr++] = SBUF;
  152.                 //if(++uart0_wr >= BUF_LENTH)        uart0_wr = 0;
  153.                 flag = 1;
  154.         }

  155.         if(TI)
  156.         {
  157.                 TI = 0;
  158.                 B_TI = 1;
  159.         }
  160. }

  161. void delay_ms(unsigned char ms)
  162. {
  163.     unsigned int i;
  164.         do{
  165.             i = MAIN_Fosc /1400;
  166.                 while(--i);
  167.         }while(--ms);
  168. }
復制代碼

所有資料51hei提供下載:

實驗4 磁檢測傳感器實驗-V20161122.zip

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

實驗5 煙霧檢測傳感器實驗-V20161122.zip

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

實驗3 紅外反射傳感器實驗-V20161122.zip

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

實驗2 紅外對射傳感器實驗-V20161122.zip

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

實驗11 超聲波測距離實驗-V20161122.zip

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

實驗1 酒精傳感器實驗-V20161122.zip

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

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-12-18 18:33 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品嫩草影院精东 | 精久久久久 | 青青草国产在线观看 | 国产精品久久久久久久久久久免费看 | 在线观看国产视频 | 亚洲永久字幕 | 黑人精品欧美一区二区蜜桃 | 欧美中文一区 | 91资源在线 | 99免费视频 | 国产区精品视频 | 久久久99精品免费观看 | 欧美激情免费在线 | 2022精品国偷自产免费观看 | 综合久久综合久久 | 一区二区三区欧美 | 9191av| 日本一区二区高清不卡 | 久久伦理中文字幕 | 日韩一级免费电影 | 国产精品观看 | 成人小视频在线观看 | 精品欧美乱码久久久久久 | 亚洲综合在线播放 | 伊人春色在线观看 | 国产视频福利一区 | 97人人超碰 | 手机在线一区二区三区 | 亚洲网址 | 久久精品青青大伊人av | 日韩中文视频 | 国产在线区 | 狠狠干天天干 | 麻豆国产一区二区三区四区 | 精品一二三 | 三级在线免费 | 亚洲免费人成在线视频观看 | 国产精品成人在线播放 | 亚洲va欧美va人人爽午夜 | 亚洲少妇综合网 | 国产第一区二区 |