程序设计目标及程序运行效果说明
程序设计目标:通过本案例理解简单收音机的原理,尤其是理解收音机芯片RDA5807P的相关功能与工作原理,通过与RDA5807P芯片通信里然后设置相关寄存器的值可以收听一定频率的广播电台并且能够调节音量。

程序运行效果说明:程序初始化时是收听的是频率值为97.5的电台,将耳机插入耳机插孔之后可以在耳机中听到电台的声音。按下导航按键的左键往低频率方向调电台,按下导航按键的右键往高频率的方向调电台(能搜索的电台最大频率为,最小频率为108,最小为87.5,调频高于108时则为87.5,低于87.5时则为108),每次电台的频率加0.1或减0.1,按下按键2可以调大电台音量,按下按键1调小电台音量,第1号和第2号数码管显示当前电台音量,地6,7,8,号数码管显示当前电台频率。

程序相关电路及工作原理说明
1.使用到的引脚示意图

2.RDA5807P芯片原理
2.1 RDA5807P芯片工作模式
RDA5807P芯片提供两种不同的软件控制模式:RDA5807P Mode和TEA5767 Mode。

在TEA5767 Mode下控制接口为I2C;在RDA5807P Mode下控制接口为I2C 和 SPI,在PIN7:MODE上设置高低电平来选择。MODE:0为I2C;MODE:1为SPI。当控制接口为I2C时用CHIP ID来区分工作模式:

TEA5767 MODE CHIPID = 1100000B;

RDA5807P MODECHIP ID = 0010000B.

代码如下:

#include "FM.h"
/*初始化电台函数
*将电台初始化收听频率设置为87500
*/
void Init_Radio()
{Get_CHAN();Get_Frequency();    IIC_Radio_WriteData();Delay(50);
}/************************************RDA5807P芯片的IIC操作函数***************************************/
//IIC通信开始
void IIC_Radio_Start()
{FM_DATA=UP;FM_CLOCK=UP;FM_DATA=DOWN;Delayus(10);FM_CLOCK=DOWN;Delayus(10);
}
//IIC通信结束
void IIC_Radio_Stop()
{FM_DATA=DOWN;FM_CLOCK=UP;Delayus(10);FM_DATA=UP;Delayus(10);
}
//主机应答信号
void IIC_Radio_MACK()
{FM_DATA=DOWN;Delayus(10);FM_CLOCK=UP;Delayus(10);FM_CLOCK=DOWN;Delayus(10);FM_DATA=UP;
}
//从机应答信号
void IIC_Radio_ACK()
{unsigned char i=0;FM_CLOCK=UP;while((FM_DATA==1)&&(i<250))  i++;FM_CLOCK=DOWN;Delayus(10);
}
//写入一字节数据
void IIC_Radio_WriteByte(unsigned char Data)
{unsigned char i;for(i=0;i!=8;i++){FM_CLOCK=DOWN;Delayus(10);FM_DATA=(bit) (Data&0x80);Data=Data<<1;Delayus(10);FM_CLOCK=UP;Delayus(10);  }   FM_CLOCK=DOWN;Delayus(10);FM_CLOCK=UP;Delayus(10);
}
//往从机一次写入八字节数据
void IIC_Radio_WriteData()
{unsigned char i;IIC_Radio_Start();           //IIC开始IIC_Radio_WriteByte(0x20);                  //主机向IIC总线上写入从机的地址信息,与从机建立通信IIC_Radio_ACK();                             //从机收到后回应ACKfor(i=0;i<8;i++)                                //连续写入八字节数据{IIC_Radio_WriteByte(Radio_Write_Data[i]);IIC_Radio_MACK();}IIC_Radio_Stop();                                 //IIC停止
}   //获取CHAN值
void Get_CHAN()
{chan = Radio_Write_Data[2];chan = chan*4 + Radio_Write_Data[3]/64;
}
//获取电台频率值,即CHAN转频率
void Get_Frequency()
{frequency = 100*chan + 87000;
}
//将电台频率转化为PLL值的函数
void FrequencyToChan(void) //频率转CHAN
{chan = (frequency-87000)/100;
}
//手动搜台函数,参数flag决定是向上还是向下搜台,每次只能调频100KHZ
void Manual_Search(unsigned char flag)
{if( flag==1 )                               //flag==1,表示向上搜台,并且保证电台频率不能超出   87500~108000{frequency += 100;if( frequency>MAX_Frequency )frequency = MIN_Frequency;}else if( flag==-1 )                                  //flag==1,表示向下搜台{frequency -= 100;if( frequency<MIN_Frequency )frequency = MAX_Frequency;}FrequencyToChan();                                        //将频率转化为CHANRadio_Write_Data[2] = chan/4;Radio_Write_Data[3] = ((chan%4)<<6)|0x10;IIC_Radio_WriteData();                                    //然后将CHAN写入收音机芯片的相关寄存器实现手动调频的功能
}
//设置收音机音量,参数flag决定是增大还是减小音量
void SetVolume(unsigned char flag)
{volume = Radio_Write_Data[7] & 0x0f;if( flag==1 )                 //flag==1增大音量{if(volume==15)volume=0;else volume++;}else {if( volume==0 )              //flag==0减少音量volume=15;elsevolume--;}Radio_Write_Data[7] = (Radio_Write_Data[7]&0xf0) | (volume&0x0f);IIC_Radio_WriteData();                             //将改变后的音量值写入收音机芯片的相关寄存器从而达到调节收音音量的效果
}
//将电台频率和音量值显示到相应的数码管
void Frequency_Display()
{unsigned long fre;fre = frequency/100;volume = Radio_Write_Data[7] & 0x0f;//音量显示if( volume<10 )Display_LED_Num( volume,1,0);else{Display_LED_Num( volume/10,1,0);Display_LED_Num( volume%10,2,0);}//频率显示if(fre/1000){Display_LED_Num(fre/1000,5,0);Display_LED_Num(fre%1000/100,6,0);Display_LED_Num(fre%1000%100/10,7,1);Display_LED_Num(fre%1000%100%10,8,0);   }   else{Display_LED_Num(fre/100,6,0);Display_LED_Num(fre%100/10,7,1);Display_LED_Num(fre%100%10,8,0);}
}

STC学习:“FM收音机”原理与测试说明相关推荐

  1. am超外差收音机matlab,超外差式AM/FM收音机的调试

    实 训(习)报 告 课程名称:超外差式AM/FM收音机的调试 专 业:通信工程 班 级:053041 学 号:02 姓 名:王 倩 指导教师:别玉霞 成 绩: 完成日期: 年 月 日 任 务 书 实训 ...

  2. 车载FM收音机的性能测试

    商用汽车AM/FM收音机必须能在各种环境下可靠地工作.因为这些收音机的设计师采用数字信号处理(DSP)算法来克服反射.信号多径和衰落等效应,所以他们经常要去现场花数周的时间分析不同信号条件下的效果.而 ...

  3. FM/AM收音机原理

    原文地址::FM/AM收音机原理 - Minisky - 博客园 收音机这东西很早就开始用了,但一直都没有了解过它的原理,听说是很简单.下面记录一些笔记. 1. 基本概念 收音机是一种小型的无线电接收 ...

  4. HNU小学期计算机系统设计与创新基础训练——基于STC学习板的加密信息存储与游戏操作系统(第一部分设计思路+基础原理)

    HNU小学期计算机系统设计与创新基础训练--加密信息存储与游戏操作系统 一. 选题名称 二. 选题背景 三. 实现功能 1. 主要功能 2. 细节设计 四. 设计思路 五. 基本原理 1. 数码管与发 ...

  5. 基于RTL—SDR及Simulink的FM收音机仿真

    在有了一些rtl-sdr基础,并学习了一些通信系统建模与仿真原理后,便利用rtl-sdr模块在Simulink上进行FM收音机仿真. 目录 一.知识储备 SDR-Receiver模块原理 电台AM-D ...

  6. 湖南大学STC学习板导航键的使用

    前言:发现STC板子上的按键不够用了,想着用导航键,但无奈在网上找了很久都没有任何一个字眼是关于STC学习板导航按键的使用和详细的代码.今天下午我帅帅的学长教会了我如何去使用导航键,为了更好的巩固和理 ...

  7. RDA5807 FM收音机模块

    一. 简介   这是一个购自于淘宝网店的RDA5807调频接收模块,价格只有3块钱人民币.'   RDA5807是一颗调频广播单芯片接收调谐芯片.只需要外部非常少的元器件,便可以组成一个完整的调频广播 ...

  8. 《Go语言圣经》学习笔记 第十一章 测试

    <Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...

  9. linux上听FM程序,安装和使用Odio在Linux上收听FM收音机的方法

    Linux平台上有一些很棒的无线电应用程序可用于在Linux上收听FM Radio(收音机),本文介绍Odio,包括安装和使用它来收听FM收音机的方法. 启用S​​nap支持和安装Odio 由于Sna ...

  10. 由浅入深学习Apache httpd原理与配置

    由浅入深学习Apache httpd原理与配置 原贴:http://jackcui.blog.51cto.com/11877206/1858989 文章防盗链地址:http://jackcui.blo ...

最新文章

  1. 2022-2028年中国除螨仪行业市场前瞻与投资战略规划分析报告
  2. java怎么给类中的私有变量赋值_Java学习笔记分享 如何理解接口抽象类和关键字...
  3. python udp传输 报错:OSError: [WinError 10040] 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。
  4. linux 压缩文件夹的一部分
  5. 5.1 tushare包介绍
  6. id int primary key auto_increment是什么意思
  7. Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)
  8. 200 行代码实现一个滑动验证码
  9. java成神之——Fork/Join基本使用
  10. python列表的排序方法_Python 列表 sort() 方法
  11. java里面比较重要的东西_Java面向对象程序设计中很重要的一些东西
  12. JavaScript 计算细节解惑
  13. kworker内核工作队列详解
  14. Android 11.0 12.0系统添加水印(仿安全模式水印)
  15. 计算机上直接拆硬盘在硬盘盒中使用,触目惊心 西数1TB移动硬盘拆解_硬盘/光驱盒_移动存储-中关村在线...
  16. 微信小程序开发:微信小程序里面集成百度地图的步骤
  17. css 从右到左的方向调整
  18. 16. FizzBuzz
  19. 正文 第二章 通背拳
  20. python读取数据出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid contin

热门文章

  1. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 28 章 监控数据库活动_28.3. 查看锁
  2. cocos creator 文字描边效果
  3. swagger-ui多端口自动切换优化
  4. WPF-21:WPF实现仿安卓的图案密码键盘(改进)
  5. 【自然框架】稳定版的Demo —— 三:主从表的维护方式
  6. 多表查询过滤重复数据_数据分析工具SQL—多表查询
  7. 前端 encodeURI 为什么要编码两次
  8. Spring Boot中Bean管理
  9. mysql engine类型 小项目_项目中常用的19条MySQL优化
  10. echarts 加载优化_【第1615期】React Native 图表性能优化实践