找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3301|回復(fù): 1
收起左側(cè)

MT8880振鈴檢測摘機(jī)DTMF接收單片機(jī)程序

[復(fù)制鏈接]
ID:144332 發(fā)表于 2016-10-25 10:32 | 顯示全部樓層 |閱讀模式
振鈴檢測摘機(jī)DTMF接收程序
完整代碼下載:
振鈴檢測摘機(jī)DTMF接收例程.rar (17.48 KB, 下載次數(shù): 51)

部分源碼預(yù)覽:
  1. //-----------------------------------------------------------------------------
  2. // MT8880_DTMF_receiving.c
  3. //-----------------------------------------------------------------------------
  4. // Copyright 2017 尖峰學(xué)子.
  5. //
  6. // Program Description:
  7. //
  8. // 這是用于測試MT8880模塊接收DTMF信號功能
  9. // 首先,在手機(jī)撥打了號碼后,通過振鈴檢測,自動摘機(jī),
  10. // 接收DTMF信號通過串口發(fā)送到PC機(jī),并且通過P1上連接的LED來顯示。通過按#號鍵可以遠(yuǎn)程關(guān)閉電話機(jī)
  11. // 端口說明:
  12. // P2^0--D0
  13. // P2^1--D1
  14. // P2^2--D2
  15. // P2^3--D3
  16. // P2^4--R/W
  17. // P2^5--RSO
  18. // P2^7--zj_control  控制摘掛機(jī)
  19. // P3^2--zljc        檢測振鈴信號               
  20. // P3^3--IRQ         接收DTMF時產(chǎn)生中斷信號接外部中斷1        
  21. // P1                接八個led
  22. //
  23. // How To Test:
  24. //
  25. // 1) 將模塊各個端口與單片機(jī)鏈接好;
  26. // 3) 通過手機(jī)撥打該電話號碼可以通過示波器觀察振鈴檢測端ZLJC的信號;
  27. // 2) 用手機(jī)撥打該電話后,運(yùn)行程序后可按手機(jī)上號碼;通過觀察窗口可以發(fā)現(xiàn)接收到的數(shù)字正是你按下的鍵值
  28. //
  29. //
  30. // 硬件要求:       51單片機(jī) 電話線            晶振:12M        
  31. // Target:         MT8880 AND  AT89C51
  32. // Tool chain:     Keil C51 7.50 / Keil EVAL C51
  33. // Command Line:   None

  34. //-----------------------------------------------------------------------------
  35. // Include Files
  36. //-----------------------------------------------------------------------------
  37. #include <reg51.h>
  38. //-----------------------------------------------------------------------------
  39. // Global Constants
  40. //-----------------------------------------------------------------------------
  41. #define uchar unsigned char
  42. #define uint unsigned int

  43. sbit zj_control=P2^7;//控制摘掛機(jī);
  44. uchar rx_num; //接收數(shù)據(jù)寄存器;
  45. uchar ring_num; //振鈴次數(shù);
  46. //-----------------------------------------------------------------------------
  47. // Function Prototypes
  48. //-----------------------------------------------------------------------------
  49. void initialize(void); //MT8880芯片初始化函數(shù)
  50. void rece_init(void); //MT8880接收初始化函數(shù)
  51. void StartUART( void );//串口初始化函數(shù)
  52. void R_S_Byte(uchar R_Byte);//串口發(fā)送子函數(shù)

  53. //-----------------------------------------------------------------------------
  54. // /* 主函數(shù)(主程序) */
  55. //-----------------------------------------------------------------------------
  56. void main(void)
  57. {
  58.   P2=0xff;        //端口初始化
  59.   StartUART();    //串口初始化
  60.   initialize();          //MT8880芯片初始化子函數(shù);
  61.   rece_init();          //接收初始化子函數(shù);

  62.   zj_control=1;
  63.   for(;;) ;             //等待接收         

  64. }
  65. //-----------------------------------------------------------------------------
  66. // /* MT8880芯片初始化子函數(shù) */
  67. //-----------------------------------------------------------------------------
  68. void initialize(void)
  69. { P2=0x3f;  /* 讀SR */
  70.   P2=0x20;  /* CRA=0000 */
  71.   P2=0x20;  /* CRA=0000 */
  72.   P2=0x28;  /* CRA=1000 */
  73.   P2=0x20;
  74.   }  /* CRB=0000 */
  75. //-----------------------------------------------------------------------------
  76. // /*接收初始化子函數(shù) */
  77. //-----------------------------------------------------------------------------
  78. void rece_init(void)
  79. {
  80. P2=0x24;  /* CRA=0100 */ //設(shè)置為 DTMF收發(fā)模式
  81. EA=1;  //開總中斷
  82. ES=1;  //開串口接收中斷
  83. EX0=1; //開外中斷0:用于檢測振鈴信號
  84. IT0=1; // 邊沿觸發(fā)

  85. EX1=0; //關(guān)外中斷1:用于接收DTMF信號
  86. IT1=1; //邊沿觸發(fā)
  87. }
  88. //-----------------------------------------------------------------------------
  89. // /*振鈴檢查中斷服務(wù)程序 */
  90. //請先用示波器測試振鈴信號端,在有電話撥入的時候,是否產(chǎn)生了振鈴信號再接入單片機(jī)
  91. //入接入號不能產(chǎn)生中斷信號,考慮是否下拉信號比較入,可考慮接個下拉電阻。
  92. //-----------------------------------------------------------------------------


  93. void int0(void) interrupt 0
  94. {
  95.   ring_num++;//每次振鈴將會參數(shù)25個左右的中斷脈沖,
  96.   R_S_Byte(11);//發(fā)送一個0x0B到串口;

  97.   if(ring_num>=50) //在振鈴響三下的時候自動摘機(jī)。

  98.   {
  99.     ring_num=0;//清除振鈴計(jì)數(shù)寄存器
  100.     zj_control=0;         //有來電自動摘機(jī)
  101.     EX0=0;//關(guān)閉外部中斷0
  102.     EX1=1;//開外部中斷1 準(zhǔn)備接收DTMF信號
  103.   }
  104. }
  105. //-----------------------------------------------------------------------------
  106. // /*dtmf接收中斷服務(wù)程序 */
  107. //-----------------------------------------------------------------------------
  108. void int1(void) interrupt 2
  109. { P2=0x3f;  /* 讀SR */
  110.   P2=0x1f;  /* 讀RDR */
  111.   rx_num=P2&0x0f;   //讀取數(shù)據(jù),存入接收寄存器中;
  112.   R_S_Byte(rx_num);        //將接收到的DTMF信號轉(zhuǎn)為數(shù)字后通過串口發(fā)送到PC機(jī);
  113.   P1=rx_num;        //通過P1端口上的LED顯示接收到的數(shù)據(jù);
  114.                     //也可如此通過控制IO口的方式進(jìn)而控制繼電器的開關(guān),達(dá)到控制電器的目的

  115.   if(rx_num==12)    //#號鍵遠(yuǎn)程關(guān)閉電話機(jī)。
  116.   {
  117.    zj_control=1;            //按#號鍵遠(yuǎn)程關(guān)閉電話機(jī)
  118.    EX0=1;//打開外部中斷0         ,再次進(jìn)入振鈴檢查
  119.    EX1=0;//關(guān)閉外部中斷1
  120.   }
  121.   //此處程序可以發(fā)揮,加入密碼識別,家電控制,語音提示信號切入,等等
  122. }


  123. //-----------------------------------------------------------------------------
  124. // /* 串口初始化子函數(shù) */
  125. //-----------------------------------------------------------------------------
  126. void StartUART( void )
  127. {                                                          //波特率9600
  128.      SCON = 0x50;  //串口工作方式選擇,選擇在工作方式1
  129.      TMOD = 0x20;  
  130.      TH1 = 0xfd;
  131.      TL1 =
  132. ………………
  133. ………………
復(fù)制代碼

MT8880模塊資料:http://www.torrancerestoration.com/bbs/dpj-57219-1.html

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2016-10-25 14:25 | 顯示全部樓層
51黑有你更精彩。!
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表