《利用GSM模块实现远程无线控制程序.doc》由会员分享,可在线阅读,更多相关《利用GSM模块实现远程无线控制程序.doc(12页珍藏版)》请在三一文库上搜索。
1、#define P_IOB_Data (volatile unsigned int *)0x7005#define P_IOB_Buffer (volatile unsigned int *)0x7006#define P_IOB_Dir (volatile unsigned int *)0x7007#define P_IOB_Attrib (volatile unsigned int *)0x7008#defineP_IOA_Data (volatile unsigned int *)0x7000 #defineP_IOA_Buffer(volatile unsigned int *)0x7
2、001 #define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_UART_Command1 (volatile unsigned int *)0x7021#define P_UART_Command2 (volatile unsigned int *)0x7022#define P_UART_Data (volatile unsigned int *)0x7023#defineP_UART_BaudScalarLow(volati
3、le unsigned int *)0x7024#defineP_UART_BaudScalarHigh(volatile unsigned int *)0x7025#define P_Watchdog_Clear (volatile unsigned int *)0x7012/定义变量 signed int d_x,d_y,d_z;/延迟signed int b200,b_1=0;/串口接收数据signed int read=AT+CMGR=1rn;/读指令signed int del=AT+CMGD=1rn;/删除指令signed int del1=AT+CMGD=;/删除指令(用于初始化
4、)signed int del_1=1,del_2=0x31;signed int send=AT+CMGS=;signed int zcd5,zcd_1,zcd_g,zcd_s;/总长度signed int sendzx=0891683108402305F01100;signed int sjh30,sjh_1,sjh_2,sjh_3;/手机号signed int sendxh=000800;signed int dxc2,dxc_1,dxc_2,dxc_3,dxc_4; /短信长度signed int sendyk=5DF25F00003A; /已开:signed int you_1,yo
5、u_2,you_3,you_4,dx20,wu,dx_1;signed int buf,*cmd,r;signed int bzw,mima=0,chaxun=0;signed int kai,kai_1,guan,guan_1;/void IRQ7(void) _attribute_ (ISR); /void IRQ7(void);void delay(signed int d_delay);/* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void delay(signed int d_del
6、ay) for(d_x=0;d_x=d_delay;d_x+) *P_Watchdog_Clear=1;for(d_y=0;d_y=d_delay;d_y+) *P_Watchdog_Clear=1;for(d_z=0;d_z=d_delay;d_z+)*P_Watchdog_Clear=1;/* 名称 : Readzl()* 功能 :发送读指令* 输入 : AT+CMGR=1回车* 输出 : 无*/void Readzl(void)cmd=read; while(*cmd!=0) while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2
7、; r&=0x0040; *P_UART_Data=readbuf; cmd+;buf+; delay(10);cmd=0;buf=0;/* 名称 : Sendms()* 功能 :发送发短信指令* 输入 : AT+CMGS=N回车* 输出 : 无*/void Sendms(void)cmd=send; while(*cmd!=0) while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=sendbuf; cmd+;buf+; delay(10);cmd=0;buf=0;for(buf=0
8、;buf=2;buf+)while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=zcdbuf; delay(10);buf=0;delay(50);cmd=sendzx;while(*cmd!=0) while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=sendzxbuf; cmd+; buf+; delay(3);cmd=0;buf=0;for(sjh_1=0;sjh_1=sj
9、h_3;sjh_1+) /发送目标地址 delay(3);while(r!=0x0040) *P_Watchdog_Clear=1;r=*P_UART_Command2; r&=0x0040; *P_UART_Data=sjhsjh_1;cmd=sendxh;while(*cmd!=0) while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=sendxhbuf; cmd+; buf+; delay(3);cmd=0;buf=0;for(buf=0;buf=1;buf+)while(r!
10、=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=dxcbuf; delay(3);buf=0;cmd=sendyk;while(*cmd!=0) while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=sendykbuf; cmd+; buf+; delay(3);cmd=0;buf=0;for(buf=0;buf=dx_1;buf+)while(r!=0x0040) *P_Watchdo
11、g_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=dxbuf; delay(3);buf=0;/* 名称 : Del()* 功能 :发送删除指令* 输入 : AT+CMGD=1回车* 输出 : 无*/void Del(void)if(del_1=1)del_1=0;for(del_2=0x31;del_2=0x38;del_2+)cmd=del1;while(*cmd!=0) while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Dat
12、a=del1buf; cmd+; buf+; delay(10);cmd=0;buf=0;while(r!=0x0040) *P_Watchdog_Clear=1;r=*P_UART_Command2;r&=0x0040;*P_UART_Data=del_2;delay(10);while(r!=0x0040) *P_Watchdog_Clear=1;r=*P_UART_Command2;r&=0x0040;*P_UART_Data=0x0d;delay(10);while(r!=0x0040) *P_Watchdog_Clear=1;r=*P_UART_Command2;r&=0x0040;
13、*P_UART_Data=0x0a;delay(40);else cmd=del; while(*cmd!=0) while(r!=0x0040) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0040; *P_UART_Data=delbuf; cmd+;buf+; delay(3);cmd=0;buf=0;/* 名称 : void IRQ7(void) _attribute_ (ISR); * 功能 :UART传输中断* 输入 : * 输出 : 无*/void IRQ7(void) _attribute_ (ISR); void IRQ7(vo
14、id) r=*P_UART_Command2; while(r!=0x0080) *P_Watchdog_Clear=1; r=*P_UART_Command2; r&=0x0080; bb_1=*P_UART_Data; /判断密码 自动化81EA 52A8 5316 if(bb_1-11=0x38)&(bb_1-10=0x31)&(bb_1-9=0x45)&(bb_1-8=0x41)&(bb_1-7=0x35)&(bb_1-6=0x32)&(bb_1-5=0x41)&(bb_1-4=0x38)&(bb_1-3=0x35)&(bb_1-2=0x33)&(bb_1-1=0x31)&(bb_1=
15、0x36) mima=1; *P_Watchdog_Clear=1; /b_1=0; if(bb_1=0x32)&(bb_1-1=0x45)&(bb_1-2=0x42)&(bb_1-3=0x38)&(bb_1-4=0x35)&(bb_1-5=0x45)&(bb_1-6=0x37)&(bb_1-7=0x36)chaxun=1;if(b46=0x31)&(b47=0x30) sjh_2=46;/feixin=1; /对方是用飞信发的sjh_3=19;for(sjh_1=0;sjh_1=19;sjh_1+)*P_Watchdog_Clear=1;sjhsjh_1=bsjh_2;sjh_2+;else
16、 if(b46=0x30)&(b47=0x42)/shouji_b=1; /对方是用手机发的 A1格式 无86sjh_2=46;sjh_3=15;for(sjh_1=0;sjh_1=15;sjh_1+)*P_Watchdog_Clear=1;sjhsjh_1=bsjh_2;sjh_2+;else if(b46=0x30)&(b47=0x44)/shouji_d=1; /对方是用手机发的带 91格式 86sjh_2=46;sjh_3=17;for(sjh_1=0;sjh_170) /5F00 开*P_Watchdog_Clear=1;kai=1;kai_1=b_1;else if(bb_1-3=
17、0x35)&(bb_1-2=0x31)&(bb_1-1=0x37)&(bb_1=0x33)&(b_170) /5173 关*P_Watchdog_Clear=1;guan=1;guan_1=b_1;if(bb_1-3=0x4f)&(bb_1-2=0x4b)&(bb_1-1=0x0d)&(bb_1=0x0a) /判断 OK ,结束标志if(b_1=91)bzw=1;b_1=0;else /bzw=0;b_1=0; else b_1+; *P_Watchdog_Clear=1;/* 名称 : main()* 功能 : 主程序* 输入 : 无* 输出 : 无*/int main()*P_IOB_At
18、trib|=0x0480, /初始化IO口,IOB7悬浮输入,IOB10高电平输出 *P_IOB_Dir|=0x400,*P_IOB_Data|=0x400,*P_IOB_Dir |= 0x0040;/设置IOB6为同相高电平输出*P_IOB_Attrib |= 0x0040;*P_IOB_Data |= 0x0040;*P_IOA_Dir = 0xffff;/设置IOA口为同相低电平输出*P_IOA_Attrib = 0xffff;*P_IOA_Data = 0x0000;*P_UART_BaudScalarLow =0x00, /设置波特率9600bps *P_UART_BaudScala
19、rHigh=0x05,*P_UART_Command1 =0x0080; /RX使能 *P_UART_Command2 =0x00c0;Del();_asm(INT irq);while(1)Readzl();delay(50);if(bzw=1)bzw=0;if(mima=1)mima=0;if(chaxun=1)chaxun=0;if(*P_IOA_Data&0x0001)you_1=4;dx0=0x30; dx1=0x30; dx2=0x33; dx3=0x31;if(*P_IOA_Data&0x0002)you_2=4;dx0+you_1=0x30; dx1+you_1=0x30; d
20、x2+you_1=0x33; dx3+you_1=0x32;if(*P_IOA_Data&0x0004)you_3=4;dx0+you_1+you_2=0x30; dx1+you_1+you_2=0x30; dx2+you_1+you_2=0x33; dx3+you_1+you_2=0x33;if(*P_IOA_Data&0x0008)you_4=4;dx0+you_1+you_2+you_3=0x30; dx1+you_1+you_2+you_3=0x30; dx2+you_1+you_2+you_3=0x33; dx3+you_1+you_2+you_3=0x34;if(you_1!=4)
21、&(you_2!=4)&(you_3!=4)&(you_4!=4)wu=4;dx0=0x36;/无 65E0 dx1=0x35; dx2=0x45; dx3=0x30;dx_1=you_1+you_2+you_3+you_4+wu;dx0+you_1+you_2+you_3+you_4+wu=0x1a;dxc_1=20+you_1+you_2+you_3+you_4+wu; /短信内容长度/2 送到 dxc0dxc1 you_1=0; you_2=0; you_3=0; you_4=0; wu=0; dxc_4=(dxc_1-7)/2; dxc_2=dxc_4/16; dxc_3=dxc_4-
22、dxc_2*16; if(dxc_2=9) dxc0=0x30+dxc_2; else dxc0=0x41+dxc_2-0x0a; if(dxc_3=9) dxc1=0x30+dxc_3; else dxc1=0x41+dxc_3-0x0a; / 短信内容长度/2 送到 dxc0dxc1 zcd_1=(4+sjh_1+dxc_1)/2; /(目的地址+短信)/2送到zcd0zcd1 zcd_s=zcd_1/10; zcd_g=zcd_1-zcd_s*10; zcd0=0x30+zcd_s; zcd1=0x30+zcd_g; zcd2=0x0d; Sendms(); /发送短信 delay(10
23、0);else if(kai=1) /开灯判断kai=0;*P_Watchdog_Clear=1;if(bkai_1+6=0x30)*P_IOA_Data =0x00ff;else if(bkai_1+6=0x31)*P_IOA_Data |=0x0001;else if(bkai_1+6=0x32)*P_IOA_Data |=0x0002;else if(bkai_1+6=0x33)*P_IOA_Data |=0x0004;else if(bkai_1+6=0x34)*P_IOA_Data |=0x0008;else if(guan=1) /关灯判断guan=0;if(bguan_1+4=0x30)*P_IOA_Data &=0x0000;else if(bguan_1+4=0x31)*P_IOA_Data &=0x00fe;else if(bguan_1+4=0x32)*P_IOA_Data &=0x00fd;else if(bguan_1+4=0x33)*P_IOA_Data &=0x00fb;else if(bguan_1+4=0x34)*P_IOA_Data &=0x00f7;Del();delay(50);
链接地址:https://www.31doc.com/p-5018620.html