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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11736|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

STC89C52RC + TEA5767 + TDA2822 FM收音機(jī)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:111350 發(fā)表于 2016-10-23 11:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 linymda 于 2016-10-23 15:52 編輯

一直對(duì)單片機(jī)有興趣,本身具備一點(diǎn)電子方面的知識(shí),C語音也還能做簡(jiǎn)單的修改。
這次閑來無事,網(wǎng)上淘來TEA5767完整版芯片,決定做個(gè)FM收音機(jī)。

資料都是網(wǎng)上搜大神們的作品而來,一并感謝。

芯片使用:
STC89C52RC 單片機(jī)
TEA5767 完整版
TDA2822 放大芯片
其他元件:
電阻
電容
晶振
按鍵
等等

沒有用顯示。

外接及電池(4節(jié)干電池)兩套電源,方便移動(dòng)。

主要功能:
1、開機(jī)預(yù)設(shè)當(dāng)?shù)貜?qiáng)信號(hào)臺(tái)
2、手動(dòng)切換預(yù)設(shè)的12個(gè)臺(tái),本地強(qiáng)臺(tái)
3、手動(dòng)搜索

實(shí)現(xiàn)的功能:
耳機(jī)收聽能清晰收到本地12個(gè)FM臺(tái)(濟(jì)南)

后續(xù):
解決聲音小的問題,有可能的話改成喇叭收聽。

實(shí)物圖:


原理圖:(借用的圖,有稍微的修改,比如增加指示燈等)


TEA5767.zip (39.97 KB, 下載次數(shù): 200)
頻率轉(zhuǎn)換十六進(jìn)制.zip (4.14 KB, 下載次數(shù): 121)

  1. #include <reg51.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. #define max_freq 108000 //手動(dòng)搜索最高頻率
  7. #define min_freq 87500  //手動(dòng)搜索最低頻率
  8.    
  9. uint tt=0; //手動(dòng)選預(yù)設(shè)臺(tái)標(biāo)記

  10. sbit SDA=P0^0;   //接在TEA5767的數(shù)據(jù)端口        
  11. sbit SCL=P0^1;   //接在TEA5767的時(shí)鐘端口      
  12. sbit KEY1=P3^5;  //頻率增加按鍵端口      
  13. sbit KEY2=P3^4;  //頻率減小按鍵端口
  14. sbit KEY3=P3^3;  //預(yù)設(shè)電臺(tái)增加
  15. sbit KEY4=P3^2;  //預(yù)設(shè)電臺(tái)減少

  16. unsigned char radio_write_data[5]={0x2a,0x30,0xC0,0x17,0x00};        //要寫入TEA5767的數(shù)據(jù),88.7M,開機(jī)預(yù)設(shè)
  17.                                   //前兩位是頻率,后三位不需要修改
  18. unsigned int pll;
  19. unsigned long frequency=87500;

  20. void delay1ms (unsigned int b)//1ms延時(shí)
  21. {
  22. for(b;b>0;b--)
  23. {unsigned int i;
  24.   for(i=0;i<300;i++)
  25.    {;}
  26. }
  27. }

  28. void Delayus(unsigned char x)
  29. {
  30. for(;x>0;x--);
  31. }

  32. void iic_start()
  33. {
  34. SDA=1;
  35. Delayus(5);
  36. SCL=1;
  37. Delayus(5);
  38. SDA=0;
  39. Delayus(5);
  40. SCL=0;
  41. Delayus(5);
  42. }

  43. void iic_stop()
  44. {
  45. SCL=0;
  46. Delayus(5);
  47. SDA=0;
  48. Delayus(5);
  49. SCL=1;
  50. Delayus(5);
  51. SDA=1;
  52. Delayus(5);
  53. }

  54. void iic_ack()
  55. {
  56. SDA=0;
  57. Delayus(5);
  58. SCL=1;
  59. Delayus(5);
  60. SCL=0;
  61. Delayus(5);
  62. SDA=1;
  63. Delayus(5);
  64. }


  65. bit iic_testack()
  66. {
  67. bit ErrorBit;
  68. SDA=1;
  69. Delayus(5);
  70. SCL=1;
  71. Delayus(5);
  72. ErrorBit=SDA;
  73. Delayus(5);
  74. SCL=0;
  75. return ErrorBit;
  76. }

  77. void iic_write8bit(unsigned char input)
  78. {
  79. unsigned char temp;
  80. for(temp=8;temp>0;temp--)
  81. {
  82.   SDA=(bit)(input&0x80);
  83.   Delayus(5);
  84.   SCL=1;
  85.   Delayus(5);
  86.   SCL=0;
  87.   Delayus(5);
  88.   input=input<<1;
  89. }
  90. }



  91. //由頻率計(jì)算PLL
  92. void get_pll(void)
  93. {
  94.     unsigned char hlsi;
  95.    
  96.     hlsi=radio_write_data[2]&0x10;  //HLSI位
  97.     if (hlsi)
  98.         pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768);    //頻率單位:k
  99.     else
  100.         pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768);    //頻率單位:k
  101. }


  102. /*//由PLL計(jì)算頻率
  103. void get_frequency(void)
  104. {
  105.     unsigned char hlsi;
  106.     unsigned int npll=0;
  107.     npll=pll;
  108.     hlsi=radio_write_data[2]&0x10;
  109.     if (hlsi)
  110.         frequency=(unsigned long)((float)(npll)*(float)8.192-225);    //頻率單位:KHz
  111.     else
  112.         frequency=(unsigned long)((float)(npll)*(float)8.192+225);    //頻率單位:KHz
  113. }
  114. */

  115. void radio_write(void)
  116. {
  117.     unsigned char i;
  118.     iic_start();
  119.     iic_write8bit(0xc0);        //TEA5767寫地址
  120.     if(!iic_testack())
  121.     {
  122.         for(i=0;i<5;i++)
  123.         {
  124.             iic_write8bit(radio_write_data[i]);
  125.             iic_ack();
  126.         }
  127.     }
  128.     iic_stop();  
  129. }


  130. //將顯示的頻率算好后寫到TEA5767芯片里面實(shí)現(xiàn)調(diào)節(jié),不用考慮TEA5767用于搜臺(tái)的相關(guān)位:SM,SUD
  131. void search(bit mode)
  132. {
  133.     //radio_read();        
  134.     if(mode)
  135.     {
  136.         frequency+=10;
  137.         if(frequency>max_freq)
  138.             frequency=min_freq;
  139.     }
  140.     else
  141.     {
  142.         frequency-=10;
  143.         if(frequency<min_freq)
  144.             frequency=max_freq;
  145.     }         
  146.     get_pll();
  147.     radio_write_data[0]=pll/256;
  148.     radio_write_data[1]=pll%256;
  149.     radio_write_data[2]=0xC0;
  150.     radio_write_data[3]=0x17;
  151.     radio_write_data[4]=0x00;
  152.     radio_write();
  153. }



  154. void main()
  155. {
  156. delay1ms(150);
  157. radio_write();
  158. while(1)
  159. {
  160.           if(KEY1==0)
  161.           {
  162.            delay1ms(15); //延時(shí)15ms
  163.            if(KEY1==0)
  164.      while(KEY1==0);//等待按鍵釋放
  165.            search(1);
  166.           }

  167.     if(KEY2==0)
  168.     {
  169.      delay1ms(15); //延時(shí)15ms
  170.      if(KEY2==0)
  171.      while(KEY2==0);//等待按鍵釋放
  172.      search(0);
  173.     }

  174.     if(KEY3==0)
  175.     {
  176.      delay1ms(15); //延時(shí)15ms
  177.      if(KEY3==0)
  178.      while(KEY3==0);//等待按鍵釋放
  179.           if (tt==11)//手動(dòng)選臺(tái)判斷,保證能循環(huán)選擇,不嚴(yán)禁能工作,請(qǐng)忽略
  180.              tt=-1;
  181.           tt++;
  182.           switch(tt) //手動(dòng)選臺(tái)
  183.      {
  184.        case 0:
  185.                   {
  186.                   radio_write_data[0]=0x2A;//寫入的頻率
  187.         radio_write_data[1]=0x30;
  188.                   break;
  189.                   }
  190.        case 1:
  191.                   {
  192.                   radio_write_data[0]=0x2B;
  193.         radio_write_data[1]=0x3C;
  194.                   break;
  195.                   }
  196.        case 2:
  197.                   {
  198.                   radio_write_data[0]=0x2B;
  199.         radio_write_data[1]=0xB6;
  200.                   break;
  201.                   }
  202.        case 3:
  203.                   {
  204.                   radio_write_data[0]=0x2C;
  205.         radio_write_data[1]=0x86;
  206.                   break;
  207.                   }      
  208.                   case 4:
  209.                   {
  210.                   radio_write_data[0]=0x2D;
  211.         radio_write_data[1]=0x6E;
  212.                   break;
  213.                   }      
  214.                   case 5:
  215.                   {
  216.                   radio_write_data[0]=0x2E;
  217.         radio_write_data[1]=0xB7;
  218.                   break;
  219.                   }      
  220.                   case 6:
  221.                   {
  222.                   radio_write_data[0]=0x30;
  223.         radio_write_data[1]=0xD0;
  224.                   break;
  225.                   }      
  226.                   case 7:
  227.                   {
  228.                   radio_write_data[0]=0x31;
  229.         radio_write_data[1]=0x0D;
  230.                   break;
  231.                   }      
  232.                   case 8:
  233.                   {
  234.                   radio_write_data[0]=0x31;
  235.         radio_write_data[1]=0xA0;
  236.                   break;
  237.                   }      
  238.                   case 9:
  239.                   {
  240.                   radio_write_data[0]=0x32;
  241.         radio_write_data[1]=0xB9;
  242.                   break;
  243.                   }      
  244.                   case 10:
  245.                   {
  246.                   radio_write_data[0]=0x33;
  247.         radio_write_data[1]=0x02;
  248.                   break;
  249.                   }
  250.                   case 11:
  251.                   {
  252.                   radio_write_data[0]=0x33;
  253.         radio_write_data[1]=0x4B;
  254.                   break;
  255.                   }
  256.       }
  257.           radio_write_data[2]=0xC0;//寫入的其他參數(shù)
  258.      radio_write_data[3]=0x17;
  259.      radio_write_data[4]=0x00;
  260.      radio_write();
  261.           if (tt==11)
  262.              tt=0;
  263.     }

  264.     if(KEY4==0)
  265.     {
  266.      delay1ms(15); //延時(shí)15ms
  267.      if(KEY4==0)
  268.      while(KEY4==0);//等待按鍵釋放
  269.           if (tt==0)//手動(dòng)選臺(tái)判斷,保證能循環(huán)選擇,不嚴(yán)禁能工作,請(qǐng)忽略
  270.              tt=12;
  271.           tt--;
  272.           switch(tt) //手動(dòng)選臺(tái)
  273.      {
  274.        case 0:
  275.                   {
  276.                   radio_write_data[0]=0x2A;
  277.         radio_write_data[1]=0x30;
  278.                   break;
  279.                   }
  280.        case 1:
  281.                   {
  282.                   radio_write_data[0]=0x2B;
  283.         radio_write_data[1]=0x3C;
  284.                   break;
  285.                   }
  286.        case 2:
  287.                   {
  288.                   radio_write_data[0]=0x2B;
  289.         radio_write_data[1]=0xB6;
  290.                   break;
  291.                   }
  292.        case 3:
  293.                   {
  294.                   radio_write_data[0]=0x2C;
  295.         radio_write_data[1]=0x86;
  296.                   break;
  297.                   }      
  298.                   case 4:
  299.                   {
  300.                   radio_write_data[0]=0x2D;
  301.         radio_write_data[1]=0x6E;
  302.                   break;
  303.                   }      
  304.                   case 5:
  305.                   {
  306.                   radio_write_data[0]=0x2E;
  307.         radio_write_data[1]=0xB7;
  308.                   break;
  309.                   }      
  310.                   case 6:
  311.                   {
  312.                   radio_write_data[0]=0x30;
  313.         radio_write_data[1]=0xD0;
  314.                   break;
  315.                   }      
  316.                   case 7:
  317.                   {
  318.                   radio_write_data[0]=0x31;
  319.         radio_write_data[1]=0x0D;
  320.                   break;
  321.                   }      
  322.                   case 8:
  323.                   {
  324.                   radio_write_data[0]=0x31;
  325.         radio_write_data[1]=0xA0;
  326.                   break;
  327.                   }      
  328.                   case 9:
  329.                   {
  330.                   radio_write_data[0]=0x32;
  331.         radio_write_data[1]=0xB9;
  332.                   break;
  333.                   }      
  334.                   case 10:
  335.                   {
  336.                   radio_write_data[0]=0x33;
  337.         radio_write_data[1]=0x02;
  338.                   break;
  339.                   }
  340.                   case 11:
  341.                   {
  342.                   radio_write_data[0]=0x33;
  343.         radio_write_data[1]=0x4B;
  344.                   break;
  345.                   }
  346.       }
  347.           radio_write_data[2]=0xC0;
  348.      radio_write_data[3]=0x17;
  349.      radio_write_data[4]=0x00;
  350.      radio_write();
  351.           if (tt==0)
  352.              tt=11;
  353.     }
  354. }
  355. }
復(fù)制代碼



評(píng)分

參與人數(shù) 2黑幣 +105 收起 理由
ssfc + 5 贊一個(gè)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:96682 發(fā)表于 2016-10-23 13:23 | 只看該作者
LZ,2822音量咋會(huì)小呢?不是有雙聲道電位器嘛,板上的電位器既不方便調(diào)節(jié)而且還會(huì)造成音量的不同步
回復(fù)

使用道具 舉報(bào)

板凳
ID:111350 發(fā)表于 2016-10-23 15:47 | 只看該作者
wc86110 發(fā)表于 2016-10-23 13:23
LZ,2822音量咋會(huì)小呢?不是有雙聲道電位器嘛,板上的電位器既不方便調(diào)節(jié)而且還會(huì)造成音量的不同步

帶耳機(jī)還可以,帶喇叭沒試,不知道行不行。
回復(fù)

使用道具 舉報(bào)

地板
ID:145935 發(fā)表于 2016-11-7 15:12 | 只看該作者
用按鍵調(diào)音量就完美了。
回復(fù)

使用道具 舉報(bào)

5#
ID:151105 發(fā)表于 2016-11-29 21:16 | 只看該作者
不明覺厲
回復(fù)

使用道具 舉報(bào)

6#
ID:155262 發(fā)表于 2016-12-20 00:44 | 只看該作者
好厲害
回復(fù)

使用道具 舉報(bào)

7#
ID:155262 發(fā)表于 2016-12-24 18:39 | 只看該作者
大哥啊,我怎么覺得你原理圖和代碼的接口不一樣啊
回復(fù)

使用道具 舉報(bào)

8#
ID:111350 發(fā)表于 2016-12-30 20:51 | 只看該作者
舞煬l 發(fā)表于 2016-12-24 18:39
大哥啊,我怎么覺得你原理圖和代碼的接口不一樣啊

圖是借的,對(duì)應(yīng)的自己修改就行。
回復(fù)

使用道具 舉報(bào)

9#
ID:249545 發(fā)表于 2017-11-26 16:09 | 只看該作者
家里的收音機(jī)不少,可是不堪用.廣告太多了.
鄉(xiāng)下也需要很高的靈敏度才行.
回復(fù)

使用道具 舉報(bào)

10#
ID:276348 發(fā)表于 2018-1-21 22:27 | 只看該作者
用了2822就做成立體聲的了。
回復(fù)

使用道具 舉報(bào)

11#
ID:103981 發(fā)表于 2020-6-24 17:27 | 只看該作者
感謝分享,努力學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

12#
ID:1063423 發(fā)表于 2024-4-26 08:03 來自手機(jī) | 只看該作者
普通電位器能控制單片機(jī)調(diào)音量?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线视频网站 | 欧美成年黄网站色视频 | 国产黄色在线观看 | 久久精品成人一区 | 成年男女免费视频网站 | 99热在线播放 | 国产成人精品综合 | 巨大荫蒂视频欧美另类大 | 亚洲欧美日韩久久久 | 精品一区二区三区四区外站 | 国产一区二区免费电影 | 欧美中文字幕一区二区三区亚洲 | 操网站| 国产精品一区二区久久 | 美女视频一区二区 | 欧美精品区| 超碰导航| 欧美一级在线观看 | 午夜免费看 | 精品99在线 | 成人二区三区 | 男人天堂久久 | 久久久999精品 | 日韩高清三区 | 国内精品久久精品 | 国产一区二区在线看 | 国产精品夜夜春夜夜爽久久电影 | 偷派自拍 | 国产精品久久久久久久久久三级 | 久久免费香蕉视频 | 超碰8| www国产成人免费观看视频,深夜成人网 | 久久久久久免费毛片精品 | 色婷婷综合成人av | 一级大片网站 | 亚洲视频手机在线 | 麻豆av网| 美女国产一区 | 国产一区二区不卡 | 国产精品大片 | 国产 日韩 欧美 中文 在线播放 |