第四章 软件设计 4.3 收音机频率调节模块软件设计
4.3.1 频率计算软件设计
频率的计算和转换是TEA5767实现收音功能的重要组成部分,这部分的变成原理流程图如图4-2所示。
开始初始化TEA5767读TEA5767状态并转化为频率读TEA5767地址由频率计算PLL由PLL计算频率结束 图4-2 频率计算流程图
这部分设计包括两部分,主要程序为: //由PLL计算频率 void Get_Frequency(void) {
unsigned char hlsi; unsigned int npll = 0;
npll = Pll_Data;
hlsi = radio_read_data[2]&0x10; if (hlsi)
Frequency_Data = long)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25-225); //单位:KHz else
频率
26
(unsigned
第四章 软件设计 Frequency_Data 单位:KHz }
//由频率计算PLL void Get_Pll(void) {
unsigned char hlsi;
hlsi = radio_read_data[2]&0x10; if (hlsi) Pll_Data 率单位:k else Pll_Data 率单位:k }
= =
= (unsigned
long)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25+225); //频率
(unsigned
int)((float)((Frequency_Data+225)*4)/(float)REFERENCE_FREQ); //频
(unsigned
int)((float)((Frequency_Data-225)*4)/(float)REFERENCE_FREQ); //频
4.3.2 自动搜台软件设计
启用自动搜台功能需要长按减频率键,自动搜台的软件设计过程如图4-3所示。
27
第四章 软件设计 开始读TEA5767状态,并转换成频率由频率计算PLL判断mode=1?频率增加搜台频率增加搜台存储数据调用IIC读数据读频率结束 图4-3 自动搜台程序流程图
自动搜台部分的主要程序为:
//自动搜台,mode=1,频率增加搜台; mode=\频率减小搜台\void Auto_Search(unsigned char mode) {
Radio_Read(); Get_Pll(); if(mode) {
radio_write_data[2] = 0xb1; if(Pll_Data > max_pll) {
Pll_Data = min_pll; } } else {
radio_write_data[2] = 0x41; if(Pll_Data < min_pll)
28
第四章 软件设计 {
Pll_Data = max_pll; } }
radio_write_data[0] = Pll_Data/256+0x40; radio_write_data[1] = Pll_Data%6; radio_write_data[3] = 0x11; radio_write_data[4] = 0x40;
ATIICxx_PWrite(&radio_write_data[0],5); Radio_Read();
while(!(radio_read_data[0]&0x80)) //RF电台就绪标志 {
Radio_Read(); } }
4.3.3手动搜台软件设计
启用手动搜台功能需要长按加频率键,手动搜台的软件设计过程如图4-4所示。
29
第四章 软件设计 开始TEA5767初始化读TEA5767状态,并转换成频率判断mode=1加0.1MHz搜台减0.1MHz搜台由频率计算PLL存数据作显示用调用IIC函数读数据读频率结束 图4-4 手动搜台程序设计流程图
手动搜台部分的主要程序为:
//手动设置频率,mode=1,+0.1MHz; mode=\不用考虑TEA5767用于搜台的相关位:SM,SUD
void Search(unsigned char mode) {
Radio_Read(); if(mode) {
Frequency_Data += 100;
if(Frequency_Data > max_freq)//如果频率值大于最大值则将频率置最小值
Frequency_Data = min_freq; } else {
30

