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配置调试程序

推荐阅读最新更新时间:2024-11-09 04:00

基于NI LabVIEW开发平台实现IC芯片表面标识自动识别系统的设计
系统简介 我们使用LabVIEW、IMAQ Vision和IMAQ Vision Assistant等软件进行系统开发。LabVIEW特有的数据流式编程、IMAQ Vision强大的图像处理能力以及IMAQ Vision Assistant的代码自动生成功能极大地缩短了系统的开发周期、降低了成本。 图1所示为IC芯片表面标识自动识别系统的工作流程。这里使用NI公司的PXI-1409图像采集卡和MBC-5051黑白摄像机进行图像采集,然后将采集到的图像送入计算机进行处理。为了提高识别的灵活性,系统加入了学习模块,与识别过程类似,它也包括图像预处理、文字区域裁剪、细化以及特征量提取的过程,不同的是,学习过程直接将提取到的特征量保存
[测试测量]
基于NI <font color='red'>LabVIEW</font>开发平台实现IC芯片表面标识自动识别系统的设计
基于LabVIEW的虚拟信号发生器实现脉冲和过渡过程测量系统的设计
1、 引言 虚拟仪器VI(Visual Instrument)是以计算机强大的软硬件资源作为仪器的支撑,利用高性能的模块化硬件,结合高效灵活的软件组成,完成各种测试、测量和自动化应用的各种各样的仪器系统。随着计算机网络的发展,虚拟仪器与网络技术的结合为虚拟仪器网络化提供了良好的实现平台。LabVIEW(Laboratory Virtual instrument Engineering)是目前在虚拟仪器中使用较为广泛的罔形化设计语言,它对软件对象“虚拟仪器”进行图形化的组合操作。 2 、虚拟仪器介绍 虚拟仪器是基于计算机的仪器,以通用的计算机硬件及操作系统为依托,实现各种仪器功能。常见的虚拟仪器结构框图如图1所示。 LabV
[测试测量]
基于<font color='red'>LabVIEW</font>的虚拟信号发生器实现脉冲和过渡过程测量系统的设计
如何区分工控上位下位
上位机 P ART.01 上位机是指可以直接发出操控命令的计算机, 一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。 下位机 P ART.02 下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。 工具/原料: 计算机一台 组态王,PLC 方法/步骤: 概述: 上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数
[嵌入式]
如何区分工控上位<font color='red'>机</font>和<font color='red'>下位</font><font color='red'>机</font>
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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