标题: 达成小时候的想法,半个指头大的收音机制作成功 单片机+RDA5807源程序 [打印本页]

作者: lovexulu    时间: 2020-7-24 16:19
标题: 达成小时候的想法,半个指头大的收音机制作成功 单片机+RDA5807源程序
上次假期实验了一个收音机,感觉蛮好的,但是挺简陋,小时候总喜欢小而精致的东西,于是这次就打板做了个小小的收音机。
锂电供电,0.91oled,可充电,拨轮开关,左右拨动自动搜台,按下功能切换,二级设置菜单,手动搜台,音量调整,重低音,频段等,中键长按关机,长按(1.5秒)开机。电池电量检测,当然还有优化的地方,慢慢来吧,但是但是已经可以用了!上图看看吧。



比一块89c52小点,旁边是做好的空板。

开始调试



基本完工的样子,烧录引脚引出脚还在。




电路图


画好的PCB,用的立创eda


正面背面
下面是部分代码
---------------------------------------------------------------又乱又长,没优化------------------------------------------------------------
#include<rda.h>
#include<ec11.h>
#include<i2c.h>
#include<5807.h>
#include<oled.h>
#include<bmp.h>

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(keynum==6)//长按关机开外部中断
                {
                guanji();
                }
                if(keynum==10)//特殊情况P3.3重启进入boot
                        IAP_CONTR=0x60;

--------------------------------------------代码又乱又长,有附件各位慢慢看。-----------------------------------------------------------------------


!!!!

247627cf65e68c1975bd4f8b8da7637.jpg (121.21 KB, 下载次数: 219)

247627cf65e68c1975bd4f8b8da7637.jpg

51hei.png (11.06 KB, 下载次数: 199)

51hei.png

rdAv0.rar

128.06 KB, 下载次数: 205, 下载积分: 黑币 -5

代码


作者: nsj21n    时间: 2020-7-24 20:26
支持DIY,给楼主无私分享点赞!
作者: 鹰的翅膀    时间: 2020-7-25 11:27
不错,就是会硬件不会编程。
作者: lovexulu    时间: 2020-7-26 16:04
鹰的翅膀 发表于 2020-7-25 11:27
不错,就是会硬件不会编程。

编程我也不在行,在学习中。
作者: lisx    时间: 2020-8-5 17:03
请问显示屏型号是多少?有规格书吗?详细的物料清单能分享一下吗?,自己也想做一个来学习,我现在是做硬件方面的,对软件这方面很感兴趣,万分感谢!
作者: lovexulu    时间: 2020-8-7 00:00
lisx 发表于 2020-8-5 17:03
请问显示屏型号是多少?有规格书吗?详细的物料清单能分享一下吗?,自己也想做一个来学习,我现在是做硬件 ...

显示屏,中景园的0.91oled,128*32.物料清单在sch里面可以直接导出
作者: xiangdan    时间: 2020-8-7 11:47
感谢楼主分享点赞!
作者: lisx    时间: 2020-8-12 11:20
lovexulu 发表于 2020-8-7 00:00
显示屏,中景园的0.91oled,128*32.物料清单在sch里面可以直接导出

SCH的文件我打不开,是用哪个软件?kicad里面所有文件我都打不开,我用的是PADS
作者: zhike    时间: 2020-8-19 22:25
请教,自动收台频率不准,声音不清楚 。有什么办法能够手动微调?
作者: hhdsdy    时间: 2020-8-19 23:27
找个合适的运动手腕外壳改装进去
作者: brave_ruan    时间: 2020-8-21 11:20
楼主 你好在吗? 请教一下, 我按照你的资料自己画的板多次检查没有发现问题, 显示都是正常的,就是没有电台声音? 请问会是那些方面导致的呢?
作者: brave_ruan    时间: 2020-8-21 11:30
楼主, 你好, 我按照你的资料仿制了一个,只是自己画的板,显示都是正常的,就是插入耳机没有声音,多次检查也没有发现问题,晶振也是起振的(频率32.768KHz),还有你的电路图中的R3电阻我没有安装,不然插入耳机屏幕就显示不正常了。 插入耳机没有声音,也没有电台这是会哪些因素导致的呢?
作者: lovexulu    时间: 2020-8-22 13:10
brave_ruan 发表于 2020-8-21 11:30
楼主, 你好, 我按照你的资料仿制了一个,只是自己画的板,显示都是正常的,就是插入耳机没有声音,多次检 ...

有个预留电阻是为了检测是否插入耳机,如果没声音,要检查5807是否被启动,检查i2c通讯引脚对不对,如果显示正常,尝试控制芯片,看下功能是否正常,目前我在外地没办法帮到太多
作者: winsinzhao    时间: 2021-8-29 22:01
请问一下为什么我用stc12c5a60s2,要注析掉ADCINT后才能显示,但就不显示频率只显示<   .MHZ>,不显示频率了void ztxs()//上电初始化
{
        //adcint();
        oledinit();       
        rdainit();  //RDA5807 初始化
        freqset(9200);  //频率设置
        volset(15);
        seeset(8); //搜台灵敏度设置 0~15 默认是 7 越低接受到的电台越多
        seektion(1); // 搜台方向 1 向上搜索 0 向下搜索
        delay_ms(300);       
        oledclr();
        oledbmp(0,0,7,1,BMP2);
        //if(nk==1)
        {               
        oledchar(32,2,'<',16);
        oledchar(64,2,'.',16);
        oledstr(88,2,"MHz>",16);
        }
        oledstr(76,-1,"Bass",8);       
作者: nmgbtzyf    时间: 2021-8-30 20:14
还是有点大应该可以再小一些,像间谍那种。007专用。
作者: lovexulu    时间: 2021-8-31 11:21
winsinzhao 发表于 2021-8-29 22:01
请问一下为什么我用stc12c5a60s2,要注析掉ADCINT后才能显示,但就不显示频率只显示<   .MHZ>,不显示频率了v ...

应该是mcu型号不同,adc初始化,还有i2c接口初始化不一样,请参考官方的手册。
作者: cooleaf    时间: 2021-8-31 13:00
有创意,很牛B的说!体积好小。
作者: winsinzhao    时间: 2021-9-1 08:14
winsinzhao 发表于 2021-8-29 22:01
请问一下为什么我用stc12c5a60s2,要注析掉ADCINT后才能显示,但就不显示频率只显示<   .MHZ>,不显示频率了v ...

请问一下按键部分程序用的是拔动开关,还是EC11编码,开关,开关的接法,是KA接编码开关的A脚,KB接编码开关B脚,KC是不是接三脚中的中间脚,KXX是不是就接两脚那边的一个脚,另一个脚接地。程序是否上电就自动开,收音初始化是没有问题的,       rdainit();  //RDA5807 初始化
        freqset(9200);  //频率设置
        volset(15); freqset(9200)
作者: winsinzhao    时间: 2021-9-1 08:19
请问一下按键的接法,按键用的是编码开关,还是MP3那种拔动开关,程序里的KA是不是就EC11三排脚那排的A脚,KB是不是就EC11三排脚那排的B脚,KC是不是就EC11三排脚那排的中间脚,KXX是不接另外一排两排脚其中一脚,另外一脚接地,程序是不是上电就自动开机的,现在收音初始化是没问题的,  rdainit();  //RDA5807 初始化
        freqset(9200);  //频率设置 收音是有电台声音输出的就显示不正常。
作者: dzc3458    时间: 2021-9-9 08:31
lisx 发表于 2020-8-5 17:03
请问显示屏型号是多少?有规格书吗?详细的物料清单能分享一下吗?,自己也想做一个来学习,我现在是做硬件 ...

看样子是0.9x寸的OLED显示屏
作者: 科长2008    时间: 2021-10-5 21:23
我也想做一个。不知道程序要多少SRAM和空间才可以。256bytes的SRAM,8K空间可以做不?
作者: 新乡家电维修    时间: 2021-10-6 16:05
和我一样,我小时候也喜欢收音机,梦想也是灵敏度高立体FM收音机,手工刻画线路板也干过,那时候没什么爱好发展,不像现在电子产品到处都是,孩子沉迷电脑游戏,手机,
作者: pxm2599    时间: 2022-5-9 14:32

你这个MCU是16脚的 28脚的可以用吗     STC15W408AS  28脚的可以用吗

作者: pxm2599    时间: 2022-5-9 16:46
下载的文件 里面的原理图不是这个版本
作者: zm_l0840    时间: 2023-9-6 10:31
程序里没看到外部中断初始化,能好用吗?





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1