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

📄 switch.h.bak

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 BAK
字号:
#ifndef _SWITCH_H
#define _SWITCH_H

#include<reg51.h>
#include "intrins.h"	//可以用_nop_();
//Type difine*****************************
typedef unsigned char uint8;
typedef unsigned char UCHAR;
typedef unsigned int  uint16;
typedef unsigned int  WORD;
typedef unsigned long uint32;
typedef unsigned long DWORD;

//应用系统配置*****************************
#define	ExtTelNum								8								//定义分机数目

#define	MaxNumAtRing						3								//同时响铃的最多分机数目
#define	RingTime								10	 						//振铃次数
#define	RINGTIMELENGTH					(1000/TimeTick)	//1000ms=1s 振铃时间
#define	RINGQUIETTIMELENGTH			(4000/TimeTick)	//4000ms=4s 振铃间隔时间

#define	OUTSIDETELNUM						2								//外线数目 可扩展到四路

#define	DTMF_DecordResouceNum		2								//DTMF解码芯片数目
#define	DTMF_DecordResouce_1		5								//DTMF解码信号输入在8816中的位置 IC_15 8816_Y5 
#define	DTMF_DecordResouce_2		6								//															 IC_16 8816_Y6 

#define COMMUNICATIONGROUPNUM		4								//同时最多通话组

#define	sp_TakeLineAtHome				00							//在系统参数数组中的位置,在家状态下响铃数目
#define	sp_TakeLineOutside			01							//在系统参数数组中的位置,离家状态下响铃数目
#define	sp_SystemState					02							//系统状态

#define	c_TakeLineAtHome				16							//系统默认参数
#define	c_TakeLineOutside				16							//系统默认参数
#define	c_SS_none								0								//系统状态 正常状态 没事发生
#define	c_SS_intoautosystem			1								//内线进入智能家居系统	
#define	c_SS_inautosystem				2								//内线处于智能家居系统

#define	GET_RINGING_TEL					1								//按 "# + 1" 代接正在振铃的电话
#define	ENTER_AUTOSYSTEM				2								//按“#+2”从内线进入智能家居系统
#define	EXT_FLASH_TIME					500							//闪断时间必须小于500*2ms
#define	KEY_PRESS_TIME					250							//按键延时250*2ms
//时间常数*********************************
		//用于串口波特率部分
#define   BoradRateUse_T2		
#define		BoradRate				9600.0						//使用浮点数计算精确
#define		CrystalRate			24000000.0				//使用浮点数计算精确
#define		ProfitRate_T1		(char)(256-(CrystalRate/(12*BoradRate*16)))
#define		ProfitRate_T2		(int)(65536-(CrystalRate/(2*BoradRate*16))+1)

		//用于系统时间,定时5MS			
#define		TimeTick				2									//系统时间片定义 单位ms

#if				TimeTick==1
#define		SystemTimeConst			(int)(65536-(CrystalRate/12000)*1)
#endif

#if				TimeTick==2
#define		SystemTimeConst			(int)(65536-(CrystalRate/12000)*2)
#endif

#if				TimeTick==3
#define		SystemTimeConst			(int)(65536-(CrystalRate/12000)*3)
#endif
//hardware interface***********************
sfr				PORT						=0x80;	//P0口
extern		idata UCHAR			PORT_STORE; 
sbit			EnableE2ROM			=P2^0;
sbit			EnDTMFCreate		=P2^1;
sbit			EnDTMFDecordOut2=P2^2;	//IC16
sbit			EnDTMFDecordOut1=P2^3;	//IC15
sbit			EnRingPort			=P2^4;
sbit			EnTakeLine			=P2^5;
sbit			EnDetectHold		=P2^6;
sbit			EnDetectRing		=P2^7;

sbit			CD22100_A				=P1^0;
sbit			CD22100_B				=P1^1;
sbit			CD22100_C				=P1^2;
sbit			CD22100_D				=P1^3;
sbit			CD22100_DataIn	=P1^4;
sbit			CD22100_Storbe	=P1^5;
sbit			DTMF_Clk				=P1^6;
sbit			DTMF_Data				=P1^7;


sbit			SoundSwitch_x0	=P0^0;
sbit			SoundSwitch_x1	=P0^1;
sbit			SoundSwitch_x2	=P0^2;
sbit			SoundSwitch_x3	=P0^3;

sbit			SoundSwitch_y0	=P0^4;
sbit			SoundSwitch_y1	=P0^5;
sbit			SoundSwitch_y2	=P0^6;

sbit			SoundSwitchData	=P0^7;
sbit			SoundSwitchStorbe =P3^5;


sbit			LED							=P3^4;

//89C52特殊寄存器定义************************
sfr				T2CON					=0xc8;
sfr				T2MOD					=0xc9;
sfr				RCAP2L				=0xca;
sfr				RCAP2H				=0xcb;
sfr				TL2						=0xcc;
sfr				TH2						=0xcd;

sbit			TR2						=T2CON^2;

sfr					RCON				=0x85;	//SM89516A 用于控制内部扩展的RAM
#define			RCON_Bank0			0;	//每个bank为256个byte		
#define			RCON_Bank1			1;
#define			RCON_Bank2			2;

sfr					SCONF				=0XBF;
#define			WatchDogEnable	0x80;
#define			ExtRamEnable		0x02;

sfr					P4					=0xD8;
sbit				dialog_open	=P4^0;
sbit				dialog_take	=P4^1;
sbit				dialog_call	=P4^2;

//Rs232.c函数列表****************************
void	rs232loop();
void	Rs232Init(); 
void	rs232write(UCHAR watch_data);
UCHAR ReadCCR(UCHAR item);
void	WriteCCR(UCHAR item,UCHAR num);
UCHAR ReadCCS(UCHAR item);
void	WriteCCS(UCHAR item,UCHAR num);
UCHAR ReadSYSTEM(UCHAR item);
void	WriteSYSTEM(UCHAR item,UCHAR num);
void	CCSInit();
void	CCRInit();

//TelOperate函数列表**************************
void	TelOperateInit();
void	TelOperateLoop();
void 	ExtTelCheck();
char	ExtTelRing(UCHAR RingTel);
void	RingTimeTick();
char	ExtTelStopRing(UCHAR StopRingTel);
//void  ResourceWatch();
void 	OutsideTelRingCheck();
void	TakeOutsideLine(UCHAR OutsideLineNum);
void	HoldOutsideLine(UCHAR OutsideLineNum);
void  ReleaseOutsideTelRingCheckRes(UCHAR linenum);

//SoundInTel.c函数列表*************************
void 	SoundInTelInit();
void	ConnectTowPoint(UCHAR point_x,UCHAR point_y);
void	CutTowPoint(UCHAR point_x,UCHAR point_y);
void	DecordDTMF();
void  StarDecordDTMF(UCHAR	SingleAddress);
void	ReleaseDTMFRes(UCHAR originresID);
UCHAR GetDTMFResNum(UCHAR originresID);
void	ConnectTowPoint_CD22100(UCHAR x,UCHAR y);
void	CutTowPoint_CD22100(UCHAR x,UCHAR y);
void  DTMFSend();
void	DealHintSound();
void  SetExtTelQuietSound(UCHAR telnum);
void  SetExtTelErrorSound(UCHAR telnum);
void  SetExtTelWaitSound(UCHAR telnum);
UCHAR	ReadHintSound(UCHAR tel,UCHAR item);
void	WriteHintSound(UCHAR tel,UCHAR item,UCHAR num);

UCHAR	ReadDTMF_Decord(UCHAR res,UCHAR item);
void	WriteDTMF_Decord(UCHAR res,UCHAR item,UCHAR num);

UCHAR	Readsoundway(UCHAR x,UCHAR y);
void	Writesoundway(UCHAR x,UCHAR y,UCHAR num);

void	SoundWayLoop(void);
#define	ON																0xff
#define	OFF																0

#define	dtmfdecord_state									0
#define	dtmfdecord_res										1
#define	dtmfdecord_length									2
#define	dtmfdecord_datastar								3

#define	TYPE															0		//数组中的数据安排顺序
#define	STATE															1
#define	TIMEH															2
#define	TIMEL															3
#define	STATE_ON													1		//处于开状态
#define	STATE_OFF													0		//处于关闭状态
#define	HintSoundType_quiet								0		//正常状态,没有提示音
#define	HintSoundType_error								1		//出错状态,没有提示音
#define	HintSoundType_wait								2		//通话等待状态,没有提示音
#define	HintSound_350MS										175	//0.35S
#define	HintSound_1S											500	// 1S
#define	HintSound_4S											2000//4S

//Communication.c函数列表**********************
		//ExtComGroup[COMMUNICATIONGROUPNUM][ExtComGroup_length]
		//通话组数据结构安排
		//COMMUNICATIONGROUPNUM 同时最多通话组
		//ExtComGroup_length		数据结构长度
#define	ExtComGroup_length								20
#define	ExtComGroup_number								0	   //通话组编号
#define	ExtComGroup_state									1
#define ExtComGroup_origin								2
#define	ExtComGroup_object								3
#define	ExtComGroup_insert								4
#define	ExtComGroup_timeh									5
#define	ExtComGroup_timel									6
#define	ExtComGroup_settimeh							7
#define	ExtComGroup_settimel							8
#define	ExtComGroup_timetask							9
#define	ExtComGroup_type								 10		//通话类型
#define	ExtComGroup_res									 11		//占用资源
#define	ExtComGroup_infolength					 12		//存储信息指针
#define	ExtComGroup_infoptr							 13		//拨号信息存储首地址

		//MessageGroup[MESSAGEGROUPNUMBER][MessageGroup_length]
		//消息阵列
		//MESSAGEGROUPNUMBER	消息资源数量
		//MessageGroup_length	消息长度
#define	MESSAGEGROUPNUMBER								5
#define	MessageGroup_length								10
#define	MessageGroup_origin								0
#define	MessageGroup_object								1
#define	MessageGroup_type									2
#define	MessageGroup_datalength						3
#define	MessageGroup_datastar							4
	//消息类型定义 MessageGroup_type
#define	EXTTEL_UNHOLD_MESSAGETYPE					0x01		
#define	EXTTEL_HOLD_MESSAGETYPE						0x02
#define	DECODE_DTMF_MESSAGETYPE						0x03
#define	STAR_SEND_CID_MESSAGETYPE					0x04
#define	CLOSE_SEND_CID_MESSAGETYPE				0x05
#define OUTSIDE_CALL_IN_MESSAGETYPE				0x06

	//设备编号定义
#define	EXTTEL_ID													1	
#define	OUTSIDETEL_ID											0x11

#define	HINTSOUND													7
#define MUSIC_22100												1
#define SEND_DTMF_22100										4
#define	COMRES														2 

#define	CID_RES														1		//资源编号

#define	OUTSIDECOMTYPE										8		//外部通话类型
#define	INSIDECOMTYPE											9		//内部通话类型
#define	DIALOGCOMTYPE											10		//楼宇对讲通话类型
#define	AUTOSYSTEMTYPE										11	//智能控制系统类型

#define	outtel_hold												0//外线状态
#define	outtel_ring												1//外线振铃
#define	outtel_used 											2//外线已使用
#define	outtel_using											3//外线通话中

#define	exttel_hold												0	//内线状态
#define	exttel_unhold											1	//摘机空闲态
#define	exttel_dialing										2	//拨号状态
#define	exttel_sendCID										3	//发送来电显示信息状态
#define	exttel_receCID										4	//接收来电显示信息状态
#define	exttel_waiting										5	//主叫方振铃等待状态
#define	exttel_ring												6	//振铃状态
#define	exttel_useing											7	//通话状态
#define	exttel_flash											8	//闪断状态
#define	exttel_switch											9	//转接拨号
#define	exttel_switch_dialing							10//转接拨号中
#define	exttel_error											11//出错状态


#define	extcomgroup_star									1		//启动通话组	通话组状态
#define	extcom_changing 									25	//
#define	extcom_changringing 							35

#define	extflash_origin_TT								10	//主叫闪断时间处理任务
#define	extflash_object_TT								11	//被呼闪断时间处理任务		
#define	extflash_insert_TT								12	//第三方闪断时间处理任务
#define	key_press_open_TT									13	//按键延时
#define	key_press_take_TT									14	//按键延时
#define	key_press_call_TT									15	//按键延时
#define	dialog_close_TT										16	//关闭楼宇对讲通话

#define	DIALOG_EXT												6		//楼宇对讲固定分机号
#define	DIALOG_STATE											9		//楼宇对讲的状态 存储于分机状态数组(ExtTelState[])中的第10位
#define	DIALOG_STATE_NONE									0		//普通状态
#define DIALOG_STATE_CALLING							1		//呼入、振铃状态
#define	DIALOG_STATE_SOUND								2		//语音提示阶段
#define	DIALOG_STATE_TALKING							3		//通话状态
#define	DIALOG_STATE_PRESSING							4		//按键状态
#define DIALOG_STATE_CLOSEING							5		//关闭楼宇对讲通话

#define	AUTOSYSTEM_EXT										5		//智能控制系统固定号码

#define	CIDLENGTH		25		//用于存储发送CID信息的数组长度
#define CID_state		 0		//发送CID的状态
#define	CID_length	 1		//信息有效长度
#define	CID_ptr			 2		//指针
#define	CID_STATE_ENWRITE		0
#define	CID_STATE_ENREAD		2
#define	CID_STATE_SENDOVER	4

void	CommunicationInit();
void	WriteExtComGroup(UCHAR x,UCHAR y,UCHAR wData);
UCHAR ReadExtComGroup(UCHAR x,UCHAR y);
void	WriteMessageGroup(UCHAR x,UCHAR y,UCHAR wData);
UCHAR ReadMessageGroup(UCHAR x,UCHAR y);
void	SendUnholdMessage(UCHAR	exttelnum);
void	MessageDeal();
UCHAR	CreateExtComGroup(UCHAR origin_call);
void	ClearAMessage(UCHAR messageID);
void	SendDecodeMessage(UCHAR exttelnum,UCHAR decode_data_length, UCHAR dtmfnum);
void	SendHoldMessage(UCHAR exttelnum);
void	ClearAComGroup(UCHAR comgroupID);
void	SendOutsideCallInMessage(UCHAR linenum, UCHAR ringnum);
void	WriteExtTelState(UCHAR num, UCHAR teldata);
UCHAR	ReadExtTelState(UCHAR num);
void	WriteCID(UCHAR num, UCHAR teldata);
UCHAR	ReadCID(UCHAR num);
void 	ResResume();	//系统资源归原

UCHAR	ReadExtTelTime(UCHAR num);
void	WriteExtTelTime(UCHAR num, UCHAR time);
void	ExtTimeDeal();
void	exttel_hold_deal(UCHAR telnum);
void	exttel_unhold_deal(UCHAR	telnum);
void	exttel_dialing_deal(UCHAR telnum);
UCHAR	findextcomgroupbyorigin(UCHAR telnum);
UCHAR	findextcomgroupbyobject(UCHAR telnum);
UCHAR	testextcomgroup_inside();
void	CreatExtComGroupByID(UCHAR extcomgroupID,UCHAR origin, UCHAR object, UCHAR type);
void 	exttel_sendCID_deal(UCHAR telnum);
void	exttel_waiting_deal(UCHAR telnum);
void	exttel_ring_deal(UCHAR telnum);
void	exttel_error_deal(UCHAR telnum);
void	exttel_useing_deal(UCHAR telnum);
UCHAR	ReadOutTelState(UCHAR num);
void	WriteOutTelState(UCHAR num, UCHAR teldata);
void	outtel_hold_deal(UCHAR outtelnum);
UCHAR	testoutline(UCHAR outtelnum);
void	outtel_ring_deal(UCHAR outtelnum);
void	outtel_using_deal(UCHAR outtelnum);
void	time_exttel_unhold_deal(UCHAR telnum);
void	exttel_flash_deal(UCHAR telnum);
void	exttel_switch_deal(UCHAR telnum);
void time_exttel_flash_deal(UCHAR telnum);

//void test();
//void test2();
#endif

⌨️ 快捷键说明

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