LPC1788的多路数据采集系统下位机+LabVIEW下位机程序

发布者:RadiantGaze最新更新时间:2019-11-26 来源: 51hei关键字:LPC1788  数据采集系统  下位机  LabVIEW 手机看文章 扫描二维码
随时随地手机看文章

包含程序源码,电路图
0.png

单片机源程序如下:


 

#include "../LPC177x_8x/LPC177x_8x.h"

#include "../LPC177x_8x/type.h"

#include "../ADC/adc.h"

#define BEEPON            (LPC_GPIO3->CLR = 1ul << 30)                  /* 蜂鸣器工作                   */

#define BEEPOFF           (LPC_GPIO3->SET = 1ul << 30)                  /* 蜂鸣器不工作                 */

#if ADC_DEBUG

#include "../UART/uart.h"

#endif


extern volatile uint32_t ADCValue[ADC_NUM];

extern volatile uint32_t ADCIntDone;


#if ADC_DEBUG

extern volatile uint32_t UART0Count;

extern volatile uint8_t UART0Buffer[BUFSIZE];

#endif



#if ADC_DEBUG

/*********************************************************************************************************

** 函数名称 :ConvertDigital

** 函数功能 :Convert Digital to ASCII

** 输入参数 : 字符

** 返回值   : ASCII字符

*********************************************************************************************************/

static uint8_t ConvertDigital ( uint8_t digit )

{

    static uint8_t hex[] = "0123456789ABCDEF";

    return hex[digit & 0xf];

}

#endif


/*********************************************************************************************************

** 函数名称:myDelay

** 函数描述:软件延时

** 输入参数:ulTime    延时大小

** 返回值  :无

*********************************************************************************************************/

//uint8_t tdata[5]={0x00,0x00,0x00,0x00,0x00};

uint8_t buf[7];

uint8_t sbuf,check;

void myDelay (uint32_t ulTime)

{

    uint32_t i = 0;


    while (ulTime--) 

                {

        for (i = 0; i < 20000; i++);

    }

}

void usDelay (uint32_t ulTime)

{

    uint32_t i = 0;

    while (ulTime--)

                {

        for (i = 0; i < 20; i++);

    }

}

void DHT11_Rst(void)           

{                 

        LPC_GPIO3->DIR |= 1<<25;        //SET OUTPUT

  LPC_GPIO3->CLR = 1ul << 25 ;         //拉低DQ

  myDelay(20);            //拉低至少18ms

  LPC_GPIO3->SET = 1ul << 25;        //DQ=1 

        usDelay(30);             //主机拉高20~40us

}

//等待DHT11的回应

//返回1:未检测到DHT11的存在

//返回0:存在

uint8_t DHT11_Check(void)            

{   

        uint8_t retry=0;

        LPC_GPIO3->DIR &= ~(1 << 25);    //SET INPUT         

  while (!(LPC_GPIO3->PIN & 1 << 25)&&retry<100)//DHT11会拉低40~80us

        {

                retry++;

                usDelay(1);

        } 

        if(retry>=100)

                return 1;

        else retry=0;

  while ((LPC_GPIO3->PIN & 1 << 25)&&retry<100)//DHT11拉低后会再次拉高40~80us

        {

                retry++;

                usDelay(1);

        }

        if(retry>=100)

                return 1;            

        return 0;

}

//从DHT11读取一个位

//返回值:1/0

uint8_t DHT11_Read_Bit(void)                          

{

        uint8_t retry=0;

        while((LPC_GPIO3->PIN & 1 << 25)&&retry<100)//等待变为低电平

        {

                retry++;

                usDelay(1);

        }

        retry=0;

        while(!(LPC_GPIO3->PIN & 1 << 25)&&retry<100)//等待变高电平

        {

                retry++;

                usDelay(1);

        }

        usDelay(40);//等待40us

        if((LPC_GPIO3->PIN & 1 << 25))return 1;

        else return 0;                   

}

//从DHT11读取一个字节

//返回值:读到的数据

uint8_t DHT11_Read_Byte(void)    

{        

  uint8_t i,dat;

  dat=0;

        for (i=0;i<8;i++) 

        {

                        dat<<=1; 

            dat|=DHT11_Read_Bit();

  }                                                    

    return dat;

}

//从DHT11读取一次数据

//temp:温度值(范围:0~50°)

//humi:湿度值(范围:20%~90%)

//返回值:0,正常;1,读取失败

uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)    

{        

        

        uint8_t i;

        DHT11_Rst();

        if(DHT11_Check()==0)

        {

                for(i=0;i<5;i++)//读取40位数据

                {

                        buf[i]=DHT11_Read_Byte();

                }

                buf[5] = 'r';

                buf[6] = 'n';        

                if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])

                {

                        *humi=buf[0];

                        *temp=buf[2];

                }

        }

        else return 1;

        //return 0;            

}

//初始化DHT11的IO口 DQ 同时检测DHT11的存在

//返回1:不存在

//返回0:存在             

uint8_t DHT11_Init(void)

{

        LPC_GPIO3->DIR |= 1<<25;  

        DHT11_Rst();

        return DHT11_Check();

}



/*********************************************************************************************************

** 函数名称 :main

** 函数描述 :查询方式采集ADC0的电压,短接ADC_IN和P0.23(JP20)、TXD0和P0.2、RXD0和P0.3,

**            由UART0发送采集到的数据,波特率9600。

** 输入参数 : 无

** 返回值   : 系统返回值

*********************************************************************************************************/


int main (void)

{   uint32_t i,VEL;

    uint32_t ADCSum = 0;

                uint8_t kk, temperature, humidity;  

                uint8_t d1,d2,d3,d4;

    SystemInit();


#if ADC_DEBUG                                                         /* 如果定义了调试则编译串口初始化 */

    UARTInit(0, 9600);


           

#endif


    ADCInit1( ADC_CLK );                                               /* ADC初始化                      */

    

                

                DHT11_Init();

                LPC_GPIO3->DIR |= 1<<30;                                            /* 设置P3.30为输出              */

                LPC_GPIO3->SET |= 1<<30;          //beep

                LPC_GPIO3->DIR |= 1<<31;//led

                LPC_GPIO3->SET |= 1<<31; 

    LPC_GPIO3->DIR |= 1<<25;//led

                LPC_GPIO3->SET |= 1<<25;

                

                LPC_GPIO0->DIR &= ~(1 << 12);                                       /* 设置P0.12为输入              */

        while(1)

    {

                                ADCInit1( ADC_CLK ); 

        for(i = 0; i < ADC_NUM; i++)

                                {

[1] [2] [3]
关键字:LPC1788  数据采集系统  下位机  LabVIEW 引用地址:LPC1788的多路数据采集系统下位机+LabVIEW下位机程序

上一篇:以通俗易懂的话解释CM3内核时钟源
下一篇:LPC824低功耗下pin配置调试程序

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved