




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/* * * * tc35/tc35i或mc35/mc35i与mcu51单片机打电话、短信实验程序 * * * * 功能:短信控制8路发光管的亮与灭 * * 短信读取8路发光管的当前开关状态 * * 通过发短信控制蜂鸣器报警鸣音 * * 按键控制功能: * * 1、按板上第一个按键,自动拨打程序中设定好的目标电话号码 * * 2、按板上第二个按键,自动发送ds18b20温度传感器测到的温度值对目标手机 * * 3、按板上第三个按键,自动发送测试“demo”短信给程序中设定的目标手机 * * 4、按板上第四个按键,控制液晶显示内容,用户可以自定义显示内容 * */#include#define
2、uchar unsigned char#define uint unsigned int#define rxin 90/定义接收的数组长度为90uchar code at=at;/握手信号uchar code ate=ate; /关回显uchar code at_cnmi=at+cnmi=2,1;/设置这组参数来了新信息直接显示到串口,不作存储uchar code at_csca=at+csca=+8613010360500;/设置服务中心号码uchar code at_cmgf=at+cmgf=1;/设置短信的格式为text格式uchar code at_cmgr=at+cmgr=;/读取短
3、信指令uchar code at_cmgs=at+cmgs=;/发送短信指令uchar code at_cmgd=at+cmgd=;/发送短信指令uchar code successfully=operate successfully!;/发送操作成功信息到目标号码uchar code fail=operate failed,try again!;/发送操作失败信息到目标号码uchar at_delete12;uchar at_read12;/用来存储发送读取短信指令 uchar at_sendnumber22; /用来存储发送短信号码指令uchar numberbuf3; /用来保存短信条数
4、 uchar idata systembufrxin; /储存出口接收数据 uchar commandbuf6; /用来储存指令 uchar idata state17; /用来存储io口状态 uchar idata state117; /用来存储io口状态 uchar rx=0; uint temp; /记录状态 uchar temp1;/ 用于记录p0口状态uchar temp2; / 用于记录p2口状态 bit check=0;/查询标志位 bit receiveready=0; /接收短信标志位bit sendready=0; /发送短信准备标志位bit send=0; /发送短信标志
5、位bit flag=0; /指令标志位sbit p3_7=p37;/启动gsm的启动线连igtsbit realy0=p10; /发光管1sbit realy1=p11; /发光管2sbit realy2=p12; /发光管3sbit realy3=p13; /发光管4sbit realy4=p14; /发光管5sbit realy5=p15; /发光管6sbit realy6=p16; /发光管7sbit realy7=p17; /发光管8sbit sw1=p33;sbit sw2=p34;sbit sw3=p35;sbit sw4=p36;sbit beep=p32; /蜂鸣器sbit k
6、ey1=p20; /开关1sbit key2=p21; /开关2sbit key3=p22; /开关3sbit key4=p23; /开关4sbit key5=p24; /开关5sbit key6=p25; /开关6sbit key7=p26; /开关7sbit key8=p27;/开关8void delay_ms(uint i);void start_gsm(void);void uart_init (void);void sendchar(uchar ch);void sendstring(uchar *p);void gsm_init(void);void receive_ready(v
7、oid);void message_read(void);void read_message(void);void sendmessage(void);uchar code at7=0x41,0x54,0x2b,0x43,0x4d,0x47,0x53,0x3d;/at+cmgs= at+cmgs=“+8613xxxxxxxxx”回车输入短消息。crtl+z结束并发送。uchar code at12=0x41,0x54,0x44,0x3e;/atd atd*; (拨号,*为需要拨的号码,如呼则为atuchar code neirong11=13
8、185018567;sbit dq=p37; /ds18b20数据传输线接单片机的相应的引脚unsigned char templ=0; /临时变量低位unsigned char temph=0;/临时变量高位float temperature; /温度值unsigned char k,ge,shi,bai;uchar code atshanchu= at+cmgd=9;/* 延时子程序*/void delay1(uint ms) uchar k; while(ms-) for(k = 0; k 120; k+); /-/*函数功能:延时子程序入口参数:k出口参数:*/void delay(u
9、nsigned int k) unsigned int n; n=0; while(n 0;i-) dq=1; delay(1); dq=0; dat=1; dq=1; if(dq) dat|=0x80; delay(4); return(dat);/*函数功能:向ds18b20写一字节数据入口参数:dat出口参数:*/writeonechar(unsigned char dat) unsigned char i=0; for(i=8;i0;i-) dq=0; dq=dat&0x01;delay(5);dq=1;dat=1;delay(4);/*函数功能:ds18b20初始化子程序入口参数:出
10、口参数:*/init_ds18b20(void)unsigned char x=0; dq=1; /dq先置高 delay(8); /延时 dq=0; /发送复位脉冲 delay(85); /延时(480ms) dq=1; /拉高数据线 delay(14); /等待(1560ms) /*函数功能:向ds18b20读温度值入口参数:出口参数:temperature*/readtemperature(void) init_ds18b20(); /初始化writeonechar(0xcc); /跳过读序列号的操作writeonechar(0x44); /启动温度转换delay(125); /转换需要
11、一点时间,延时init_ds18b20(); /初始化writeonechar(0xcc); /跳过读序列号的操作writeonechar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位)templ=readonechar(); /读出温度的低位lsbtemph=readonechar(); /读出温度的高位msb /温度转换,把高低位做相应的运算转化为实际温度temperature=(temph*256)+templ)*0.0625; delay(200);return(temperature);/* 发送数据函数*/void senddata(uchar dat) sbuf
12、=dat; while(!ti); ti = 0;/void mingling(uchar zijie,uchar *p) uchar m; for(m=0;m0;i-) for(j=0;j125;j+) ;/*/函数void start_gsm(void);实现功能:对tc35进行启动,开启tc35/功能详述:单片机上的p3_7管脚是跟tc35的igt管脚相连;需要启动tc35,必须在 15脚(/igt)加时长至少为100ms的低电平信号,/且该信号下降沿时间小于1ms。启动后,15 脚的信号应保持高电平./*/void start_gsm(void) p3_7=0; delay_ms(10
13、00); p3_7=1; delay_ms(1000); /*/函数void uart_init;实现功能:对串口进行初始化/*/void uart_init (void) tmod=0x20; /选择定时器1 pcon=0x00;/波特率不加倍 scon=0x50;/串行工作方式1允许串行接收 th1=0xfd;/实验板上晶振位11.0592mhz,选择波特率为9600 tl1=0xfd;/在相应计数器上赋值 ea=1;/总中断开启 es=1;/串行中断开启 tr1=1;/开启定时器1 /*/函数void sendchar(uchar ch);实现功能:发送一字节数据/*/void send
14、char(uchar ch) sbuf=ch;while(ti=0);ti=0;/*/函数void sendstring(uchar *p);实现功能:通过串口发送字符串/*/void sendstring(uchar *p) while(*p) sendchar(*p); p+; sendchar(0x0d); sendchar(0x0a);/*/函数void receive(void) interrupt 4 using 1;实现功能:通过串口接收数据/*/void receive(void) interrupt 4 using 1 if(ri) if(rxrxin) systembufr
15、x=sbuf; rx+; ri=0; /*/函数void gsm_init(void);实现功能:初始化tc35模块/*/void gsm_init(void) loop:delay_ms(1000);sendstring(at);delay_ms(1000); sendstring(ate); delay_ms(1000); sendstring(at_cnmi);delay_ms(1000); sendstring(at_csca);delay_ms(1000); for(rx=0;rxrxin;rx+) systembufrx=0x00; rx=0; sendstring(at_cmgf
16、); delay_ms(1000); if(systembuf2=o)&(systembuf3=k) /判断是否模块初始化成功,成功的话模块会回复ok给单片机 /如果单片机没有收到ok,就继续发送初始化指令/ for(rx=0;rxrxin;rx+) systembufrx=0x00; rx=0; else for(rx=0;rxrxin;rx+) systembufrx=0x00; rx=0; goto loop; /*/函数void receive_ready(void);实现功能:接收短信准备/*/ void receive_ready(void) uchar i;if(systembu
17、f5=0x54)&systembuf6=0x49) /如果有新短信来,模块会通过串口向单片机发送字符串, /此函数的功能是判断是否有新短信来,如果来的话就置位准备接受位标志为1 receiveready=1; /如果不是新短信的指令,就舍弃,并将接收数组清零/ else for(i=0;irx;i+) systembufi=0x00; rx=0; /*/函数 void message_read(void);实现功能:判断短信,准备是否回复短信给目标号/*/ void message_read(void) if(sendready=1)&(systembuf5=0x47)&(systembuf6
18、=0x52) send=1; /*/函数 void read_message(void);实现功能:发送读取短信指令,/*/ void read_message(void) uchar i; delay_ms(1000); for(i=0;i3;i+) numberbufi=systembuf14+i; for(i=0;i8;i+)at_readi=at_cmgri; for(i=8;i11;i+) at_readi=numberbufi-8; for(rx=0;rxrxin;rx+) systembufrx=0x00; rx=0; sendstring(at_read); /发送at+cmg
19、r=?,?代表短信储存所在位置 /*/函数 void readcommend(void);实现功能:读取短信内容,判断相应指令是否正确/*/ void readcommend(void) uchar i; for(i=0;i5;i+) /将短信内容中的指令部分截取出来放到 /commandbuf数组中 commandbufi=systembuf61+i; if(commandbuf0=o)&(commandbuf1=p)&(commandbuf2=e)&(commandbuf3=n) /判断指令是否为开发光管指令 switch(commandbuf4) case 0x31: realy0=0;
20、/发光管 1开启 break; case 0x32: realy1=0;/发光管 2开启 break; case 0x33: realy2=0; /发光管 3开启 break; case 0x34: realy3=0;/发光管 4开启 break; case 0x35: realy4=0;/发光管 5开启 break; case 0x36: realy5=0; /发光管 6开启 break; case 0x37: realy6=0; /发光管 7开启 break; case 0x38: realy7=0; /发光管 8开启 break; case 0x39: beep=0;delay_ms(2
21、000);beep=1;delay_ms(2000);beep=0;delay_ms(2000);beep=1;/蜂鸣器响 /蜂鸣器 break; case 0x4f: p1=0; /全开 break; case 0x3f: temp1=p1; temp=temp1; check=1;break; default:flag=1; /其他指令定义为错误操作 break; /置位错误操作位为1 else if(commandbuf0=s)&(commandbuf1=h)&(commandbuf2=u)&(commandbuf3=t)/判断指令是否为关闭电器指令 switch(commandbuf4
22、) case 0x31: realy0=1; /关闭发光管1 break; case 0x32: realy1=1; /关闭发光管2 break; case 0x33: realy2=1; /关闭发光管3 break; case 0x34: realy3=1;/关闭发光管4 break; case 0x35: realy4=1;/关闭发光管5 break; case 0x36: realy5=1;/关闭发光管6 break; case 0x37: realy6=1; /关闭发光管7 break; case 0x38: realy7=1; /关闭发光管8 break; case 0x53:p1=0xff; /全关 break; default:flag=1;/其他指令定义为错误操作 break; /置位错误操作位为1 else flag=1;/如果发送的指令既不是open也不是shut就定义为错误操作/*/函数 void readstate;实现功能:将p0,p2口的状态转化为数组,/*/void readstate(void) uint bitcnt,i,j; for(bit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子测量技术在工业物联网中的应用考核试卷
- 半导体材料特性与制备考核试卷
- 玻璃纤维增强塑料的超声波焊接技术考核试卷
- 物业管理与风景区管理考核试卷
- 以上均为不重复的相关主题名称考核试卷
- 玻璃制品的微生物污染控制考核试卷
- 洗浴行业服务品质提升路径考核试卷
- 真空电子器件的场效应晶体管设计考核试卷
- 电气机械的建筑与土木工程考核试卷
- 船舶电气设备管理
- 【数学】第2课时 三角形的三边关系教学设计 2024-2025学年北师大版数学七年级下册
- 霍乱培训课件PPD
- 2025国药控股集团安阳公司(上市公司)招聘22人(河南)高频重点提升(共500题)附带答案详解
- 商业街可行性研究报告
- 2025年中考语文专题复习:写作技巧 课件
- 疫苗研发与效果评估-洞察分析
- 【MOOC】声乐作品赏析与演唱-扬州大学 中国大学慕课MOOC答案
- 2024-2025学年人教版八年级下册地理第五章综合测试卷(含答案)
- 康复治疗与护理管理制度
- 自来水公司安全生产课件
- PANTONE潘通色卡TPX颜色在线查询(1-2部分)
评论
0/150
提交评论