1. 程式人生 > >感測器實驗報告(第六次)

感測器實驗報告(第六次)

7.11煙霧感測器採集實驗

一、實驗目的

  1. 掌握煙霧感測器的操作方法;
  2. 掌握煙霧感測器採集程式的程式設計方法。

二、實驗內容

  1. 在 IAR 整合開發環境中編寫煙霧感測器採集程式。

三、基礎知識

採用 MQ-2 可燃氣體感測器,它可在工業或家庭裝置上使用,適合於檢測液化石油氣、丁烷、甲烷、 酒精、氫氣和煙霧。為了進行準確的檢測,可燃氣體感測器需要進行預熱,當有可燃氣體時,可燃氣體傳 感器輸出電壓將變小。
介面電路如下:這裡寫圖片描述

四、實驗程式碼

#include "ioCC2530.h"     
#define uint8 unsigned char 
#define uint16 unsigned int
#define uint32 unsigned long extern 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 long
extern 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 long
extern 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 long
extern 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 long

extern 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熄滅。

相關推薦

感測器實驗報告

7.11煙霧感測器採集實驗 一、實驗目的 掌握煙霧感測器的操作方法; 掌握煙霧感測器採集程式的程式設計方法。 二、實驗內容 在 IAR 整合開發環境中編寫煙霧感測器採集程式。 三、基礎知識 採用 MQ-2 可燃氣體感測器,它可在工業或家

七章學習體會-----

可用 nbsp 關註 授權 體會 發的 持續交付 第七章 變化 在這周我看了第六章敏捷流程跟第七章MSF。並有了以下學習總結。 敏捷這個詞聽起來就是反應靈敏迅速而有效,而在軟件按工程裏,敏捷不同於現有做法之處在於,敏捷的價值觀和流程是個人和交流、可用的軟件、與客戶合作、響應

Scrum立會報告+燃盡圖十月十五日總:視頻上傳及選題介紹工作

eight 信息 位置 ati 目的 ali idt 播放 blank 此作業要求參見:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2196 Scrum立會master:田良 一、小組介紹 組長:付佳 組員

Scrum立會報告+燃盡圖Beta階段第二週

此作業要求參見:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2414 專案地址:https://coding.net/u/wuyy694/p/pinball 一、小組介紹 組名:楊老師粉絲群 組長:喬靜玉 組員:吳奕瑤、公冶令鑫、楊磊、

SHELL環境變量初識

command include 工作環境 linux 程序 1. 環境變量的概念 環境變量是用來存儲shell會話和工作環境,方便shell輕松訪問到設定值中的程序,環境變量分為全局變量和局部變量2. 全局變量 全局變量在shell和它的子shell中都生效,可以通過env和printen

軟工實踐學習

bsp ima 增刪改查 pri 增刪 ext 處理 logs ring 經過這一段時間的ssh框架學習,通過老師帶我們完成一個項目後,我們需要自己從0開始,開始新的項目,重新搭建框架 這次我選擇的是庫存管理系統 首先依然是搭建hibernate,以及spring。

JavaScript權威指南 初讀筆記-對象

avi uid pre class bsp guide ini ole blog 1 var book = { 2 "main title": "JavaScript", // 屬性名字裏有空格,必須用字符串表示 3 "su

Redis 設計與實現 -- 整數集合intset

相同 spa edi redis cnblogs 保存 空間 數值 一個數 概述 1.intset概述 2.intset實現 3.intset升級 intset概述 整數集合是Redis集合鍵的底層實現之一,當值都為整數時,redis就會選擇整數集合作為底層實現。 可以保

《下廚房》軟件系統需求分析報告三版

驗收測試 當下 登錄密碼 支持 服務器組件 系統設置 png internet 背景 《下廚房》軟件系統 需求分析報告 項目名稱 《下廚房》 所屬課程 軟件工程 項目

微型計算機原理復習姚向華編著

通過 物理 部件 con 現場 inter isp 多少 不同 微型計算機原理復習(第六版)姚向華編著(轉載請註明出處) 第一章P37 05. 設機器字長為8位,最高位為符號位,試對下列各算式進行二進制補碼運算: (2)8 + 18 = ?[8]補=[8

Java-Web學習筆記

contex res page 發送 con 結果 管理 第六章 都是 一:什麽是內置對象?  1)定義:JSP內置對象(JSP隱含對象)是指不用聲明就可以在JSP頁面的腳本和表達式中直接使用的對象。  2)特點: &ems

python3.5學習筆記

原本 空白 制表符 false sdh office 元組 所有 n) 本章內容:   正則表達式詳解(re模塊) 1、不使用正則表達式來查找文本的內容   要求從一個字符串中查找電話號碼,並判斷是否匹配制定的模式,如:555-555-5555。傳統的查找方法如下:

牛客網暑期ACM多校訓練營 I Team Rocket(線段樹)

div 訓練 mem 線段樹 acm its cas 大於 pan 題意: 給定n個區間, m次詢問, 每次詢問給一個點, 問這個點在哪些區間內, 然後刪掉這些區間。 分析: 將n個區間按L大小升序排列, 然後將這些區間視為點構建一棵n個點的線段樹, 樹的節點記錄這個區間的

Singing Contest 【模擬】

示例 src sum closed clu ould targe while ever 題目鏈接:https://www.nowcoder.com/acm/contest/144/A 標題:A、Singing Contest | 時間限制:1 秒 | 內存限制:256M J

Heritage of skywalkert 【玄學】

only func osi greate NPU isp tin space .com 題目鏈接:https://www.nowcoder.com/acm/contest/144/J 標題:J、Heritage of skywalkert | 時間限制:1 秒 | 內存限制

牛客網暑期ACM多校訓練營I Team Rocket

then ica for each oar bject www 訓練營 line subject 題目鏈接:https://www.nowcoder.com/acm/contest/144/I 時間限制:C/C++ 4秒,其他語言8秒空間限制:C/C++ 262144K,其

牛客網暑期ACM多校訓練營J Heritage of skywalkert

題意 lcm time \n main 一句話 bsp boa first 題目鏈接:https://www.nowcoder.com/acm/contest/144/J 時間限制:C/C++ 1秒,其他語言2秒空間限制:C/C++ 262144K,其他語言524288K6

Nowcoder牛客網NOIP賽前集訓營-提高組

fir rst 人的 每次 最小 mes sig typename class A 拓撲排序+倍增哈希 或者 拓撲排序對於每個點計一個rank,每個點優先選取rank靠前的最小邊權點 每次依然按照rank排序更新rank #include<bits/stdc++.h&

C++ PRimer PLUS中文版 十一章chapter11答案 參考

bject get quit primer rime 答案 std cat tar #include <iostream>#include <cstdlib>#include <ctime>#include "vector.h" int