不能随便出去的时期,用手头的零件做个数字收音机,收音模块5807M,IIC通讯,0.91寸OLED IIC通讯的,EC11,一对一编码器,自带一个按键,就用编码器+自带按键操作,单片机翻了翻盒子,发现两片STC15W408AS,就这个了。
      折腾了两天,昨晚上调试成功,今天整了一份Kicad的图纸,带自己随便画的一个小板图,还有程序全套。

制作出来的实物图如下:
1.jpg

2.jpg

3.jpg

电路原理图如下:
4.png

5.png

6.png

单片机源程序如下:
/*---------------数字调频收音机------------------*/
  • /*           学习之用,请勿商用                  */
  • /*           转载请注明:数字收音机RDAV1.0       */
  • /*-----------------------------------------------*/
  • #include<rda.h>
  • #include<ec11.h>
  • #include<i2c.h>
  • #include<5807.h>
  • #include<oled.h>
  • #include<bmp.h>
  • void main()
  • {
  •         u8 keynum;
  •         u32 rxfreq=9480,vol=2,tn,vol1,xfreq,yfreq;
  •         oledinit();      
  •         oledbmp(0,0,128,4,BMP1);
  •       
  •         rdainit();  //RDA5807 初始化
  •         freqset(rxfreq);  //频率设置
  •         volset(vol);      //音量设置
  •         seeset(6); //搜台灵敏度设置,灵敏度太高会导致杂音,越小灵敏度越高,最大15。
  •         seektion(1);
  •       
  •         delay_ms(3000);
  •         oledclr();
  •         oledchine(0,0,0);
  •         oledchine(16,0,1);
  •         oledchar(40,0,'-',16);
  •       
  •         oledchar(72,0,'.',16);
  •       
  •         oledstr(88,0,"MHz-",16);
  •         oledchine(0,2,2);
  •         oledchine(16,2,3);
  •         oledchar(64,2,'-',16);
  •         oledchar(88,2,'-',16);
  •       
  •         while(1)
  •         {
  •         keynum=kpass();      
  •                
  •                 switch(keynum)
  •                 {
  •                         case 0:
  •                                 break;
  •                         case 1:
  •                             rxfreq+=10;     //频率+
  •                                 if(rxfreq>10800)
  •                                 rxfreq=10800;
  •                                 freqset(rxfreq);
  •                                 break;
  •                         case 2:
  •                                 rxfreq-=10;    //频率-
  •                                 if(rxfreq<8830)
  •                                 rxfreq=8830;
  •                                 freqset(rxfreq);
  •                                 break;
  •                         case 3:
  •                                 vol+=1;       //音量+                              
  •                                 if(vol>15)
  •                                 vol=15;
  •                                 volset(vol);  
  •                                 break;
  •                         case 4:
  •                                 vol-=1;       //音量-
  •                                 if(vol<1)
  •                                 vol=1;
  •                                 volset(vol);  
  •                                 break;                              
  •                 }      
  •                     if(tn!=rxfreq|vol1!=vol)
  •                 {
  •                         tn=rxfreq;
  •                         vol1=vol;
  •                         xfreq=rxfreq/100;
  •                         yfreq=rxfreq/10%10;
  •                 olednum(72,2,vol,2,16);
  •                 olednum(48,0,xfreq,3,16);
  •                         olednum(80,0,yfreq,1,16);
  •                 }
  •                
  •         }
  • }
  • 复制代码