基于单片机的GSM防盗防火报警器设计
#include \#include\#include \
void ReadWater_dat() { }
void AT() {
Uart_Sends(ATE0); Delay_1ms(50); Uart_Sends(ATCN); Delay_1ms(50); Uart_Sends(CMGF); Delay_1ms(100); Uart_Sends(CREG_CMD); Delay_1ms(50); }
void Send_SMS(void) {
static uint AD_DAT=0; float ad_buf=0; static uchar i=0; if(i<5) { } else { }
i=0;
// 法
ad_dat1=(uchar)(AD_DAT/5); ad_buf=(float)(ad_dat1*39.22); Nd_dat=(uint)(ad_buf); AD_DAT=0;
// 算
i++;
AD_DAT+=A_D();
// 波
// 滤
Uart_Sends(\设置中文方式发送 Delay_1ms(800);
31
基于单片机的GSM防盗防火报警器设计
// {
Uart_Sends(\Delay_1ms(1000);
Uart_Sends(\
//
//
//福建南平移动短信服务中心号码
8613800459500
//18539289790
// 8135299897F0
13115599358
13800391500 //3108301905f0
3111559953F8
Delay_1ms(1000);
switch (yy) // case 0 :
Uart_Sends(\ break; //温度报警 case 1 :
Uart_Sends(\ break;
//烟雾报警
// case 2 :
Uart_Sends(\ break;
//门已被撬,请注意!
case 3 :
Uart_Sends(\ break; } }
void Control() {
//人防报警
//8119098243f4
6E29 5EA6 8FC7
//8102631584f1 //3191487963f5
//18919028344 张玮
Uart_Send(0x1a);//以0x1a来结束,表示内容结束,发送短信
9AD8 FF01 8BF7 6CE8 610F FF01 温度过高,请注意!
// 70DF 6D53 5EA6
// 5EA6 548C 70DF
9AD8 FF0C 8BF7 6CE8 610F FF01 烟浓度高, 请注意! 6D53 5EA6 5747 8FC7 9AD8
温度和烟浓度均过高
if(((flag_set)&&(hw==0))||((Nd_dat>L_Hum)&&(!set_flag))) {
{
BEEP=0;flag_set=0; yy=3; Send_SMS(); Delay_1ms(1000); //发送短信人防报警
}
32
if((flag_set)&&(hw==0))
基于单片机的GSM防盗防火报警器设计
if(Nd_dat>L_Hum) { BEEP=0; yy=1; Send_SMS(); Delay_1ms(1000); //发送短信 烟雾报警
}
} else { BEEP=1;
}
}
/************主程序**************/ void main() { // AT(); init_1602(); Uart_init(); while(1) { ReadWater_dat(); display(); keyscan(); Control();
}
}
void Uart_init() { TMOD=0x21; SCON=0x40; PCON=0x00; TH1=0xfd; TL1=0xfd; TR1=1; /*REN=1;
EA=1; //开总中断
33
基于单片机的GSM防盗防火报警器设计
}
ES=1;*/
//发送一个字节数据到串口 void Uart_Send(char dat) { }
//发送一串字符到串口
void Uart_Sends(char* data_at) { }
#define uchar unsigned char
#define uint unsigned int sbit EN=P2^7; sbit RS=P2^5; sbit RW=P2^6;
uchar LCD1602_Table[]=\//LCD1602显示标尺 //0123456789abcdef uchar code DIS_TAB1[]={\ %uchar code DIS_TAB2[]={\ ----ppm --- \
//uint W_ad=0;
//************************************************************************** void DelayM(unsigned int a) //延时函数 1MS/次 {
SBUF=dat;//将待发送数据写入发送缓冲器
while(TI==0)//若发送中断标志位没有置1(正在发送),就等待
; //空操作
TI=0;//用软件将TI清零
unsigned char cnt=0; while(*(data_at+cnt)) { }
Uart_Send(*(data_at+cnt)); cnt++;
//判断一串数据是否结束
unsigned char i; while( --a != 0) {
34
基于单片机的GSM防盗防火报警器设计
for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
//i 从0加到125,CPU大概就耗时1毫秒
}
}
void WRITE_LCD1602_DAT(uchar date) { EN=0; RS=1; P0=date; EN=0; DelayM(5); EN=1;
}
void WRITE_LCD1602_COM(uchar date) { EN=0; RS=0; P0=date; EN=0; DelayM(5); EN=1;
}
void init_1602() { unsigned char i; RW=0;
WRITE_LCD1602_COM(0x38); WRITE_LCD1602_COM(0x0c); WRITE_LCD1602_COM(0x06); WRITE_LCD1602_COM(0x01); WRITE_LCD1602_COM(0x80); for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB1[i]); WRITE_LCD1602_COM(0x80+0x40); for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB2[i]); // WRITE_LCD1602_COM(0x80+0x40+9);
}
void display() {
35