有趣的小项目:半个指头大的收音机制作成功 单片机+RDA5807源程序

各位小伙伴大家好! 好久不见啊 !
最近忙着考研,一直在复习,没有像以前那么多时间来做小项目了,所以文章更新的有点慢,前几天看到一个坛子里做了个指头收音机,我觉得很好玩,所以也做了一个

废话不多说,因为这个项目比较简单,所以直接说一下过程

功能设置:锂电供电,0.91oled,可充电,拨轮开关,左右拨动自动搜台,按下功能切换,二级设置菜单,手动搜台,音量调整,重低音,频段等,中键长按关机,长按(1.5秒)开机。电池电量检测,当然还有优化的地方,慢慢来吧,但是但是已经可以用了!上图看看吧。
有趣的小项目:半个指头大的收音机制作成功 单片机+RDA5807源程序_第1张图片

原理图如下:
有趣的小项目:半个指头大的收音机制作成功 单片机+RDA5807源程序_第2张图片
PCB图
有趣的小项目:半个指头大的收音机制作成功 单片机+RDA5807源程序_第3张图片
有趣的小项目:半个指头大的收音机制作成功 单片机+RDA5807源程序_第4张图片
下面时参考代码,因为时间仓促,写的有些冗长,你们可以自己优化一下,或者也可以重新写一下

#include
#include
#include
#include<5807.h>
#include
#include

u8 keynum,see=4,seen,zz=0,zz1,tt1,Bs=1,Bsn=1,bass=1,bassn=1;
u32 rxfreq=9480,vol=2,tn=0,vol1,xfreq,yfreq,drs,drss,txt,fh=0,fh1=0,adcdat=0,adcdat1=1;
u8 nk=0,nk1=1,//功能键状态判断
nsk=0,nsk1=5;//次级功能键判断

void adcint()
{
P1ASF=0x01;
ADC_RES=0;
ADC_CONTR=0xe0;//复位
}

u32 adcget()
{
u32 temp;
ADC_CONTR|=0x08;
nop();
nop();
nop();
nop();
while(!(ADC_CONTR&0x10));
ADC_CONTR=0xe0;//复位清除转换完成标志
temp=(ADC_RES*33)>>8;
return temp;
}

void ztxs()//上电初始化
{
adcint();
oledinit();
rdainit(); //RDA5807 初始化
freqset(rxfreq); //频率设置
volset(vol);
seeset(see); //搜台灵敏度设置 0~15 默认是 7 越低接受到的电台越多
seektion(1); // 搜台方向 1 向上搜索 0 向下搜索
delay_ms(300);
oledclr();
oledbmp(0,0,7,1,BMP2);
if(nk==0)
{
oledchar(32,2,’<’,16);
oledchar(64,2,’.’,16);
oledstr(88,2,“MHz>”,16);
}
oledstr(76,-1,“Bass”,8);
}

void guanji()
{
oledoff();//关闭显示
FMen(0);//关闭收音机
INT_CLKO|=0x10;//开启中断INT02
EA=1;//中断使能
PCON=0x02;//掉电
nop();
nop();
delay_ms(1000);
oledon();
FMen(1);
freqset(rxfreq);
}

void kkpass()
{
keynum=kpass();
if(keynum!=0)
{
fh=0;
fh1=0;
if(keynum6)//长按关机开外部中断
{
guanji();
}
if(keynum
10)//特殊情况P3.3重启进入boot
IAP_CONTR=0x60;

鉴于博客篇幅限制,只能写部分代码

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要完整代码或设计文件,请加QQ分享群,本博客所有代码开源下载,或私信我,看到后会第一时间回复。
谢谢!

你可能感兴趣的:(编程,电路,PID算法,单片机,编程,算法)