基于STM32单片机FM调频TEA5767功放收音机液晶显示设计
1、系统功能介绍
-
系统构成:
- 本设计由STM32F103C8T6单片机电路+液晶1602显示电路+收音机模块TEA5767电路+按键电路+LM386喇叭功放电路组成。
-
系统功能:
- 1、通过LCD1602液晶实时显示收音机的频率。
- 2、通过按键可以调节频率,当调制解调成功后,喇叭输出广播或者通过耳机进行收听。
- 3、频率调节范围:87.5MHZ–108MHZ。
- 4、耳机和喇叭只能进行一个接受,有板载喇叭。
-
根据本篇文章完成毕业设计的开题报告、任务书、设计等
2、资料下载
- 资料下载链接:https://download.csdn.net/download/qq_39020934/89810067
- 更多设计视频:https://space.bilibili.com/3537120073353692
3、系统电路介绍
3.1、STM32单片机最小系统设计
- STM32系列处理器是意法半导体ST公司生产的一种基于ARM 7架构的32位、支持实时仿真和跟踪的微控制器。选择此款控制芯片是因为本系统设计并非追求成本的最低或更小的功耗,而是在实现本设计功能的前提下能够提供更丰富的接口和功能以便于设计实验系统各实验项目所需的外围扩展电路。此款控制芯片在完成单片机课程的学习后上手较为容易,在医疗器械中应用广泛,具有很好的学习、实验研究价值。
STM32的主要优点:
- (1)使用ARM最新的、先进架构的Cortex-M3内核
- (2) 优异的实时性能
- (3) 杰出的功耗控制
- (4) 出众及创新的外设
- (5) 最大程度的集成整合
- (6) 易于开发,可使产品快速将进入市场
单片机最小系统电路图如下图所示
实物图:
3.2、LM386功率放大器电路设计
- 本设计扬声器放大电路选择LM386芯片进行放大,放大声音可调。
- LM386是美国国家半导体公司生产的音频功率放大器,是一种音频集成功放,具有自身功耗低、更新内链增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。
电路原理图:
实物图:
3.3、LCD1602液晶显示模块电路设计
- LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。
LCD1602主要技术参数如下
- (1)显示容量为16×2个字符;
- (2)芯片工作电压为4.5~5.5V;
- (3)工作电流为2.0mA(5.0V);
- (4)模块最佳工作电压为5.0V;
- (5)字符尺寸为2.95×4.35(W×H)mm。
电路原理图:
实物图:
3.4、按键电路设计
- 轻触按键是按键产品下属的一款分类产品,它其实相当于是一种电子开关,只要轻轻的按下按键就可以是开关接通,松开时是开关就断开连接,实现原理主要是通过轻触按键内部的金属弹片受力弹动来实现接通和断开的。
- 在本系统中,按键作为系统的输入,起到了人机交互的枢纽作用。按键的单片机控制引脚默认为高电平,当按键按下后,单片机的相关引脚则变成低电平。进而实现对系统的手动输入。电路中电阻作用为上拉电阻,保证按键信号的稳定输出。其电路原理图如下图所示。
电路原理图:
实物图:
3.5、TEA5767收音机模块电路设计
- TEA5767是飞利浦公司生产的一款收音机芯片,FM收音功能,这个功能主要是有FM收音模块来完成。其中FM收音模块的核心就是下面的Philips(飞利浦)TEA5767。这是一块性能比较良好的FM收音芯片,很多的MP3都是用这个型号来实现FM收音功能。高灵敏度,高稳定性,低噪音。
- 本收音机模块采用飞利蒲公司FM调频专用芯片模组TEA5767,板上采用飞利蒲公司耳机功放芯片TDA1308作为音频放大。板载3.5MM 音频接口 可以直接接耳机、功放等。
电路原理图:
实物图:
4、程序设计
4.1、LCD显示数据
void LCDshow(void)//lcd显示
{
num1=FM_FREQ/100000000; //提取频率值
num2=(FM_FREQ%100000000)/10000000;
num3=(FM_FREQ%10000000)/1000000;
num4=(FM_FREQ%1000000)/100000;
Lcd_1Put(4, 1, tab1[num1]);//显示具体数值
Lcd_1Put(5, 1, tab1[num2]);
Lcd_1Put(6, 1,tab1[num3]);
Lcd_1Put(7, 1, '.');
Lcd_1Put(8, 1, tab1[num4]);
Lcd_1Put(9, 1,'M');//
Lcd_1Put(10,1,'H');//
Lcd_1Put(11,1,'Z');//
}
4.2、按键初始化
void KEY_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
//init GPIOA.13,GPIOA.15 上拉输入
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
4.3、LCD1602初始化
void Lcd_GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //声明结构体
/********Data端口设置*************/
RCC_APB2PeriphClockCmd(RCC_GPIO_DATA, ENABLE); //打开端口B时钟
GPIO_InitStructure.GPIO_Pin = GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN; // DB8~DB15
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //标准输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIO_DATA_0, &GPIO_InitStructure); //初始化端口
/********使能端口设置**********/
RCC_APB2PeriphClockCmd(RCC_GPIO_EN, ENABLE); //打开端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_EN_PIN; // 使能端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //标准输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIO_EN, &GPIO_InitStructure);
/********读/写端口设置**********/
RCC_APB2PeriphClockCmd(RCC_GPIO_RW, ENABLE); //打开端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_RW_PIN; // 使能端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //标准输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIO_RW, &GPIO_InitStructure);
/********指令/数据端口设置**********/
RCC_APB2PeriphClockCmd(RCC_GPIO_RS, ENABLE); //打开端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_RS_PIN; // 使能端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽复用输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIO_RS, &GPIO_InitStructure);
}
4.4、TEA5767收音机模块初始化
void TEA5767Init(void)
{
SCL_OUT();
SDA_OUT();
numbyte = 5;
numbyte_AMP=5;
ADDRESS_SEND = 0xC0;// TEA5767写地址 1100 0000
ADDRESS_RECEIVE=0XC1;//TEA5767读地址 1100 0001
ADDRESS_AMP=0X8E;
FM_PLL=0X302C;
FM_FREQ=97000000; //开机预设频率
PLL_HIGH=0;
PLL_LOW=0;
delay_ms(100);// delay100ms();
delay_ms(100);//delay100ms();
I2C_byte1=0XF0; //FM模块预设值
I2C_byte2=0X2C;
I2C_byte3=0XD0;
I2C_byte4=0X10;
I2C_byte5=0X40;
byte1=0X27;
byte2=0X40;
byte3=0X42;
byte4=0X46;
byte5=0XC3;
sendnbyte(&ADDRESS_SEND,numbyte);
delay_ms(100);//delay100ms();
AMP_sendnbyte(&ADDRESS_AMP,numbyte_AMP);
}