📄 final_mahesh_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 + -