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

📄 ht9170.c

📁 通过单片机对HT9170进行控制
💻 C
字号:
/********************************************
    ht9170程序
    双音多频接收程序
********************************************/

/*******************************************
    DTMF 数据口:P0^4 ~ P0^7
*******************************************/
sbit DV   = P3^3 ;
sbit TOE  = P2^4 ;

sbit DXC  = P3^5 ;
sbit RING = p2^6 ;
#ifndef  TRUE
    define     TRUE    1 ;
#endif
#ifndef  FALSE
    define     FALSE    0 ;
#endif
uchar idata Check0 ;
uchar idata Counter0 ;
uchar idata Check1 ;
uchar idata Counter1 ;
uchar idata Check3 ;
uchar idata Counter3 ;
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    *    # 

/*****************************************
    DTMF 读程序
    返回 DTMF值
*****************************************/
uchar DTMF_read(void)
{
    uchar temp ;
    uchar i ;
    EA = 0 ;
    P0 = 0xff ;
    TOE = 1 ;
    // ACC = ACC ;
    temp = P0&0xf0 ;
    TOE = 0 ;
    EA = 1 ;
	temp=temp>>4;
    for(i=0;i<16;i++)
    {
        if(temp == Table_DTMF[i])
            return i ;
    }
    return(0xff) ;
}
/******************************************
    初始化检测程序
******************************************/
void checkRING_Init()
{
    Check0 = 2 ;
    Counter0 = 20 ;
}
void checkDV_Init()
{
    Check1 = 2;
    Counter1 = 20;
}
void checkDXC_Init()
{
    Check3 = 2 ;
    Counter3 = 20 ;
}
/***************************************
     检测有无振铃RING 程序
     返回         TRUE :有
               FALSE:无

***************************************/
uchar check_RING(void)        //
{
    uchar flag ;
    flag = RING ;            //check RING
    if((flag == 0)&&(Counter0 < 30))
        Counter0 ++ ;
    if((flag == 1)&&(Counter0 > 0))
        Counter0 -- ;
    if(Counter0 == 30)
    {
        Counter0 = 20 ;
        if(flag != Check0)
        {
            Check0 = flag ;
            return TRUE ;
        }
        else return FALSE; 
    }
    else if(Counter0 == 0)
    {
        Counter0 = 20 ;
        Check0 = 1;
        return FALSE;
    }
    else
        return FALSE ;
}
/***************************************
     检测有无DTMF信号 DV 程序
     返回         TRUE :有
               FALSE:无
***************************************/
uchar check_DV(void)        //
{
    uchar flag ;
    flag = DV ;            //check DV
    if((flag == 1)&&(Counter1<30))
        Counter1 ++ ;
    if((flag == 0)&&(Counter1 >0))
        Counter1 -- ;
    if(Counter1 == 30)
    {
        Counter1 = 20 ;
        if(flag != Check1)
        {
            Check1 = flag ;
            return TRUE ;
        }
        else    return FALSE ;
    }
    else if(Counter1 == 0)
    {
        Counter1 = 20 ;
        Check1  = 0 ; 
        return FALSE ;
    }
    else return FALSE ;
}
/***************************************
     检测有无掉线信号 DXC 程序
     返回         TRUE :有
               FALSE:无
***************************************/
uchar check_DXC(void)        //
{
    uchar flag ;
    flag = DXC ;            //check DXC
    if((flag == 1)&&(Counter3<30))
        Counter3 ++ ;
    if((flag == 0)&&(Counter3 >0))
        Counter3 -- ;
    if(Counter3 == 30)
    {
        Counter3 = 20 ;
        if(flag != Check3)
        {
            Check3 = flag ;
            return TRUE ;
        }
        else    return FALSE ;
    }
    else if(Counter3 == 0)
    {
        Counter3 = 20 ;
        Check3  = 0 ; 
        return FALSE ;
    }
    else return FALSE ;
}

⌨️ 快捷键说明

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