通過機智云控制8盞燈的亮滅
單片機源程序如下:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit lcd0=P1^0;
- sbit lcd1=P1^1;
- sbit lcd2=P1^2;
- sbit lcd3=P1^3;
- sbit lcd4=P1^4;
- sbit lcd5=P1^5;
- sbit lcd6=P1^6;
- sbit lcd7=P1^7;
- sbit key_config_Ap=P2^1;
- sbit key_config_Air=P2^3;
- uchar usartbuf[50]={0};
- uchar sn,checksum,usrtlen,usarrtflag,num_usart;
- uchar send_3_config,send_7_error,send_8_dev,send_9_dev;
- /*wifi模組請求設備信息,mcu回復*/
- uchar mcu_send_1[75]={
- 0xff,0xff,0x00,0x47,0x02,0x55,0x00,0x00,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,
- 0x34,0x39,0x33,0x35,0x33,0x31,0x33,0x36,
- 0x30,0x66,0x38,0x66,0x34,0x32,0x37,0x64,
- 0x38,0x64,0x33,0x34,0x35,0x39,0x36,0x62,
- 0x33,0x37,0x33,0x62,0x38,0x61,0x39,0x30,
- 0x00,0x00,0x55};
- /*wifi模組與設備mcu心跳,mcu回復*/
- uchar mcu_send_2[9]={0xff,0xff,0x00,0x05,0x08,0x55,0x00,0x00,0x55};
- /*設備mcu通知wifi模組進入配置模式,mcu發送*/
- uchar mcu_send_3[10]={0xff,0xff,0x00,0x06,0x09,0x55,0x00,0x00,0x11,0x55};
- /*設備mcu重置wifi,mcu發送*/
- uchar mcu_send_4[9]={0xff,0xff,0x00,0x05,0x0b,0x55,0x00,0x00,0x55};
- /*wifi模組向設備通知工作狀態變化,mcu回復*/
- uchar mcu_send_5[9]={0xff,0xff,0x00,0x05,0x0e,0x55,0x00,0x00,0x55};
- /*wifi模組請求重啟mcu,mcu回復*/
- uchar mcu_send_6[9]={0xff,0xff,0x00,0x05,0x10,0x55,0x00,0x00,0x55};
- /*非法消息通知,mcu回復*/
- uchar mcu_send_7[10]={0xff,0xff,0x00,0x06,0x12,0x55,0x00,0x00,0x11,0x55};
- /*wifi模組讀取設備當前狀態,mcu回復*/
- uchar mcu_send_8[11]={0xff,0xff,0x00,0x07,0x04,0x55,0x00,0x00,0x03,0x11,0x55};
- /*設備向wifi主動上報當前狀態,mcu發送*/
- uchar mcu_send_9[11]={0xff,0xff,0x00,0x07,0x05,0x55,0x00,0x00,0x04,0x11,0x55};
- /*wifi模組控制設備,mcu回復*/
- uchar mcu_send_10[9]={0xff,0xff,0x00,0x05,0x04,0x55,0x00,0x00,0x55};
- /*mcu通知wifi進入可綁定模式,mcu發送*/
- uchar mcu_send_12[9]={0xff,0xff,0x00,0x05,0x15,0x55,0x00,0x00,0x55};
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- /**********************************************************************/
- /*延時函數*/
- void Delay_ms(unsigned char z)
- {
- unsigned char x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- /*初始化函數*/
- void Usart_Init()
- {
- TMOD=0x21; //定時器0工作方式1,定時器1工作方式2
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- TH1=0xfd;
- TL1=0xfd;
- TR0=1;
- TR1=1;
- REN=1;
- SM0=0;
- SM1=1;
- EA=1;
- ES=1;
- }
- /*mcu發送數據程序*/
- void Usart_SendArrang(uchar *dat,uchar len)
- {
- unsigned char i;
- for(i=0;i<len;i++)
- {
- ES=0;
- SBUF=dat[i];
- while(!TI);
- TI=0;
- ES=1;
- }
- }
- /*定時器0中斷*/
- void Timer0_Int() interrupt 1
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- num_usart++;
- }
- /*串口中斷函數*/
- void Usart_Int() interrupt 4
- {
- num_usart=0;
- ET0=1;
- usartbuf[usrtlen++]=SBUF;
- if(usrtlen==2)
- {
- if(usartbuf[0]!=0xff||usartbuf[1]!=0xff)
- {
- usrtlen=0;
- }
- }
- RI=0;
- }
- /*改變設備狀態*/
- void Control_Mcu()
- {
- switch(usartbuf[9])
- {
- case 0x01:
- if(usartbuf[10]==0x01)
- {
- lcd0=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd0=1;
- }
- break;
- case 0x02:
- if(usartbuf[10]==0x02)
- {
- lcd1=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd1=1;
- }
- break;
- case 0x04:
- if(usartbuf[10]==0x04)
- {
- lcd2=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd2=1;
- }
- break;
- case 0x08:
- if(usartbuf[10]==0x08)
- {
- lcd3=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd3=1;
- }
- break;
- case 0x10:
- if(usartbuf[10]==0x10)
- {
- lcd4=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd4=1;
- }
- break;
- case 0x20:
- if(usartbuf[10]==0x20)
- {
- lcd5=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd5=1;
- }
- break;
- case 0x40:
- if(usartbuf[10]==0x40)
- {
- lcd6=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd6=1;
- }
- break;
- case 0x80:
- if(usartbuf[10]==0x80)
- {
- lcd7=0;
- }
- else if(usartbuf[10]==0)
- {
- lcd7=1;
- }
- break;
- }
- }
- /*處理串口數據*/
- void Usart_Communication()
- {
- uchar i;
- if(num_usart==10)
- {
- ET0=0;
- num_usart=0;
- usarrtflag=1;
- REN=0;
- }
- if(usarrtflag)
- {
- sn=usartbuf[5];
- checksum=0;
- switch(usartbuf[4])
- {
- case 0x01:
- mcu_send_1[5]=sn;
- for(i=2;i<74;i++)
- {
- checksum=checksum+mcu_send_1[i];
- }
- checksum=checksum%256;
- mcu_send_1[74]=checksum;
- Usart_SendArrang(mcu_send_1,75);
- break;
- case 0x07:
- mcu_send_2[5]=sn;
- for(i=2;i<8;i++)
- {
- checksum=checksum+mcu_send_2[i];
- }
- checksum=checksum%256;
- mcu_send_2[8]=checksum;
- Usart_SendArrang(mcu_send_2,9);
- break;
- case 0x0a:
- break;
- case 0x0c:
- break;
- case 0x0d:
- mcu_send_5[5]=sn;
- for(i=2;i<8;i++)
- {
- checksum=checksum+mcu_send_5[i];
- }
- checksum=checksum%256;
- mcu_send_5[8]=checksum;
- Usart_SendArrang(mcu_send_5,9);
- break;
- case 0x0f:
- mcu_send_6[5]=sn;
- for(i=2;i<8;i++)
- {
- checksum=checksum+mcu_send_6[i];
- }
- checksum=checksum%256;
- mcu_send_6[8]=checksum;
- Usart_SendArrang(mcu_send_6,9);
- break;
- case 0x11:
- mcu_send_7[5]=sn;
- send_7_error=usartbuf[8];
- mcu_send_7[8]=send_7_error;
- for(i=2;i<9;i++)
- {
- checksum=checksum+mcu_send_7[i];
- }
- checksum=checksum%256;
- mcu_send_7[9]=checksum;
- Usart_SendArrang(mcu_send_7,10);
- break;
- case 0x03:
- if(usartbuf[3]=0x06&&usartbuf[8]==0x02)
- {
- mcu_send_8[5]=sn;
- send_8_dev=~P1;
- mcu_send_8[9]=send_8_dev;
- for(i=2;i<10;i++)
- {
- checksum=checksum+mcu_send_8[i];
- }
- checksum=checksum%256;
- mcu_send_8[10]=checksum;
- Usart_SendArrang(mcu_send_8,11);
- break;
- }
- if(usartbuf[3]=0x08&&usartbuf[8]==0x01)
- {
- Control_Mcu(); //收到數據后,mcu控制設備函數
-
- mcu_send_10[5]=sn;
- for(i=2;i<8;i++)
- {
- checksum=checksum+mcu_send_10[i];
- }
- checksum=checksum%256;
- mcu_send_10[8]=checksum;
- Usart_SendArrang(mcu_send_10,9); //mcu回復
- mcu_send_9[5]=sn;
- send_9_dev=~P1;
- mcu_send_9[9]=send_9_dev;
- for(i=2;i<10;i++)
- {
- checksum=checksum+mcu_send_9[i];
- }
- checksum=checksum%256;
- mcu_send_9[10]=checksum;
- Usart_SendArrang(mcu_send_9,11); //mcu主動上報設備狀態
- break;
- }
- case 0x06:
- break;
- case 0x16:
- break;
- }
- usrtlen=0;
- usarrtflag=0;
- REN=1;
- }
- }
- /*按鍵配置設備入網*/
- void Key_Usart_Config()
- {
- uchar i;
- checksum=0;
- if(key_config_Ap==0) //SoftAp配置模式
- {
- Delay_ms(10);
- if(key_config_Ap==0)
- {
- REN=0;
- sn=0x00;
- mcu_send_3[5]=sn;
- for(i=2;i<9;i++)
- {
- checksum=checksum+mcu_send_3[i];
- }
- checksum=checksum%256;
- mcu_send_3[9]=checksum;
- send_3_config=1;
- mcu_send_3[8]=send_3_config;
- Usart_SendArrang(mcu_send_3,10);
- while(key_config_Ap==0);
- REN=1;
- }
- }
- if(key_config_Air==0) //AirLink配置模式
- {
- Delay_ms(10);
- if(key_config_Air==0)
- {
- REN=0;
- sn=0x00;
- mcu_send_3[5]=sn;
- for(i=2;i<9;i++)
- {
- checksum=checksum+mcu_send_3[i];
- }
- checksum=checksum%256;
- mcu_send_3[9]=checksum;
- send_3_config=2;
- mcu_send_3[8]=send_3_config;
- Usart_SendArrang(mcu_send_3,10);
- while(key_config_Air==0);
- REN=1;
- }
- }
- }
- /*主函數*/
- void main()
- {
- Usart_Init();
- while(1)
- {
- Key_Usart_Config();
- Usart_Communication();
- }
- }
復制代碼
所有資料51hei提供下載:
c51連機智云控制8盞燈的亮滅.zip
(202.38 KB, 下載次數: 13)
2019-12-1 14:28 上傳
點擊文件名下載附件
|