<em id="ri2my"></em>
  • <em id="ri2my"></em>
    <em id="ri2my"><label id="ri2my"><nav id="ri2my"></nav></label></em>
  • <em id="ri2my"><label id="ri2my"></label></em>
    <div id="ri2my"></div>
    1. <em id="ri2my"><label id="ri2my"></label></em>
    2. <em id="ri2my"><ol id="ri2my"></ol></em>
      <em id="ri2my"></em>

      1. 安可信01

        安可信01的詳細介紹

        創作者:新用戶 | 更新日期:2016-06-20 | 在線時長:6時
        用于實時監測室內甲醛濃度(畢業設計相關)。

        #include<reg52.h>
        #include<intrins.h>
        #define uint unsigned int
        #define uchar unsigned char
        #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
        /*-----------1602顯示相關聲明--------------------*/
        
        uchar d[]={"Welcome To Use Please wait..."};//開機界面
        uchar e[]={"CL of CH2O is:"};//工作界面1
        uchar f[10];
        sbit LCD_RS = P1^3;//  相關引腳定義     
        sbit LCD_RW = P1^4;
        sbit LCD_EN = P1^5;
        sbit mang=P2^7;
        
        void LCD_Init();
        bit lcd_busy();
        void lcd_wcmd(uchar cmd);
        void lcd_wdat(uchar dat);
        void LCD_Clear();
        void LCD_Write_kaiji();
        void LCD_Write_work1();
        void LCD_Write_work2();
        /*-------------------------------------------------*/
        uint ch2o;
        sbit feng=P1^2;//蜂鳴器
        void fm();
        /*--------------------------------------
                    WLAN-URAT
        ----------------------------------------*/
        uchar wlan_mode[]="AT+CWMODE=1\r\n";
        uchar wlan_lj[]="AT+CWJAP=\"zzu_wifi\",\"z12345678a\"\r\n";
        uchar fwqlj[]="AT+CIPSTART=\"TCP\",\"121.42.180.30\",8181\r\n";
        
        uchar wlan_cipm[]="AT+CIPMODE=1\r\n";
        uchar wlan_cips[]="AT+CIPSEND\r\n";
        
        //uchar now_dat[]="{\"M\":\"update\",\"ID\":\"309\",\"V\":{\"304\":\"00.15\"}}\r\n";
        //uchar now_dat1[]="{\"M\":\"update\",\"ID\":\"309\",\"V\":{\"304\":\"0.12\"}}\r\n";
        uchar now_dat2[]="{\"M\":\"update\",\"ID\":\"309\",\"V\":{\"304\":\"value1\"}}\r\n";
        uchar wlan_land[]="{\"M\":\"checkin\",\"ID\":\"309\",\"K\":\"a167d99a9\"}\r\n";
        void wlan_cipsend();
        
        void wlan_link();
        void yun_dat();
        void yun_land();
        /*--------------------------------------------------
                     串口通信聲明
        ---------------------------------------------------*/
        uchar out_num;
        uchar in_num;
        uchar a[5]={0xa5,0x5a,0x02,0x80,0xaa};
        uchar b[4];
        uchar recdat[9]={0};//接收緩存
        bit recFlag=0;//為1代表串口接收到了數據
        
        void init_uart();
        void dat_check();
        void datfig();
        void datclear();
        void datsent(uchar catdat);
        void sendc(uchar *pd);
        void UART_INT(void);
        void delay(uint z);
        
        /*-----------------------------------------
              串口通信初始化
        -----------------------------------------*/
        void init_uart()
        {
        	 EA=0;
        	 PCON=0x00;//smod=0波特率正常
        	 SCON=0x50;//串口工作方式1,允許接收
        	 TMOD=0x20;//定時器1,工作方式2,8位自動裝載
        	 TH1=0xfd;
        	 TL1=0xfd;//設定波特率為9600
        	 ET1=0;//不允許定時器1中斷       
        	 TR1 = 1; //啟動定時器1 
        	 RI=0;
        	 TI=0;
        	 IE=0x90;//單片機中斷開,串口中斷開
        }
        
        /*------------------------------------------
                   數據發送
        ------------------------------------------*/
        
        void datsent(uchar catdat)
        {
        	SBUF=catdat;
        	while(TI==0);
        	TI=0;
        }
        void sendc(uchar *pd)
        {
         while((*pd)!='\0')
         {
          datsent(*pd);
          pd++;
         }
        }
        /*------------------------------------------------
        判斷數據是否合理
        ------------------------------------------------*/
        void dat_check()
        {
        	static uchar count;//靜態局部變量用于數據的計數
        	uchar i;
        	if(recdat[0]==0xa5)//
        	 {
        			count=1; 
        	 }
          if(count==1&&recdat[1]==0x5a) 
        	{  
        		count=2; 
        		
        	}
        	if(count==2&&recdat[2]==0x06) 
        	{  
        		count=3; 
        		
        	}
        	if(count==3&&recdat[3]==0x80) 
        	{  
        		count=4;
        		i=0;
        		
        	}
         while(count>=4&&count<9)
         {     
        		b[i]=recdat[count];//存入甲醛濃度信息
        		count ++;
        	  i++;
         }
        
         if(count==9&&recdat[8]==0xaa)
        	 {      
        			recFlag=1;//數據接收標志位置1,通知主程序已接收到有效數據
        			count=0;   //計數變量清零為下次接收做準備         
        	 }	 
        }
        /*----------------------------------------------------
        數據處理
        -----------------------------------------------------*/
        void datfig()
        {
        	ch2o=b[2]*256+b[3];
        	//if(ch2o>60)
        	//{
        		//feng=0;
        	//}
        	//else feng=1;
        	f[0]=0x30+ch2o/10000;
        	f[1]=0x30+(ch2o/1000)%10;
        	f[2]=0x30+(ch2o/100)%10;
        	f[4]=0x30+(ch2o/10)%10;
        	f[5]=0x30+ch2o%10;
        	now_dat2[37]=0x30+ch2o/10000;
        	now_dat2[38]=0x30+(ch2o/1000)%10;
        	now_dat2[39]=0x30+(ch2o/100)%10;
        	now_dat2[40]='.';
        	now_dat2[41]=0x30+(ch2o/10)%10;
        	now_dat2[42]=0x30+ch2o%10;
        }
        /*----------------------------------------------------
        數據緩存清零
        -----------------------------------------------------*/
        void datclear()
        {
        	recdat[0]=0;
        	recdat[1]=0;
        	recdat[2]=0;
        	recdat[3]=0;
        	recdat[4]=0;
        	recdat[5]=0;
        	recdat[6]=0;
        	recdat[7]=0;
        	recdat[8]=0;
        }
        /*----------------------------------------------------
        顯示相關程序段
        -----------------------------------------------------*/
        
        /*------------------------------------------------
                      判忙函數
        ------------------------------------------------*/
         bit lcd_busy()
         {                          
            bit result;
            LCD_RS = 0;
            LCD_RW = 1;
            LCD_EN = 1;//RS=L,RW=H,E=H,1602狀態可讀
            delayNOP();
            result =mang;
            LCD_EN = 0;
            return result; 
         }
        /*------------------------------------------------
                      寫命令函數
        ------------------------------------------------*/
         void lcd_wcmd(uchar cmd)
        {                          
            while(lcd_busy()==1);
            LCD_RS = 0;
            LCD_RW = 0;//RS=L,RW=L,寫指令
            LCD_EN = 0;
            _nop_();
            _nop_(); 
            P2=cmd;
            delayNOP();
            LCD_EN = 1;//E=H,產生高脈沖
            delayNOP();
            LCD_EN = 0; 
            delay(10);
        }
        /*------------------------------------------------
                      寫數據函數
        ------------------------------------------------*/
         void lcd_wdat(uchar dat)
        {                          
            while(lcd_busy()==1);
            LCD_RS = 1;
            LCD_RW = 0;
            LCD_EN = 0;
            P2=dat;
            delayNOP();
            LCD_EN = 1;
            delayNOP();
            LCD_EN = 0; 
            delay(10);
        }
        /*------------------------------------------------
                        清屏函數
        ------------------------------------------------*/
         void LCD_Clear(void) 
         { 
         lcd_wcmd(0x01); 
         delay(5);
         }
         /*-------------------------------------------------
         --------------------------------------------------*/
         void lcd_pos(uchar pos)
        {                          
          lcd_wcmd(pos|0x80);//80H+地址碼
        }
        /*------------------------------------------------
                      1602初始化
        ------------------------------------------------*/
         void lcd_init()
        {    
            delay(15);   
            lcd_wcmd(0x38); 
            delay(5);
            lcd_wcmd(0x38);         
            delay(5);
            lcd_wcmd(0x38);         
            delay(5);
        		while(lcd_busy()==1);//忙則等待
        		lcd_wcmd(0x38);
        		while(lcd_busy()==1);
        		lcd_wcmd(0x08);
        		while(lcd_busy()==1);
        		lcd_wcmd(0x01);      
        		while(lcd_busy()==1);
        		while(lcd_busy()==1);
            lcd_wcmd(0x0c);      
        		while(lcd_busy()==1);
        		lcd_wcmd(0x06);
            delay(5);
        		while(lcd_busy()==1);
            lcd_wcmd(0x01);      
            delay(5);
        }
        /*------------------------------------------------
                    顯示函數
        ------------------------------------------------*/
         void LCD_Write_kaiji( ) 
         {   
        		uchar num;
        	  lcd_pos(0x00);
        		for(num=0;num<14;num++)
        		{
        			lcd_wdat(d[num]);
        			delay(20);
        		}
        		lcd_pos(0x40);
        		for(num=15;num<29;num++)
        		{
        			lcd_wdat(d[num]);
        			delay(20);
        		}
        }
        /*------------------------------------------------
                      工作顯示
        ------------------------------------------------*/
         void LCD_Write_work1( ) 
         {   
        		uchar num;
        	  
        	  lcd_pos(0x00);
        		for(num=0;num<14;num++)
        		{
        				lcd_wdat(e[num]);
        				delay(2);
        		}
        		f[3]='.';
        		f[7]='p';
        		f[8]='p';
        		f[9]='m';
        		lcd_pos(0x43);
        		num=3;
        		lcd_wdat(f[num]);
        		lcd_pos(0x46);
        		for(num=7;num<10;num++)
        		{
        			lcd_wdat(f[num]);
        			delay(2);
        		}
         }
         /*------------------------------------------------
                      工作顯示
        ------------------------------------------------*/
         void LCD_Write_work2( ) 
         {   
        		uchar num;
        	  lcd_pos(0x40);
        		for(num=0;num<3;num++)
        		{
        			lcd_wdat(f[num]);
        			delay(2);
        		}
        		
        		lcd_pos(0x44); 
        		for(num=4;num<6;num++)
        		{
        			lcd_wdat(f[num]);
        			delay(2);
        		}
         }
         /*-----------------------------------
                      蜂鳴器函數
         -----------------------------------*/
        void fm()
        {
        	if(ch2o>60)
        		{
        			feng=0;
        		}
        		else feng=1;
        		yun_dat();
        }
        /*-----------------------------------------
                  1ms延時函數
        ------------------------------------------*/
        void delay(uint z)
        {
        	uint x,y;
        	for(x=z;x>0;x--)
        		for(y=114;y>+0;y--);
        }
        /*------------------------------------------
                     主函數
        ------------------------------------------*/
        void main( )
        {
        	init_uart();
        	LCD_Clear();
        	lcd_init();
        	LCD_Write_kaiji();
        	//init_uart();
          wlan_link();
        	wlan_cipsend();
          yun_land();	
        	delay(6000);
        	LCD_Clear();
        	LCD_Write_work1();
        	while(1)
        	{
        		recFlag=0;
        	while(recFlag==0)
        	{
        		in_num=0;
        		sendc(a);
        		delay(2000);
        		dat_check();
        		//delay(2000);
        	}
        		datfig();
        	  delay(2000);
        		yun_dat();
        		LCD_Write_work2();
        		//if(ch2o>60)
        		//{
        			//feng=0;
        		//}
        		//else feng=1;
        		//yun_dat();
        		fm();
        		datclear();
        	}
        }
        /******************************************* 
                    中斷服務程序
         ******************************************/
        void UART_INT(void) interrupt 4
        { 
        	if(RI)
        	{
        	RI=0;
        	recdat[in_num]=SBUF;
        	in_num++;
        	if(in_num>9)
        	{
        		in_num=0;
        	}
          }
        }
        /*--------------------------
        
        ----------------------------*/
        void wlan_cipsend()
        {
        sendc(wlan_cipm);
        delay(500);
        sendc(wlan_cips);
        delay(500);
        }
        /*-------------------------
        -------------------------*/
        void wlan_link()
        {
        sendc(wlan_mode);
        delay(500);
        sendc(wlan_lj);
        delay(15000);
        sendc(fwqlj);
        delay(1000);
        }
        /*------------------------
        -------------------------*/
        void yun_dat()
        {
        //sendc(now_dat);
        //delay(2000);
        //sendc(now_dat1);
        //delay(2000);
        //sendc(now_dat1);
        //delay(2000);
        //sendc(now_dat);
        //delay(2000);
        sendc(now_dat2);
        delay(2000);
        sendc(now_dat2);
        }
        void yun_land()
        {
        sendc(wlan_land);
        delay(2000);
        }

        簡單的云端數據上傳,基于ESP8266-01,使用C51單片機控制。畢業答辯結束了現在公開代碼吧。這里有一個問題,在上傳數據時,每第二次數據才能被上傳,不知道問題出在哪里,望大神指導


        <em id="ri2my"></em>
      2. <em id="ri2my"></em>
        <em id="ri2my"><label id="ri2my"><nav id="ri2my"></nav></label></em>
      3. <em id="ri2my"><label id="ri2my"></label></em>
        <div id="ri2my"></div>
        1. <em id="ri2my"><label id="ri2my"></label></em>
        2. <em id="ri2my"><ol id="ri2my"></ol></em>
          <em id="ri2my"></em>

          1. 免费高清视频