⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 final_mahesh_no.c

📁 LPC2138 application c program of fire sensor and GSm interfacing, to send sms to predefined mo. no.
💻 C
字号:
/***********************************************************************
*   fire_alert_sys_main.c									  
************************************************************************/

#include <board.h>
#include<LPC21xx.h>
#include<print.h>
#include<lcd.h>

#define SevenLedDir *IODIR0 = *IODIR0 |0X007F8000

#define SevenLedOn  *IOSET0 = *IOSET0 |0X007F8000
#define SevenLedOff *IOCLR0 = *IOCLR0 |0X007F8000

#define  linefeed 	0x0D 
#define  send_cmd   0x00
#define  ent_no 	0x01
#define  snd_sms 	0x02
#define  dial_cmd 	0x00 
#define  ent_cmd    0x01
#define  no		 	0x00 
#define  yes        0x01

unsigned char recv_ch[100];	
unsigned char uart_int_flag;
unsigned char sms_flag;
unsigned char dial_flag;
unsigned char sms_start;	
unsigned char StringGPS[75];
unsigned char LedStatus[4];

void PollGSM(void);
void recv_irq(void);
void led_blink(void);
void dela(void);
void delay(void);
void Ack(void);
void init_com(void);
void sms_alert(void);
int c1_putchar (int );
int c2_putchar (int );
int c1_getchar (void);
int c2_getchar (void);
unsigned char sub(unsigned char);
void call_alert(void);
  
  
void ISRHandler()__attribute__((interrupt("IRQ")));


void txd()   
{
	unsigned char count;
	unsigned char temp;
	count=0;
	q_printf("i");
	while((*U0LSR & 0x20)!=0x20);
	//===========================================
	temp=*U0RBR;
	if(temp=='R')
	{
		recv_ch[count++]=temp;
		do
		{
			if(*U0LSR & 0x01)
			recv_ch[count++]=*U0RBR;											
		}while(recv_ch[count-1]!= '\r');
										//c2_putchar(temp);
	}				
	//===========================================
	if(recv_ch[1] == 'I')
	{
		if(recv_ch[2] == 'N')
		{
			if(recv_ch[3] == 'G')	
			{
				q_printf("%c",27); //0x1b-> esc
				q_printf("AT\r");
				for(count=0;count<2;count++)							
					led_blink();
				q_clrscreen();
				q_displaylcd("ring",4);
			}
		}
	}
	q_printf("%c",recv_ch[0]);
	q_printf("%c",recv_ch[1]);
	q_printf("%c",recv_ch[2]);
	q_printf("%c",recv_ch[3]);
	*U0THR=*U0RBR; 
}
void ISRHandler(void)
{
	unsigned char tmp;
	tmp=*U0IIR;
	while((*U0LSR &0x1)!=0x1);//see LSR in manual page
	txd();
	*VICVectAddr=0 ; 
}


void  UART_IRQInit()
{
	*VICVectCntl0=0x20|6;//VIC Channel of UART0=6 
	*VICIntEnable=0x1<<6;;//controls which of the 32 interrupt requests and software interrupts contribute to IRQ.  
							//For UART0
	*VICVectAddr0=(unsigned int)ISRHandler;
	//PINSEL CONFIGURATION
	*PINSEL0 &=0XFFFFFFF0;
	*PINSEL0 |=0X05;
	// BAUD RATE GENERATION
	*U0LCR=0X80;
	*U0DLL=0X62;  
	*U0DLM=0X0;
	//MODE CONFIGURATION
	*U0LCR=0X03;
	//To Enable Interrupt
	*U0IER=0x1;
}

void init_com()         // Initialize Serial Interface       
{
	*PINSEL0 = *PINSEL0 | 0x00000005;       // Enable RxD1 and TxD1              /
	*U0LCR = 0x83;                          // 8 bits, no Parity, 1 Stop bit     /
	//*U0DLL = 24;                          // 38400 Baud Rate @ 15MHz VPB Clock  /
	*U0DLL = 97;							// 9600 Baud Rate @ 15MHz VPB Clock  /
	//*U0DLL = 195;                         // 4800 Baud Rate @ 15MHz VPB Clock  /
	*U0LCR = 0x03;                          // DLAB = 0                          /
	

	*PINSEL0 = *PINSEL0 | 0x00050000;    	// Enable RxD1 and TxD1              
	*U1LCR = 0x83;                          // 8 bits, no Parity, 1 Stop bit     
	*U1DLL = 97;                            // 9600 Baud Rate @ 15MHz VPB Clock  
	//*U1DLL = 195;                            // 4800 Baud Rate @ 15MHz VPB Clock  
	*U1LCR = 0x03;                          // DLAB = 0                          
}


void sms_alert(void)
{	
	q_printf("AT\r");
 	dela();
 	q_printf("AT\r");
 	dela();
 	//--------------------
	q_printf("AT+CMGS=");//sms
	q_printf("%c",'"');
	q_printf("+91");
	//**************Recipt Mo. number
	q_printf("9890603950");//mahesh
	//******************************
	q_printf("%c",'"');//sms
	q_printf("%c",13);// ENT
	//------------------------

	dela();
	dela();
	dela();
	dela();
	dela();
	//-------------------------
	q_printf("FIRE ALEART FROM POSTAL ADDRESS- XYZ!");//sms
	q_printf("%c",26);//sms	
	
}

void call_alert()
{
		// ***************for calling
	q_printf("ATD");//CALL
	// ************************enter the no.
	//q_printf("9766514017;");//CALL//sim
	q_printf("9890603950;");//mahesh
	// **************************************
	q_printf("%c",13);// ENT//CALL
}


int main(void)
{
	unsigned int adcdata;
	unsigned int Ldr;
	unsigned int Pot;
	unsigned char i;
	unsigned char fire_flag;
	unsigned long int cmd_del;
	
 	*IODIR0=0x07F8000;
 		   
 	fire_flag = no;
    sms_flag = send_cmd;
    dial_flag = dial_cmd;
    uart_int_flag=no; 
    UART_IRQInit();
	init_com();
 	//q_lcdinit(SPIRIT);
 	q_lcdinit(TITAN);
	
	q_clrscreen();
	q_displaylcd("FIRE ALEART",11);
	
    *PINSEL2 = *PINSEL2 & 0xFFFFFFF7;
	*IODIR1 = *IODIR1 |0x00FF0000;
	
	for(i=0;i<=3;i++)
 	{
 		SevenLedDir;
		SevenLedOn;
		delay();
		dela();
		SevenLedOff;
		delay();
		dela();
	}
	
 	q_printf("AT\r");
 	dela();
 	q_printf("AT\r");
 	dela();
 	q_printf("AT+CMGF=1\r");
 	dela();
 	q_printf("AT+CNMI=1,2,0,0,0\r");
 	dela();
 	q_printf("AT\r");
 	dela();
 	
	while(1)
	{
		*PINSEL1 = *PINSEL1 & 0XFCFFFFFF; 		//pinselect for  pot.
		*PINSEL1 = *PINSEL1 | 0X01000000;
		*ADCR = 0X01210302; 
		for(i=0;i<10;i++)
		{
			if(*ADDR & 0X80000000)
			{
				adcdata = (*ADDR & 0X0000FFC0); 	//10 bit
				adcdata = adcdata >> 6;				// to get data from lsb
				Pot=adcdata;
			}
		}
		*PINSEL1 = *PINSEL1 & 0XFFF3FFFF; 			//pinselect for LDR.
		*PINSEL1 = *PINSEL1 | 0X00040000;
		*ADCR = 0X01210310;  
		for(i=0;i<10;i++)
		{
			if(*ADDR & 0X80000000)
			{
				adcdata = (*ADDR & 0X0000FFC0);
				adcdata = adcdata >> 6;
				Ldr = adcdata;
			}
		}
		if(Ldr > 500)
		{
			SevenLedDir;
			SevenLedOn;
			if(fire_flag == no)
			{
				sms_alert();
				for(cmd_del=0;cmd_del<= 500;cmd_del++)
					dela();
				call_alert();
				fire_flag = yes;
			}
		}
		else
		{
			fire_flag = no;
			SevenLedDir;
			SevenLedOff;
		}
	}
	return 0;
}

int c1_putchar (int ch)  	                  // Write character to com Port 1    
{

	*U0THR = ch;				// Transmit the data 
	while (!(*U0LSR & 0x20));	 // Wait untill Transmit buffer is empty 
	  	return 0;					// Success	
}

int c2_putchar (int ch)  	                  // Write character to com Port 2  
{	
	*U1THR = ch;				// Transmit the data 
	while (!(*U1LSR & 0x20));	 // Wait untill Transmit buffer is empty 
	  	return 0;					// Success	
}

int c1_getchar (void)                       // Read character from com Port 1   
{
	while (!(*U0LSR & 0x01));		// Wait untill Receive buffer is full 
	return (*U0RBR);				//Return the read value	
}

int c2_getchar (void)                       // Read character from com Port 2  
{
	while (!(*U1LSR & 0x01));		// Wait untill Receive buffer is full 
	return (*U1RBR);				// Return the read value		
}

void delay()
{
	unsigned long i;
	for(i=0;i<100000;i++);
}

void led_blink(void)	
{
	SevenLedDir;
	SevenLedOn;
	delay();
	SevenLedOff;
	delay();
}

void dela(void)
{
	unsigned long int i,d;
	for(i=0;i<100;i++)
	{
		for(d=0;d<100;d++);
	}
}



unsigned char sub(unsigned char z)				// display the keys on LCD.
{
	
	if((z>=0xA||z<=0xF))
	{
		switch(z)
		{
			case 0x0A:
						z=0x41-0x30;
						break;
			case 0x0B:
						z=0x42-0x30;
						break;
			case 0x0C:
						z=0x43-0x30;
						break;
			case 0x0D:
						z=0x44-0x30;
						break;
			case 0x0E:
						z=0x45-0x30;
						break;
			case 0x0F:
						z=0x46-0x30;
						break;
			default:
						break;						
		}
	}
	return(z);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -