搜索
bottom↓
回复: 7

C51与HT9170和HT9200接口程序(双音多频)

[复制链接]

出0入0汤圆

发表于 2008-8-15 16:48:09 | 显示全部楼层 |阅读模式
C51与HT9170和HT9200接口程序(双音多频)
/********************************************
    ht9200A/ht9170程序
    双音多频接收发射程序
********************************************/

sbit DATA  = P3^7 ;
sbit CLK  = P3^6 ;
sbit CE  = P2^7 ;

/*******************************************
    DTMF 数据口:P0^0 ~ P0^3
*******************************************/
sbit DV  = P2^6 ;
sbit OE  = P3^2 ;
//sbit PWDN  = P3^6 ;
//sbit INH  = P3^7 ;
sbit DXC  = P3^5 ;
sbit RING = p3^0 ;

#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    *    #

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) ;            //delay about 6 ms
    EA = 0 ;
    senddata_ht9200(Table_DTMF[in]) ;
    EA = 1 ;
    delay(100) ;            //delay about 100 ms
    CE   = 1 ;
}

/*****************************************
    DTMF 读程序
    返回 DTMF值
*****************************************/
uchar DTMF_read(void)
{
    uchar TEMP ;
    uchar i ;
   
    EA = 0 ;
    P0 = 0xff ;
    OE = 1 ;
    ACC = ACC ;
    TEMP = P0&0x0f ;
    OE = 0 ;
    EA = 1 ;
    for(i=0;i<16;i++)
    {
        if(TEMP == Table_DTMF)
            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 ;
  &nbs

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-8-15 17:25:02 | 显示全部楼层

出0入0汤圆

发表于 2008-8-15 17:48:48 | 显示全部楼层
记号....

出0入0汤圆

发表于 2008-8-16 10:12:19 | 显示全部楼层
不错,能上电路图 就可以穿裤子了

出0入0汤圆

发表于 2008-8-16 10:17:26 | 显示全部楼层
我来贴电路图

bell电话电路图ourdev_380592.pdf(文件大小:56K) (原文件名:bell电话电路图.pdf)

出0入0汤圆

发表于 2011-11-24 11:48:00 | 显示全部楼层
学习一下。谢谢。

出0入0汤圆

发表于 2012-12-18 16:29:05 | 显示全部楼层
正好用到。谢谢了!

出0入0汤圆

发表于 2012-12-24 08:48:12 | 显示全部楼层
谢谢了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 20:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表