久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 21887|回復: 13
打印 上一主題 下一主題
收起左側

學51單片機做了一個RDA5807M的FM收音機-但雜音大

  [復制鏈接]
跳轉到指定樓層
樓主
學51單片機做了一個RDA5807M的FM收音機-但雜音大,不知道是哪問題,雜音真的很大,是不是程序出問題了?程序是在網絡上下載的,電路裝好后就可以有聲音了。



  1. /*****************************************************************
  2. *                                                                *
  3. * ME850單片機開發系統擴展應用 -  收音模塊演示程序               *
  4. *                                                                *
  5. * MCU 芯片: AT89S52      工作頻率: 11.0592MHz                    *
  6. *                                                                *
  7. *【版權】Copyright(C) 深圳碩飛科技有限公司  All Rights Reserved  *
  8. *【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!      *
  9. *                                                                *
  10. ******************************************************************
  11. *                                                                *
  12. *  K1--- 向上搜索電臺 K2--- 向下搜索電臺                         *
  13. *  K3--- 音量加       K4--- 音量減                               *
  14. *                                                                *
  15. *****************************************************************/

  16. #include <reg51.h>         
  17. #include <intrins.h>
  18. //#include "lcd.h"
  19. #include "IIC.h"
  20. #include "delay.h"

  21. sbit  K1 = P3^2;
  22. sbit  K2 = P3^3;
  23. sbit  K3 = P3^4;
  24. sbit  K4 = P3^5;

  25. unsigned long frequency;

  26. // RDA5807 寄存器
  27. unsigned char  RDA_reg_data[8] =
  28. {
  29.    0xd0,0x00,  // 02H
  30.    0x00,0x00,  // 03H
  31.    0x00,0x40,  // 04H
  32.    0x90,0x88,  // 05H
  33. };

  34. //unsigned char code  cdis1[ ] = {"FM STEREO RADIO "};
  35. //unsigned char code  cdis2[ ] = {"FM       VOL    "};

  36. char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個字節

  37. #define uchar unsigned char
  38. #define uint  unsigned int

  39. /**********************************************************

  40. 連續寫寄存器子函數

  41. **********************************************************/
  42. void RDA5807_write_reg(void)
  43. {
  44.    uchar i;

  45.    I2C_start();
  46.     // 收音模塊寫入操作
  47.    I2C_write_byte(0x20);
  48.     // 寄存器連續寫操作
  49.    for(i=0; i<8; i++)
  50.    {
  51.      I2C_write_byte(RDA_reg_data[i]);
  52.    }
  53.    I2C_stop();
  54. }

  55. /**********************************************************

  56. 連續讀寄存器子函數

  57. **********************************************************/
  58. void RDA5807_read_reg(uchar *reg_buf)
  59. {
  60.    I2C_start();

  61.     // 收音模塊讀取操作
  62.    I2C_write_byte(0x21);

  63.     // 寄存器連續讀操作
  64.    reg_buf[0] = I2C_read_byte(I2C_ACK);
  65.    reg_buf[1] = I2C_read_byte(I2C_ACK);
  66.    reg_buf[2] = I2C_read_byte(I2C_ACK);
  67.    reg_buf[3] = I2C_read_byte(I2C_NACK);

  68.    I2C_stop();
  69. }

  70. /**********************************************************

  71. 模塊上電初始化子函數

  72. **********************************************************/
  73. void RDA5807_power(void)
  74. {
  75.    delayms(50);

  76.     // 發送軟件復位指令
  77.    RDA_reg_data[0] = 0x00;
  78.    RDA_reg_data[1] = 0x02;
  79.    RDA5807_write_reg();

  80.    delayms(10);

  81.     // 收音模塊默認參數
  82.    RDA_reg_data[0] = 0xd0;
  83.    RDA_reg_data[1] = 0x01;
  84.    RDA5807_write_reg();
  85. }
  86. /**********************************************************

  87. 功能描述:收音模塊自動尋臺模式

  88. **********************************************************/
  89. void RDA5807_FM_seek(void)
  90. {
  91.    uint chan;
  92.    uchar  reg_data[4] = {0x00, 0x00, 0x00, 0x00};

  93.    RDA_reg_data[3] &= ~(1 << 4);      //調諧禁用

  94.    // 內部自動尋臺使能
  95.    RDA_reg_data[0] |=  (1 << 0);      //SEEK位置1
  96.    RDA5807_write_reg();

  97.     // 等待STC 標志置位
  98.    while(0 == (reg_data[0] & 0x40))
  99.    {
  100.      delayms(20);
  101.       // 讀取內部狀態
  102.      RDA5807_read_reg(reg_data);
  103.    }
  104.     // 獲取當前工作頻點
  105.    chan = reg_data[0] & 0x03;
  106.    chan = reg_data[1] | (chan << 8);
  107.    chan = chan << 6;

  108.     // 保存當前工作頻點
  109.    RDA_reg_data[2] = (chan >> 8) & 0xff;
  110.    RDA_reg_data[3] = (chan & 0xff);
  111. }
  112.    #include<stdio.h>
  113. void        mInitSTDIO( void )
  114. {        /* 僅用于調試用途及顯示內容到PC機,與該程序功能完全無關,為printf和getkey輸入輸出初始化串口 */
  115.         SCON = 0x50;
  116.         PCON = 0x80;
  117.         TMOD = 0x20;
  118.         TH1  = 0xfd;  /* 11.0592MHz晶振, 19200bps */
  119.         TR1  = 1;
  120.         TI   = 1;
  121. }


  122. /**********************************************************

  123. 頻率顯示子函數

  124. **********************************************************/
  125. /*void  show_frequency(void)
  126. {
  127.   // unsigned char i,display[5];
  128.    unsigned int  temp;
  129.       double temp1;


  130.    temp = (RDA_reg_data[2]*256)+(RDA_reg_data[3]&0xc0);         //計算
  131.    temp = temp>>6;
  132.    frequency = (unsigned long)(100*temp+87000)/100;

  133.    temp1=  (double)frequency/10.0;

  134.    printf("the fz=%.1fM\n",temp1) ;

  135.    /*for(i=0; i<5; i++)  // 清顯存單元
  136.    display[i] = 0x00;

  137.    display[0] = (frequency)/1000 ;     //數據轉換
  138.    display[1] = (frequency%1000)/100;
  139.    display[2] = (frequency%100)/10;
  140.    display[3] = 0x2e;                  //小數點
  141.    display[4] = (frequency%10);

  142.    if(display[0] == 0)
  143.    {
  144.      display[0] = display[1]+0x30;
  145.      display[1] = display[2]+0x30;
  146.      display[2] = display[3];
  147.      display[3] = display[4]+0x30;
  148.      display[4] = 0x20;
  149.    }
  150.    else
  151.    {
  152.      display[0] += 0x30;
  153.      display[1] += 0x30;
  154.      display[2] += 0x30;
  155.      display[4] += 0x30;
  156.    }

  157.    lcd_pos_xy(3,2);                      //頻率顯示
  158.    lcd_wdat(display[0]);
  159.    lcd_wdat(display[1]);
  160.    lcd_wdat(display[2]);
  161.    lcd_wdat(display[3]);
  162.    lcd_wdat(display[4]); */
  163. //}
  164.               
  165. /**********************************************************

  166. 音量顯示子函數

  167. **********************************************************/
  168. /*void show_volume()
  169. {
  170.    unsigned int  temp;

  171.    temp = RDA_reg_data[7] & 0x0f; //取音量值

  172.    printf("the voice=%d\n",temp);

  173.   /* display[0] = temp/10;
  174.    display[1] = temp%10;

  175.    if(display[0] == 0)            //如果高位為0
  176.    {
  177.      display[0] = display[1];     //低位顯存內容進入高位顯存
  178.      display[1] = 0x20;           //低位不顯示
  179.    }
  180.    else
  181.    {
  182.      display[1] += 0x30;
  183.    }
  184.    display[0] += 0x30;

  185.    lcd_pos_xy(13,2);              //音量值顯示
  186.    lcd_wdat(display[0]);
  187.    lcd_wdat(display[1]); */

  188. //}                                   

  189. /**********************************************************

  190. 主函數

  191. **********************************************************/
  192. void  main(void)
  193. {  
  194.    RDA5807_power();
  195.    mInitSTDIO();

  196.    while(1)
  197.    {
  198.      if(K1 == 0)
  199.      {
  200.        delayms(20);
  201.        if(K1 == 0)
  202.        {
  203.          RDA_reg_data[0] |= (1 << 1);         //SEEK UP         
  204.          RDA5807_FM_seek();                  
  205.          while(K1 == 0);
  206.        }
  207.      }

  208.      if(K2 == 0)
  209.      {
  210.        delayms(20);
  211.        if(K2 == 0)
  212.        {
  213.          RDA_reg_data[0] &= ~(1 << 1);  //SEEK DOWN                 
  214.          RDA5807_FM_seek();
  215.          while(K2 == 0);
  216.        }
  217.      }

  218.      if(K3 == 0)
  219.      {
  220.        delayms(20);
  221.        if(K3 == 0)
  222.        {
  223.          if((RDA_reg_data[7] & 0x0f) < 0x0f)
  224.          {
  225.            RDA_reg_data[0] = 0xd0;
  226.            RDA_reg_data[1] = 0x01;
  227.            RDA_reg_data[3] &= ~(1 << 4);

  228.            RDA_reg_data[7]++;         // 音量遞增
  229.            RDA5807_write_reg();
  230.                    while(K3 == 0);
  231.          }
  232.        }
  233.      }

  234.      if(K4 == 0)
  235.      {
  236.        delayms(20);
  237.        if(K4 == 0)
  238.        {
  239.          if((RDA_reg_data[7] & 0x0f) > 0x00)
  240.          {
  241.            RDA_reg_data[0] = 0xd0;
  242.            RDA_reg_data[1] = 0x01;
  243.            RDA_reg_data[3] &= ~(1 << 4);
  244.            
  245.            RDA_reg_data[7]--;         // 音量遞減
  246.            RDA5807_write_reg();
  247.            while(K4 == 0);
  248.          }
  249.        }
  250.      }

  251.                      delayms(200);
  252. //    show_volume();
  253. //    show_frequency();
  254.    }
  255. }

  256. /*********************************************************/

復制代碼



全部資料下載地址:
RDA5807M-FM程序.rar (39.17 KB, 下載次數: 287)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:96682 發表于 2017-6-16 19:11 | 只看該作者
可以這么說,使用這種電源較使用純直流的電池簡直是沒法比

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:162582 發表于 2017-6-19 18:00 | 只看該作者
首先你不能使用充電器供電,其次用電池供電也要加濾波電容。最后你的功放要去掉。我用tea5767做的也是這樣
回復

使用道具 舉報

地板
ID:448994 發表于 2019-3-2 19:49 | 只看該作者
能求電路圖嗎
回復

使用道具 舉報

5#
ID:659397 發表于 2020-1-20 10:49 | 只看該作者
對,就像樓上說的,先把電源改成電池;接著去掉功放,因為RDA5807有耳機驅動能力
回復

使用道具 舉報

6#
ID:1025655 發表于 2023-12-26 11:14 | 只看該作者
FM的天線呢?實物上沒看到喲!
回復

使用道具 舉報

7#
ID:1025655 發表于 2023-12-26 11:15 | 只看該作者
FM的天線呢?實物上面看不到呀!
回復

使用道具 舉報

8#
ID:774081 發表于 2023-12-29 15:18 | 只看該作者
最大的原因是沒有焊接天線。。。
回復

使用道具 舉報

9#
ID:712493 發表于 2023-12-29 15:46 | 只看該作者
實際要分清什么雜音,或說是雜音  還是噪音
回復

使用道具 舉報

10#
ID:1085441 發表于 2024-1-25 17:41 | 只看該作者
雜音大除了天線原因,還有可能是調諧頻率不準,您的頻率控制字對嗎?
回復

使用道具 舉報

11#
ID:524818 發表于 2024-1-26 10:47 | 只看該作者
用充電頭做電源應該不行,換成電池吧
回復

使用道具 舉報

12#
ID:195496 發表于 2024-4-11 08:27 | 只看該作者
折騰才有快樂
回復

使用道具 舉報

13#
ID:71233 發表于 2024-4-12 19:43 | 只看該作者
信號一般的地方,天線必須長些,像我這里,即使天線很長,還是比不上以前那種分立元件調頻收音機。
回復

使用道具 舉報

14#
ID:72088 發表于 2025-4-11 15:06 | 只看該作者
單片機調臺后要進入待機狀態,不然會干擾收音機
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美黄在线观看 | 国产农村妇女毛片精品久久麻豆 | 久久久久国产一级毛片高清网站 | 色婷婷久久久久swag精品 | 亚洲人人| 欧美在线一区二区三区 | 精品九九九 | 国产伦精品一区二区三毛 | 日本成人免费网站 | 一级毛片大全免费播放 | 在线观看视频91 | 欧美色性 | 久久99精品视频 | 亚洲一区二区三区桃乃木香奈 | 亚洲成人在线免费 | 欧美日韩亚洲国产综合 | 久久综合狠狠综合久久综合88 | 99久久婷婷国产综合精品电影 | 亚洲综合五月天婷婷 | 亚洲欧美中文日韩在线v日本 | 99久久婷婷国产亚洲终合精品 | 免费看色 | 中文字幕日韩欧美一区二区三区 | 天天看天天爽 | 在线色网 | 欧美精品在线免费观看 | 亚洲永久免费观看 | 久久国色| 午夜免费| 九九在线视频 | 日本一区二区高清不卡 | 狠狠干狠狠操 | 天天弄 | 成人一级视频在线观看 | 中文字幕一区二区三区乱码在线 | 久久精品国产99国产精品 | 超碰在线亚洲 | 精品久久久久久 | 亚洲视频一区二区三区 | 欧美久久影院 | 国产在线观|