📄 main.c
字号:
#include".\MBTD.h"
#include".\Function.h"
#include".\Init.h"
#include".\EEPROM.h"
enum DIAL_STATE RUN_STATE;
unsigned char tmp_buf[16];
unsigned char m;
unsigned char sever_number_select;
unsigned char time_counter;
bit car_bin_flg;
unsigned char code digit_a[8]={0x09,0x0a,0x02,0x07,0x04,0x08,0x04,0x08};
unsigned char code digit_b[8]={0x09,0x04,0x05,0x02,0x0a,0x06,0x03,0x04};
unsigned char code digit_d[8]={0x09,0x08,0x05,0x02,0x0a,0x06,0x06,0x05};
unsigned char code digit_Germ[13]={0x04,0x09,0x07,0x01,0x01,0x02,0x01,0x08,0x04,0x0a,0x04,0x01,0x04};
unsigned char code digit_Chongqi[12]={0X09,0x0a,0x02,0x03,0x08,0x06,0x03,0x05,0x01,0x07,0x08,0x07};
unsigned char code sever_password[6]={1,2,3,4,5,6,};
unsigned char code server_number[2][8]={
{0x06,0x08,0x07,0x06,0x06,0x07,0x08,0x08},
{0x06,0x08,0x02,0x04,0x09,0x09,0x0a,0x0a}
};
extern char match_num;
typedef enum {DIAL_SERVER,DIAL_CAR_BIN,DIAL_DEST,DIAL_END,NULL_ACT}ACT_TAB ;
ACT_TAB ACTION_TAB; //IDD 拨号控制
unsigned int sector_addr;
void main()
{
TMOD=0; //timer 0 mode 0;timer 1 mode 0
TL1=V_T1&0xff; //V_T1=0xD10C
TH1=V_T1>>8;
TL0=V_T0&0xff; //V_T0=0xf501
TH0=V_T0>>8;
RCAP2H=0xff;
RCAP2L=0xd1;
TH2=0xff;
TL2=0xd1;
SCON=0x50; //mode 1;enable receiving
T2CON=0x34; //select T2 as baudrate generator;enable timing;auto reload mode
TR2=ENABLE;
TR1=ENABLE; //start timer1
ET1=ENABLE; //enable timer 1 interrupt
EX0=1;
IT1=1;
EX1=1;
IT2=1;
PX2=1;
EX2=1;
EA=ENABLE;
RUN_STATE=READY;
oe_9170_2=0;
oe_9170_1=0;
drop_count=0;
red_led=0;
WDT_CONTR = 0x35;
Send_byte(0x55);
while(1)
{
//------------------
//EA=0;
WDT_CONTR = 0x35;
// EA=1;
//-------------------------------io口状态判断-------------------------------------
if(scan_end_flg) //check the offhook
{
scan_end_flg=0;
off_hook_out=(off_hook_now&off_hook_buf)|(off_hook_bef&off_hook_now)|(off_hook_bef&off_hook_buf);
off_hook_buf=off_hook_now;
off_hook_bef=off_hook_out;
}
if(ring_end_flg)
{
ring_end_flg=0;
ring_out=(ring_now&&ring_buf)|(ring_bef&&ring_now)|(ring_bef&ring_buf);
ring_buf=ring_now;
ring_bef=ring_out;
}
//-----------------------------------------------------------------------------
if(ring_out) //脉冲间隔
{
ring_flg=1;
ring_check_js=0;
}
if(remote_rs_flg)
{
LED=0;
// EX1=1;
}
else
{
if(!wake_up_flg)
LED=1;
// EX1=0;
// IE1=0;
}
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
if(remote_get_flg) //有红外信号
{
remote_get_flg=0;
remote_control(); //按键判断
if(remote_rs_flg&&remote_alarm_flg&&alarm_start) //alarm
{
infrared_moniter_flag=1; //alarm flag
remote_alarm_flg=0;
adress_buf=0;
sys_20sec_js=0;
sys_20second_flg=1;
if(!alarm_first)
{
alarm_first=1;
alarm_js=0;
alarm_enable=0;
}
}
remote_alarm_flg=0;
}
if(valid_flg) //启动ALARM 功能
{
dial_flg=1;
valid_flg=0;
split=0;
line_hook=0;
dial=1;
tx_time=200;
while(tx_time);
// dial_num( BIN_ADDR+0x10); //拨号
dial_num(ALARM_ADD);
resp_run_flg=1;
dtmf_send_buf=0;
}
if(resp_ok) //时间到挂机
{
dial_flg=0;
resp_ok=0;
split=1;
line_hook=1;
dial=1;
}
//----------------------------------------------------------
if(infrared_moniter_flag&&sys_20second_flg&&alarm_enable) //alarm action
{
EX1=0;
IE1=0;
sys_20second_flg=0;
infrared_moniter_flag_buf=0;
Eme_Alarm_action(ALARM_ADD);
tx_time=100;
while(tx_time);
infrared_moniter_flag_buf=1;
EX1=1;
IE1=0;
}
if(remote_calling_flg&&sys_20second_flg)
{
EX1=0;
IE1=0;
sys_20second_flg=0;
remote_calling_flg_buf=0;
Eme_Alarm_action(EMEGE_ADD);
tx_time=100;
while(tx_time);
remote_calling_flg_buf=1;
EX1=1;
IE1=0;
}
if(DTMF_get_flg) //用户接听电话并且有DTMF按下
{
DTMF_get_flg=0;
// red_led=!red_led;
if(infrared_moniter_flag)
{
//flag_941=1;
EX1=0;
IE1=0;
dial_dtmf(A_941HZ, 200,200);
dial_dtmf(A_941HZ, 200,200);
// WDT_CONTR=0x35;
dial_dtmf(A_941HZ, 200,200);
dial_dtmf(A_941HZ, 200,200);
EX1=0;
IE1=0;
}
if(remote_calling_flg)
// flag_1633=1;
{
EX1=0;
IE1=0;
dial_dtmf(A_1633HZ, 200, 200);
dial_dtmf(A_1633HZ, 200, 200);
// WDT_CONTR=0x35;
dial_dtmf(A_1633HZ, 200, 200);
dial_dtmf(A_1633HZ, 200, 200);
EX1=1;
IE1=0;
}
infrared_moniter_flag=0;
remote_calling_flg=0;
DTMF_get_flg=0;
remote_rs_flg=0;
calling_run_flg=0;
alarm_start=0;
adress_buf=0;
remote_alarm_flg=0;
line_hook=1;
split=1;
}
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
//Send_byte(RUN_STATE);
/***********************************************************/
switch(RUN_STATE) //状态判断
{
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
case READY: //READY状态
//----------------------------------------
if(off_hook_out)
{
if(ring_flg)
RUN_STATE=RUN;
else
{
RUN_STATE=WAIT_DIAL;
split=0;
line_hook=0;
}
}
//-----------------------------------------
break;
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
case WAIT_DIAL: //等待用户拨号
//----------------------------------------
if(!off_hook_out)
{
RUN_STATE=READY;
split=1;
line_hook=1;
drop_count=0;
program_flg=0;
dial=1;
first_key=0;
time_out_flg=0;
start_flg=0;
key_get_js=0;
send_count_buf=0;
for(m=0;m<16;m++)
drop_buf[m]=0xff;
}
//-----------------------------------------
if(dorop_read_flg)
{
dorop_read_flg=0;
//-------------------------program
if(program_dialer()) //变成状态判断
{
RUN_STATE=PROGRAM;
drop_count=0;
program_flg=0;
wake_up_flg=1;
//remote_rs_flg=0;
//LED=1;
ack_ok();
}
//------------------------------remote
if(drop_buf[0]==0x00 && drop_buf[1]==0x0b)
{
RUN_STATE=REMOTE;
//drop_buf[0]=0xff;
}
//----------------------------------------------
if(drop_buf[0]==0x0b&&drop_buf[1]==0x0b)
{
RUN_STATE=ESRASE;
}
//----------------------------------IDD and Local call
if(drop_count<3&&program_flg)
program_flg=0;
if(program_flg|time_out_flg)
{
//if(time_out_flg)
// Send_byte(0x99);
if(match_tab_check()) //判断是否为IDD
{
car_bin_flg=1;
ACTION_TAB=DIAL_SERVER;
sys_5sec_js=0;
sys_5sec_flg=0;
RUN_STATE=IDD_CALL;
}
else //LOCAL CALL
{
RUN_STATE=LOCAL_CALL;
}
}
}
break;
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
// case RECEIVE:
// break;
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
case RUN:
if(!off_hook_out)
{
RUN_STATE=READY;
split=1;
line_hook=1;
drop_count=0;
program_flg=0;
dial=1;
first_key=0;
time_out_flg=0;
start_flg=0;
key_get_js=0;
send_count_buf=0;
for(m=0;m<16;m++)
drop_buf[m]=0xff;
}
break;
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
case PROGRAM:
if(program_flg)
{
program_flg=0;
dialer_program();
}
if(!off_hook_out)
{
RUN_STATE=READY;
split=1;
line_hook=1;
drop_count=0;
dial=1;
program_flg=0;
first_key=0;
time_out_flg=0;
dorop_read_flg=0;
start_flg=0;
key_get_js=0;
for(m=0;m<16;m++)
drop_buf[m]=0xff;
wake_up_flg=0;
LED=1;
remote_get_flg=1;
remote_key=KEY_C;
send_count_buf=0;
}
break;
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&777&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
case REMOTE:
if(program_flg)
{
program_flg=0;
if(remote_check_password(&drop_buf,R_PASSWORD))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -