各位小夥伴大家好! 好久不見啊 !
最近忙着考研,一直在複習,沒有像以前那麼多時間來做小項目了,是以文章更新的有點慢,前幾天看到一個壇子裡做了個指頭收音機,我覺得很好玩,是以也做了一個
廢話不多說,因為這個項目比較簡單,是以直接說一下過程
功能設定:锂電供電,0.91oled,可充電,撥輪開關,左右撥動自動搜台,按下功能切換,二級設定菜單,手動搜台,音量調整,重低音,頻段等,中鍵長按關機,長按(1.5秒)開機。電池電量檢測,當然還有優化的地方,慢慢來吧,但是但是已經可以用了!上圖看看吧。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31UNRpWT4lEROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2EzN0EDOxETM1ETOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
原理圖如下:
PCB圖
下面時參考代碼,因為時間倉促,寫的有些冗長,你們可以自己優化一下,或者也可以重新寫一下
#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(keynum6)//長按關機開外部中斷
{
guanji();
}
if(keynum10)//特殊情況P3.3重新開機進入boot
IAP_CONTR=0x60;
鑒于部落格篇幅限制,隻能寫部分代碼
最後,如果有什麼意見或者建議歡迎您留言給我,讓我們共同學習一起進步,
如果需要完整代碼或設計檔案,請加QQ分享群,本部落格所有代碼開源下載下傳,或私信我,看到後會第一時間回複。
謝謝!