传感器实验报告(第六次)

来源:互联网 发布:诺基亚n96软件下载 编辑:程序博客网 时间:2024/06/15 05:33

7.11烟雾传感器采集实验

一、实验目的

  1. 掌握烟雾传感器的操作方法;
  2. 掌握烟雾传感器采集程序的编程方法。

二、实验内容

  1. 在 IAR 集成开发环境中编写烟雾传感器采集程序。

三、基础知识

采用 MQ-2 可燃气体传感器,它可在工业或家庭设备上使用,适合于检测液化石油气、丁烷、甲烷、 酒精、氢气和烟雾。为了进行准确的检测,可燃气体传感器需要进行预热,当有可燃气体时,可燃气体传 感器输出电压将变小。
接口电路如下:这里写图片描述

四、实验代码

#include "ioCC2530.h"     #define uint8 unsigned char #define uint16 unsigned int#define uint32 unsigned longextern void Sensor_PIN_INT(void);extern uint16 ReadAdcValue(uint8 ChannelNum,uint8 DecimationRate,uint8 RefVoltage);char uart_buffer;void delay(void){    unsigned int i;    unsigned char j;    for(i=0;i<1500;i++)    {        for(j=0;j<200;j++)        {            asm("NOP");            asm("NOP");            asm("NOP");        }    }} void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = *Data++;           while(UTX0IF == 0);        UTX0IF = 0;    }}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = Data;           while(UTX0IF == 0);        UTX0IF = 0;    }}#pragma vector=URX0_VECTOR   //uart0中断函数__interrupt void uart0(void){    URX0IF = 0; //清中断标志    P0_0=~P0_0;    uart_buffer = U0DBUF;    //UartTX_Send_String("welcome",10);    UartTX_Send_Data(uart_buffer,1);}void main( void ){    unsigned char buf[8];    uint16 temp;    P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式    APCFG = (0x1<<1)|(0x1<<4)|(0x1<<6);//P01,P04,P06为ADC口     P2DIR |= 0x01;  //设置P2.0为输出方式    P0_0 = 1;     P2_0 = 1;       //熄灭LED    CLKCONCMD &= ~0x40;          //选择32M晶振    while(!(SLEEPSTA & 0x40));   //等待XSOC稳定    CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频    SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器    PERCFG = 0x00;               //位置1 P0 口    P0SEL = 0x3c;                //P0 用作串口    U0CSR |= 0x80;               //UART 方式    U0GCR |= 10;                 //baud_e = 10;    U0BAUD |= 216;               //波特率设为57600    UTX0IF = 1;    U0CSR |= 0X40;               //允许接收    IEN0 |= 0x84;                //开总中断,接收中断        Sensor_PIN_INT();    UartTX_Send_String("Testing...\r\n",12);    while(1){                       P2_0=~P2_0;                      temp = ReadAdcValue(4,3,0x2);//P0.4采集烟雾告警值,12bit,AVDD5作为参考        temp = (temp>>4);           buf[0] = (uint8)(temp&0xff);        buf[1] = (buf[0]>>4)&0xf;        buf[2] =  buf[0]&0xf;        if(buf[1] > 0x9)            buf[1] = buf[1] - 0XA + 'A';    else        buf[1] = buf[1] + '0';        if(buf[2] > 0x9)            buf[2] = buf[2] - 0XA + 'A';    else        buf[2] = buf[2] + '0';    UartTX_Send_String("Smog = ",7);        UartTX_Send_String(&buf[1],1);        UartTX_Send_String(&buf[2],1);    UartTX_Send_String("\r\n",2);           delay();    }} // end of main()

五、实验现象

烧写程序后,复位。连接串口精灵。可看到如下图所示的内容。
这里写图片描述


7.12 酒精传感器采集实验

一、实验目的

  1. 掌握酒精传感器的操作方法;
  2. 掌握酒精传感器采集程序的编程方法。

二、实验内容

  1. 在 IAR 集成开发环境中编写酒精传感器采集程序。

三、基础知识

采用 MQ-303A 酒精传感器,它是一种二氧化锡半导体型酒精气体传感器,对酒精具有高的灵敏度和快 速的响应性,适于便携式酒精探测器和汽车燃火系统等等。
半导体气体敏感部分是一个微型珠状小球,内嵌加热丝和金属电极,当有酒精存在时,输出电压变小。
接口电路如下:
这里写图片描述

四、实验代码

#include "ioCC2530.h"     #define uint8 unsigned char #define uint16 unsigned int#define uint32 unsigned longextern void Sensor_PIN_INT(void);extern uint16 ReadAdcValue(uint8 ChannelNum,uint8 DecimationRate,uint8 RefVoltage);char uart_buffer;void delay(void){    unsigned int i;    unsigned char j;    for(i=0;i<1500;i++)    {        for(j=0;j<200;j++)        {            asm("NOP");            asm("NOP");            asm("NOP");        }    }} void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = *Data++;           while(UTX0IF == 0);        UTX0IF = 0;    }}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = Data;           while(UTX0IF == 0);        UTX0IF = 0;    }}#pragma vector=URX0_VECTOR   //uart0中断函数__interrupt void uart0(void){    URX0IF = 0; //清中断标志    P0_0=~P0_0;    uart_buffer = U0DBUF;    //UartTX_Send_String("welcome",10);    UartTX_Send_Data(uart_buffer,1);}void main( void ){    unsigned char buf[8];    uint16 temp;    P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式    APCFG = (0x1<<1)|(0x1<<4)|(0x1<<6);//P01,P04,P06为ADC口     P2DIR |= 0x01;  //设置P2.0为输出方式    P0_0 = 1;     P2_0 = 1;       //熄灭LED    CLKCONCMD &= ~0x40;          //选择32M晶振    while(!(SLEEPSTA & 0x40));   //等待XSOC稳定    CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频    SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器    PERCFG = 0x00;               //位置1 P0 口    P0SEL = 0x3c;                //P0 用作串口    U0CSR |= 0x80;               //UART 方式    U0GCR |= 10;                 //baud_e = 10;    U0BAUD |= 216;               //波特率设为57600    UTX0IF = 1;    U0CSR |= 0X40;               //允许接收    IEN0 |= 0x84;                //开总中断,接收中断        Sensor_PIN_INT();    UartTX_Send_String("Testing...\r\n",12);    while(1){                       P2_0=~P2_0;                      temp = ReadAdcValue(5,3,0x2);//P0.5采集光照度,12bit,AVDD5作为参考        temp = (temp>>4);           buf[0] = (uint8)(temp&0xff);        buf[1] = (buf[0]>>4)&0xf;        buf[2] =  buf[0]&0xf;        if(buf[1] > 0x9)            buf[1] = buf[1] - 0XA + 'A';    else        buf[1] = buf[1] + '0';        if(buf[2] > 0x9)            buf[2] = buf[2] - 0XA + 'A';    else        buf[2] = buf[2] + '0';    UartTX_Send_String("Alcohol = ",10);        UartTX_Send_String(&buf[1],1);        UartTX_Send_String(&buf[2],1);    UartTX_Send_String("\r\n",2);           delay();    }} // end of main()

五、实验现象

烧写程序后,复位。连接串口精灵,当酒精量发生变化时,可看到数据的不同。这里写图片描述


7.13 气象气体气压传感器采集实验

一、实验目的

  1. 掌握气象气体气压传感器的操作方法;
  2. 掌握气象气体气压传感器采集程序的编程方法。

二、实验内容

  1. 在 IAR 集成开发环境中编写气象气体气压传感器采集程序。

三、基础知识

采用MPS-150A气象气体气压传感器,是一款低花费、小尺寸表面封装压力传感器,可用于气象气体气压的测量。可用于移动高度计/气压计,气象预报,手表,空气球,无扩散的血压测量等领域。
接口电路如下:
这里写图片描述

四、实验代码

#include "ioCC2530.h"     #define uint8 unsigned char #define uint16 unsigned int#define uint32 unsigned longextern void Sensor_PIN_INT(void);extern uint16 ReadAdcValue(uint8 ChannelNum,uint8 DecimationRate,uint8 RefVoltage);char uart_buffer;void delay(void){    unsigned int i;    unsigned char j;    for(i=0;i<1500;i++)    {        for(j=0;j<200;j++)        {            asm("NOP");            asm("NOP");            asm("NOP");        }    }} void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = *Data++;           while(UTX0IF == 0);        UTX0IF = 0;    }}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = Data;           while(UTX0IF == 0);        UTX0IF = 0;    }}#pragma vector=URX0_VECTOR   //uart0中断函数__interrupt void uart0(void){    URX0IF = 0; //清中断标志    P0_0=~P0_0;    uart_buffer = U0DBUF;    //UartTX_Send_String("welcome",10);    UartTX_Send_Data(uart_buffer,1);}void main( void ){    unsigned char buf[8];    uint16 temp;    P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式        P2DIR |= 0x01;  //设置P2.0为输出方式    P0_0 = 1;     P2_0 = 1;       //熄灭LED    CLKCONCMD &= ~0x40;          //选择32M晶振    while(!(SLEEPSTA & 0x40));   //等待XSOC稳定    CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频    SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器    PERCFG = 0x00;               //位置1 P0 口    P0SEL = 0x3c;                //P0 用作串口    U0CSR |= 0x80;               //UART 方式    U0GCR |= 10;                 //baud_e = 10;    U0BAUD |= 216;               //波特率设为57600    UTX0IF = 1;    U0CSR |= 0X40;               //允许接收    IEN0 |= 0x84;                //开总中断,接收中断        Sensor_PIN_INT();    UartTX_Send_String("Testing...\r\n",12);    while(1){                       P2_0=~P2_0;                      temp = ReadAdcValue(7,3,0x2);//P0.7采集气象或血压值,12bit,AVDD5作为参考        temp = (temp>>4);           buf[0] = (uint8)(temp&0xff);        buf[1] = (buf[0]>>4)&0xf;        buf[2] =  buf[0]&0xf;        if(buf[1] > 0x9)            buf[1] = buf[1] - 0XA + 'A';    else        buf[1] = buf[1] + '0';        if(buf[2] > 0x9)            buf[2] = buf[2] - 0XA + 'A';    else        buf[2] = buf[2] + '0';    UartTX_Send_String("Pressure = ",11);        UartTX_Send_String(&buf[1],1);        UartTX_Send_String(&buf[2],1);        UartTX_Send_String("         ",4);    UartTX_Send_String("\r\n",2);                   delay();    }} // end of main()

五、实验现象

烧写程序后,复位。连接电脑,打开串口精灵,可看到如下图所示的数据。
这里写图片描述


7.14 超声波传感器采集实验

一、实验目的

  1. 掌握超声波传感器的操作方法;
  2. 掌握超声波传感器采集程序的编程方法。

二、实验内容

  1. 在 IAR 集成开发环境中编写超声波传感器采集程序。

三、基础知识

采用 DYP-ME007 超声波传感器,通过在触发端发送一个 10uS 以上的高电平脉冲,在回升端就可以接收到一个高电平脉冲,通过此高电平脉冲的高电平长度,就可以计算出障碍物离超声波传感器的距离。
接口电路如下:这里写图片描述

四、实验代码

#include "ioCC2530.h"     unsigned char counter;unsigned char buf[3];void SendASignal(void){  unsigned char i;  P1_6 = 0;                                     for(i=0;i<50;i++){    asm("NOP");    asm("NOP");    asm("NOP");    asm("NOP");    asm("NOP");    asm("NOP");    asm("NOP");    asm("NOP");    asm("NOP");    asm("NOP");  }  P1_6 = 1;                    } void delay(void){  unsigned int i;  unsigned char j;  for(i=0;i<5000;i++)  {    for(j=0;j<200;j++)    {      asm("NOP");      asm("NOP");      asm("NOP");    }  }} void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = *Data++;           while(UTX0IF == 0);        UTX0IF = 0;    }}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = Data;           while(UTX0IF == 0);        UTX0IF = 0;    }}#pragma vector=URX0_VECTOR   //uart0中断函数__interrupt void uart0(void){    URX0IF = 0; //清中断标志}#pragma vector=T1_VECTOR   //定时器1中断函数 50us__interrupt void Timer1(void){    counter++;    P0_0=~P0_0;  }void main( void ){  P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式  P2DIR |= 0x01;  //设置P2.0为输出方式  P1DIR = (0x01<<6);  //设置P1.6为输出方式;P1.7为输入方式  P0_0 = 1;   P2_0 = 1;       //熄灭LED  counter = 0;  CLKCONCMD &= ~0x40;          //选择32M晶振  while(!(SLEEPSTA & 0x40));   //等待XSOC稳定  CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频  SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器  T1CC0L = 6;     T1CC0H = 0x00;   //比较值  T1CTL = 0x33;    //通道0,不分频,up/down模式  PERCFG = 0x00;               //位置1 P0 口  P0SEL = 0x3c;                //P0 用作串口  U0CSR |= 0x80;               //UART 方式  U0GCR |= 10;                 //baud_e = 10;  U0BAUD |= 216;               //波特率设为57600  UTX0IF = 1;  U0CSR |= 0X40;               //允许接收  IEN0 |= 0x84;                //开总中断,接收中断     EA = 1;          //开总中断  T1IE = 1;        //开定时器T1中断  while(1){            P2_0=~P2_0;        SendASignal();        while(1){      if(P1_7==1) break;                                                                                     }    counter = 0;    while(1){      if(P1_7==0) break;                                                                                     }    //counter保存高电平长度,单位为50us        buf[0] = counter/100;    buf[1] = (counter%100)/10;    buf[2] = (counter%10);        if(buf[0] > 0x9)      buf[0] = buf[0] - 0XA + 'A';    else      buf[0] = buf[0] + '0';                  if(buf[1] > 0x9)      buf[1] = buf[1] -0XA + 'A';    else      buf[1] = buf[1] + '0';    if(buf[2] > 0x9)      buf[2] = buf[2] -0XA + 'A';    else      buf[2] = buf[2] + '0';    UartTX_Send_String("Ultrasonic = ",13);    UartTX_Send_String(&buf[0],1);    UartTX_Send_String(&buf[1],1);    UartTX_Send_String(&buf[2],1);    UartTX_Send_String("cm",2);    UartTX_Send_String("\r\n",2);    delay();  }} // end of main()

五、实验现象

烧写程序后,复位。连接电脑,打开串口精灵。当障碍物距离发生变化时,可看到显示的数据变化。这里写图片描述


7.15 水流量传感器采集实验

一、实验目的

  1. 掌握水流量传感器的操作方法;
  2. 掌握水流量传感器采集程序的编程方法。

二、实验内容

  1. 在 IAR 集成开发环境中编写水流量传感器采集程序。

三、基础知识

采用 MR168 水流量传感器。它由外壳和霍尔元件组成,当液体通过传感器时,驱动内部转子 转动,输出脉冲信号。
接口电路如下:
这里写图片描述

四、实验代码

#include "ioCC2530.h"     #define uint8 unsigned char #define uint16 unsigned int#define uint32 unsigned longextern void Sensor_PIN_INT(void);extern uint16 ReadAdcValue(uint8 ChannelNum,uint8 DecimationRate,uint8 RefVoltage);char uart_buffer;uint16 WaterFlowCount = 0;uint16 Count1ms = 0;uint8  f1s = 0;#pragma vector = 0x007B __interrupt void P1_ISR(void){    if(P1IFG & (0x1<<6))      WaterFlowCount++;   P1IFG = 0;   P1IF = 0;}void delay(void){    unsigned int i;    unsigned char j;    for(i=0;i<1500;i++)    {        for(j=0;j<200;j++)        {            asm("NOP");            asm("NOP");            asm("NOP");        }    }} void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = *Data++;           while(UTX0IF == 0);        UTX0IF = 0;    }}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = Data;           while(UTX0IF == 0);        UTX0IF = 0;    }}#pragma vector=T1_VECTOR   //定时器1中断函数 1ms__interrupt void Timer1(void){    if(++Count1ms > 1000){        Count1ms = 0;        f1s = 1;    }}#pragma vector=URX0_VECTOR   //uart0中断函数__interrupt void uart0(void){    URX0IF = 0; //清中断标志    P0_0=~P0_0;    uart_buffer = U0DBUF;    //UartTX_Send_String("welcome",10);    UartTX_Send_Data(uart_buffer,1);}void main( void ){    unsigned char buf[8];    P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式    APCFG = (0x1<<1)|(0x1<<4)|(0x1<<6);//P01,P04,P06为ADC口     P1DIR = (0x01<<3)|(0x01<<4);  //设置P1.3,P1_4为输出方式;    P2DIR |= 0x01;  //设置P2.0为输出方式    P0_0 = 1;     P2_0 = 1;       //熄灭LED    CLKCONCMD &= ~0x40;          //选择32M晶振    while(!(SLEEPSTA & 0x40));   //等待XSOC稳定    CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频    P1SEL |= (1<<6);//P16为外设功能           PICTL &= ~(1<<2); //P14~P17上升沿触发    P1IEN |= (1<<6);//P16中断使能    IEN2 |= (1<<4);//P1口中断使能    P1 &= ~((1<<3)|(1<<4));//00:正,负管均不通      T1CC0L = 125;       T1CC0H = 0x00;   //比较值    T1CTL = 0x33;    //通道0,不分频,up/down模式    PERCFG = 0x00;               //位置1 P0 口    P0SEL = 0x3c;                //P0 用作串口    U0CSR |= 0x80;               //UART 方式    U0GCR |= 10;                 //baud_e = 10;    U0BAUD |= 216;               //波特率设为57600    UTX0IF = 1;    U0CSR |= 0X40;               //允许接收    IEN0 |= 0x84;                //开总中断,接收中断       EA = 1;          //开总中断    T1IE = 1;        //开定时器T1中断                UartTX_Send_String("Testing...\r\n",12);    while(1){                    P2_0=~P2_0;           Count1ms = 0;        f1s = 0;        WaterFlowCount = 0;        while(1){            if(f1s == 1){                WaterFlowCount = (WaterFlowCount) * 30 / 4;                buf[0] = (uint8)(WaterFlowCount/10000);                buf[1] = (uint8)((WaterFlowCount%10000)/1000);                buf[2] = (uint8)((WaterFlowCount%1000)/100);                buf[3] = (uint8)((WaterFlowCount%100)/10);                buf[4] = (uint8)(WaterFlowCount%10);                if(buf[0] > 0x9)                    buf[0] = buf[0] - 0XA + 'A';            else                buf[0] = buf[0] + '0';                if(buf[1] > 0x9)                    buf[1] = buf[1] - 0XA + 'A';            else                buf[1] = buf[1] + '0';                if(buf[2] > 0x9)                    buf[2] = buf[2] - 0XA + 'A';            else                buf[2] = buf[2] + '0';                if(buf[3] > 0x9)                    buf[3] = buf[3] - 0XA + 'A';            else                buf[3] = buf[3] + '0';                if(buf[4] > 0x9)                    buf[4] = buf[4] - 0XA + 'A';            else                buf[4] = buf[4] + '0';                break;                            }        }                    UartTX_Send_String("WaterFlow = ",12);        UartTX_Send_String(&buf[0],1);        UartTX_Send_String(&buf[1],1);        UartTX_Send_String(&buf[2],1);        UartTX_Send_String(&buf[3],1);        UartTX_Send_String(&buf[4],1);        UartTX_Send_String("L/MIN",5);        UartTX_Send_String("\r\n",2);       }} // end of main()

五、实验现象

烧写程序后,复位。连接到电脑,打开串口精灵。可看到如下如所示的数据。
这里写图片描述


7.16 雨滴传感器采集实验

一、实验目的

  1. 掌握雨滴传感器的操作方法;
  2. 掌握雨滴传感器采集程序的编程方法。

二、实验内容

  1. 在 IAR 集成开发环境中编写雨滴传感器采集程序。

三、基础知识

  1. 雨滴传感器介绍 雨滴传感器是利用水的导电特性而设计的,采用梳状结构的两个导电体,当无雨时,此两个导电体是隔离的,阻值很大;有雨时,此两个导电体之间的阻值变小。
    接口电路如下:这里写图片描述

四、实验代码

#include "ioCC2530.h"     #define uint8 unsigned char #define uint16 unsigned int#define uint32 unsigned longextern void Sensor_PIN_INT(void);extern uint16 ReadAdcValue(uint8 ChannelNum,uint8 DecimationRate,uint8 RefVoltage);char uart_buffer;void delay(void){    unsigned int i;    unsigned char j;    for(i=0;i<1500;i++)    {        for(j=0;j<200;j++)        {            asm("NOP");            asm("NOP");            asm("NOP");        }    }} void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = *Data++;           while(UTX0IF == 0);        UTX0IF = 0;    }}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数{    int j;    for(j=0;j<len;j++)    {        U0DBUF = Data;           while(UTX0IF == 0);        UTX0IF = 0;    }}#pragma vector=URX0_VECTOR   //uart0中断函数__interrupt void uart0(void){    URX0IF = 0; //清中断标志    P0_0=~P0_0;    uart_buffer = U0DBUF;    //UartTX_Send_String("welcome",10);    UartTX_Send_Data(uart_buffer,1);}void main( void ){    uint16 AdValue;    unsigned char buf[8];       Sensor_PIN_INT();    P1_3 = 0;    P1_4 = 0;    UartTX_Send_String("Testing...\r\n",12);    while(1){           AdValue = ReadAdcValue(0x6,3,2);        AdValue = AdValue >> 6;                buf[0] = (uint8)(AdValue/100);        buf[1] = (uint8)(AdValue%100/10);        buf[2] = (uint8)(AdValue%10);    if(buf[0] > 0x9)            buf[0] = buf[0] - 0XA + 'A';        else            buf[0] = buf[0] + '0';          if(buf[1] > 0x9)            buf[1] = buf[1] - 0XA + 'A';        else            buf[1] = buf[1] + '0';          if(buf[2] > 0x9)            buf[2] = buf[2] - 0XA + 'A';        else            buf[2] = buf[2] + '0';              if(AdValue > 128){//未下雨            P0_0 = 1;             P2_0 = 1;       //熄灭LED        }        else{//已下雨            P0_0 = 0;             P2_0 = 0;       //熄灭LED        }    UartTX_Send_String("Rain = ",7);        UartTX_Send_String(&buf[0],1);        UartTX_Send_String(&buf[1],1);        UartTX_Send_String(&buf[2],1);        UartTX_Send_String("    ",4);    UartTX_Send_String("\r\n",2);                   delay();    }} // end of main()

五、实验现象

烧写程序后,复位。连接电脑,打开串口精灵,当有水落在检测板上时,可看到数据的变化。这里写图片描述


7.17 霍尔传感器采集实验

一、实验目的

  1. 掌握霍尔传感器的操作方法;
  2. 掌握霍尔传感器采集程序的编程方法。

二、实验内容

  1. 在 IAR 集成开发环境中编写霍尔传感器采集程序。

三、基础知识


  1. 霍尔传感器介绍

采用 AH3144E 霍尔传感器。它是由电压调整器,霍尔电压发生器,差分放大器,史密特触发器和集电 极开路的输出级组成的磁敏传感电路,其输入为磁感应强度,输出是一个数字电压讯号。它是一种单磁极 工作的磁敏电路,适合于矩形或者柱形磁体下工作。
可用于无触点开关、位置控制、转速检测、隔离检测、直流无刷电机、电流传感器、汽车点火 器、安全报警装置等领域。
接口电路如下:这里写图片描述

四、实验代码

#include "ioCC2530.h"      void delay(void)      //延时时间约10ms{  unsigned int i;  unsigned char j;  for(i=0;i<1500;i++)  {    for(j=0;j<20;j++)    {      asm("NOP");    }  }} void main( void ){  P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4为输入方式  P1DIR = (0x01<<3)|(0x01<<4);  //设置P1.3,P1_4为输出方式;  P2DIR |= 0x01;  //设置P2.0为输出方式  P1_3 = 0;  P1_4 = 0;  while(1)  {    if(P1_7 == 0){//有霍尔感应                P0_0 = 0;        P2_0 = 0;    }    else{//无霍尔感应        P0_0 = 1;        P2_0 = 1;          }  }} // end of main()

五、实验现象

烧写程序后,复位。可看到,当有磁体靠经传感器是,LED点亮。磁体离开后,LED熄灭。

0 0