该资源提供了一个使用C51语言编写的TEA5767调频收音机的源代码。TEA5767是一款高性能的立体声调频接收集成电路,常用于嵌入式系统中。源码包含了对TEA5767的I2C通信接口实现,以及PLL(锁相环)频率设置和读取功能。
在这个程序中,`radio_write_data` 数组用于设置TEA5767的控制寄存器,包括频率预设、音量、静音模式等参数。数组中的每个值对应TEA5767的一个特定寄存器,如0x2a表示设置为高灵敏度模式,0xb6和0x40分别用于设定频率范围和音量,0x11设置为低噪声增益模式,而0x40用于选择内部时钟并设置带宽。
`radio_read_data` 数组则用于存储从TEA5767读取的状态信息。`frequency` 和 `pll` 变量分别用于存储当前的频率值和锁相环设置。
`radio_write()` 函数实现了I2C通信协议,向TEA5767发送数据。首先初始化I2C,然后发送起始信号,接着写入设备地址,读取应答,再依次写入寄存器数据,并在每次写入后确认应答。最后发送停止信号,结束通信。
`get_pll()` 函数用于计算频率对应的 PLL 值。PLL(Phase-Locked Loop)是调频收音机的核心部分,它通过调整晶振频率来锁定到所选的广播频率,确保接收稳定。
在源码中,`max_freq` 和 `min_freq` 分别定义了FM广播的最高和最低频率,而`max_pll` 和 `min_pll` 是对应的 PLL 计算值。`max_pll` 和 `min_pll` 的计算基于87.5MHz至108MHz的频率范围,每个PLL步进对应10kHz的频率变化。
此外,源码还包含了一些内联函数(如`init_iic()`, `start_iic()`, `write_iic_byte()`, `read_ack_iic()`, `stop_iic()`)来处理I2C通信的细节,如发送启动、停止信号,写入数据和读取应答等。
这个源代码展示了如何使用C51语言与TEA5767芯片进行通信,设置收音机的工作参数,以及读取其状态,是学习C51编程和嵌入式系统中FM收音机设计的一个实例。对于电子爱好者和硬件开发者来说,这是一个很好的参考资源。