/********************************************
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[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 ;
}
上一篇:c51写的93C46的读写程序
下一篇:浅谈C51内存优化(data idata xdata)
推荐阅读最新更新时间:2024-03-16 15:21
设计资源 培训 开发板 精华推荐
- 艾睿电子线上研讨会:英特尔FPGA深度学习加速技术 7月30日上午10:00-11:30 期待您的莅临!
- 有奖直播:MPS新一代微功率隔离电源模块MIE系列产品介绍
- 赢京东卡 室内空气隐患大作战——英飞凌XENSIV™PAS CO2传感器
- 观看安森美半导体高灵敏度触摸传感器应用视频,轻松答题赢好礼!
- 『ADI实验室电路DIY大赛』正式启动!
- 玩儿转电源游戏,赢取800元TI手持POS机开发套件!
- 泰克示波器旅行指南 更高带宽、更低噪声、更多通道
- 庆元宵答题抽奖,知识与礼物齐飞
- 直播已结束【安森美和安富利物联网创新设计大赛颁奖典礼】
- 有奖直播:TI 低功耗 MCU 产品和 Zigbee 无线解决方案
- "error LNK2019: unresolved external symbol _HookZwCreateProcess@0 "如何解决?谢谢!
- 购买:mp3+耳机 生产方案:10000元
- 直播 FAQ|富士通FRAM无加密算法(频谱)的真赝验证解决方案
- 基于STM32F303双电机FOC驱动: 无感原理图/BOM表/代码等开源分享
- PT6311器件子程序集
- 發一個自己編寫的 MSP430 LaunchPad 的 PC 端溫度顯示程式 + 源代碼
- 50hz3v左右正弦波变方波
- DIY分享《VLMC激光雕刻机》DIY中........持续更新............
- Q2406B型GPRS模块在三害预防系统中的应用
- 简单的学过画pcb板 现在需要画四层板