📄 c.txt
字号:
/*********** 毕业设计DTMF*********************
*日期: 2008/4/20
*功能: LPC901操作HT9200,进行DTMF双音频发送演示程序
****************************************************/
#include "reg932.h"
#define uchar unsigned char
sbit CE=P3^1;
sbit KEY=P0^4;
sbit DATA=P0^5; //数据口
sbit CLK=P1^2; //CLK口
uchar Buffer[3]={0x02,0x0A,0x04}; //拨号204,这里编码"0A"对应数字"0"
void Start_DTMF();
void SendData(uchar Temp);
void Stop_DTMF();
void delayms(uchar j);
//---------------------------
main()
{
uchar i;
P0M1=0x00; //端口初始化,均为准双向口
P0M2=0x00;
P1M1=0x00;
P1M2=0x00;
P3M1=0x00;
P3M2=0x00;
while(1)
{
if(KEY==0) //判断键是否按下
{
delayms(15); //延时15ms
while(KEY==0); //判断键是否松开
for(i=0;i<3;i++)
{
Start_DTMF(); //DTMF初始化
SendData(Buffer[i]); //发送数据
delayms(100); //延时100ms
Stop_DTMF(); //停止DTMF
}
}
}
}
//----------------------------
//功能:DTMF初始化
//入口参数
//----------------------------
void Start_DTMF()
{
CE=0; //拉低CE,片选
CLK=1; //拉高CLK,
delayms(10); //延时10ms
}
//----------------------------
//功能:停止DTMF
//入口参数
//----------------------------
void Stop_DTMF()
{
SendData(0xff); //发送DTMF终止帧0xff
CLK=1; //拉高CLK
CE=1; //拉高片选线CE
}
//----------------------------
//功能:发送数据低5位
//入口参数:uchar Temp
//----------------------------
void SendData(uchar Temp)
{
uchar i=5; //循环次数5
uchar j=0;
while(i>0)
{
j=Temp&0x01; //暂存Temp的最低位
if(j==0) //对最低位进行判断
{
DATA=0; //数据线为0
}else
{
DATA=1; //数据线为1
}
Temp=Temp>>1; //Temp右移1位
i--;
CLK=0; //CLK产生下降沿
CLK=1; //恢复CLK为高
}
}
//----------------------------
//功能:ms级延时,(7.373Mhz晶振条件下,误差us级)
//入口参数:uchar j
//----------------------------
void delayms(uchar j)
{
int i;
while(j>0)
{
for(i=0;i<=669;i++);
j--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -