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

📄 main.c

📁 功能强大的拨号器
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -