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

📄 ht9200.c

📁 一种电话遥控板的原程序
💻 C
字号:
/********************************************
	ht9200/ht9170程序
	双音多频接收发射程序
********************************************/
/*
sbit DATA  = P2^5 ;
sbit CLK  = P2^6 ;
sbit CE  = P2^7 ;
*/
/*******************************************
	DTMF 数据口:P0^0 ~ P0^3
*******************************************//*
sbit DV  = P3^4 ;
sbit OE  = P3^5 ;
//sbit PWDN  = P3^6 ;
//sbit INH  = P3^7 ;
sbit DXC  = P3^3 ;
*/
uchar idata Check0 ;
uchar idata Counter0 ;
uchar idata Check1 ;
uchar idata Counter1 ;
//uchar idata Check2 ;
//uchar idata Counter2 ;
//uchar idata Check3 ;
//uchar idata Counter3 ;
//uchar idata Check4 ;
//uchar idata Counter4 ;

uchar code Table_DTMF[] = {0x0a,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0d,0x0e,0x0f,0x00,0x0b,0x0c} ;
//						    0    1    2    3     4    5   6    7    8    9    A    B     C    D    *    # 

void senddata_ht9200(uchar in)
{
	uchar i;
	for(i=0;i<5;i++)
	{
		if(((in>>i)&0x01) == 1)
			DATA = 1 ;
		else    DATA = 0 ;
		CLK = 0 ;
		CLK = 1 ;
	}
}
/******************************************
	发送子程序
	in 为要发送的数 0-15
******************************************/
void send_ht9200(uchar in)
{
	CE   = 0 ;
	CLK  = 1 ;
	time(50) ;
	EA = 0 ;
	senddata_ht9200(Table_DTMF[in]) ;
	EA = 1 ;
	delay(100) ;
	CE   = 1 ;
}

/*****************************************
	DTMF 读程序
	返回 DTMF值
	in:		0: read DTMF 
			1: read FSK DTMF
*****************************************/
uchar DTMF_read(void) using 2
{
	uchar temp ;
	uchar i ;
	
	EA = 0 ;
	P2 = 0xff ;
	OE = 1 ;
	i++ ;
	temp = P2&0x0f ;
	OE = 0 ;
	EA = 1 ;
	for(i=0;i<16;i++)
	{
		if(temp == Table_DTMF[i])
			return i ;
	}
	return(0xff) ;
}

/******************************************
	初始化检测程序
******************************************/
void check_Init()
{
	Check0 = 1 ;
	Counter0 = 5 ;
	Check1 = 2;
	Counter1 = 3 ;
//	Check2 = 0 ;
//	Counter2 = 10;
//	Check3 = 1 ;
//	Counter3 = 10;
//	Check4 = 2;
//	Counter4 = 10;
	VIN_frist_flag = 1 ;
	Check_DX_Counter = 0 ;
	Check_DX_Counter1 = 0 ;
	Check_DX_flag = 0 ;
	CheckDxFlag = 0 ;
}

/***************************************
	 检测程序0
	 检测振铃RING
	 返回         TRUE :有
	 	      FALSE:无
***************************************/
uchar check_RING()		//
{
	uchar flag ;
	
	flag = RING ;			//check RING
	if((flag == 0)&&(Counter0 < 10))
		Counter0 ++ ;
	if((flag == 1)&&(Counter0 > 0))
		Counter0 -- ;
	if(Counter0 == 10)
	{
		Counter0 = 5 ;
		if(flag != Check0)
		{
			Check0 = flag ;
			return TRUE ;
		}
		else return FALSE; 
	}
	else if(Counter0 <= 1)
	{
		Counter0 = 5 ;
		Check0 = 1;
		return FALSE;
	}
	else
		return FALSE ;
}

/***************************************
	 检测程序1
	 检测有无DTMF信号 DV
	 返回         TRUE :有
	 	      FALSE:无
***************************************/
uchar check_DV() using 2		//
{
	uchar flag ;
	
	flag = DV ;			//check DV
	if((flag == 1)&&(Counter1<6))
		Counter1 ++ ;
	if((flag == 0)&&(Counter1 >0))
		Counter1 -- ;
	if(Counter1 == 6)
	{
		Counter1 = 3 ;
		if(flag != Check1)
		{
			Check1 = flag ;
			return TRUE ;
		}
		else	return FALSE ;
	}
	else if(Counter1 == 0)
	{
		Counter1 = 3 ;
		Check1  = 0 ; 
		return FALSE ;
	}
	else return FALSE ;
}

/***************************************
	 检测程序1
	 检测有无DTMF信号 DV
	 返回         TRUE :有
	 	      FALSE:无
***************************************
uchar check_FSK_DV(void)		//
{
	uchar flag ;
	
	flag = DV_FSK ;			//check DV
	if((flag == 1)&&(Counter2<20))
		Counter2 ++ ;
	if((flag == 0)&&(Counter2 >0))
		Counter2 -- ;
	if(Counter2 == 20)
	{
		Counter2 = 10 ;
		if(flag != Check2)
		{
			Check2 = flag ;
			return TRUE ;
		}
		else	return FALSE ;
	}
	else if(Counter2 <= 2)
	{
		Counter2 = 10 ;
		Check2  = 0 ; 
		return FALSE ;
	}
	else return FALSE ;
}
*/

/***************************************
	 检测程序4
	 检测有无DTMF信号 DXC
	 返回         TRUE :有
	 	      FALSE:无
***************************************/
uchar Check_DXC()
{
	if(Check_DX_flag == 1)
	{
		if(Check_DX_flag != CheckDxFlag)
		{
			CheckDxFlag = Check_DX_flag ;
			return TRUE ;
		}
		else 	return FALSE ;
	}
	else
	{
		CheckDxFlag = 0 ;
		return FALSE ;
	}
}

void Check_DXC_Conter()		//
{
	Check_DX_Counter ++ ;
	if(Check_DX_Counter < 5)
	{
		if(DXC == 1)	Check_DX_Counter1++ ;
	}
	else
	{
		Check_DX_Counter = 0 ;
		if(Check_DX_Counter1 != 0)		//掉线
		{
			Check_DX_Counter1 = 0 ;
			Check_DX_flag = 1 ;
		}
		else
		{
			Check_DX_Counter1 = 0 ;
			Check_DX_flag = 0 ;
		}
	}
}

/***************************************
	 检测程序3
	 检测按键
	 返回         TRUE :有
	 	      	  FALSE:无
***************************************
uchar check_VIN(void)		//
{
	uchar flag ;
	
	flag = VIN ;			//check VIN
	if((flag == 0)&&(Counter3 < 20))
		Counter3 ++ ;
	if((flag == 1)&&(Counter3 > 0))
		Counter3 -- ;
	if(Counter3 == 20)
	{
		Counter3 = 5 ;
		if(flag != Check3)
		{
			Check3 = flag ;
			return TRUE ;
		}
		else return FALSE; 
	}
	else if(Counter3 <= 1)
	{
		Counter3 = 10 ;
		Check3 = 1;
		return FALSE;
	}
	else
		return FALSE ;
}

uchar idata KZ_flag1 ;

控制第1个573
void SETB(uchar mn)
{
	KZ_flag1 = KZ_flag1 | (1<<mn) ;
	P0 = KZ_flag1 ;
	P0 = KZ_flag1 ;
	CS_573 = 1 ;
	CS_573 = 1 ;
	CS_573 = 1 ;
	CS_573 = 0 ;
	CS_573 = 0 ;
	P0 = 0xff ;
}

void CLRB(uchar mn)
{
	KZ_flag1 = KZ_flag1 & ~(1<<mn) ;
	P0 = KZ_flag1 ;
	P0 = KZ_flag1 ;
	CS_573 = 1 ;
	CS_573 = 1 ;
	CS_573 = 1 ;
	CS_573 = 0 ;
	CS_573 = 0 ;
	P0 = 0xff ;
}

void SETBPORT()
{
	KZ_flag1 = 0x7f ;
	P0 = KZ_flag1 ;
	P0 = KZ_flag1 ;
	CS_573 = 1 ;
	CS_573 = 1 ;
	CS_573 = 1 ;
	CS_573 = 0 ;
	CS_573 = 0 ;
}
*/

⌨️ 快捷键说明

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