完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
因为这个项目比较简单,所以直接说一下过程
功能设置:锂电供电,0.91oled,可充电,拨轮开关,左右拨动自动搜台,按下功能切换,二级设置菜单,手动搜台,音量调整,重低音,频段等,中键长按关机,长按(1.5秒)开机。电池电量检测,当然还有优化的地方,慢慢来吧,但是但是已经可以用了!上图看看吧。 原理图如下: 下面时参考代码,因为时间仓促,写的有些冗长,你们可以自己优化一下,或者也可以重新写一下 #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(keynum10)//特殊情况P3.3重启进入boot IAP_CONTR=0x60; |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9050 浏览 16 评论
4084 浏览 18 评论
1169浏览 3评论
602浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
593浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2331浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 19:48 , Processed in 1.212571 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号