?? ht9200.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 + -