?? dtmf-test.c
字號:
/*------------- 周立功單片機研究所 ------------
*----------------------------------------------
*文件名: DTMF-TEST.C
*開發(fā): WWW.ZLGMCU.COM
*創(chuàng)建日期: 2004.03.25
*創(chuàng)建人: 唐堯福
*功能: DTMF信號的自發(fā)自收測試
-----------------------------------------------
-----------------------------------------------*/
#include "reg932.h"
#include "intrins.h"
#define uchar unsigned char
//變量定義
sbit LEDCON = P2^6;
sbit KEY1 = P2^0;
sbit HC595_DAT = P2^2;
sbit HC595_CS = P2^4;
sbit HC595_CLK = P2^5;
sbit MT8880_D0 = P0^0;
sbit MT8880_D1 = P0^1;
sbit MT8880_D2 = P0^2;
sbit MT8880_D3 = P0^3;
sbit MT8880_CLK = P0^4;
sbit MT8880_RS0 = P0^5;
sbit MT8880_CP = P0^7;
sbit MT8880_RW = P2^6;
sbit MT8880_CS = P2^7;
#define MT8880_DATA P0
uchar data ucSendBuf,ucRcvBuf,ucStatusBuf;
//函數(shù)聲明
void Delay(uchar k);
void MT8880_Rst();
uchar MT8880_RD();
uchar MT8880_RS();
void MT8880_WC(uchar com);
void MT8880_WD(uchar dat);
void HC595SendData(uchar dat);
//主程序從這里開始
void main()
{
Delay(5);
ucSendBuf=0; //P0,P1,P2口設(shè)置為準雙向
P0M1=P0M2=0;
P1M1=P1M2=0;
P2M1=P2M2=0;
Delay(2);
MT8880_Rst();
MT8880_WC(0x0D); //寫CRA,中斷允許,DTMF模式,音頻輸出允許
MT8880_WC(0x00); //寫CRB,突發(fā)模式,DTMF模式
while(1)
{
while(KEY1); //等待按鍵
if((++ucSendBuf)==16) //如果SEND_BUF=16,則令SEND_BUF=0
{
ucSendBuf=0;
}
MT8880_WD(ucSendBuf); //發(fā)送數(shù)據(jù)到MT8880
do
{
ucStatusBuf=MT8880_RS();
ucStatusBuf&=0x0f;
}
while((ucStatusBuf&0x04)==0);//在此等待接收有效信號,STATUS.2=1表示接收到DTMF信號.
ucRcvBuf=MT8880_RD(); //讀取數(shù)據(jù)
HC595SendData(~ucStatusBuf); //顯示狀態(tài)寄存器的內(nèi)容
Delay(5);
ucRcvBuf<<=4;
ucRcvBuf|=ucSendBuf;
HC595SendData(~ucRcvBuf); //顯示接收到的數(shù)據(jù)和發(fā)送的數(shù)據(jù),接收數(shù)據(jù)在高4位,
Delay(5); //發(fā)送的數(shù)據(jù)在低4位
}
}
/***************************************************************
*名稱: MT8880_Rst
*功能: 初始化MT8880,發(fā)送禁止,中斷禁止,DTMF模式,突發(fā)模式
****************************************************************/
void MT8880_Rst()
{
MT8880_WC(0); //寫控制寄存器,確保控制寄存器指針指向CRA
MT8880_WC(0);
MT8880_WC(8); //寫控制寄存器A,輸出禁止,中斷禁止,DTMF模式
MT8880_WC(0); //寫控制寄存器B,突發(fā)模式,DTMF模式
MT8880_RS(); //讀狀態(tài)寄存器,用以清除各標志
}
/*****************************************
*名稱: MT8880_WC()
*功能: 寫控制寄存器CRA或CRB
*入口參數(shù): com--要寫入的數(shù)據(jù)
*出口參數(shù): 無
******************************************/
void MT8880_WC(uchar com)
{
MT8880_CS=0;
MT8880_RS0=1;
MT8880_RW=0;
_nop_();
MT8880_CLK=1;
com&=0x0f;
MT8880_DATA&=0xf0;
MT8880_DATA|=com;
_nop_();
MT8880_CLK=0;
MT8880_CS=1;
}
/***************************************
*名稱: MT8880_WD()
*功能: 寫MT8880的發(fā)送數(shù)據(jù)寄存器
*入口參數(shù): dat--要發(fā)送的數(shù)據(jù)
*出口參數(shù): 無
****************************************/
void MT8880_WD(uchar dat)
{
MT8880_CS=0;
MT8880_RS0=0;
MT8880_RW=0;
dat&=0x0f;
MT8880_DATA&=0xf0;
MT8880_DATA|=dat;
MT8880_CLK=1;
_nop_();
MT8880_CLK=0;
MT8880_CS=1;
}
/***************************************
*名稱: MT8880_RD
*功能: 讀MT8880的接收數(shù)據(jù)寄存器
*入口參數(shù): 無
*出口參數(shù): temp--讀出的數(shù)據(jù),低4位有效
****************************************/
uchar MT8880_RD()
{
uchar temp;
MT8880_DATA|=0x0f; //D0~D3設(shè)置為輸入
MT8880_CS=0;
MT8880_RS0=0;
MT8880_RW=1;
MT8880_CLK=1;
temp=MT8880_DATA;
MT8880_CLK=0;
temp&=0x0f;
MT8880_CS=1;
return(temp);
}
/***************************************
*名稱: MT8880_RS()
*功能: 讀MT8880的狀態(tài)寄存器
*入口參數(shù): 無
*出口參數(shù): temp--讀出的數(shù)據(jù),低4位有效
****************************************/
uchar MT8880_RS()
{
uchar temp;
MT8880_DATA|=0x0f; //D0~D3設(shè)置為輸入
MT8880_CS=0;
MT8880_RS0=1;
MT8880_RW=1;
MT8880_CLK=1;
temp=MT8880_DATA;
temp&=0x0f;
MT8880_CLK=0;
MT8880_CS=1;
return(temp);
}
/**********************************************************
*名稱: HC595_SENDDAT
*功能: 發(fā)送數(shù)據(jù)到L1~L8進行顯示。
*入口參數(shù): dat--要顯示的數(shù)據(jù),(dat.0--L1;dat.7--L8)。
*出口參數(shù): 無
***********************************************************/
void HC595SendData(uchar dat)
{
uchar i;
HC595_CS=0;
for(i=8;i;i--)
{
HC595_CLK=0;
dat<<=1;
HC595_DAT=CY;
_nop_();
HC595_CLK=1;
}
HC595_CS=1;
HC595_CS=0;
}
/*************************
* 延時k/10 S
**************************/
void Delay(uchar k)
{
unsigned int i;
for(;k;k--)
{ for(i=37500;i;i--); //延時0.1S
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -