天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開(kāi)發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開(kāi)發(fā)工具

提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

C51或PIC165X驅(qū)動(dòng)MT8880 DTMF自動(dòng)收發(fā)

更新時(shí)間: 2019-03-23
閱讀量:1835

十年專注單片機(jī)方案開(kāi)發(fā)的方案公司英銳恩,分享C51或PIC165X驅(qū)動(dòng)MT8880 DTMF自動(dòng)收發(fā)。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機(jī)、16位單片機(jī)、32位單片機(jī)及各類運(yùn)算放大器等。

這時(shí)從C51的移植:

#ifdef __C51__ #include #include #else #include #endif

#define uchar unsigned char

//變量定義 #ifdef __C51__ // 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 #else // #define LEDCON RB6 #define KEY1 RB0 #define HC595_DAT RC5 #define HC595_CS RC6 #define HC595_CLK RC3 #define MT8880_CLK RB3 #define MT8880_RS0 RB4 #define MT8880_CP RB5 #define MT8880_RW RB6 #define MT8880_CS RB7 #define MT8880_DATA PORTA #define CY CARRY #define _nop_() NOP() __CONFIG(WDTDIS&RC&UNPROTECT); #endif uchar 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);

//主程序從這里開(kāi)始 void main() { Delay(5); ucSendBuf=0; //P0,P1,P2口設(shè)置為準(zhǔn)雙向 #ifdef __C51__ P0M1=P0M2=0; P1M1=P1M2=0; P2M1=P2M2=0; #else PORTA=0; PORTB=0; PORTC=0; TRISA=0x0f; TRISB=0; TRISC=0; #endif Delay(2); MT8880_Rst(); MT8880_WC(0x0D); //寫(xiě)CRA,中斷允許,DTMF模式,音頻輸出允許 MT8880_WC(0x00); //寫(xiě)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);//在此等待接收有效信號(hào),STATUS.2=1表示接收到DTMF信號(hào). 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); //寫(xiě)控制寄存器,確保控制寄存器指針指向CRA MT8880_WC(0); MT8880_WC(8); //寫(xiě)控制寄存器A,輸出禁止,中斷禁止,DTMF

模式 MT8880_WC(0); //寫(xiě)控制寄存器B,突發(fā)模式,DTMF模式 MT8880_RS(); //讀狀態(tài)寄存器,用以清除各標(biāo)志 }

/***************************************** *名稱: MT8880_WC() *功能: 寫(xiě)控制寄存器CRA或CRB *入口參數(shù): com--要寫(xiě)入的數(shù)據(jù) *出口參數(shù): 無(wú) ******************************************/ 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() *功能: 寫(xiě)MT8880的發(fā)送數(shù)據(jù)寄存器 *入口參數(shù): dat--要發(fā)送的數(shù)據(jù) *出口參數(shù): 無(wú) ****************************************/ 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ù): 無(wú) *出口參數(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ù): 無(wú) *出口參數(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進(jìn)行顯示。 *入口參數(shù): dat--要顯示的數(shù)據(jù),(dat.0--L1;dat.7--L8)。 *出口參數(shù): 無(wú) ***********************************************************/ 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; }

/************************* * 延時(shí)k/10 S **************************/ void Delay(uchar k) { unsigned int i; for(;k;k--) { for(i=37500;i;i--); //延時(shí)0.1S } }

联系我们: 蓬莱市| 临泽县| 临泉县| 读书| 观塘区| 郓城县| 肃南| 兖州市| 津市市| 洪泽县| 建湖县| 旅游| 通城县| 内黄县| 临清市| 嘉黎县| 洛宁县| 新沂市| 五指山市| 宜春市| 枝江市| 辽中县| 安庆市| 大安市| 剑川县| 仪陇县| 惠来县| 西藏| 安岳县| 黄大仙区| 民权县| 闽清县| 含山县| 西充县| 和平区| 通道| 应用必备| 广州市| 呈贡县| 东山县| 翁源县|