基于单片机的GSM防盗防火报警器设计 下载本文

基于单片机的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