?? fangdao.c
字號:
}
receive_count=0;
AT_Command_Status=COMMAND_WAIT; //設置接收成功標志
send_count=0xff;timer_200S_cnt=0;
while(timer_200S_cnt<40&&(AT_Command_Status==COMMAND_WAIT))
{ if(strsearch("+CMGS:")) break;
else if(txd_rxd_bit) break;
system_sleep;
}
para_temp[0]=(num_tmp1/10)+0x30;para_temp[1]=(num_tmp1%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
Send_AT_Command(SMS_CMGD);
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
}
//======================================================================
//================進行SIM卡的電話本讀======================================================
//======================================================================
uchar PHONE_RD( ) //read_tmp=0x30+i; 要讀的電話號碼
{ uchar j;
Send_AT_Command(PHONE_READ);
send_count=0;
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
if(j=strsearch("+CPBR:")) //+CPBW: 1,"13818120592",129,"chia"
{ j=j+9;
do
{
para_temp[TMP_BUF++]= uart_buff[j++];
if( uart_buff[j]=='"')
{
return(TMP_BUF);
}
}while(j<=24);
}
else return(0);
}
//======================================================================
//========================進行SIM卡中的1到20條短信號碼的讀==============================================
//======================================================================
uchar READ_TEL(uchar r) //讀短信號碼1-20個
{ // uchar r;
para_temp[0]=(r/10)+0x30;para_temp[1]=(r%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
Send_AT_Command(SMS_CMGR);
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
send_count=0;
if(strsearch("+CMGR: 0,,0")) //+CMGR: 0,,0 沒有短信返回
{ return(FALSE);
}
else
{ if(txd_rxd_bit==1)
return(TRUE);
else return(FALSE);
}
}
void Initialize_Model(void) //PIN檢測
{
uchar i;
Sys_Init();
LED_INT1=0;
sbc_bit=0;
IO_IGT=0;
//INT_TMP2=1;
P0=0x01;
for(i=0;i<10;i++)
{//進行初始化,并顯示
Send_AT_Command(TC35_INIT);
// INT1=~INT1;
if(uart_buff[1]==0x0d&&uart_buff[0]==0x30)
//if(AT_Command_Status==COMMAND_OK)
{ break;}
if((i%4)==0) //開啟模塊
{
IO_IGT=1;
}
else if((i%2)==0)
{
IO_IGT=0;
}
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
}
for(i=0;i<20;i++)
{
if(Send_AT_Command(CHECK_PIN))
{//如有收到回應進行分析收到的信息,
uart_buff[receive_count]=0;
if(strsearch("READY")!=0)
break;
}
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
}
BELL=0;
IO_IGT=0;
Send_AT_Command(SMSS_ID);
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
Send_AT_Command(SMS_CNMI);
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
Send_AT_Command(SIM_ID);
timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
LED_INT1=1;
}
void Sys_Init(void)//話機啟動的初始化程序,包含鍵盤與定時器,串口等
{
//TH0=(65536-46080)/256;//重新裝入定時25mS的初值到TH0,TL0
//TL0=(65536-46080)%256;
//65536-(11.0592/12)*25MS*1000=To
//1ms定時
//11.0592/12 = 0.9216 M (記數頻率)
//1ms記數 921.6次
//16位 2^16 - x = 922 x=64614 FC66
//定時器里不斷放fc66,不用懷疑51定時器得到的 1ms的精確性嗎
TH0 = 0xB8;
TL0 = 0x00; //20ms的時鐘基準
//TH0 = 0xB1;
//TL0 = 0xE0; //20ms的時鐘基準
//串口中斷
TI=0;
RI=0;
SCON=0x50; //選用方式1
TMOD=0x20;
TMOD = (TMOD & 0xf0) | 1;//MODE 1
//TH1=0xe8; //波特率為9600
// TL1=0xe8;
TH1=0xfd; //波特率為9600
TL1=0xfd;
PCON=0x00; //倍頻0x80
IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1
TR1=1; //enable TIMER1
//TF0=0;
//PT0=1; //Set Timer0 interrupt as highest priority level'
// PT0=1; //Set Timer0 interrupt as highest priority level
ES=1;
TR0=1;
ET0=1;
ET1=0;
EA=1;
P0=0xC3;
P1=0xFE;
P2=0xFF;
P3=0xFF;
// P4=0xff;
timer_1S_cnt=0;
receive_count=0;
send_count=0xff; //表示禁止發送,可以接收
sync_count=0;
int_case=0;
ring_pin_flag=1;
IO_OUT=1;
//INT_TMP1=0;
//INT_TMP2=0;
}
uchar Send_AT_Command( uchar type)
//撥號時號碼放在phone.number
//其他用para_temp
{
AT_Command_Type=type;
send_count=0;
switch(type)
{
case VOICE_DIAL: //語音撥號
strcpy(uart_buff,"ATD");
strcat(uart_buff,para_temp);
// strcpy(uart_buff,"ATD10086;");
//strcat(uart_buff,";");
break;
// case RESET_TC35: //復位TC35
// strcpy(uart_buff,"AT+CFUN=1,1");
// break;
case CHECK_PIN: //檢查當前是否要輸入PIN碼
strcpy(uart_buff,"AT+CPIN?");
break;
case TC35_INIT: //TC35初始化命令
strcpy(uart_buff,"ATE0V0");
break;
case TC35_SBC: //檢查信號
strcpy(uart_buff,"AT^SBC?");
break;
case VOICE_HANDSET: //手柄方式
strcpy(uart_buff,"AT^SNFS=4^SNFO=2,8000,14000,20000,26000,32700,0,512^SNFI=5,10000");
break;
case SIM_CARD_CHECK://查詢是否有插入SIM卡 ^SCKS: 0,1
strcpy(uart_buff,"ate0v0^scks?");
break;
case SIM_ID:
strcpy(uart_buff,"AT+CMGF=1");
break;
case SMSS_ID:
strcpy(uart_buff,"AT^SSMSS=1");
break;
case HOOKOFF: //掛機,停止通話
strcpy(uart_buff,"AT+CHUP");
break;
case SMS_CNMI: //SMS 接收方式,
strcpy(uart_buff,"AT+CNMI=1,1");
break;
case TC35_VERSION: //讀取TC35的版本號
strcpy(uart_buff,"AT+GMR");
break;
case PHONE_WRITE: //存電話號碼
strcpy(uart_buff,"AT+CPBW=");
strcat(uart_buff,para_temp);
break;
case PHONE_SET:
strcpy(uart_buff,"AT+CPBW=");
strcat(uart_buff,para_temp);
break;
case PHONE_READ: //讀電話本
strcpy(uart_buff,"AT+CPBR=");
strcat(uart_buff,&read_tmp);
uart_buff[9]=0x0d; uart_buff[10]=0x0a;
uart_buff[11]=0x00; uart_buff[12]=0x00;
break;
case SMS_CMGR: //讀一個短信
strcpy(uart_buff,"AT+CMGR=");
strcat(uart_buff,para_temp);
break;
case SMS_CMGS: //寫一個短信
strcpy(uart_buff,"AT+CMGS=");
strcat(uart_buff,para_temp);
break;
case SMS_CMGD: //刪除一個短信
strcpy(uart_buff,"AT+CMGD=");
strcat(uart_buff,para_temp);
break;
// case CMGS_MUB: //發報警短信內容
// strcpy(uart_buff,para_temp);
// break;
case AT_COMMAND:
break;
default:
receive_count=0;
return(TRUE);
}
ES=1;
strcat(uart_buff,"\x0d\x00");//在命令后加入CR
send_count=0; //設置發送指針
receive_count=0;
AT_Command_Status=COMMAND_WAIT; //設置接收成功標志
txd_rxd_bit=0;
at_send_bit=0;
TI=1; //開始發送數據
RI=0; //清除接收標志
if((type==SMS_CMGR)||(type==MONITOR_ID))
{
while (timer_200S_cnt<15)
{
if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
else if(type==SMS_CMGS)
{ while (timer_200S_cnt<5)
{
if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
else
{
while (timer_200S_cnt<15)
{
system_sleep;
if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
return(FALSE);
}
void main(void)
{
Initialize_Model();
system_server=SYS_SMSR;
receive_count=0;
sms_tmp=0;
system_tep=1;
while(1)
{
//-----------查詢1到20條中的短信,只要有短信就處理------------------------------------------
if(system_server==SYS_SMSR) //讀1-20條短信
{
read_sms(); //timer_200S_cnt=0;
P0=0x00;
}
//----------------一些短信的發送---------------------------------------------------
else if(system_server==SYS_SMSS) //發送小區信息
{ LED_INT3=0;
send_sms();
system_server=SYS_SMSR;
LED_INT3=1;
}
//---===============外部中斷進行 報警狀態=================================================================
else if(system_server==SYS_RING) //設備被盜功能開啟
{ LED_INT4=0;
system_server=SYS_SMSR;
pickup_pin_flag=1; ring_pin_flag=1;
if(system_tep)
{ sms_tmp= smss_alarm;
send_sms();
}
system_server=SYS_SMSR;
LED_INT4=1;
}
//===================設置報警時的延時時長==================================================
else if(system_server==SYS_ALARM)
{
sms_tmp=smss_tel;
system_server=SYS_SMSS;
}
else if(system_server==SYS_START)
{
LED_INT5=0;
sms_tmp=smss_atart;
send_sms();
system_server=SYS_SMSR;
LED_INT5=1;
}
//========================用短信進行設備參數檢查=============================================================
else if(system_server==SYS_PARA) //設備參數查詢
{
sms_tmp=smss_para;
system_server=SYS_SMSS;
}
//==========================進行報警時的電話號碼和手機號的設置===========================================================
else if(system_server==SYS_TEL) //防盜電話號碼設置
{ //存儲位于SIM卡的4,5,6三個位置
sms_tmp=smss_tel;
system_server=SYS_SMSS;
}
//==================//電池電量不充報警=================================================================
else if(system_server==SYS_SBC) //電池電量不充報警
{ sms_tmp=smss_sbc;
system_server=SYS_SMSS;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -