用手头的零件做个数字收音机,收音模块5807M,IIC通讯,0.91寸OLED IIC通讯的,EC11,一对一编码器,自带一个按键,就用编码器+自带按键操作,单片机翻了翻盒子,发现两片STC15W408AS,就这个了。
折腾了两天,昨晚上调试成功,今天整了一份Kicad的图纸,带自己随便画的一个小板图,还有程序全套。
制作出来的实物图如下:
电路原理图如下:
单片机源程序如下:
- /*---------------数字调频收音机------------------*/
- /* 学习之用,请勿商用 */
- /* 转载请注明:数字收音机RDAV1.0 */
- /*-----------------------------------------------*/
- #include
- #include
- #include
- #include<5807.h>
- #include
- #include
- 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);
- }
-
- }
- }