找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1338|回复: 1
打印 上一主题 下一主题
收起左侧

磁检测 红外 烟雾等基础传感器原理与单片机应用程序

[复制链接]
跳转到指定楼层
楼主
ID:448809 发表于 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; //发送完成标志
  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. /*************** 用户定义参数 *****************************/

  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. //函数名:main(void)
  35. //输入  :无
  36. //输出  :无
  37. //功能描述:当有磁性物质靠近磁检测传感器的时候,D3亮,同时输出有磁靠近的数据
  38. //          P1.0采用准双向口工作模式 数据采用modbus的数据格式
  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);  //取得将要发送数据的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位赋值给将要发送的数据的倒数第二个字节
  65.                                                            mbus_Sendbuf[6]=Crc_buf[0];  //CRC值高8位赋值给将要发送的数据的最后一个
  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校验计算函数********************************/
  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. //函数名:uart1_init(void)
  99. //输入  :无
  100. //输出  :无
  101. //功能描述:串口初始化函数,通信参数为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. //函数名:Uart1_TxByte(unsigned char dat)
  116. //输入  :需要发送的字节数据
  117. //输出  :无
  118. //功能描述:从串口发送单字节数据
  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. //函数名:Uart1_String(unsigned char code *puts)
  129. //输入  :字符串首地址
  130. //输出  :无
  131. //功能描述:从串口发送字符串
  132. //**********************************************************************
  133. /*void Uart1_String(unsigned char code *puts)
  134. {
  135.     for(; *puts != 0; puts++)
  136.         {
  137.         Uart1_TxByte(*puts);

  138.         }
  139. }           */

  140. //**********************************************************************
  141. //函数名:UART1_RCV (void)
  142. //输入  :无
  143. //输出  :无
  144. //功能描述:串口中断接收函数
  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, 下载次数: 7, 下载积分: 黑币 -5

实验5 烟雾检测传感器实验-V20161122.zip

27.94 KB, 下载次数: 7, 下载积分: 黑币 -5

实验3 红外反射传感器实验-V20161122.zip

25.16 KB, 下载次数: 3, 下载积分: 黑币 -5

实验2 红外对射传感器实验-V20161122.zip

28.63 KB, 下载次数: 7, 下载积分: 黑币 -5

实验11 超声波测距离实验-V20161122.zip

29.58 KB, 下载次数: 6, 下载积分: 黑币 -5

实验1 酒精传感器实验-V20161122.zip

34.13 KB, 下载次数: 4, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-12-18 18:33 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表