包含1602和tft两个版本,第一版已调试完毕,问题记录在调试笔记里面了,第二版会接着完善
制作出来的实物图如下:
单片机源程序如下:
- #include "RDA5807.h" //RDA5807M
- void RDA5807Write(uchar addr,uint dat) //RDA5807M寄存器写入函数
- {
- OpenIIC();
- IICsendByte(RDA_WRITE);//输入器件地址。
- IIC_Wait_Ack();
- IICsendByte(addr);//寄存器地址
- IIC_Wait_Ack();
- IICsendByte(dat>>8);//输入数据高8位。
- IIC_Wait_Ack();
- IICsendByte(dat&0xff);//输入数据低8位。
- IIC_Wait_Ack();
- CloseIIC();
- }
- uint RDA5807Read(uchar addr) //RDA5807M寄存器读函数
- {
- uint num;//读出数据的存放。
- uchar temph,templ;
- OpenIIC();
- IICsendByte(RDA_WRITE);//发送要读取的器件。
- IIC_Wait_Ack();
- IICsendByte(addr);//发送寄存器地址。
- IIC_Wait_Ack();
- OpenIIC();
- IICsendByte(RDA_READ);//发送器件地址,确定数据传输方向。
- IIC_Wait_Ack();
- temph=IICReadByte(1);//读取数据内容-高8位
- templ=IICReadByte(0);//读取数据内容-低8位
- CloseIIC();
- num=(temph<<8)|templ; //16位数据
- return num;
- }
- void RDA5807Init()
- {
- RDA5807Write(RDA_R02,0x0002);//软复位
- delayms(50);
- RDA5807Write(RDA_R02,0xD281);//立体声-向上扫描-到上下限时停止扫描-上电
- delayms(500);
- RDA5807Write(RDA_R03,0x0008);//band是76-108M步进100k
- RDA5807Write(RDA_R04,0x0040);//基本配置75us去加重
- RDA5807Write(RDA_R05,0x8882);//搜索阈值8 音量2
- }
- void Set_Freq(uint freq) //设置频率
- {
- uint temp;
- // uint a;
- // freq=freq-870;
- temp=RDA5807Read(RDA_R03);
- delayms(10);
- // a=temp>>6;
- // freq=a+freq;
- temp&=0x001f;
- temp=(freq<<6)|temp; //
- // temp=freq<<6;
- temp|=1<<4;
- delayms(10);
- // temp|=0x0010;
- RDA5807Write(RDA_R03,temp);
- delayms(20);
- while((RDA5807Read(RDA_R0B)&(1<<7))==0);
- }
- void Set_Volume(uchar vol) //设置音量
- {
- uint temp;
- temp=RDA5807Read(RDA_R05);
- delayms(10);
- temp&=0xfff0;
- temp=vol|temp;
- delayms(10);
- // temp|=0x0010;
- RDA5807Write(RDA_R05,temp);
- delayms(20);
- }
- void Set_Mute(uchar mute) //设置静音
- {
- uint temp;
- temp=RDA5807Read(RDA_R02);
- delayms(10);
- temp&=0xbfff;
- temp=(mute<<14)|temp;
- delayms(10);
- // temp|=0x0010;
- RDA5807Write(RDA_R02,temp);
- delayms(20);
- }
- void Seek_FM_UP() //向上自动搜台
- {
- uint temp;
- temp=RDA5807Read(RDA_R02);
- delayms(10);
- temp=temp&0xfc7f;
- temp=(6<<7)|temp;
- RDA5807Write(RDA_R02,temp);
- while((RDA5807Read(RDA_R0A)&(1<<14))==0);
- }
- void Seek_FM_DOWN() //向下自动搜台
- {
- uint temp;
- temp=RDA5807Read(RDA_R02);
- delayms(10);
- temp=temp&0xfc7f;
- temp=(2<<7)|temp;
- RDA5807Write(RDA_R02,temp);
- while((RDA5807Read(RDA_R0A)&(1<<14))==0);
- }
复制代码 全部资料51hei下载地址:
调试笔记.doc
(27 KB, 下载次数: 82)
|