欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
LPC1788的多路數據采集系統下位機+LabVIEW下位機程序
[打印本頁]
作者:
宦竹涂
時間:
2019-3-21 15:05
標題:
LPC1788的多路數據采集系統下位機+LabVIEW下位機程序
包含程序源碼,電路圖
0.png
(39.92 KB, 下載次數: 75)
下載附件
2019-3-23 01:32 上傳
單片機源程序如下:
#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++)
{
ADC_Start(0); /* 打開A/D轉換 */
while(ADC_GetStat(0)); /* 等待轉換完成 */
ADCValue[i]=ADCRead(0); /* 讀ADC通道0采集到的值 */
}
ADCSum=0;
for(i = 0; i < ADC_NUM; i++)
{
ADCSum += ADCValue[i];
}
ADCSum /= ADC_NUM; /* 取平均值 */
VEL=ADCSum*33*1000/40950/5*3.96+0.4;
d1=VEL/1000;
d2=VEL/100%10;
d3=VEL/10%10;
d4=VEL%10;
UART0Buffer[0] = 'A';
UART0Buffer[1] = d1+'0';//ConvertDigital( (uint8_t)((ADCSum>>8)&0xF)); // 轉換成ASCII碼
UART0Buffer[2] ='.';// ConvertDigital( (uint8_t)((ADCSum>>4)&0xF));
UART0Buffer[3] = d2+'0';//ConvertDigital( (uint8_t)(ADCSum&0xF));
UART0Buffer[4] = d3+'0';//
UART0Buffer[5] = d4+'0';//
UART0Buffer[6] ='V';
UART0Buffer[7] ='1';
if(VEL>=2000)
{
BEEPON;
LPC_GPIO3->CLR = 1ul << 31;
myDelay(100);
LPC_GPIO3->SET |= 1<<31;
myDelay(100);
}
else
{
BEEPOFF;
LPC_GPIO3->SET |= 1<<31;
}
UARTSend( 0, (uint8_t *)UART0Buffer, 8); /* 通過串口0發送轉換結果 */
myDelay(200); /* 200ms延時,方便觀察 */
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ADCInit2( ADC_CLK );
for(i = 0; i < ADC_NUM; i++)
{
ADC_Start(1); /* 打開A/D轉換 */
while(ADC_GetStat(1)); /* 等待轉換完成 */
ADCValue[i]=ADCRead(1); /* 讀ADC通道1采集到的值 */
}
ADCSum=0;
for(i = 0; i < ADC_NUM; i++)
{
ADCSum += ADCValue[i];
}
ADCSum /= ADC_NUM; /* 取平均值 */
VEL=3300-ADCSum*33*1000/40950;
d1=VEL/1000;
d2=VEL/100%10;
d3=VEL/10%10;
d4=VEL%10;
UART0Buffer[0] = d1+'0';//ConvertDigital( (uint8_t)((ADCSum>>8)&0xF)); // 轉換成ASCII碼
UART0Buffer[1] ='.';// ConvertDigital( (uint8_t)((ADCSum>>4)&0xF));
UART0Buffer[2] = d2+'0';//ConvertDigital( (uint8_t)(ADCSum&0xF));
UART0Buffer[3] = d3+'0';//
UART0Buffer[4] = d4+'0';//
UART0Buffer[5] ='V';
UART0Buffer[6] ='2';
if(VEL>=2000)
{
BEEPON;
LPC_GPIO3->CLR = 1ul << 31;
myDelay(100);
LPC_GPIO3->SET |= 1<<31;
myDelay(100);
}
else
{
BEEPOFF;
LPC_GPIO3->SET |= 1<<31;
}
UARTSend( 0, (uint8_t *)UART0Buffer, 7); /* 通過串口0發送轉換結果 */
myDelay(200); /* 200ms延時,方便觀察 */
////////////////////////////////////////////////////////////////////////////
//DHT11:8BIT濕度8bit濕度小數;8BIT溫度8bit溫度∈,8bit校驗
// kk = ReadDHT11();
//UART0Buffer[4] = '\r';
// UART0Buffer[5] = '\n';
DHT11_Read_Data(&temperature,&humidity);
//buf[0]+=0x30;
//buf[2]+=0x30;
//uint8_t data[5]={0x21,0x24-0x01};
VEL=temperature*33*1000/256;
d2=VEL/100%10;
d3=VEL/10%10;
d4=VEL%10;
// UART0Buffer[0] = d1+'0';//ConvertDigital( (uint8_t)((ADCSum>>8)&0xF)); // 轉換成ASCII碼
// UART0Buffer[1] ='.';// ConvertDigital( (uint8_t)((ADCSum>>4)&0xF));
UART0Buffer[0] = d2+'0';//ConvertDigital( (uint8_t)(ADCSum&0xF));
UART0Buffer[1] = d3+'0';//
UART0Buffer[2] ='.';
UART0Buffer[3] = d4+'0';//
UART0Buffer[4] ='C';
if(VEL>=300)
{
BEEPON;
LPC_GPIO3->CLR = 1ul << 31;
myDelay(100);
LPC_GPIO3->SET |= 1<<31;
myDelay(100);
}
else
{
BEEPOFF;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
(6.19 KB, 下載次數: 72)
下載附件
2019-3-23 01:36 上傳
所有資料51hei提供下載:
基于LPC1788的多路數據采集系統.rar
(465.04 KB, 下載次數: 43)
2019-3-21 15:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
wyhkerry
時間:
2019-3-29 16:51
學習了,謝謝;
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1