手机远程控制系统SIM30051单片机源代码_第1页
手机远程控制系统SIM30051单片机源代码_第2页
手机远程控制系统SIM30051单片机源代码_第3页
手机远程控制系统SIM30051单片机源代码_第4页
手机远程控制系统SIM30051单片机源代码_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#include#define uchar unsigned char#define uint unsigned int/* 宏定义控制变量的值 */#define RST 0X01#define AT_TEST 0X02#define CMGF 0X03#define CMGR 0X04#define CMGD 0X05#define CSCA 0X06#define CMGS 0X07#define SMS 0X08#define SIMRET 0X00/*BEEP TEST*/sbit E=P2A7;/1602 使能引脚sbit RW=P2A6;/1602 读写引脚sbi

2、t RS=P2A5;/1602 数据 /命令选择引脚sbit beep=P2A2;sbit key_num=P3A2;sbit key_OK=P3A3;sbit light1=P3A5;/sbit light2=P3A7;sbit air=P2A0;sbit RELAY = P2A1;/* 语音按键扫描 */sbit voice_open=P1A6;sbit voice_close=P1A7;/*Buffer100 用来存储串口发送的数据, com_dat 用来记录串口发送的个数 */uchar idata Buffer100, *q, com_dat; / 从串口接收的数据uchar i,j

3、,k,num_i,num_j,LED_i; / 定义循环变量uchar SIM_CON; / 定义控制变量uchar flag=0; / 定义标志位uchar doorflag=0,messflag=0;uchar *p; / 定义数组指针uchar password3=0,0,0; / 定义密码数组uchar KEY_NUM=0,KEY_OK=0; / 定义按键变量uchar idata Phone_num12;/* 所要发送的数据 */uchar code AT_RST=A,T,&,F,13,10; / 发送 AT&F,SIM300 返回数据时缓冲数组的7、 8是 OKuchar code

4、 AT=A,T,13,10; / 发送 AT,SIM300 返回数据时缓冲数组的5、 6 是 OKuchar code AT_CMGF=A,T,+,C,M,G,F,=,1,13,10; / 发送 AT+CMGF=1,SIM300 返回 数据时缓冲数组的 12、13 是 OKuchar code AT_CMGR=A,T,+,C,M,G,R,=,1,13,10;/ 发送 AT+CMGR=1,SIM300 返回数据时缓冲数组的15、16是GR , 20、21、22是REC,80开始是短信内容uchar code AT_CMGD=A,T,+,C,M,G,D,=,1,13,10;/发送 AT+CMGD=

5、1,SIM300 返回数据时缓冲数组的12、 13 是 OKuchar code AT_A=A,T,A,13,10;uchar code AT_CSCA=AT+CSCA=; / 发送本地中心号码,缓冲数组的 27、 28 是 OKuchar code AT_LOCAL_NUM=+8613800290500; / 本地中心号码uchar code AT_CMGS=AT+CMGS=; / 发送目的中心号码,缓冲数组的24是unsigned char code G_Rotation4=0x08,0x10,0x20,0x40;/ 正转表格 unsigned char code K_Rotation4=

6、0x40,0x20,0x10,0x08;/ 反转表格/*短信内容数组 */uchar code SMS_open_l=Light opened ;uchar code SMS_open_a=Aircondition opened;uchar code SMS_open_d=Door opened ;uchar code SMS_hasopen_d=Door has opened ;uchar code SMS_close_l=Light closed ;uchar code SMS_close_a=Aircondition closed;uchar code SMS_close_d=Door

7、closed ;uchar code SMS_hasclose_d=Door has closed ;/*DS18B20*/ #define jump_ROM 0xCC#define start 0x44 #define read_EEROM 0xBEsbit DQ = P3A4; /DS18B20 数据口 unsigned char TMPH,TMPL;float tt;uint temp;/* 名称 : Delay(uint del)* 功能 : 延时 10ms * del* 输入 : 无* 输出 : 无* void Delay(uint del)uint i,j;for(i=0; ide

8、l; i+) for(j=0; j1827; j+)/* 名称 : delay()* 功能 : 延时 ,延时时间大概为 140US。* 输入 : 无* 输出 : 无* void delay()int i,j;for(i=0; i=10; i+)for(j=0; j=2; j+);/* * 名称 : wait()* 功能 : 延时函数* 输入 : 无* 输出 : 无* void wait(uint N)int i;for(i=0; iN; i+);/* 名称 : open_door( )* 功能 : 控制步进电机开门* 输入 : 无* 输出 : 无* void open_door()uint m

9、,n;for(n=0;n150;n+) for(m=0;m4;m+) /4 相P2=K_Rotationm;wait(1000); / 改变这个参数可以调整电机转速doorflag=1;/* 名称 : close_door( )* 功能 : 控制步进电机关门* 输入 : 无* 输出 : 无* void close_door() uint i,j; for(j=0;j150;j+) for(i=0;i4;i+) /4 相 P2=G_Rotationi; wait(1000); / 改变这个参数可以调整电机转速doorflag=0;/* *名称:Reset()*功能:复位DS18B20*输入:无*

10、输出:无* uchar Reset(void)uchar deceive_ready;DQ = 0;wait(29);DQ = 1;wait(3);deceive_ready = DQ;wait(25);return(deceive_ready);/* 名称 : read_bit()* 功能 : 从 DS18B20 读一个位值* 输入 : 无* 输出 : 从 DS18B20 读出的一个位值* uchar read_bit(void)uchar i;DQ = 0;DQ = 1;for(i=0; i3; i+);return(DQ);/* 名称 : write_bit()* 功能 : 向 DS18

11、B20 写一位* 输入 : bitval (要对 DS18B20 写入的位值)* 输出 : 无* void write_bit(uchar bitval)DQ=0;if(bitval=1)DQ=1;wait(5);DQ=1;/* 名称 : read_byte()* 功能 : 从 DS18B20 读一个字节* 输入 : 无* 输出 : 从 DS18B20 读到的值* uchar read_byte(void)uchar i,m,receive_data;m = 1;receive_data = 0;for(i=0; i8; i+)if(read_bit()receive_data = recei

12、ve_data + (m i);wait(6);return(receive_data);/* 名称 : write_byte()* 功能 : 向 DS18B20 写一个字节* 输入 : val (要对 DS18B20 写入的命令值)* 输出 : 无* void write_byte(uchar val)uchar i,temp;for(i=0; i i;temp = temp & 0x01;write_bit(temp);wait(5);/* 名称 : Convert(uchar In_Date)* 功能 : 因为电路设计时, P0.0-P0.7 接法刚好了资料中的相反,所以设计该函数。*

13、输入 : 1602 资料上的值* 输出 : 送到 1602 的值*/ uchar Convert(uchar In_Date)uchar i, Out_Date = 0, temp = 0; for(i=0; i i) & 0x01;Out_Date |= (temp (7 - i);return Out_Date;/* 名称 : enable(uchar del)* 功能 : 1602 命令函数* 输入 : 输入的命令值* 输出 : 无* void enable(uchar del)P0 = Convert(del);RS = 0;RW = 0;E = 0; delay();E = 1; d

14、elay();/* 名称 : write(uchar del)* 功能 : 1602 写数据函数* 输入 : 需要写入 1602 的数据* 输出 : 无* void write(uchar del) P0 = Convert(del);RS = 1;RW = 0;E = 0; delay();E = 1; delay();/* 名称: L1602_init()* 功能: 1602 初始化,请参考 1602 的资料* 输入: 无* 输出: 无*void L1602_init(void)enable(0x01);enable(0x38);enable(0x0c);enable(0x06);enab

15、le(0xd0);/* 名称 : L1602_char(uchar hang,uchar lie,uchar sign)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示 b L1602_char(1,5,b)* 输入 : 行,列,需要输入 1602 的数据* 输出 : 无*/void L1602_uchar(uchar hang,uchar lie,uchar sign)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign);/* 名称 : L160

16、2_string(uchar hang,uchar lie,uchar *p)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示 函数如下L1602_string(1,5,ab cd ef;)* 输入 : 行,列,需要输入 1602 的数据,调用该函数如下ab cd ef ,调用该* 输出 : 无*void L1602_string(uchar hang,uchar lie,uchar *p)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);k=0;while(1)if(

17、*p = 0) break;write(*p);p+;/* 不让液晶屏显示内容超出 */k+; if(k=16) break;* 名称* 功能* 输入/*L1602_SCREEN()L1602 扫描,刷新显示 无* 输出 : 无* void L1602_SCREEN()q=Buffer;L1602_string(2,1,q);com_dat=0;Delay(10);/* * 名称 : Com_Int()* 功能 : 串口中断子函数* 输入 : 无* 输出 : 无* void Com_Int(void) interrupt 4 EA=0;if(RI=1) / 当硬件接收到一个数据时, RI 会置

18、位Buffercom_dat=SBUF; / 把从串口读出的数存到数组RI=0; com_dat+;if(com_dat=100) com_dat=0;/ 当 com_dat = 100 时,清 0,防止数组溢出 EA = 1;/* * 名称 : Com_Init()* 功能 : 串口初始化,晶振 11.0592,波特率 9600 ,使能了串口中断* 输入 : 无* 输出 : 无* void Com_Init(void)TMOD = 0x20; / 定时器工作在定时器 1 的方式 2PCON = 0x00; / 不倍频SCON = 0x50;/ 串口工作在方式 1,并且启动串行接收TH1 =

19、0xFd; / 设置波特率 9600TL1 = 0xFd;TR1 = 1;/启动定时器 1ES = 1;/ 开串口中断/* 名称 : Send_uart(unsigned char ch)* 功能 : 向串口发送一个字符* 输入 : 无* 输出 : 无* void Send_uart(unsigned char ch)SBUF=ch;while(TI=0);TI=0;/* 名称 : Send_AT_F* 功能 : 发送 AT&F* 输入 : 无* 输出 : 无* void Send_AT_F()p=AT_RST;EA=0;for(j=0;jsizeof(AT_RST);j+)SBUF=*p;w

20、hile(!TI)_nop_();p+;TI=0;EA=1;SIM_CON=RST;Delay(100);/* 名称 : Send_AT* 功能 : 发送 AT* 输入 : 无* 输出 : 无* void Send_AT()p=AT;EA=0;for(j=0;jsizeof(AT);j+)SBUF=*p;while(!TI)_nop_();p+;TI=0;EA=1;SIM_CON=AT_TEST;Delay(100);/* 名称 : Send_AT_CMGF* 功能 : 发送 AT+CMGF=1* 输入 : 无* 输出 : 无* void Send_AT_CMGF() for(i=0;isiz

21、eof(AT_CMGF)-1;i+)Send_uart(AT_CMGFi);Send_uart(0X0D);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CMGF;Delay(100);/* 名称 : Send_AT_CMGR* 功能 : 发送 AT+CMGR=1* 输入 : 无* 输出 : 无* void Send_AT_CMGR() for(i=0;isizeof(AT_CMGR)-1;i+)Send_uart(AT_CMGRi);Send_uart(0X0D);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CMGR;De

22、lay(100);/* * 名称 : Send_AT_CMGD* 功能 : 发送 AT+CMGD=1* 输入 : 无* 输出 : 无* void Send_AT_CMGD()p=AT_CMGD;EA=0;for(j=0;jsizeof(AT_CMGD);j+)SBUF=*p;while(!TI)_nop_();p+;TI=0;EA=1;SIM_CON=CMGD;Delay(100);/* 名称: Send_AT_CSCA* 功能: 发送 AT+CSCA=+8613800290500* 输入: 无* 输出: 无* void Send_AT_CSCA()for(i=0;isizeof(AT_CSC

23、A)-1;i+)Send_uart(AT_CSCAi);Send_uart(0X22);for(i=0;isizeof(AT_LOCAL_NUM)-1;i+)Send_uart(AT_LOCAL_NUMi);Send_uart(0X22);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CSCA;Delay(100);/* 名称 : Send_AT_CMGS(uchar idata aim_num)* 功能 : 发送 AT+CMGS= 手机号 * 输入 : 无* 输出 : 无* void Send_AT_CMGS(uchar aim_num)for(i=0;is

24、izeof(AT_CMGS)-1;i+)Send_uart(AT_CMGSi);Send_uart(0X22);for(i=0;i11;i+)Send_uart(aim_numi);Send_uart(0X22);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CMGS;Delay(100);/* 名称 : Send_REPLY* 功能 : 发送短信内容* 输入 : 无* 输出 : 无* void Send_REPLY(uchar REPL Y) for(i=0;i19;i+) Send_uart(REPLYi);Delay(200);Send_uart(0x1

25、A);Send_uart(0x0D);Send_uart(0x0A);SIM_CON=SMS;Delay(100); /* * 名称 : Send_AT_A* 功能 : 发送 AT&F* 输入 : 无* 输出 : 无* void Send_AT_A()p=AT_A;EA=0;for(j=0;jsizeof(AT_A);j+) SBUF=*p; while(!TI) _nop_();p+;TI=0;EA=1;Delay(100);/* 名称: Beep()* 功能: 通过蜂鸣器响的方式,判断短信发送内容* 输入: 无* 输出: 无*void Beep(uchar n)for(i=0;in;i+)

26、beep=0;Delay(10);beep=1;Delay(10);/* * 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无* void main()/* 初始化 1602*/Com_Init();Delay(10);L1602_init();L1602_string(1,1,*Hello Master*);L1602_string(2,1,Wait );P2=0x00;/*SIM300 初始化 */1602 上*/Send_AT_F();/*进入循环扫描,把返回的数据显示在P1=0xff;while(1)loop1:com_dat=0;if(SIM_CON=RST

27、)Delay(10);if(Buffer7=O)&(Buffer8=K)/L1602_string(2,1, );Delay(20);com_dat=0;Delay(10);Send_AT();/* 如果发送失败,重发 AT&F*/elseDelay(10);com_dat=0;Send_AT_F();else if(SIM_CON=A T_TEST)Delay(10);if(Buffer5=O)&(Buffer6=K) /L1602_string(2,1,Wait);Delay(20);com_dat=0;Delay(10);Send_AT_CMGF();/* 如果发送失败,重发 AT*/

28、else Delay(10); com_dat=0; Send_AT();else if(SIM_CON=CMGF)Delay(10);if(Buffer12=O)&(Buffer13=K)/L1602_string(2,1, );Delay(20);com_dat=0;Delay(10);Send_AT_CMGD();/* 如果发送失败,重发 AT+CMGF=1*/elseDelay(10);com_dat=0;Send_AT_CMGF();else if(SIM_CON=CMGD)Delay(10);if(Buffer12=O)&(Buffer13=K)L1602_string(2,1,

29、);L1602_string(2,1,Ready);com_dat=0;SIM_CON=SIMRET;Delay(10);/* 如果发送失败,重发 AT*/elseDelay(10);com_dat=0;Send_AT_CMGD();/* 检测是否来电话 */else if(Buffer2=R)&(Buffer3=I)com_dat=0;Send_AT_A();while(1) com_dat=0; L1602_string(2,1,Calling. ); if(voice_open=0)Delay(1);if(voice_open=0) light1=0;while(!voice_open)

30、;Delay(1); while(!voice_open);if(voice_close=0)Delay(1);if(voice_close=0) light1=1; while(!voice_close); Delay(1);while(!voice_close); if(Buffer2=N)L1602_string(1,1,*Hello Master*);L1602_string(2,1,Ready ); goto loop1;/* 检测是否收到短信 */else if(Buffer5=T)&(Buffer6=I) L1602_SCREEN(); Delay(10);for(LED_i=0

31、;LED_i2;LED_i+) P1=0x7e;Delay(10);P1=0xbd;Delay(10);P1=0xdb;Delay(10);P1=0xe7;Delay(10);P1=0xdb;Delay(10);P1=0xbd;Delay(10);P1=0x7e;Delay(10);P1=0xff;Delay(10);P1=0x00;Delay(10);P1=0xff;Delay(10);P1=0x00;Delay(10);P1=0xff;Send_AT_CMGR();while(1)loop2:com_dat=0;if(SIM_CON=CMGR)L1602_SCREEN(); if(Buff

32、er15=G)&(Buffer16=R)/* */* 检测密码 */* */for(i=0;isizeof(Buffer);i+)if(Bufferi=)flag+;if(flag=6)flag=0;break;for(j=0;j(sizeof(Buffer)-i);j+)if(Bufferi+j+1=(password0+48)&(Bufferi+j+2=(password1)+48)&(Bufferi+j+3= =(password2)+48)break;if(j=(sizeof(Buffer)-i)L1602_string(2,1, );L1602_string(2,1,Wrong pa

33、ssword);Delay(200);goto error;/*L1602_string(2,1, );L1602_string(2,1,Reading SMS);L1602_string(2,1, );L1602_string(2,1,Reading SMS);/* 检测手机号 */* */ for(num_i=0;num_isizeof(Buffer);num_i+)if(Buffernum_i=)flag+;if(flag=4)flag=0;for(num_j=0;num_j)com_dat=0;Send_REPLY(SMS_open_l);/* 如果发送失败,重发 AT+CMGS= 手

34、机号 */ elseDelay(10);com_dat=0;Send_AT_CMGS(Phone_num);else if(SIM_CON=SMS)/L1602_SCREEN();Delay(100);if(Buffer2=+)/L1602_SCREEN();Delay(100);L1602_string(2,1, );L1602_string(2,1,Finished);goto open1;elseL1602_string(2,1, );L1602_string(2,1,Finished);goto open1;open1:Send_AT_CMGD();goto loop2;else if(Bufferi+j+5=o)&(Bufferi+j+10=a)L1602_string(2,1, );L1602_string(2,1,Reading SMS);air=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论