河流監(jiān)測系統(tǒng)設(shè)計(jì)論文_第1頁
河流監(jiān)測系統(tǒng)設(shè)計(jì)論文_第2頁
河流監(jiān)測系統(tǒng)設(shè)計(jì)論文_第3頁
河流監(jiān)測系統(tǒng)設(shè)計(jì)論文_第4頁
河流監(jiān)測系統(tǒng)設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

附錄A總原理圖圖A-1總原理圖附錄B程序/*************************************************************文件名:main.c*描述:用3.5.0版本建的工程模板。*庫版本:ST3.5.0*作者:**************************************************************/#include"include.h"#include"esp8266.h"/************************************************函數(shù)名:main*描述:主函數(shù)*輸入:無*輸出:無***********************************************/intmain(void){ /*配置系統(tǒng)時鐘為72M*/SystemInit(); SysTick_Init(); LED_GPIO_Config(); Param_int(); //系統(tǒng)參數(shù)初始化 //USART1_Init(115200); //串口1初始化wifi //uart_init(115200); TIM4_PWMConfig(199,7199); Adc_Init(); TIM_SetCompare4(TIM4,195);//0? ESP8266_Init(115200); while(1) { MainProc();//TIM_SetCompare4(TIM4,195);//0?// delay_ms(1000);// TIM_SetCompare4(TIM4,190);//45?// delay_ms(1000);// TIM_SetCompare4(TIM4,185);//90?// TIM_SetCompare4(TIM4,180);//135?// delay_ms(1000);// TIM_SetCompare4(TIM4,177);//?180?????????,???????180?????????,??????????// delay_ms(1000); } //addyourcodehere^_^。}/************************ENDOFFILE************/intfputc(intch,FILE*f){ while((USART1->SR&0X40)==0);//????,??????USART1->DR=(u8)ch; delay_ms(2); returnch;}ADC:/************************************************函數(shù)名:*描述:*輸入:無*輸出:無***********************************************/#include"include.h"floatVerAD=0; //基準(zhǔn)電壓的AD值 floatVerD=0;floatVer=2480.0; //基準(zhǔn)電壓單位mvunsignedshortVbaAD[6]={0}; //采集通道的ADfloatVba[6]={0}; //采集通道的電壓//floatx=0.78; //電壓系數(shù)//floatx1=1.264; //電壓系數(shù)/************************************************函數(shù)名:*描述:初始化ADC這里我們僅以規(guī)則通道為例 我們默認(rèn)將開啟通道0~3 *輸入:無*輸出:無***********************************************/ voidAdc_Init(void){ ADC_InitTypeDefADC_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriPHClockCmd(RCC_APB2PeriPH_GPIOA,ENABLE); RCC_APB2PeriPHClockCmd(RCC_APB2PeriPH_ADC1 ,ENABLE); //使能ADC1通道時鐘 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //設(shè)置ADC分頻因子672M/6=12,ADC最大時間不能超過14M //PA6ADC_Channel_0作為模擬通道輸入引腳基準(zhǔn)電壓采集2.495v GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //模擬輸入引腳 GPIO_Init(GPIOA,&GPIO_InitStructure); //PA1ADC_Channel_1作為模擬通道多選一輸入引腳弱電采集 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //模擬輸入引腳 GPIO_Init(GPIOA,&GPIO_InitStructure); // //PB1ADC_Channel_6作為模擬通道多選一輸入引腳360VIN// GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;// GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //模擬輸入引腳// GPIO_Init(GPIOB,&GPIO_InitStructure); ADC_DeInit(ADC1); //復(fù)位ADC1 ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在獨(dú)立模式 ADC_InitStructure.ADC_ScanConvMode=DISABLE; //模數(shù)轉(zhuǎn)換工作在單通道模式 ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; //模數(shù)轉(zhuǎn)換工作在單次轉(zhuǎn)換模式 ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動 ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; //ADC數(shù)據(jù)右對齊 ADC_InitStructure.ADC_NbrOfChannel=1; //順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目 ADC_Init(ADC1,&ADC_InitStructure); //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器 ADC_Cmd(ADC1,ENABLE); //使能指定的ADC1 ADC_ResetCalibration(ADC1); //使能復(fù)位校準(zhǔn) while(ADC_GetResetCalibrationStatus(ADC1)); //等待復(fù)位校準(zhǔn)結(jié)束 ADC_StartCalibration(ADC1); //開啟AD校準(zhǔn) while(ADC_GetCalibrationStatus(ADC1)); //等待校準(zhǔn)結(jié)束// ADC_SoftwareStartConvCmd(ADC1,ENABLE); //使能指定的ADC1的軟件轉(zhuǎn)換啟動功能} /************************************************函數(shù)名:*描述:獲得ADC值ch:通道值0~3*輸入:無*輸出:無***********************************************/unsignedshortGet_AdcValue(unsignedcharch){ //設(shè)置指定ADC的規(guī)則組通道,一個序列,采樣時間 ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5); //ADC1,ADC通道,采樣時間為239.5周期 ADC_SoftwareStartConvCmd(ADC1,ENABLE); //使能指定的ADC1的軟件轉(zhuǎn)換啟動功能 while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待轉(zhuǎn)換結(jié)束 returnADC_GetConversionValue(ADC1); //返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果}/************************************************函數(shù)名:*描述:*輸入:無*輸出:無***********************************************/unsignedshortGet_Adc_Average(unsignedcharch,unsignedchartimes){ u32temp_val=0; u8t; for(t=0;t<times;t++) { temp_val+=Get_AdcValue(ch); delay_ms(5); } returntemp_val/times;} /************************************************函數(shù)名:CD4051*描述:*輸入:無*輸出:無***********************************************/voidRDADchannl(void){// VerAD=Get_Adc_Average(ADC_Channel_0,5); //ADC_Channel_0采集基準(zhǔn)電壓需要處理正確性// Vba[1]=((float)Ver*(float)Get_Adc_Average(ADC_Channel_1,5)/(float)VerAD)/1000.0; //ADC_Channel_1采集PH// OLED_ShowNum(24,2,Vba[1],2,16);// delay_ms(200);// Vba[2]=(Ver*Get_Adc_Average(ADC_Channel_4,5)/VerAD); //ADC_Channel_4采集濁度// OLED_ShowNum(88,2,(3291.3-(865.68*Vba[2]*2)),4,16);// delay_ms(200); VerD=0; VerAD=Get_Adc_Average(ADC_Channel_0,5); //ADC_Channel_0采集基準(zhǔn)電壓需要處理正確性 VerD=Ver/VerAD; VbaAD[1]=Get_Adc_Average(ADC_Channel_1,5); Vba[1]=VbaAD[1]*VerD*2/1000; //ADC_Channel_1采集PH //Paramter.DATYW=4850*Vba[1]+250; //OLED_ShowNum(24,2,Paramter.DATYW,5,16);}/***********************************************structSTRUCT_USART_FramESP8266_Fram_Record_Struct={0};//定義了一個數(shù)據(jù)幀結(jié)構(gòu)體voidESP8266_Init(u32bound){//GPIO_InitTypeDefGPIO_InitStructure;//RCC_APB2PeriPHClockCmd(ESP8266_RST_Pin_PeriPH_Clock|ESP8266_CH_PD_Pin_PeriPH_Clock,ENABLE);//GPIO_InitStructure.GPIO_Pin=ESP8266_RST_Pin;//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//復(fù)用推挽輸出//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//GPIO_Init(ESP8266_RST_Pin_Port,&GPIO_InitStructure);//GPIO_InitStructure.GPIO_Pin=ESP8266_CH_PD_Pin;//GPIO_Init(ESP8266_CH_PD_Pin_Port,&GPIO_InitStructure);USART1_Init(bound);// ESP8266_Rst();// ESP8266_CH_PD_Pin_SetH; ESP8266_AT_Test(); printf("正在配置ESP8266\r\n");ESP8266_Net_Mode_Choose(STA);while(!ESP8266_JoinAP(User_ESP8266_SSID,User_ESP8266_PWD));ESP8266_Enable_MultipleId(DISABLE); while(!ESP8266_Link_Server(enumUDP,User_ESP8266_TCPServer_IP,User_ESP8266_TCPServer_PORT,Single_ID_0));//while(!ESP8266_Link_Server(enumTCP,User_ESP8266_TCPServer_IP,User_ESP8266_TCPServer_PORT,Single_ID_0));while(!ESP8266_UnvarnishSend()); printf("\r\n配置完成"); wifi_success=1;}//對ESP8266模塊發(fā)送AT指令//cmd待發(fā)送的指令//ack1,ack2;期待的響應(yīng),為NULL表不需響應(yīng),兩者為或邏輯關(guān)系//time等待響應(yīng)時間//返回1發(fā)送成功,0失敗boolESP8266_Send_AT_Cmd(char*cmd,char*ack1,char*ack2,u32time){ESP8266_Fram_Record_Struct.InfBit.FramLength=0;//重新接收新的數(shù)據(jù)包ESP8266_USART("%s\r\n",cmd);if(ack1==0&&ack2==0)//不需要接收數(shù)據(jù){returntrue;}delay_ms(time);//延時 delay_ms(1000);ESP8266_Fram_Record_Struct.Data_RX_BUF[ESP8266_Fram_Record_Struct.InfBit.FramLength]='\0'; printf("%s",ESP8266_Fram_Record_Struct.Data_RX_BUF);if(ack1!=0&&ack2!=0){return((bool)strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF,ack1)||(bool)strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF,ack2));}elseif(ack1!=0)//strstr(s1,s2);檢測s2是否為s1的一部分,是返回該位置,否則返回false,它強(qiáng)制轉(zhuǎn)換為bool類型了return((bool)strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF,ack1));elsereturn((bool)strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF,ack2));}//復(fù)位重啟voidESP8266_Rst(void){ESP8266_RST_Pin_SetL;delay_ms(500);ESP8266_RST_Pin_SetH;}//發(fā)送恢復(fù)出廠默認(rèn)設(shè)置指令將模塊恢復(fù)成出廠設(shè)置voidESP8266_AT_Test(void){charcount=0;delay_ms(1000);while(count<10){if(ESP8266_Send_AT_Cmd("AT+RESTORE","OK",NULL,500)){printf("OK\r\n");return;}++count;}}//選擇ESP8266的工作模式//enumMode模式類型//成功返回true,失敗返回falseboolESP8266_Net_Mode_Choose(ENUM_Net_ModeTypeDefenumMode){switch(enumMode){caseSTA:returnESP8266_Send_AT_Cmd("AT+CWMODE=1","OK","nochange",2500);caseAP:returnESP8266_Send_AT_Cmd("AT+CWMODE=2","OK","nochange",2500);caseSTA_AP:returnESP8266_Send_AT_Cmd("AT+CWMODE=3","OK","nochange",2500);default:returnfalse;}}//ESP8266連接外部的WIFI//pSSIDWiFi帳號//pPassWordWiFi密碼//設(shè)置成功返回true反之falseboolESP8266_JoinAP(char*pSSID,char*pPassWord){charcCmd[120]; sprintf(cCmd,"AT+CWJAP=\"%s\",\"%s\"",pSSID,pPassWord);returnESP8266_Send_AT_Cmd(cCmd,"OK",NULL,5000);}//ESP8266透傳使能//enumEnUnvarnishTx是否多連接,bool類型//設(shè)置成功返回true,反之falseboolESP8266_Enable_MultipleId(FunctionalStateenumEnUnvarnishTx){charcStr[20];sprintf(cStr,"AT+CIPMUX=%d",(enumEnUnvarnishTx?1:0));returnESP8266_Send_AT_Cmd(cStr,"OK",0,500);}//ESP8266連接服務(wù)器//enumE網(wǎng)絡(luò)類型//ip,服務(wù)器IP//ComNum服務(wù)器端口//id,連接號,確保通信不受外界干擾//設(shè)置成功返回true,反之fasleboolESP8266_Link_Server(ENUM_NetPro_TypeDefenumE,char*ip,char*ComNum,ENUM_ID_NO_TypeDefid){charcStr[100]={0},cCmd[120];switch(enumE){caseenumTCP:sprintf(cStr,"\"%s\",\"%s\",%s","TCP",ip,ComNum);break;caseenumUDP:sprintf(cStr,"\"%s\",\"%s\",%s","UDP",ip,ComNum);break;default:break;}if(id<5)sprintf(cCmd,"AT+CIPSTART=%d,%s",id,cStr);elsesprintf(cCmd,"AT+CIPSTART=%s",cStr);returnESP8266_Send_AT_Cmd(cCmd,"OK","ALREAYCONNECT",4000);}//透傳使能//設(shè)置成功返回true,反之falseboolESP8266_UnvarnishSend(void){if(!ESP8266_Send_AT_Cmd("AT+CIPMODE=1","OK",0,500))returnfalse;returnESP8266_Send_AT_Cmd("AT+CIPSEND","OK",">",500);}//ESP8266發(fā)送字符串//enumEnUnvarnishTx是否使能透傳模式//pStr字符串//ulStrLength字符串長度//ucId連接號//設(shè)置成功返回true,反之falseboolESP8266_SendString(FunctionalStateenumEnUnvarnishTx,char*pStr,u32ulStrLength,ENUM_ID_NO_TypeDefucId){charcStr[20];boolbRet=false;if(enumEnUnvarnishTx){ESP8266_USART("%s",pStr);bRet=true;}else{if(ucId<5)sprintf(cStr,"AT+CIPSEND=%d,%d",ucId,ulStrLength+2);elsesprintf(cStr,"AT+CIPSEND=%d",ulStrLength+2);ESP8266_Send_AT_Cmd(cStr,">",0,1000);bRet=ESP8266_Send_AT_Cmd(pStr,"SENDOK",0,1000);}returnbRet;}//ESP8266退出透傳模式voidESP8266_ExitUnvarnishSend(void){delay_ms(1000);ESP8266_USART("+++");delay_ms(500);}//ESP8266檢測連接狀態(tài)//返回0:獲取狀態(tài)失敗//返回2:獲得ip//返回3:建立連接//返回4:失去連接u8ESP8266_Get_LinkStatus(void){if(ESP8266_Send_AT_Cmd("AT+CIPSTATUS","OK",0,500)){if(strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF,"STATUS:2\r\n"))return2;elseif(strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF,"STATUS:3\r\n"))return3;elseif(strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF,"STATUS:4\r\n"))return4;}return0;}staticchar*itoa(intvalue,char*string,intradix){inti,d;intflag=0;char*ptr=string;/*Thisimplementationonlyworksfordecimalnumbers.*/if(radix!=10){*ptr=0;returnstring;}if(!value){*ptr++=0x30;*ptr=0;returnstring;}/*ifthisisanegativevalueinserttheminussign.*/if(value<0){*ptr++='-';/*Makethevaluepositive.*/value*=-1;}for(i=10000;i>0;i/=10){d=value/i;if(d||flag){*ptr++=(char)(d+0x30);value-=(d*i);flag=1;}}/*Nullterminatethestring.*/*ptr=0;returnstring;}/*NCL_Itoa*/voidUSART_printf(USART_TypeDef*USARTx,char*Data,...){constchar*s;intd;charbuf[16];va_listap;va_start(ap,Data);while(*Data!=0)//判斷數(shù)據(jù)是否到達(dá)結(jié)束符{if(*Data==0x5c)//'\'{switch(*++Data){case'r'://回車符USART_SendData(USARTx,0x0d);Data++;break;case'n'://換行符USART_SendData(USARTx,0x0a);Data++;break;default:Data++;break;}}elseif(*Data=='%'){switch(*++Data){case's'://字符串s=va_arg(ap,constchar*);for(;*s;s++){USART_SendData(USARTx,*s);while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);}Data++;break;case'd'://十進(jìn)制d=va_arg(ap,int);itoa(d,buf,10);for(s=buf;*s;s++){USART_SendData(USARTx,*s);while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);}Data++;break;default:Data++;break;}}elseUSART_SendData(USARTx,*Data++);while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);}}//下面為ESP8266MQTT功能指令/**MQTT配置用戶屬性*LinkID連接ID,目前只支持0*scheme連接方式,這里選擇MQTToverTCP,這里設(shè)置為1*client_idMQTTclientID用于標(biāo)志client身份*username用于登錄MQTT服務(wù)器的username*password用于登錄MQTT服務(wù)器的password*cert_key_ID證書ID,目前支持一套cert證書,參數(shù)為0*CA_ID目前支持一套CA證書,參數(shù)為0*path資源路徑,這里設(shè)置為""*設(shè)置成功返回true反之false*/boolESP8266_MQTTUSERCFG(char*pClient_Id,char*pUserName,char*PassWord){charcCmd[120];sprintf(cCmd,"AT+MQTTUSERCFG=0,1,\"%s\",\"%s\",\"%s\",0,0,\"\"",pClient_Id,pUserName,PassWord);returnESP8266_Send_AT_Cmd(cCmd,"OK",NULL,500);}/**連接指定的MQTT服務(wù)器*LinkID連接ID,目前只支持0*IP:MQTT服務(wù)器上對應(yīng)的IP地址*ComNumMQTT服務(wù)器上對應(yīng)的端口號,一般為1883*設(shè)置成功返回true反之false*/boolESP8266_MQTTCONN(char*Ip,intNum){charcCmd[120];sprintf(cCmd,"AT+MQTTCONN=0,\"%s\",%d,0",Ip,Num);returnESP8266_Send_AT_Cmd(cCmd,"OK",NULL,500);}/**訂閱指定連接的MQTT主題,可重復(fù)多次訂閱不同topic*LinkID連接ID,目前只支持0*Topic訂閱的主題名字,這里設(shè)置為Topic*Qos值:一般為0,這里設(shè)置為1*設(shè)置成功返回true反之false*/boolESP8266_MQTTSUB(char*Topic){charcCmd[120];sprintf(cCmd,"AT+MQTTSUB=0,\"%s\",1",Topic);returnESP8266_Send_AT_Cmd(cCmd,"OK",NULL,500);}/**在LinkID上通過topic發(fā)布數(shù)據(jù)data,其中data為字符串消息*LinkID連接ID,目前只支持0*Topic訂閱的主題名字,這里設(shè)置為Topic*data:字符串信息*設(shè)置成功返回true反之false*/boolESP8266_MQTTPUB(char*Topic,char*temp){charcCmd[120];sprintf(cCmd,"AT+MQTTPUB=0,\"%s\",\"%s\",1,0",Topic,temp);returnESP8266_Send_AT_Cmd(cCmd,"OK",NULL,1000);}/**關(guān)閉MQTTClient為LinkID的連接,并釋放內(nèi)部占用的資源*LinkID連接ID,目前只支持0*Topic訂閱的主題名字,這里設(shè)置為Topic*data:字符串信息*設(shè)置成功返回true反之false*/boolESP8266_MQTTCLEAN(void){charcCmd[120];sprintf(cCmd,"AT+MQTTCLEAN=0");returnESP8266_Send_AT_Cmd(cCmd,"OK",NULL,500);}//ESP8266發(fā)送字符串//enumEnUnvarnishTx是否使能透傳模式//pStr字符串//ulStrLength字符串長度//ucId連接號//設(shè)置成功返回true,反之falseboolMQTT_SendString(char*pTopic,char*temp2){ boolbRet=false;ESP8266_MQTTPUB(pTopic,temp2); delay_ms(1000);bRet=true;returnbRet;}LED:/************************************************文件名:led.c*描述:*實(shí)驗(yàn)平臺:*硬件連接:*庫版本:ST3.5*作者:**********************************************************************************/#include"include.h"/************************************************函數(shù)名:LED_GPIO_Config*描述:配置LED用到的I/O口*輸入:無*輸出:無***********************************************/voidKey_Int(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriPHClockCmd(RCC_APB2PeriPH_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0; //K1234GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOC,&GPIO_InitStructure);}/************************************************函數(shù)名:LED_GPIO_Config*描述:配置LED用到的I/O口*輸入:無*輸出:無***********************************************/voidLED_GPIO_Config(void){ GPIO_InitTypeDefGPIO_InitStructure; // RCC_APB2PeriPHClockCmd(RCC_APB2PeriPH_AFIO,ENABLE); RCC_APB2PeriPHClockCmd(RCC_APB2PeriPH_GPIOA,ENABLE); RCC_APB2PeriPHClockCmd(RCC_APB2PeriPH_GPIOB,ENABLE); RCC_APB2PeriPHClockCmd(RCC_APB2PeriPH_GPIOC,ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); //改變管腳映射GPIO_Remap_SWJ_DisableSWJ完全禁用(JTAG+SW-DP) //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //改變管腳映射GPIO_Remap_SWJ_JTAGDisable,JTAG-DP禁用+SW-DP使能 //GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); /*****************LED1******************/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_15); //turnoffBEEP GPIO_ResetBits(GPIOC,GPIO_Pin_13); //turnoffled /*****************rely1/2******************/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_12); //turnoff過濾 GPIO_ResetBits(GPIOB,GPIO_Pin_13); //turnoff投堿 GPIO_ResetBits(GPIOB,GPIO_Pin_14); //turnoff投酸 /*****************HZ******************/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure); //EXTIX_Init();}//****************************************************//讀取HX711//****************************************************unsignedlongHX711_Read(void) //增益128{ unsignedlongcount; unsignedchari; //GPIO_SetBits(Sensor_Gpio,DATA);//HX711_DOUT=1; delay_us(1); GPIO_ResetBits(Sensor_Gpio,CLK);//HX711_SCK=0; count=0; while(GPIO_ReadInputDataBit(Sensor_Gpio,DATA)); for(i=0;i<24;i++) { GPIO_SetBits(Sensor_Gpio,CLK);//HX711_SCK=1; count=count<<1; delay_us(1); GPIO_ResetBits(Sensor_Gpio,CLK);//HX711_SCK=0; if(GPIO_ReadInputDataBit(Sensor_Gpio,DATA)) count++; delay_us(1); } GPIO_SetBits(Sensor_Gpio,CLK);//HX711_SCK=1;count=count^0x800000;//第25個脈沖下降沿來時,轉(zhuǎn)換數(shù)據(jù) delay_us(1); GPIO_ResetBits(Sensor_Gpio,CLK);//HX711_SCK=0; return(count);}/*******************(C)COPYRIGHT2012WildFireTeam*****ENDOFFILE****/unsignedcharCRC8_Table(unsignedchar*p,charcounter){unsignedcharcrc8=0;for(;counter>0;counter--){crc8=crc_array[crc8^*p];//????CRC?p++;}returncrc8;}/************************************************函數(shù)名:*描述:*輸入:無*輸出:無***********************************************/unsignedcharChecksum(unsignedchar*t,charcounter){ unsignedchari,c=0; for(i=1;i<counter;i++) { c+=t[i]; } c=~c; returnc+1;}/************************************************函數(shù)名:*描述:*輸入:無*輸出:無***********************************************/voidParam_int(void) //0--onlyreadorfirstint1-writint{ Paramter.ID=0x01; Paramter.ALMPHL=4; // Paramter.ALMPHH=10; // Paramter.Almflg=0; //超限標(biāo)志 MainPrcParamter.Main_state=0; MainPrcParamter.Main_dely=0;}/************************************************函數(shù)名:*描述:*輸入:無*輸出:無***********************************************/unsignedcharshangchuan[256];voidMainProc(void){ switch(MainPrcParamter.Main_state) { case0://TH//18b20// if(DHT11_Read_data(DHT11buffer)==0)// {// // Paramter.DATTM=DHT11buffer[2]+DHT11buffer[3]/10.0;// OLED_ShowNum(24,0,(unsi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論