基于TEA5767的数字式收音机设计报告
单片机控制的TEA5767高性能FM收音机DIY

[分享]单片机控制的TEA5767高性能FM收音机DIY(含原理图,源代码)Post By:2007-10-10 11:41:57本帖向大家介绍新型FM收音机的设计及制作。
想想当年我们是什么做收音机的。
高放混频,解调,立体声解码,锁相等好几个芯片,线路焊好了,但痛苦才开始。
有设备还好些,没有更苦。
为了找谐振点,不停的调电容电感,不停的换电容电感······终于有声音,但始终都没那么好。
现在,痛苦终于过去。
因为有了新一代的芯片TEA5767。
TEA5767 ,零调整。
线路又极其简单。
一个晶振,一个电感,几个电容完了。
通过I2C 接口送几个字节的数据进去就ok。
此主题相关图片如下:此主题相关图片如下:源代码:可以存台的版本。
本文用到的收音模块可到:/参考// WINAVR GCC// ATmega8// clock: internal 1Mhz#include <avr/io.h>#include <avr/interrupt.h>#include <avr/signal.h>#include <avr/delay.h>#include <avr/eeprom.h>#include '3310LCD_function.c'#define uchar uint8_t#define uint uint16_t#define SLA_W 0b11000000 #define SLA_R 0b11000001uchar senddata[5] ;uchar readdata[5] ;uchar search = 0;uchar search_up = 0;uchar mode = 1;uchar station = 0;uint pll = 0x29da; // 88Mhz uint fre = 8750;//-------------------------------// 延时void delay_ms(uint ms){uint i;for(i=0;i<ms;i++)_delay_loop_2(250);}//I2C主机模式输出void set5767(void){uchar i = 0;TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // SEND START SIGNAL while (!(TWCR & (1<<TWINT))); // WAIT FOR START SIG//if ((TWSR & 0xF8) != START) ERROR();TWDR = SLA_W; // send addressTWCR = (1<<TWINT) | (1<<TWEN);while (!(TWCR & (1<<TWINT)));//if ((TWSR & 0xF8) !=MT_SLA_ACK) ERROR();for ( i = 0; i < 5; i++ ){TWDR = senddata;TWCR = (1<<TWINT) | (1<<TWEN); // send datawhile (!(TWCR & (1<<TWINT)));// if ((TWSR & 0xF8) != MT_DATA_ACK) ERROR();}TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //SEND STOP SIGNAL//LCD_write_english_string(60,3,'sOK');}//I2C主机模式输入void read5767(void){uchar i = 0;TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // SEND START SIGNAL while (!(TWCR & (1<<TWINT))); // WAIT FOR START SIG//if ((TWSR & 0xF8) != START) ERROR();TWDR = SLA_R; // send addressTWCR = (1<<TWINT) | (1<<TWEN);while (!(TWCR & (1<<TWINT)));for ( i = 0; i < 5; i++ ){TWCR = (1<<TWINT) | (1<<TWEN); // read datawhile (!(TWCR & (1<<TWINT)));readdata = TWDR ;// if ((TWSR & 0xF8) != MT_DATA_ACK) ERROR();}TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //SEND STOP SIGNAL//LCD_write_english_string(10,3,'rOK');}void show_frequency(void){uint32_t nPLL =0; //Decuint32_t frequency = 0; //Khzuchar display_bit[5];uchar tbTmp1=readdata[1];uchar tbTmp2=readdata[0];tbTmp2&=0x3f;nPLL=pll ;//tbTmp2*256+tbTmp1;// calculate searched station frequencyif(senddata[2]&0x10)frequency =(unsigned long)(nPLL*82/10-225);elsefrequency =(unsigned long)(nPLL*82/10+225);display_bit[0] = frequency / 100000 ;if ( display_bit[0] == 0 ) display_bit[0] = 0x20;else display_bit[0] += 0x30;display_bit[1] = (frequency / 10000)%10 +0x30;display_bit[2] = (frequency / 1000)%10 +0x30;display_bit[3] = (frequency / 100)%10 +0x30; display_bit[4] = (frequency / 10)%10 +0x30; LCD_write_english_string(0,2,' ' );LCD_write_char(display_bit[0]);LCD_write_char(display_bit[1]);LCD_write_char(display_bit[2]);LCD_write_english_string(30,2,'.' );LCD_write_char(display_bit[3]);LCD_write_char(display_bit[4]);LCD_write_english_string(48,2,' MHz' );}void show_frequency2(void){uchar display_bit[5];display_bit[0] = fre / 10000 ;if ( display_bit[0] == 0 ) display_bit[0] = 0x20; else display_bit[0] += 0x30;display_bit[1] = (fre / 1000)%10 +0x30; display_bit[2] = (fre / 100)%10 +0x30;display_bit[3] = (fre/10) %10 +0x30;display_bit[4] = fre%10+0x30;LCD_write_english_string(0,2,' ' );LCD_write_char(display_bit[0]);LCD_write_char(display_bit[1]);LCD_write_char(display_bit[2]);LCD_write_english_string(30,2,'.' );LCD_write_char(display_bit[3]);LCD_write_char(display_bit[4]);LCD_write_english_string(48,2,' MHz' );}void show_rx_power(void){uchar temp;temp = (readdata[3]>>4);LCD_write_english_string(60,0,' ');LCD_write_char((temp/10)%10 + 0x30 ); LCD_write_char(temp%10 + 0x30 );}void show_rx_power_blank(void){LCD_write_english_string(60,0,' ');}void calculate_pll(void){uint32_t temp;temp = fre;pll = (uint)( ( (temp*10-225)*4000)/32768);}void init(void){DDRB = 0XFF;PORTB = 0XFF;DDRD = 0B11100000;PORTD = 0XFF;DDRC = 0B00000000;PORTC = 0Xff; // IO initdelay_nms(250);delay_nms(250);delay_nms(250);delay_nms(250);//TWITWBR = 12;TWCR = (1<<TWEN); //SEND STOP SIGNALOSCCAL=0x9d; // 8M系统内部时钟校准//设置MCU的I/O口DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI | SPI_CLK;SPSR |= (1<<SPI2X); // 设置SPI时钟倍速SPCR |= (1<<SPE)|(1<<MSTR); // 使能SPI接口,主机模式,4M时钟LCD_init(); //初始化液晶}//////////////////////////////////////////////////////////////////int main(void){init();uint x;senddata[0] = pll/256; //load 100MHz pllsenddata[1] = pll%256; // away's low side injection senddata[2] = 0b00100000;senddata[3] = 0b10010000;senddata[4] = 0b01000000;readdata[0] = senddata[0];readdata[1] = senddata[1];LCD_write_english_string(0,0,'FM STEREO' );//LCD_write_english_string(0,5,' stereo' );//LCD_write_english_string(0,2,' 99.1Mhz' );show_frequency();LCD_write_inverse_string(0,5,' UP ');LCD_write_inverse_string(48,5,' DOWN ');station = eeprom_read_byte(22);fre = eeprom_read_word( station *2);calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);//delay_nms(200);read5767();show_frequency2();show_rx_power();LCD_write_english_string(0,4,'CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);while(1){start:if ( (PIND&0x0c) == 0x04){delay_nms(50);if ( (PIND&0x0c) == 0x04){LCD_write_english_string(48,5,' DOWN ' );delay_nms(200);x= 0;while(bit_is_clear(PIND, 3)){x++;if ( x > 65530 ) //判断是否长按{if ( mode ){mode = 0; //改变模式LCD_write_english_string(0,4,'SET CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);}else{mode = 1; //改变模式LCD_write_english_string(0,4,'CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);LCD_write_english_string(24,4,' ' );eeprom_write_word(station*2,fre);}loop_until_bit_is_set(PIND, 3);LCD_write_inverse_string(48,5,' DOWN '); goto start;}}//LCD_write_english_string(0,4,'KEY1 press' ); LCD_write_inverse_string(48,5,' DOWN ');if ( mode ){station --;if ( station < 1 ) station = 10; eeprom_write_byte( 22,station);//*pst = station *2;fre = eeprom_read_word( station *2); calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767();show_frequency2();show_rx_power();LCD_write_english_string(0,4,'CH' ); LCD_write_char(station/10 +0x30); LCD_write_char(station%10 +0x30); }else{fre -=5;if ( fre <= 8750 ) fre = 10800;calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767();show_frequency2();show_rx_power();}}if ( (PIND&0x0c) == 0x08){delay_nms(50);if ( (PIND&0x0c) == 0x08){LCD_write_english_string(0,5,' UP ');delay_nms(200);if ( mode ){loop_until_bit_is_set(PIND, 2);LCD_write_inverse_string(0,5,' UP ');station ++;if ( station >= 11 ) station = 1;eeprom_write_byte( 22,station);//*pst = station *2;fre = eeprom_read_word( station *2); calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767();show_frequency2();show_rx_power();LCD_write_english_string(0,4,'CH' ); LCD_write_char(station/10 +0x30); LCD_write_char(station%10 +0x30); }else{fre +=5;if ( fre >= 10800 ) fre = 8750;calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767();show_frequency2();show_rx_power();//loop_until_bit_is_set(PIND, 2);LCD_write_inverse_string(0,5,' UP ');}}}}}。
基于TEA5767数字调频收音机(主讲:程匹克)

BTL(Bridged-Tied-Load)和SE(Single-Ended) 输出模式
在相同的VDD条件下,BTL模式相对于SE模式有许多有点:
1、BTL模式可以输出更高的电压VOBTL=2VOSE; 2、相同负载下可以输出更大的功率; 3、BTL模式可以有效的抑制共模噪声,这是因为相同的冲击会同时出现在BTL的 “+”,“-”两端,通过负载后会相互抵消,不对扬声器做功;
硬件及原理分析介绍
合理布局是使作品美观漂亮的关键!!!
手工版
PCB成品版
TEA5767模块电路
模块引脚
引脚 符号 功能 引脚 符号 功能
总线数据输入 输出
总线时钟 总线模式选择 总线读写控制 电源正
电源地
右声道输出 左声道输出 解调信号输出 信号(天线)
模块应用说明
①1、2脚为I2C总线的数据线和时钟线必须通过10K电阻上拉; ②3脚BUSMOD这里我们使用的是I2C总线驱动所以将其接地; ③4脚为SPI总线驱动时的读写控制,这里使用的是I2C总线驱 动,所以将其悬空; ④5脚VCC 最好通过磁珠及电容进行干扰抑制。100uF 的电容 选用电解电容,0.1uF 的电容可以选用介电常数高,高频性 能好的陶瓷电容, 以保证整个收音模块的电源系统更加稳 定; (这里我们选用的是104贴片电容,没有磁珠选用的 是10uH电感); ⑤7、8脚左右声道输出脚必须通过电容耦合输出,以滤除直 流成分信号;
TDA2822功放电路
双联电位器
双声道音频接口
TDA2822应用说明
① TDA2822 DATASHEET ; ②TDA2822在5 V供电时可以在8负载上得到大约0.25 W 的功 率。由于TEA5767输出信号为7 5 mV左右,而 T DA2 8 2 2 增益GV约为39dB,在5 V供电时输入 3 0 mV即达到最大功率 输出,所以,另加了 33K和15K电阻对 TEA5767输出的信号进 行衰减以避免输出失真过大; ③C9,R18和C15,R25组成高次谐波抑制电路,用于防止电路 振荡 ,必须加上; ④C12和C13为输出耦合电容,TDA2822输出脚输出存在2.5V 的直流信号,我们要得到的是交流的声音信号,所以必须 利用耦合电容将直流信号隔离并将交流声音信号耦合输出。 当我们需要对音频信号进行采样的时候可以借助这个2.5V 的直流电平将音频信号抬高方便MCU采样。因为我们这里 选择TDA2822为SE模式输出,如果BTL模式输出就不用输 出耦合电容了;
基于TEA5765收音模块制作可显示频率的FM收音机相关文件

TEA5767的总线接口和控制寄存器可编程芯片必须要由单片机通过控制总线向芯片内的寄存器写入控制字才能正常工作。
TEA5767的控制总线有I2C和3-wire两种,引脚BUSMODE为低时选用I2C总线,引脚BUSMODE 为高时选用3-wire总线。
这里以I2C总线为例说明控制字的写入和读出。
1.TEA5767的I2C总线TEA5767 I2C总线的地址是CO,是可收发的从器件结构,无内部地址。
最大低电平是0.2 VCCD,最大高电平是0.45VCCD。
向TEA5767 写入数据时,地址的最低位是0,即写地址是C0。
读出数据时地址的最低位是1,即读地址是C1。
TEA5767的控制寄存器要写入5个字节,每次写入数据时必须严格按照下列顺序进行:地址、字节1、字节2、字节3、字节4、字节5。
每个字节的最高位首先发送。
在时钟的下降沿后写入的数据生效。
上电复位后,设置为静音,所有其它位均被置低,必须写入控制字初始化芯片。
表1 I2C写模式TEA5767遵守通用的I2C总线通信协议,写模式和读模式的格式分别见表1和表2。
2.写数据TEA5767内部有一个5个字节的控制寄存器,在IC上电复位后必须通过总线接口向其中写入适当的控制字,它才能够正常工作。
每个数据字节各位的功能含义见表4到表14。
表3 写模式数据序列表4 数据字节1的格式表5 数据字节1各位的说明表6 数据字节2的格式表7 数据字节2各位的说明表10 搜索停止电平设定3.读数据和写数据类似,从TEA5767 读出数据时,也要按照“地址、字节1、字节2、字节3、字节4、字节5”这样的顺序读出,读地址是C1。
读出的5个字节的含义见表16到表25中的说明。
表15 读模式表16 字节1的格式表17 字节1的说明表19 字节2的说明表20 字节3的格式下面是用来计算PLL控制字的C语言程序:static void AssembleFrequencyWord(void){UINT16 twPLL =0; //DecUINT32 tdwPresetVCO =gdwPresetVCO; //KhzBYTE tbTmp1;BYTE tbTmp2;// calcu1ate frequency dataword bits from given station frequency BCD:if(FlagHighInjection)twPLL =(unsigned int)((float)((tdwPresetVCO+225)*4)/(float)REFERENCE_FREQ);elsetwPLL=(unsigned int)((float)((tdwPresetVCO -225)*4)/(float)REFERENCE_FREQ);//convert word to byte f.tbTmp1 =(unsigned char)(twPLL%256); //6789=Hex1A85 -->133=Hex85tbTmp2 =(unsigned char)(twPLL/256); // -->26=Hex1AWriteDataWord[0]=tbTmp2; //high block WriteDataWord[1]=tbTmp1;}其中频率的单位均为KHz,计算的结果是2字节的二进制数。
单片机控制的TEA5767高性能FM收音机DIY

[分享]单片机控制的 TEA5767高性能FM 收音机 DIY (含原理图,源代码 ) Post By : 2007-10-10 11:41:57本文用到的收音模块可到: / 参考本帖向大家介绍新型 FM 收音机的设计及制作。
想想当年我们是什么做收音机的。
高放混频,解调,立体声解码,锁相等好几个芯片,线路焊好了,但痛苦才开始。
有设备还好些,没有更苦。
为了找谐振点,不 停的调电容电感,不停的换电容电感••…终于有声音,但始终都没那么好。
现在,痛苦终于过去。
因为有了新一代的芯片 TEA5767。
TEA5767 ,零调整。
线路又极其简单。
一个晶振,一个电感,几个电容完了。
通过 接口送几个字节的数据进去就ok 。
I 弓此主题相关图片如下:电子・CNC 爱好看源动力|二1此主题相关图片如下: 电子・CNC 爱好者■源动力源代码:可以存台的版本。
I2C 磁动力论坛bbs 磁动力论坛bbs.cdle. net// WINAVR GCC// ATmega8// clock: internal 1Mhz#include <avr/io.h>#include <avr/interrupt.h>#include <avr/signal.h>#include <avr/delay.h>#include <avr/eeprom.h>#include '3310LCD_function.c'#define uchar uint8_t#define uint uint16_t#define SLA_W 0b11000000 #define SLA_R 0b11000001uchar senddata[5] ;uchar readdata[5] ;uchar search = 0;uchar search_up = 0;uchar mode = 1;uchar station = 0;uint pll = 0x29da; // 88Mhzuint fre = 8750;//// 延时void delay_ms(uint ms){uint i;for(i=0;i<ms;i++)_delay_loop_2(250);}//I2C 主机模式输出void set5767(void){uchar i = 0;TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // SEND START whileSIGNAL (!(TWCR & (1<<TWINT))); // WAIT FOR START SIG //if ((TWSR & 0xF8) != START) ERROR();TWDR = SLA_W; // send addressTWCR = (1<<TWINT) | (1<<TWEN);while (!(TWCR & (1<<TWINT)));//if ((TWSR & 0xF8) !=MT_SLA_ACK) ERROR();for ( i = 0; i < 5; i++ ){TWDR = senddata;TWCR = (1<<TWINT) | (1<<TWEN); // send datawhile (!(TWCR & (1<<TWINT)));// if ((TWSR & 0xF8) != MT_DATA_ACK) ERROR();}TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //SEND STOP SIGNAL // if ((TWSR & 0xF8) != MT_DATA_ACK) ERROR();}//LCD_write_english_string(60,3,'sOK');}//I2C 主机模式 输入void read5767(void){uchar i = 0;TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // SEND START while (!(TWCR & (1<<TWINT))); // WAIT FOR START SIG //if ((TWSR & 0xF8) != START) ERROR();TWDR = SLA_R; // send addressTWCR = (1<<TWINT) | (1<<TWEN);while (!(TWCR & (1<<TWINT)));for ( i = 0; i < 5; i++ ){TWCR = (1<<TWINT) | (1<<TWEN); // read datawhile (!(TWCR & (1<<TWINT)));readdata = TWDR ;SIGNALTWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //SEND STOP SIGNAL//LCD_write_english_string(10,3,'rOK');}void show_frequency(void){uint32_t nPLL =0; //Decuint32_t frequency = 0; //Khzuchar display_bit[5];uchar tbTmp1=readdata[1];uchar tbTmp2=readdata[0];tbTmp2&=0x3f;nPLL=pll ;//tbTmp2*256+tbTmp1;// calculate searched station frequency if(senddata[2]&0x10)frequency =(unsigned long)(nPLL*82/10-225); elsefrequency =(unsigned long)(nPLL*82/10+225);display_bit[0] = frequency / 100000 ;if ( display_bit[0] == 0 ) display_bit[0] = 0x20; else display_bit[0] += 0x30;display_bit[1] = (frequency / 10000)%10 +0x30;display_bit[2] = (frequency / 1000)%10 +0x30;display_bit[3] = (frequency / 100)%10 +0x30;display_bit[4] = (frequency / 10)%10 +0x30;LCD_write_english_string(0,2,' ' );LCD_write_char(display_bit[0]);LCD_write_char(display_bit[1]);LCD_write_char(display_bit[2]);LCD_write_english_string(30,2,'.' );LCD_write_char(display_bit[3]);LCD_write_char(display_bit[4]);LCD_write_english_string(48,2,' MHz' );}void show_frequency2(void){uchar display_bit[5];display_bit[0] = fre / 10000 ;if ( display_bit[0] == 0 ) display_bit[0] = 0x20;else display_bit[0] += 0x30;display_bit[1] = (fre / 1000)%10 +0x30; display_bit[2] = (fre / 100)%10 +0x30; display_bit[3] = (fre/10) %10 +0x30;display_bit[4] = fre%10+0x30;LCD_write_english_string(0,2,' ' );LCD_write_char(display_bit[0]);LCD_write_char(display_bit[1]);LCD_write_char(display_bit[2]);LCD_write_english_string(30,2,'.' );LCD_write_char(display_bit[3]); LCD_write_char(display_bit[4]);LCD_write_english_string(48,2,' }void show_rx_power(void){uchar temp;temp = (readdata[3]>>4);LCD_write_english_string(60,0,'LCD_write_char((temp/10)%10 LCD_write_char(temp%10 + } void show_rx_power_blank(void) {LCD_write_english_string(60,0,' }void calculate_pll(void){uint32_t temp;temp = fre;MHz' );');+ 0x30 ); 0x30 );');pll = (uint)( ( (temp*10-225)*4000)/32768);void init(void){DDRB = 0XFF;PORTB = 0XFF;DDRD = 0B11100000;PORTD = 0XFF;DDRC = 0B00000000;PORTC = 0Xff; // IO initdelay_nms(250);delay_nms(250);delay_nms(250);delay_nms(250);//TWITWBR = 12;TWCR = (1<<TWEN); //SEND STOP SIGNALOSCCAL=0x9d; // 8M 系统内部时钟校准// 设置MCU 的I/O 口DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI| SPI_CLK;SPSR |= (1<<SPI2X); // 设置SPI 时钟倍速SPCR |= (1<<SPE)|(1<<MSTR); // 使能SPI 接口,主机模式,4M 时钟LCD_init(); // 初始化液晶////////////////////////////////////////////////////////////////// int main(void){init();uint x;senddata[0] = pll/256; //load 100MHz pllsenddata[1] = pll%256; // away's low side senddata[2] = 0b00100000;senddata[3] = 0b10010000;senddata[4] = 0b01000000;readdata[0] = senddata[0];readdata[1] = senddata[1];LCD_write_english_string(0,0,'FM STEREO' //LCD_write_english_string(0,5,' stereo' );//LCD_write_english_string(0,2,' 99.1Mhz' ); show_frequency();LCD_write_inverse_string(0,5,' UP ');LCD_write_inverse_string(48,5,' DOWN '); station = eeprom_read_byte(22);injection );fre = eeprom_read_word( station *2); calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);//delay_nms(200);read5767();show_frequency2();show_rx_power();LCD_write_english_string(0,4,'CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);while(1){start:if ( (PIND&0x0c) == 0x04){delay_nms(50);if ( (PIND&0x0c) == 0x04){LCD_write_english_string(48,5,' DOWN ' );delay_nms(200);x= 0;while(bit_is_clear(PIND, 3))x++;if ( x > 65530 ) //判断是否长按{if ( mode ){mode = 0; // 改变模式LCD_write_english_string(0,4,'SET CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);}else{mode = 1; // 改变模式LCD_write_english_string(0,4,'CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);LCD_write_english_string(24,4,' ' );eeprom_write_word(station*2,fre);loop_until_bit_is_set(PIND,3);LCD_write_inverse_string(48,5,' DOWN '); goto start;}//LCD_write_english_string(0,4,'KEY1 press' );LCD_write_inverse_string(48,5,' DOWN ');if ( mode ){station --;if ( station < 1 ) station = 10;eeprom_write_byte( 22,station);//*pst = station *2;fre = eeprom_read_word( station *2); calculate_pll(); show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767();show_frequency2();show_rx_power();LCD_write_english_string(0,4,'CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);}else{fre -=5;if ( fre <= 8750 ) fre = 10800;calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767();show_frequency2();show_rx_power();}}if ( (PIND&0x0c) == 0x08){delay_nms(50);if ( (PIND&0x0c) == 0x08){LCD_write_english_string(0,5,'delay_nms(200);UP ');if ( mode ){loop_until_bit_is_set(PIND, LCD_write_inverse_string(0,5,' station ++;if ( station >= 11 ) station 2);UP '); = 1;eeprom_write_byte( 22,station);//*pst = station *2;fre = eeprom_read_word( station *2);calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767();show_frequency2();show_rx_power();LCD_write_english_string(0,4,'CH' );LCD_write_char(station/10 +0x30);LCD_write_char(station%10 +0x30);}else{fre +=5;if ( fre >= 10800 ) fre = 8750;calculate_pll();show_rx_power_blank();senddata[0] = pll/256;senddata[1] = pll%256;set5767();delay_nms(200);delay_nms(200);read5767(); show_frequency2(); show_rx_power();} }//loop_until_bit_is_set(PIND,LCD_write_inverse_string(0,5,' UP ');2);。
《网络与信息》基于TEA5767的数字收音机设计

一、总体方案设计 1、FM接收频率范围:88MHz~108MHz。
2、设计硬件控制电路和单片机控制程序完成对FM收音模块的操作。
3、有电台自动搜索功能,能够控制电台搜索方向,搜索到电台信号后即可收听电台播音。
4、有电台频率显示功能,电台存储功能二、软硬件的系统设计(一)、硬件结构及各部分功能:单片机根据键盘输入,通过I2C对5767模块的控制寄存器进行读写操作,以实现5767模块的自动手动搜索功能,音频信号经过由TDA2822构成的功放电路放大处理由扬声器输出。
并将从5767模块中读取的频率字换算后显示在LCD上。
按存储键时,单片机将频率字写入24c02实现存台功能,按读取键即可收听所存电台。
总体框图:(二)、软件流程图三、测试给收音机上电后频率跳到初始设定值(91.8MHz),按手动搜索(上、下),可实现0.1MHz步进;按自动搜索键(上、下),可搜出最近的符合设定信号清晰度的频道;按存台键,可以将即时频率存入24c02中;按读取键即可调出该频率所对应的电台。
手动搜索时,从低端频率88MHz(PLL控制字是2A11H),每按一次手动搜索按钮,频率增加100kHz,读搜到电台标志位RF(读模式字节1的B7)为1时搜到电台,否则未搜到。
当搜索到波段尽头时,BLF(读模式字节1的B6)为1,如果再按手动搜索按钮,则从低端频率重新开始搜索。
自动搜索时,可以用静音搜索模式,搜索开始前静音位(写模式字节1的B7)置1,若从波段的低端频率88MHz开始搜索,采用向上搜索方式(写模式字节3的B7=1),反复读取控制字的RF标志位,若RF=1,则表明搜到电台。
接着检测STEREO位(读字节3的B7)为1,说明是立体声信号。
再检测BLF标志位,若BLF=1,说明已经搜到波段尽头,这时需将搜索的起始频率设为高端频率108MHz(PLL控制字是339BH),搜索方向设为向下搜索。
若BLF=0,说明未搜索到波段尽头,这时注意再按下自动搜索按钮时,应将当前停止位置的频率增加100kHz,然后继续搜索,否则程序可能停留在第一个搜到的电台频率上。
基于TEA5767的数字式收音机设计

可剪辑修改河南大学物理与电子学院开放实验室单片机设计报告基于TEA5767的数字调频收音机设计人:开放实验室入室人员可剪辑修改目录0 前言 (1)1主要器材介绍 (2)1.1 STC89C52单片机 (2)1.2 TEA5767收音模块儿 (2)1.3 X9511数字电位器 (3)1.4 四位共阴数码管 (4)1.5 2822集成功放................................................................... (4)2系统原理及功能介绍 (5)2.1数字FM收音机基本原理 (5)2.2 基本原理仿真图 (5)2.3 拓展仿真图 (6)2.4 系统功能介绍 (6)3 程序 (7)3.1 程序流程图 (7)3.2 核心程序(部分) (7)4 制作过程 (10)4.1 前期准备 (10)4.2 焊接过程(附图) (10)4.3焊接过程中遇到的问题和注意事项 (12)5 器材清单 (13)6 其他实现方案的探讨 (13)6.1 可编程数字电位器介绍 (13)6.2 方案讨论 (14)7 结论 (14)参考文献 (15)可剪辑修改基于TEA5767的数字调频收音机开放实验室入室人员(河南大学物理与电子学院,河南开封,475004)0 前言十九世纪无线电通讯技术的发明,使通信摆脱了依赖导线的传统方式,是通信技术上的一次飞跃,也是人类科技史上的一个重要成就。
作为无线电通信的的杰出成果,收音机的发明极大地改变了人们的生活方式,给人们的生活带来了无穷的乐趣。
随着科技的发展,技术不断地更新换代,收音机也沿着矿石收音机、电子管收音机、晶体管收音机、集成电路收音机的轨道不断进步着。
近年来,随着DSP技术的发展,采用DSP技术研发的收音机芯片的出现,“硬件无线电”由“软件无线电”代替,大大降低了收音机制造业的门槛。
2006年深圳凯隆电子有限公司与美国芯科实验室合作,开发出世界上第一台数字收音机。
调频收音机设计论文

调频收音机设计论文摘要:TEA5767音频输出具有立体声方式,也可以采用单声道输出,具体方式可以通过编程设定,为简化设计,本设计功放部分采用TDA2030单声道A类音频放大芯片,功放芯片使用TDA2030,供电采用±5V供电。
TEA5767系列单片数字收音机就被广泛地应用在数字音响,便携式CD、VCD、DVD、MP3、MP4、手机、PDA等数字消费电子系统中。
但是该数字收音机芯片与传统的超外差式收音机的调谐原理不太相同,传统的超外差式收音机的固定频率为10.7MZ,而TEA5767系列数字收音机的固定中频为225KHz,由于固定中频不同,锁相环系统的软件控制就有很大的差别。
一、设计方案本设计是一个数字调频收音机,就是接收这些频率调制的无线电信号,经过解调还原成原信号的电子设备。
FM Radio电路一般主要由接收天线、振荡器、混频器、AGC(自动增益控制)、中频放大器、中频限幅器、中频滤波器、鉴频器、低频静噪电路、搜索调谐电路、信号检测电路及频率锁定环路、音频输出电路等组成。
本设计就是用单片机控制集成了上述所有FM功能的专用芯片,设计一个数字FM收音机系统。
本设计采用模块化设计,整个系统由控制模块、FM音频模块、电源模块和功放模块组成,系统的整体方案框图如下图1:二、电路设计(1)控制模块。
控制模块是本设计的核心,通过外围电路和向TEA5767芯片写入相关程序,控制部分要实现能够改变收音机的接收频率、工作模式、音量等各项参数的功能。
因此必须需要一个微控制器才能达到要求,本设计采用STC89C52单片机作为系统的控制核心。
微控制器部分以STC89C52为核心,包括复位电路,晶振电路和按键控制电路。
时钟电路是计算机的心脏,它控制着计算机的工作节奏。
单片机允许的时钟频率是因型号而异的,STC89C52典型值为1105926MHZ,本设计采用的就是典型值。
单片机STC89C52内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。
大学生毕业设计 基于TEA5767和单片机的数字FM收音机设计

摘要本设计是一个数字调频收音机(FM),就是接受频率调制的无线电信号,经过解调还原成原信号的电子设备,利用单片机控制有FM功能的专用芯片,设计一个基于TEA5767模块的数字FM收音机。
本设计采用模块化设计,整个系统由控制模块,FM音频模块和功放模块组成。
本设计核心采用的是TEA5767芯片,它是由PHILIPS公司推出的针对低电压应用的单芯片数字调谐FM立体声收音机芯片。
TEA5767芯片内集成了完整的IF频率选择和鉴频系统,就可实现FM收音机的全部功能。
采用的是Lcd1602液晶显示屏,实现单片机的频率值与模块内部的寄存器(PLL值)之间的相互转换,从而带动功放的工作。
功能:自动收台,手动收台,液晶显示。
采用主要模块有:(1)STC89C52单片机模块。
(2)Lcd1602显示模块。
(3)TEA5767收音机模块。
关键词:STC89C52 Lcd1602 TEA5767模块目录摘要 (2)1.绪论 (5)1.1 课题背景 (5)1.2 课题概述 (5)2.设计要求与思路 (5)2.1 收音机的设计要求 (5)2.2 系统设计整体思路 (5)3.主要电路模块的实现方案比较及选择 (6)3.1 控制模块方案选择 (7)3.2 液晶显示模块方案选择 (7)3.3 无线芯片方案选择 (7)4.系统电路图 (8)4.1 微控制器模块 (8)4.2 FM模块 (9)4.2.1 FM模块介绍 (9)4.3 工作原理 (10)4.3.1串行总线工作模式 (10)4.3.2 串行总线基本操作 (10)4.3.3数据传送 (12)4.3.4、三线总线工作模式 (12)5.系统软件设计 (13)5.1 主程序设计 (13)5.2 流程图 (14)6.硬件电路测试与检测 (14)6.1 硬件装配 (14)6.2 系统测试 (14)7.结束语 (15)8.参考文献 (15)9.致谢 (15)10.附录 (16)10.1 电路原理图 (16)10.2 电路PCB图 (16)10.3 电路实物图 (17)10.3 元器件清单 (18)11.操作框图 (19)程序框图 (20)12.程序 (21)12.1 主程序 (21)12.2 I2C总线 (26)12.3 Lcd1602程序 (29)基于TEA5767模块的数字FM收音机设计一.绪论1.1课题背景随着科学技术的不断发展,新颖的调频收音机的不断出现,技术不断的提高,设计出来的收音机外型精致和小巧。
基于TEA5767模块的数字FM收音机设计

基于TEA5767模块的数字FM收音机设计姓名:指导老师:摘要本设计是一个数字调频收音机(FM),就是接受频率调制的无线电信号,经过解调还原成原信号的电子设备,利用单片机控制有FM功能的专用芯片,设计一个收音机系统。
本设计采用模块化设计,整个系统由控制模块,FM音频模块,电源模块和功放模块组成。
未处理系统采用单片机控制。
单片机自从20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。
STC89C52单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。
本设计另一核心采用的是TEA5767芯片,它是由PHILIPS 公司推出的针对低电压应用的单芯片数字调谐FM立体声收音机芯片。
TEA5767芯片内集成了完整的IF频率选择和鉴频系统,就可实现FM收音机的全部功能。
设计的液晶屏采用的是Nokia5110,该液晶屏的性价比高,接口简单,速度快,适合便携式供电设备。
本设计主要是体现单片机系统的自动控制能力,更重要的意义是单片机的应用改变了控制系统传统的设计思想和方法。
关键词:STC89C52 Nokia5110 TEA5767AbstractThe design is a digital FM radio (FM), It is to receive the frequency modulated radio signals, electronic equipment restored to the original signal after demodulation,the use of dedicated chip MCU control FM functions, design a radio system. The system consists of the control module, FM audio module, power module and power amplifier module. The Themicro-processing system microcontroller.The singlechip has come out since the 1970s, compared to is valued people's and the attention by the extremely high performance price, therefore the application is very broad, the development is very quick.STC89C52 Monolithic integrated circuit's characteristic is the volume is small, the integration rate is high, the weight is light, antijamming ability, is not high to the environment request, the low in price, the reliability is high, the flexibility is good, the development is easier. What this design uses is the TEA5767 chip, it is promotes by PHILIPS Corporation in view of the low voltage application single chip digit harmonious FM stereophonic receiver chip. In the TEA5767 chip integrated the complete IF frequency selection and the frequency discrimination system, only need the very few low cost periphery part, be possible to realize the FM radio's complete function.The design of the LCD screen is Nokia5110, The LCD screen have high cost , simple interface, fast, and suitable for portable power supply equipment. A more vital significance was monolithic integrated circuit's application changed the control system tradition design concept and the method.Keywords:STC89C52 , Nokia5110 , TEA5767目录摘要 (2)Abstract (2)目录 (3)绪论 ................................................................................................................ 错误!未定义书签。
利用TEA5767收音模块DIY调频立体声FM收音机

2
// 音量
#define VOLUME_MAX #define VOLUME_MIN #define CHANNEL_NUM #define CHANNEL_MIN #define CHANNEL_MAX
84 0
10 1 CHANNEL_NUM
// 搜索模式
#define STATE_SEARCH
#define OPER_MODE_RADIO #define OPER_MODE_SET
0
// 正常收音机模式
1
// 设置模式
// 正确保存标志 #define SAVE_MASK
0x4B // 'K'
// 设置模式
#define SET_MODE_SEARCH
1 // 搜索
#define SET_MODE_SOUNDMODE
特别注意:组装时 R2 电阻 0 欧姆一定要焊上
10、参考程序和烧写文件 烧写文件:
该文件只允许会员下载! 登录 | 注册
内部震荡 8M
部分参考程序:
Tea5767.c
#include "Tea5767.h" #include "TwiLib.h"
// 初始化 TEA5767
void TEA5767_Init(ulong Freq,uchar Mono) {
// 是否闪烁 #define IS_BLINK()
(BlinkCounter > BLINK_COUNTER_MAX/2)
//======================================================================================================
基于TEA5767的智能收音机的开题报告

基于TEA5767的智能收音机的开题报告郑州大学西亚斯国际学院本科生毕业论文(设计)开题报告题目名称基于单片机和TEA5767模块智能收音机的设计学生姓名张晓宇专业自动化学号20101523341指导教师姓名周伟所学专业自动化职称讲师完成期限2014年2月27日至2014年5月20日一、选题的目的意义:随着社会科技的发展,各种数字电子产品进入我们的生活,虽然智能手机、智能电视已经变得越来越普遍、但是收音机在丰富的娱乐媒介和广大司机朋友,老人及各位观众听友们里还是占有很重要的地位。
现在大都电子产品都在向数字化、集成化发展而且成本越来越低,使得广大厂商在各种设备中嵌入收音机诸如MP3,智能手机,便携式video播放器等电子产品中嵌入FM部分。
这是因为飞利浦公司研发的TEA5768设计的数字FM收音机使这种低成本的实现可能,它可以实现手动、自动、搜台和存台、带有I2C 和3-Wire 两个总线接口, 最小供电电压为2.5V, 外围只需要少量元器件即可实现FM收音机功能, 具有体积小、功耗低、频率稳定性好、高灵敏度、高保真等特点。
EA5767HN芯片是PHILIPS公司推出的针对低电压应用的单芯片数字谐调FM立体声收音机芯片。
它采用创新的收音机架构取代了外部的无源器件与复杂的线路,芯片内集成了完整的IF频率选择和鉴频系统,只需很少的低成本外围元件,就可实现FM收音机的全部功能,硬件系统完全不需要调试。
EA5767HN 芯片前端具有高性能的RF AGC电路,其接收灵敏度高,并且兼容欧洲、美国和日本FM频段;参考频率选择灵活,可通过寄存器设臵选择32.768kHz和13MHz的晶体振荡器或者6.5MHz的外部时钟参考频率;可通过IIC系统总线进行各种功能控制并通过IIC总线输出7位IF计数值;立体声解调器完全免调,可用软件控制SNC、HCC、暂停和静音功能;具有两个可编程I/O口,可用于系统的其他相关功能;由于其软件设计简单,再加上小尺寸的封装,使得它非常适合应用于电路板空间相当有限的设计上;可集成到便携式数码消费产品的设计中,如移动电话、MP3播放器、便携式CD 机、玩具等众多产品,使它们具有FM收音功能。
基于TEA5767的USB调频收音机设计

图 3 FM 收音模块电路图
2 收音机软件设计
2.1 软件总体设计 FM 收音机软件采用分层次结构化、模块化
图 2 微处理器部分电路设计
14
深圳职业技术学院学报
第9卷
根引线,不同型号的模块引出的线不会完全相 同.除了正负电源、天线和左右声道音频输出是 必须引出的端子外,根据控制方式的不同,芯片 控制和总线接口电路的端子会有不同的选择.对 于使用 3-wire 总线方式的模块来说,3 根信号线 DATA,CLK 和 W/R 都必须有,但是对于 I2C 总 线来说则不需要 W/R 线,可以根据需要,通过模 块上的 BUSMODE 引脚来选择,本设计将该引脚 接地线,选用的是 I2C 总线方式[3].FM 收音模块 部分的设计电路图如图 3 所示.
设计,依次分为应用处理层、接口层、设备驱动 层.其中应用处理层完成与 FM 收音有关的具体 的应用处理;接口层作为应用处理层与设备驱动
层的桥梁,提供与具体硬件平台无关的应用程序接 口;设备驱动层包含具体的硬件平台的各种设备驱 动程序.系统框图如图 4 所示.
采用上述架构设计的软件系统,层次清晰,不 相邻的上下层没有依赖关系,各模块之间的耦合度 低,具有良好的可移植性和可扩充性[4].
机的设计.该调频收音机将收音芯片接收到的声音信号进行处理和数字化,通过 USB 接口将数字声音数据上
传给上位机,任何具有 USB 连结功能的 Windows 个人计算机或笔记本电脑,只要通过 USB 接口连接本设计,
TEA5767收音机设计

摘要随着我国经济的高速发展,微电子技术、无线电通信技术和自动控制技术也得到了迅速发展,锁相环和频率合成技术已经进入一个崭新的时代,其应用越来越广。
而收音机作为现代的娱乐工具,与人们的生活紧密相关,随着人们对其要求的提高,收音机得到了快速发展,传统的电容、电感调台收音机已经向数字化收音机发展。
本文在已有的收音机模块的基础上,采用A T89S52微控制器对收音机进行控制,由 1602液晶模块作显示,用TEA5767的高灵敏度,低电压和低功耗的全集成的优点作收音模块芯片,通过合理设计,制作了一款完善的数字调谐收音机,并增加了传统收音机所不具备的功能,使之达到了较为理想的效果。
关键词:微控制器, TEA5767,收音机ABSTRACTWith the development of the economy, microelectronic technology, radio communication technology and the automatic theory are developed rapidly, the compound frequency technology has been in a new state. It's application is becoming more and more widely. But the radio as an important pastime tools , it also has developed quickly with the improving requirement of the people .It's radio technology has developed from tradition capacitance or inductance to digital .The article is based on the now-being general radio module, using A T89S52 microcontroller to control the radio, by 1602 for liquid crystal display modules, with TEA5767 the high sensitivity, low voltage and low power consumption of all the advantages of integrated chips for the radio module. the reliability is improved and the feeling of comfort is better through the reasonable design, so the function of radio is more powerful compared with tradition one .Keywords: Microcontroller, TEA5767,Radio目录摘要 (I)ABSTRACT (II)第1章引言 (1)1.1背景 (1)1.2研究内容 (1)第2章芯片介绍 (2)2.1TEA5767收音芯片概述 (2)2.1.1 TEA5767的特点 (2)2.1.2 管脚说明 (3)2.1.3 I2C总线说明 (3)2.1.4 数据传输 (4)2.21602液晶模块介绍 (6)2.2.1技术参数 (7)2.2.2 接口信号说明 (7)2.2.3制器接口时序说明(HD4478及兼容芯片) (7)2.2.4 控制器接口时序说明 (10)2.3FM62429芯片介绍 (11)2.4AT89S52片机模块介绍 (12)第3章硬件电路设计 (16)3.1系统组成 (16)3.2收音模块 (17)3.3音量控制模块 (17)3.4LCD1602模块 (18)3.5按键模块 (18)3.6AT89S52微控制模块 (19)第4章软件设计部分 (21)4.1主程序流程图 (21)4.2按键控制 (22)4.3收音机控制 (22)4.4LCD显示控制 (23)第5章结束语 (24)致谢 (25)参考文献 (26)附录源代码 (27)第1章引言1.1背景收音机诞生到现在已有80年的历史了,在此期间经历了60年代从电子管到晶体管的革命,80年代从晶体管到集成电路的革命,目前正面临着数字化革命。
PICTEA5767数码管显示调频收音机精品文档14页

TEA5767数码管显示调频收音机在深圳本地目前能收到如下电台/**************************************************************************************************** **********unsigned char radio_write_data[5] = {0x2c,0xe1,0x70,0x16,0x80}; //频率为93.9MHz 广东音乐电台unsigned char radio_write_data[5] = {0x30,0x5c,0x70,0x16,0x80}; //频率为101.2MHz 广东电台音乐之声unsigned char radio_write_data[5] = {0x31,0x38,0x70,0x16,0x80}; //频率为103.0MHz 广东珠江经济电台unsigned char radio_write_data[5] = {0x31,0xd7,0x70,0x16,0x80}; //频率为104.3MHz 宝安广播电台unsigned char radio_write_data[5] = {0x32,0x20,0x70,0x16,0x80}; //频率为104.9MHz 中央人民广播电台华夏之声unsigned char radio_write_data[5] = {0x33,0x2d,0x70,0x16,0x80}; //频率为107.1MHz 中国国际广播电台环球资讯/**************************************************************************************************** **********/把用来下载的M币给我算了,直上程序供复制。
哈哈!/**************************************************************************************************** **********AT89S52+12MHZ+TEA5767的数码管显示调频收音机本程序使用数码管显示频率晶振是用12M 已通过测试,收音机的频率调节是用计算的方法将显示的频率算好后写到TEA5767芯片里面实现调节的两个按键实现自加或自减频率加了连续加减功能!使用的是在淘宝上买的4.5元/片的简化版的TEA5767模块.2019-05-08/**************************************************************************************************** **********/#include < reg51.h >#define uchar unsigned char#define uint unsigned int/**************************************************************************************************** **********/sbit SDA = P3^0; //接在TEA5767的数据端口sbit SCL = P3^1; //接在TEA5767的时钟端口sbit KEY1 = P3^4; //频率增加按键端口sbit KEY2 = P3^5; //频率减小按键端口sbit KEY3 = P3^6; //频率增加按键端口sbit KEY4 = P3^7; //频率减小按键端口#define duan P0 //频率显示的数码管段选P0端口//#define gy //使用共阴极时屏蔽这行sbit dula=P2^6;sbit wela=P2^7;uchar IF,ADC,CH;//bit RF,STEREO;#ifdef gyunsigned char code dispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//显示位码unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};//数码管显示编码#else/**************************************************************************************************** **********/unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0 x00}; //数码管显示编码unsigned char code dispbit[]={0x7e,0x7d,0x7b,0x77,0x6f,0x5f};/*定义点亮的数码管与数组的关系*/#endif/**************************************************************************************************** **********unsigned char radio_write_data[5] = {0x2c,0xe1,0x70,0x16,0x80}; //频率为93.9MHz 广东音乐电台unsigned char radio_write_data[5] = {0x30,0x5c,0x70,0x16,0x80}; //频率为101.2MHz 广东电台音乐之声unsigned char radio_write_data[5] = {0x31,0x38,0x70,0x16,0x80}; //频率为103.0MHz 广东珠江经济电台unsigned char radio_write_data[5] = {0x31,0xd7,0x70,0x16,0x80}; //频率为104.3MHz 宝安广播电台unsigned char radio_write_data[5] = {0x32,0x20,0x70,0x16,0x80}; //频率为104.9MHz 中央人民广播电台华夏之声unsigned char radio_write_data[5] = {0x33,0x2d,0x70,0x16,0x80}; //频率为107.1MHz 中国国际广播电台环球资讯/**************************************************************************************************** **********/unsigned char radio_read_data[5];unsigned char radio_write_data[5];unsigned long frequency = 104900; //开机初始化的电台频率为104.9MHz中央民广播电台华夏之声unsigned int PLL; //计算频率合成时用的变量/**************************************************************************************************** **********/void Delayus(unsigned char x){for(;x > 0;x--);}/**************************************************************************************************** **********/void iic_start() //启动总线传输{SDA = 1;Delayus(4);SCL = 1;Delayus(4);SDA = 0;Delayus(4);SCL = 0;Delayus(4);}/**************************************************************************************************** **********/void iic_stop() //结束总线传输{SCL = 0;Delayus(4);SDA = 0;Delayus(4);SCL = 1;Delayus(4);SDA = 1;Delayus(4);}/**************************************************************************************************** **********/void iic_ack() //发送应答位{SDA = 0;Delayus(4);SCL = 1;Delayus(4);SCL = 0;Delayus(4);SDA = 1;Delayus(4);}/**************************************************************************************************************/bit iic_testack(){bit ErrorBit;SDA = 1;Delayus(4);SCL = 1;Delayus(4);ErrorBit = SDA;Delayus(4);SCL = 0;return ErrorBit;}/**************************************************************************************************** **********/void iic_write8bit(unsigned char input) //写一个字节的数据到总线上{unsigned char temp;for(temp = 8;temp > 0;temp--){SDA = (bit)(input & 0x80);Delayus(4);SCL = 1;Delayus(4);SCL = 0;Delayus(4);input = input << 1;}}/**************************************************************************************************** **********/uchar iic_rdbyt() //从总线上读取一个字节的数据{uchar a = 0,i = 0;for(i = 0;i < 8;i++){SDA = 1;SCL = 1;if(SDA == 1){a = (a << 1) + 1;SCL = 0;}else if(SDA == 0){a = a << 1;SCL = 0;}}return(a);}/**************************************************************************************************** **********/void delays (unsigned char b) //按键消抖用的延时程序{unsigned char i;for(b;b > 0;b--)for(i = 0;i < 250;i++);}/**************************************************************************************************** **********/void radio_write(void) //写入TEA5767{unsigned char i;iic_start(); //启动总线传输iic_write8bit(0xc0); //TEA5767写地址if(!iic_testack()){for(i = 0;i < 5;i++){iic_write8bit(radio_write_data); //写一个字节的数据到总线上iic_ack(); //发送应答位}}iic_stop(); //结束总线传输}/**************************************************************************************************** **********///将显示的频率算好后写到TEA5767芯片里面实现调节,不用考虑TEA5767用于搜台的相关位:SM,SUD//写模式//数据字节1 数据字节2 数据字节3 数据字节4 数据字节5void search(){PLL = (unsigned int)((float)((frequency + 225)) / (float)8.192); //计算合成频率数据频率单位:k/**************************************************************************************************** **********///数据字节1的格式radio_write_data[0]//位7(高位)位6 位5 位4 位3 位2 位1 位0(低位)// MUTE SM PLL13 PLL12 PLL11 PLL10 PLL9 PLL8//7 MUTE 如果MUTE=1 则左右声道被静音;MUTE=0 左右声道正常工作。
基于TEA5767的USB调频收音机设计

基于TEA5767的USB调频收音机设计
卢贶
【期刊名称】《深圳职业技术学院学报》
【年(卷),期】2010(009)001
【摘要】以TEA5767调频收音芯片和C8051F320微控制器为基础,结合USB通信技术,完成了调频收音机的设计.该调频收音机将收音芯片接收到的声音信号进行处理和数字化,通过USB接口将数字声音数据上传给上位机,任何具有USB连结功能的Windows个人计算机或笔记本电脑,只要通过USB接口连接本设计,就能通过计算机扬声器播放调频广播音频.
【总页数】7页(P12-17,39)
【作者】卢贶
【作者单位】武汉软件工程职业学院,湖北武汉430205
【正文语种】中文
【中图分类】TM571.6
【相关文献】
1.基于MSP430F149的数字调频收音机的设计与实现 [J], 符长友;汪星宇;何丽
2.Silicon Laboratories推出完整USB调频收音机参考设计 [J],
3.基于Protel的调频收音机设计 [J], 刘伟波;高坤;钟颜
4.一种基于WinCE6.0的数字调频收音机的设计 [J], 王波;李会勇;钟君
5.Silicon Labs推出USB调频收音机参考设计 [J], 无
因版权原因,仅展示原文概要,查看原文内容请购买。
51单片机+TEA5767+数码管的FM收音机制作电路图+程序

51单片机+TEA5767+数码管的FM收音机制作电路图+程序展开全文现在网上很多网友都在做和TEA5767有关的东东,今天找到个MP4的尸体,屏碎了,打开一看刚好有能用的TEA5767,验证了一下这个东西的实用性,用手上刚好有的51单片机开发板和lm386,为这个集成模块搭建了一个测试平台,下面是试验图片,如果在西安的朋友,肯定知道我手的那个电台了,哈哈!图片一:这个图可以看到整体结构了,其实硬件电路很简单,看看pdf文档完全可以搭建出来,单片机实验板是以前开发的商品。
图片二:这一部分是主要部分了,中间上面那个就是拆下来的TEA5767,它右边是LM386,做功率放大的,下面的扬声器是从一个笔记本里边拆下来的(太败家了,衰!)。
下面的程序可以直接运行了,绝对没问题的,这个也是参考了几个网站的程序,做了些修改,可以手动自动调台了,手动调台有问题,算法好像不对,但是出来的频率问题不大,自动搜索的结果是正确的,我要提醒大家一点,自动搜台的效果和接受强度,也就是天线,有很大的关系,我的天线是一截不到15mm的软导线,good luck!1./*********************************************************** ****************************************2.TEA5767采用I2C接口控制,单片机用AT89S52.晶振11.0592Mhz。
采用四位LED显示。
3.TEA5767采用I2C接口控制.TEA5767读写数据都是5个字节,其中PLL参数14位. Fosc =11.0592Mhz.4.************************************************************ ****************************************/5.#include "regx52.h"6.#include "intrins.h"7./*********************************************************** ************************/8.#define max_freq 108000 //108Mhz9.#define min_freq 87500 //87.5Mhz10.#define max_pll 0x339b //108MHz时的pll.11.#define min_pll 0x299d //87.5MHz时的pll.12.#define Add_Freq 113.#define Dec_Freq 014.#define REFERENCE_FREQ 32.76815.#define ATIIcxxDriverAddressW 0xC016.#define ATIIcxxDriverAddressR 0xC117.#define _Nop()_nop_(),_nop_(),_nop_(),_nop_(),_nop_() /*定义空指令*/18.#define LED P019.void Initialization(void);20.void Get_Pll(void);21.void Get_Frequency(void);22.void Search(unsigned char mode);23.void Auto_Search(unsigned char mode);24.unsigned char GetKey();25.void Delay(unsigned char Time);26.void Led_Display(unsigned long i);27.void DelayD(unsigned char Time);28.unsigned char GetKey();29.void Delay(unsigned char Time);30.void ATIICxx_PWrite(unsigned char *McuAddress,unsigned char count);31.void ATIICxx_PRead(unsigned char *McuAddress,unsigned char count);32.void I2C_Send_Byte(unsigned char sendbyte);33.unsigned char I2C_Receive_Byte(void);34.void I2C_Start(void);35.void I2C_Stop(void);36.void I2C_Ack(void);37.void I2C_Noack(void);38.39./******************************************************** *************/40./* IIC读写程序芯片型号*/41.sbit I2C_SCK=P3^0; /*实时时钟时钟线引脚 */42.sbit I2C_SDA=P3^1; /*实时时钟数据线引脚 */43.sbit k1=P1^7;44.sbit k2=P1^6;45.sbit k3=P1^5;46.sbit k4=P1^4;47./******************************************************** *************/48./******************************************************** ****************/49.sbit ge=P2^3;50.sbit shi=P2^2;51.sbit bai=P2^1;52.sbit qan=P2^0;53.unsigned char tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳54.//0, 1, 2 3 4 5 6 7 8 955./******************************************************** ****************/56.unsigned char radio_write_data[5]={0x2d,0x56,0x20,0x11,0x00}; //初始化写入TEA5767的数据(FM89.8Mhz)57.unsigned char radio_read_data[5];58.unsigned int Pll_Data;59.unsigned long Frequency_Data;60./******************************************************** ***************************/61.void Initialization(void)62.{63.TMOD = 0x11;64.TH0 = 0x5d;65.TL0 = 0x3d;66.TR0 = 0; //25ms67.TH1 = 0x5d;68.TL1 = 0x3d;69.TR1 = 0; //25ms70.T2CON = 0x30;71.T2MOD = 0x00;72.RCAP2H = 0xFE;73.TH2 = RCAP2H;74.RCAP2L = 0xFB;75.TL2 = RCAP2L;76.TR2 = 0; //2400bps77.PCON = 0x00;78.SCON = 0xD0;79.IP = 0x14;80.EX0 = 1;81.IT0 = 1;82.ET0 = 1;83.EX1 = 1;84.IT1 = 1;85.ES = 0;86.EA = 0;87.}88.89./******************************************************** ***************************/90.//读TEA5767状态,并转换成频率91.void Radio_Read(void)92.{93.unsigned char temp_l,temp_h;94.Pll_Data = 0;95.96.ATIICxx_PRead(&radio_read_data[0],5);97.98.temp_l = radio_read_data[1];99.temp_h = radio_read_data[0];100.temp_h &= 0x3f;101.Pll_Data = temp_h*256+temp_l;102.Get_Frequency();103.}104.105./******************************************************** ***************************/106.//由PLL计算频率107.void Get_Frequency(void)108.{109.unsigned char hlsi;110.unsigned int npll = 0;111.112.npll = Pll_Data;113.hlsi = radio_read_data[2]&0x10;114.if (hlsi)115.Frequency_Data = (unsigned long)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25-225); //频率单位:KHz116.else117.Frequency_Data = (unsigned long)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25+225); //频率单位:KHz118.}119.120./******************************************************** ***************************/121.//由频率计算PLL122.void Get_Pll(void)123.{124.unsigned char hlsi;125.126.hlsi = radio_read_data[2]&0x10;127.if (hlsi)128.Pll_Data = (unsigned int)((float)((Frequency_Data+225)*4)/(float)REFERENCE_FREQ); //频率单位:k129.else130.Pll_Data = (unsigned int)((float)((Frequency_Data-225)*4)/(float)REFERENCE_FREQ); //频率单位:k131.}132.133./******************************************************** ***************************/134.//手动设置频率,mode=1,+0.1MHz; mode="0:-0".1MHz ,不用考虑TEA5767用于搜台的相关位:SM,SUD135.void Search(unsigned char mode)136.{137.Radio_Read();138.139.if(mode)140.{141.Frequency_Data += 100;142.if(Frequency_Data > max_freq)143.Frequency_Data = min_freq;144.}145.else146.{147.Frequency_Data -= 100;148.if(Frequency_Data < min_freq)149.Frequency_Data = max_freq;150.}151.152.Get_Pll();153.radio_write_data[0] = Pll_Data/256;154.radio_write_data[1] = Pll_Data%256;155.radio_write_data[2] = 0x41;156.radio_write_data[3] = 0x11;157.radio_write_data[4] = 0x40;158.ATIICxx_PWrite(&radio_write_data[0],5);159.}160.161./******************************************************** ***************************/162.//自动搜台,mode=1,频率增加搜台; mode="0:频率减小搜台".163.void Auto_Search(unsigned char mode)164.{165.Radio_Read();166.Get_Pll();167.if(mode)168.{169.radio_write_data[2] = 0xb1;170.if(Pll_Data > max_pll)171.{172.Pll_Data = min_pll;173.}174.}175.else176.{177.radio_write_data[2] = 0x41;178.if(Pll_Data < min_pll)179.{180.Pll_Data = max_pll;181.}182.}183.184.radio_write_data[0] = Pll_Data/256+0x40;185.radio_write_data[1] = Pll_Data%256;186.radio_write_data[3] = 0x11;187.radio_write_data[4] = 0x40;188.ATIICxx_PWrite(&radio_write_data[0],5);189.Radio_Read();190.while(!(radio_read_data[0]&0x80)) //RF电台就绪标志191.{192.Radio_Read();193.}194.}195.196./******************************************************** ***************************/197.void main(void)198.{199.//0x2d,0x56,0x20,0x11,0x00200.unsigned long temp;201.Initialization();202.radio_write_data[0] =0x2A;203.radio_write_data[1] =0xB6;204.radio_write_data[2] =0x41;205.radio_write_data[3] =0x11;206.radio_write_data[4] =0x40;207.ATIICxx_PWrite(&radio_write_data[0],5);//初始化TEA5767(89.8Mhz)208.Frequency_Data = 89800;209.210.while(1)211.{ temp= Frequency_Data;212.Led_Display(Frequency_Data);213.214.if( k1 == 0)215.{ DelayD(2);216.while(k1 == 0);//等待键松开217.Search(Add_Freq);218.}219.if( k2 == 0)220.{ DelayD(2);221.while(k2 == 0);//等待键松开222.Search(Dec_Freq);223.}224.if( k3 == 0)225.{ DelayD(2);226.while(k3 == 0);//等待键松开227.Auto_Search(Add_Freq);228.}229.if( k4 == 0)230.{ DelayD(2);231.while(k4 == 0);//等待键松开232.Auto_Search(Dec_Freq);233.}234.235.}236.}237.238./******************************************************** *************/239.struct bytedata_2240.{241.unsigned char ByteH;242.unsigned char ByteL;243.};244.245.union int2byte246.{247.unsigned int IntData;248.struct bytedata_2 ByteData;249.};250./******************************************************** *************/251.//启动I2C总线,退出时SCL为低252.void I2C_Start(void)253.{254.I2C_SDA=1; /*发送起始条件的数据信号*/255._Nop();256.I2C_SCK=1;257._Nop();_Nop();_Nop();_Nop();_Nop();/*起始条件建立时间大于4.7us,延时*/258.I2C_SDA=0; /*发送起始信号*/259._Nop();_Nop();_Nop();_Nop();_Nop(); /* 起始条件锁定时间大于4μs*/260.I2C_SCK=0; /*钳住I2C总线,准备发送或接收数据 */261._Nop();_Nop();_Nop();_Nop();_Nop();/*起始条件建立时间大于4.7us,延时*/262.}263.//*停止I2C总线264.void I2C_Stop(void)265.{266.I2C_SCK=0;267.I2C_SDA=0; /*发送结束条件的数据信号*/268._Nop(); /*发送结束条件的时钟信号*/269.I2C_SCK=1; /*结束条件建立时间大于4μs*/270._Nop();_Nop();_Nop();_Nop();_Nop();271.I2C_SDA=1; /*发送I2C总线结束信号*/272.}273.//MCU等待应答位(返回0表示应答)274.bit I2C_WaitAck(void)275.{276.unsigned char ucErrTime = 200; //因故障接收方无ACK,超时值。
TEA5767收音机模块

1 引言调频收音机(FMRadio)一直在人们的生活娱乐中占有非常重要的地位,从老式的晶体管收音机到今天的网络收音机,说明通过广播享受生活一直是人们喜欢的生活方式。
如今,随着消费类电子的兴起和繁荣以及数字电子技术的发展,广大从事消费类电子设计的厂商都不忘在诸如MP3、智能手机、便携式Video播放器等产品中嵌入FM部分。
基于FMRadio的广泛应用,本文主要谈谈数字FM Radio的设计,并对其音频处理方面设计进行探讨。
目前提供数字FMRadio解决方案的厂商很多,其中市场反响非常好的就有Philips公司提供的TEA5767及TEA5768数字FM处理芯片,该芯片为低电压、低功耗和低价位的全集成单芯片立体声无线电产品,只需要极少的外部元器件,并且基本上不需要外部对高频信号的手动调准,并且其频带范围宽,可以完全免费调到欧洲、美国和日本的调频波段。
下面就TEA5767在便携式Video播放器(PVP)中的应用对相关技术问题进行阐述。
2 调频收音功能的实现调频就是频率调制,所谓频率调制是原来等幅恒频的高频信号的频率,随着调制信号(音频信号)的幅度变化而变化,调频收音机(FMRadio)就是接收这些频率调制的无线电信号,经过解调还原成声波的电子设备。
FMRadio电路一般主要由天线接收、振荡器、混频器、AGC(自动增益控制)、中频放大器、中频限幅器、中频滤波器、鉴频器、低频静噪电路、搜索调谐电路、信号检测电路及频率锁定环路、音频输出电路等组成。
TEA5767作为FMRadio单片集成电路也不外乎基本由这些部分构成,但TEA5767主要的优势是把上述所有功能都集成一个不足6×6平方毫米的小芯片中。
下面对EA5767进行介绍:2.1 TEA5767的主要功能特征作为目前广泛应用的单芯片FM解决方案,TEA5767主要具有以下特征,(1)集成高灵敏度的低噪声放大器;(2)FM到中频的混频器可以工作在87.5-108MHz的欧美频段或76-91MHz的日本频段,并且可预设接收日本108MHz 的电视音频信号的能力;(3)射频具有自动增益控制功能,并且LC调谐振荡器只需低价的固定片装电感;(4)内置的FM解调器可以省去外部鉴频器,并且FM的中频选择性可在芯片内部完成;(5)可以采用32.768KHz或13MHz的振荡器产生参考时钟或可以直接输入6.5MHz的时钟信号;(6)集成锁相环调谐系统;(7)可以通过I2C或三线串行总线来获取中频计数器值或接收的高频信号电平,以便进行自动调谐功能;(8)SNC(立体声噪声抑制)、HCC(高频衰减控制)、静音处理等可通过串行数字接口进行控制。
我用洞洞板做的TEA5767数字调频立体声收音机

我用洞洞板做的TEA5767数字调频立体声收音机我用洞洞板做的TEA5767数字调频立体声收音机//本程序使用数码管显示频率,晶振是用12M,已通过测试, 已用万能板做好成品,//在我的QQ空间里有万能板做的照片,高清的照片可以进QQ相册看,本人空间未加密。
//为了方便电子爱好者自制,本程序将所有的端口进行了宏定义,方便初学者自行修改,并且加了很多注释// 陈永飞先生写于2011年2月19号,QQ:49204743,邮箱:b ****************.//地址:江苏省南京市鼓楼区虎踞路180号苏宁电器售后服务中心草场门网点//本收音机的频率调节是用计算的方法,将显示的频率算好后写到TEA5767芯片里面实现调节的//使用MCS-51单片机进行控制,两个按键实现自加或自减频率,加了连续加减功能!//使用的是在淘宝上买的4.5元/片的简化版的TEA5767模块,在南京收到了十个电台#include <reg51.h>#include <string.h>#include <math.h>#define uchar unsigned char#define uint unsigned int/////////////////////////////////////////////////////////////////// //////////////////////////////////这uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF 8,0x80,0x90,}; //数码管段码表 /////些sbit led1=P2^4; //频率显示的数码管位选端口100兆,P2.4端口 /////是sbit led2=P2^5; //频率显示的数码管位选端口10兆,P2.5端口 /////端sbit led3=P2^6; //频率显示的数码管位选端口1兆,P2.6端口 /////口sbit led4=P2^7; //频率显示的数码管位选端口0.1兆,P2.7端口 /////,sbit SDA=P3^0; //接在TEA5767的数据端口 /////可sbit SCL=P3^1; //接在TEA5767的时钟端口 /////以sbit KEY1=P1^0; //频率增加按键端口 /////自sbit KEY2=P1^1; //频率减小按键端口 /////行#define duan P0 //频率显示的数码管段选P0端口 /////修/////////////////////////////////////////////////////////////////// //////////////////////////////////改//unsigned char radio_write_data[5]={0x33,0x8e,0x70,0x16,0 x80}; //要写入TEA5767的数据,107.9M江苏旅游台//unsigned char radio_write_data[5]={0x32,0x8e,0x70,0x16,0 x80}; //要写入TEA5767的数据,105.8M 南京音乐台//unsigned char radio_write_data[5]={0x31,0xd7,0x70,0x16,0 x80}; //要写入TEA5767的数据,104.3M南京体育台//unsigned char radio_write_data[5]={0x30,0x9a,0x70,0x16,0 x80}; //要写入TEA5767的数据,101.7M南京经济台城市调频unsigned char radio_write_data[5]={0x30,0x50,0x70,0x16,0x 80}; //要写入TEA5767的数据,101.1M江苏交通广播网//unsigned char radio_write_data[5]={0x2f,0xa5,0x70,0x16,0 x80}; //要写入TEA5767的数据,99.7M江苏金色调频//unsigned char radio_write_data[5]={0x2c,0xc9,0x70,0x16,0 x80}; //要写入TEA5767的数据,97.5M江苏文艺台//unsigned char radio_write_data[5]={0x2c,0xc9,0x70,0x16,0 x80}; //要写入TEA5767的数据,93.7M江苏经济台居家广播//unsigned char radio_write_data[5]={0x2b,0xb0,0x70,0x16,0 x80}; //要写入TEA5767的数据,91.4M江苏广播//unsigned char radio_write_data[5]={0x2a,0xe1,0x70,0x16,0 x80}; //要写入TEA5767的数据,89.7M江苏音乐台unsigned long frequency=101100; //开机初始化的电台频率为101.1MHzunsigned int pll; //计算频率合成时用的变量void Delayus(unsigned char x){for(;x>0;x--);}void iic_start(){SDA=1;Delayus(4);SCL=1; Delayus(4); SDA=0; Delayus(4); SCL=0; Delayus(4); }void iic_stop() {SCL=0; Delayus(4); SDA=0; Delayus(4); SCL=1; Delayus(4); SDA=1; Delayus(4); }void iic_ack() {SDA=0; Delayus(4); SCL=1; Delayus(4); SCL=0; Delayus(4); SDA=1; Delayus(4); }bit iic_testack(){bit ErrorBit;SDA=1;Delayus(4);SCL=1;Delayus(4);ErrorBit=SDA;Delayus(4);SCL=0;return ErrorBit;}void iic_write8bit(unsigned char input){unsigned char temp;for(temp=8;temp>0;temp--){SDA=(bit)(input&0x80);Delayus(4);SCL=1;Delayus(4);SCL=0;Delayus(4);input=input<<1;}}void delays (unsigned char b) //按键消抖用的延时程序{unsigned char i;for(b;b>0;b--)for(i=0;i<250;i++);}void radio_write(void){unsigned char i;iic_start();iic_write8bit(0xc0); //TEA5767写地址if(!iic_testack()){for(i=0;i<5;i++){iic_write8bit(radio_write_data[i]);iic_ack();}}iic_stop();}//将显示的频率算好后写到TEA5767芯片里面实现调节,不用考虑TEA5767用于搜台的相关位:SM,SUDvoid search(){pll=(unsigned int)((float)((frequency+225))/(float)8.192); //计算合成频率数据,频率单位:kradio_write_data[0]=pll/256; //将算好的频率高位数据写入TEA 5767radio_write_data[1]=pll%256; //将算好的频率低位数据写入TE A5767radio_write_data[2]=0x70; //这是TEA5767开立体声,关静音radio_write_data[3]=0x16; //中国制式,采用32768晶振,软静音关,立体声消噪声开radio_write_data[4]=0x80; //6.5M锁相环开,去加重时间75U Sradio_write();}void delay(){uchar k;for(k=0;k<100;k++);}void desplay(uint aa){duan=tab[aa/1000]|0x80; //关这位数码管的小数点led1=0;delay();led1=1;duan=tab[aa%1000/100]|0x80; //关这位数码管的小数点led2=0;delay();led2=1;duan=tab[aa%100/10]&0x7f; //点亮这位数码管的小数点led3=0;delay();led3=1;duan=tab[aa%10]|0x80; //关这位数码管的小数点led4=0;delay();led4=1;}void main(){radio_write(); //写入初始化电台频率while(1){if(!KEY1) //手动设置频率,+0.1MHz;{delays(250); //延时消抖frequency+=100;if(frequency>108500) //频率如果大于108.5MHz frequency=87500; //频率设定为87.5MHz search();desplay(frequency/100); //调用显示}if(!KEY2) //手动设置频率,-0.1MHz;{delays(250); //延时消抖frequency-=100;if(frequency<87500) //频率如果小于87.5MHz frequency=108500; //频率设定为108.5MHz search();desplay(frequency/100); //调用显示}desplay(frequency/100); //调用显示}}。
收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控=功放显示系统

大家好!我是威虎小熊,。
下面这个就是我最近做的数字收音机+温度+时间+液晶显示+红外遥控=功放显示系统,(初稿,后续会完善其他功能),希望能和大家一起分享(哈哈)。
功能说明:液晶显示(时间.温度,收音机频率)2.红外遥控(mini红外遥控器)3.温度检测(ds18b20)4.时间显示(ds1302)5.收音机(TEA5767 >> 无线功放)电路图:PDF 图,DXP原图请到下载电路图/功放显示下载。
PCB图,用处不大,在此贴上,威虎科技集团是我将来的公司名字,呵呵PCB打样成品:5cm* 非常小巧,很容易嵌入其他东西,需要的朋友可以找我联系,我去打样的成本8元一片,不过快递运费自付。
(好像不划算哦)Pcb资源:见上图,很多吧,除了现在已经调试的功能外,还可以做315M/无线遥控AD采集,DA控制,LCD数码管口可以用作与其他器件的嵌入通讯。
好了,该上程序了。
+++++++++++++++++++++++++后面内容为中内容+++++++++++++++++++++++++#include""#include<>#include<>#include<>#include<>#include<>#define uint unsigned int#define uchar unsigned charuint key,nt,t05s,t2s;void io_init(void);void int_init(void);void InitTimer0(void);show_time(uint wei){ nt++. "};unsigned char code line1[] = {"2012/06/15 09:52"}; unsigned char code line2[] = {"FM: T:"}; unsigned char code L1[] = {"20 / / : "};void Wlcd595(uchar dat595 ){unsigned char nt;HC595CLK=0;HC595RCK=0;for(nt=8;nt>0;nt--){LCM_Data=(dat595&0x80);dat595<<=1;HC595CLK=0;HC595CLK=1;HC595CLK=1;HC595CLK=1;HC595CLK=0; }HC595RCK=1; ;DisplayOneChar(7,2,(((frequency%100000)%10000)%1000)/100+0x30);}void radio_write(void){unsigned char i;iic_start();iic_write8bit(0xc0); //TEA5767写地址if(!iic_testack()){for(i=0;i<5;i++){iic_write8bit(radio_write_data[i]);iic_ack();}}iic_stop();}//由频率计算PLLvoid get_pll(void){unsigned char hlsi;// unsigned int twpll=0;hlsi=radio_write_data[2]&0x10; //HLSI位if (hlsi)pll=(unsigned int)((float)((frequency+225)*4)/(float); //频率单位:k elsepll=(unsigned int)((float)((frequency-225)*4)/(float); //频率单位:k}//由PLL计算频率void get_frequency(void){unsigned char hlsi;unsigned int npll=0;npll=pll;hlsi=radio_write_data[2]&0x10;if (hlsi)frequency=(unsigned long)((float)(npll)*(float); //频率单位:KHz elsefrequency=(unsigned long)((float)(npll)*(float)+225); //频率单位:KHz }//读TEA5767状态,并转换成频率void radio_read(void){unsigned char i;unsigned char temp_l,temp_h;pll=0;iic_start();iic_write8bit(0xc1); //TEA5767读地址if(!iic_testack()){for(i=0;i<5;i++){radio_read_data[i]=iic_read8bit();iic_ack();}}iic_stop();temp_l=radio_read_data[1];temp_h=radio_read_data[0];temp_h&=0x3f;pll=temp_h*256+temp_l;get_frequency();}//手动设置频率,mode=1,+; mode=0: ,不用考虑TEA5767用于搜台的相关位:SM,SUD void search(bit mode){radio_read();if(mode){frequency+=25;if(frequency>max_freq)frequency=min_freq;}else{frequency-=25;if(frequency<min_freq)frequency=max_freq;}get_pll();radio_write_data[0]=pll/256;radio_write_data[1]=pll%256;radio_write_data[2]=0x41;radio_write_data[3]=0x11;radio_write_data[4]=0x40;radio_write();}//自动搜台,mode=1,频率增加搜台; mode=0:频率减小搜台,不过这个好像不能循环搜台void auto_search(bit mode){radio_read();if(mode){radio_write_data[2]=0xa0; //b1frequency+=40;if(frequency>max_freq)frequency=min_freq;}else{radio_write_data[2]=0x20; //41frequency-=40;if(frequency<min_freq)frequency=max_freq; }get_pll();radio_write_data[0]=pll/256+0x40; //加0x40是将SM置为1 为自动搜索模式radio_write_data[1]=pll%256;radio_write_data[3]=0x11; //SSL1和SSL0控制搜索停止条件radio_write_data[4]=0x40;radio_write();radio_read();while(!(radio_read_data[0]&0x80)) //搜台成功标志{radio_read();}}#endif++++++++++++++++++++++++ 的内容+++++++++++++++++++++++#ifndef _ykong_H#define _ykong_H#include<>#include<>#define uint unsigned int#define uchar unsigned charuint key,rkey,numkey;uchar RIGHT=0, LEFT=0;uchar timewei=1;sbit YK=P3^2;uchar stime[11]={0,1,2,0,6,1,5,2,3,5,7};//年月日时分各2位//数据存放位置无年月日时分void showkey(){/*DisplayOneChar(0,2,0x30+key/10);DisplayOneChar(1,2,0x30+key%10);*/}showsstime(){WriteComLCM(0x0f); //0x0c不显示光标,0e光标显示,0d光标闪动DisplayListChar(0, 2, " ***TIME SET*** ");DisplayListChar(1, 1, "0");if(ET0==1){ DisplayListChar(0, 2, line2); // 设置完毕后恢复显示;DisplayListChar(0, 1, L1); // 设置完毕后恢复显示;showfm(); //恢复显示频率WriteComLCM(0x0C); //关光标,恢复显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
. .大学物理与电子学院课程设计报告基于TEA5767的数字调频收音机报告人:王世威专业:通信工程设计小组成员:王世威、何康. . .. .目录前言 (3)一、主要器材介绍 (4)1.1 STC89C52单片机 (4)1.2 TEA5767收音模块儿 (4)1.3 1602LCD显示屏......................................................... (5)1.4 LM386音频功率放大器......................................................... (6)二、系统原理及功能介绍 (7)2.1数字FM收音机基本原理 (7)2.2系统功能介绍 (7)三、元件清单......................................................... (9)四、制作过程 (10)4.1 前期准备 (10)4.2 实物图 (10)4.3焊接过程中遇到的问题和注意事项 (12)五、程序......................................................... .. (13)六、结论 (23). . .. .前言十九世纪无线电通讯技术的发明,使通信摆脱了依赖导线的传统方式,是通信技术上的一次飞跃,也是人类科技史上的一个重要成就。
作为无线电通信的的杰出成果,收音机的发明极改变了人们的生活方式,给人们的生活带来了无穷的乐趣。
随着科技的发展,技术不断地更新换代,收音机也沿着矿石收音机、电子管收音机、晶体管收音机、集成电路收音机的轨道不断进步着。
近年来,随着DSP技术的发展,采用DSP技术研发的收音机芯片的出现,“硬件无线电”由“软件无线电”代替,大大降低了收音机制造业的门槛。
2006年凯隆电子与美国芯科实验室合作,开发出世界上第一台数字收音机。
数字技术收音机的问世,标志着传统模拟收音机将逐渐退出历史舞台。
收音机的数字时代已经到来。
数字调频收音机就是无线电模拟信号由天线感应后接收后,在同一块儿芯片里放大,然后转化为数字信号,再对数字信号进行处理,然后还原成模拟音频信号输出。
数字调频收音机体积小、重量轻、寿命长、频率稳定、操作简便等优点,使其在市场上越来越受欢迎。
本次项目设计,我们对数字调频收音机的原理在理论上进行了充分的了解,基于其基本理论,我们制作了一台数字调频收音机。
. . .. .一、主要器材介绍本系统主要由STC89C52单片机、1602LCD显示屏、LM386音频功率放大器、TEA5767收音模块儿、电阻电容等组成。
1.1STC89C52单片机STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能: 8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,置4KB EEPROM,MAX810复位电路,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
引脚如右图所示。
1.2 TEA5767收音模块儿TEA5767是飞利浦公司生产的一款收音机芯片,很多手机,MP3、MP4里的收音机功能都是基于它实现的。
TEA5767置了主频高达75MHZ的数字信号处理器,实现384KBPS/48KHZ的MD级高品质MP3音乐文件回放,加上拥有一般MP3播放器难以企及的高保真回放线路(信噪比高达95DB,THD总谐波失真率〈0.05%〉同时非常省电。
FM收音功能,这个功能主要是有FM 收音模块来完成。
其中FM收音模块的核心就是下面的Philips(飞利浦)TEA5767。
这是一块性能比较良好的FM收音芯片,很多的MP3都是用这个. . .... . .型号来实现FM 收音功能。
其引脚如下图所示。
TEA5767模块儿引脚图1.3 1602液晶屏1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM ,显示效果也不好)。
1602LCD 是指显示的容为16X2,即可以显示两行,每行16个字符液晶模块(显. .示字符和数字)。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1.4 LM386音频功率放大器LM386是一种音频集成功放,具有自身功耗低、更新链增益可调整、电源电压围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。
LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。
为使外围元件最少,电压增益置为20。
但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。
输入端以地为参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。
. . .. .二、系统原理及功能介绍2.1 数字FM收音机基本原理FM型的收音机电路可用如下图所示的方框图来表示。
收音机通过调谐回路选出所需的电台,送到变频器与本振电路送出的本振信号进行混频,产生中频输出(我国规定的FM中频为10.7MHZ),中频信号将检波器检波后输出调制信号,调制信号经低放、功放放大电压和功率,推动喇叭发出声音。
2..2系统功能介绍本项目设计的目的,就是设计制作出一个数字调频收音机。
所以,本系统所实现的主要功能就是收音功能。
通过单片机外接三个按键,分别控制复位,向上手动搜台,向下手动搜台。
同时,所搜到的频道的频率由1602LCD显示。
天线接到信号后,由tea5767芯片进行处理,在单片机的控制下,再通过LM386功放芯片,最终通过喇叭播出广播。
电路原理图如下:. . .. .. . .. .三、元件清单. . .. .四、制作过程3.1 前期准备项目设计之初,我们通过查阅各种资料,对数字调频收音机的原理的进行了充分了解,以便有一个理论上的认识和把握。
之后,通过对原理的了解和制作要求,进行了电烙铁、焊锡、导线、电路板、单片机、液晶屏、收音模块儿等器材的选购与借取,为硬件的制作奠定了基础。
软件方面,通过Keil软件用C语言编程,利用Proteus软件对部分电路进行仿真。
程序调试无误之后,用单片机开发板将程序烧进STC89C52单片机,控制本系统工作。
3.2 实物图经过认真考虑,拟定本系统的焊接主要分为最小系统、显示模块、TEA5767收音模块儿及周围电路、功放其周围电路、按键五个部分分步进行,既保证了焊接可以有条不紊的进行,又保证了焊接的准确性和完整性。
由于本项目的器件较多,电路错综复杂,故焊接颇为费力。
下附焊接完的几实物图,以供参考。
正面:. . .... . .背面:工作状态:... . .左边两个旋钮分别用来调整音量和显示屏亮度。
可以正常工作3.3 制作过程中遇到的问题和注意事项在焊接的过程中,遇到了一些问题,给顺利焊接造成了一定的困难。
主要问. .题有以下几个方面。
一是元件布局和布线的问题。
由于电子元件比较多,如何布局直接影响到电路的焊接。
刚开始我们只是按照原理图上画的进行布局,结果在背面进行焊接的时候给布线造成了很大的困难,不得不采用大量的飞线。
所以汲取这个教训,在以后的焊接中,之前都要进行认真地元件布局和布线,尽量减少飞线的使用,使整个板子显得更加漂亮,焊接更加容易,同时尽量减小对电路的影响。
二是个别元件的的焊前测试和其特性的掌握。
比较典型的就是按键和杜邦线,在焊接过程中,有时候出问题一直找不到原因,最后发现是按键坏了或者杜邦线有问题。
所以在使用之前应首先测试其良好与否。
还有就是稳压管的特性,由于没有反接,造成电路无常工作,这也是一个教训。
三是要注意特殊器件的焊接。
本设计主要是TEA5767收音模块儿的焊接。
由于该模块儿上面的焊接点太小,稍不注意就容易焊接坏,所以在焊接的时候需要格外小心,最好借助一个小基台。
五、程序#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define DELAY5US _nop_();_nop_();_nop_();_nop_();_nop_();//**************TEA5767模块接线方法********************sbit SDA=P2^6;sbit SCL=P2^7;//*************频率调节按键接线************************sbit Key1=P3^2;sbit Key2=P3^3;//==============LCD1602接口连接方法=====================/*-----------------------------------------------------|DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3 ||DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4 ||DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 ||DB3-----P0.3 | DB7-----P0.7 |---------------------------------------------------*///================================================*/#define LCM_Data P0 //LCD1602数据接口. . .. .#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit LCM_RW = P2^3; //读写控制输入端,LCD1602的第五脚sbit LCM_RS = P2^4; //寄存器选择输入端,LCD1602的第四脚sbit LCM_E = P2^2; //使能信号输入端,LCD1602的第6脚//*****************参数定义*****************************unsigned long int FM_FREQ; //频率unsigned short int FM_PLL; //PLLuchar idata sbuf[5]; // 数据发送缓冲区uchar idata numbyte;uchar idata numbyte_AMP;uchar idata ADDRESS_AMP;uchar idata ADDRESS_SEND; //TEA5767发送地址uchar idata ADDRESS_RECEIVE; //TEA5767接收地址uchar idata rbuf[5]; // 数据接收缓冲区uchar idata ampint[5];uchar bdata PLL_HIGH;uchar bdata PLL_LOW; //设定用于搜索和预设的可编程频率合成器uchar bdata I2C_byte1;//发送的五字节TEA5767可位寻址的设置值uchar bdata I2C_byte2;uchar bdata I2C_byte3;uchar bdata I2C_byte4;uchar bdata I2C_byte5;sbit MUTE =I2C_byte1^7;//如果MUTE=1,则左右声道被静音;MUTE=0,左右声道正常工作sbit SM = I2C_byte1^6; //SM=1,则处于搜索模式;SM=0,不处于搜索模式sbit SUD=I2C_byte3^7; //SUD=1,增加频率搜索;SUD=0,减小频率搜索uchar byte1;uchar byte2;uchar byte3;uchar byte4;uchar byte5;uchar num1,num2,num3,num4;uchartab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};bit bdata NACK; // 错误标志位//**********相关函数声明**************************************void init(void); //TEA5767初始化void delay600ms(void); //延迟600msvoid delay100ms(void); //延迟100msvoid delay10ms();void delay1ms(void); //延迟1msvoid sendnbyte(uchar idata *sla, uchar n);//与sendbyte函数构成I2C 数据发送函数. . .. .void I2C_start(void); //I2C 传输开始void sendbyte(uchar idata *ch);void checkack(void); //检查应答讯号void stop(void); //I2C传输结束void AMP_sendnbyte(uchar idata *sla,uchar numbyte_AMP);void key_scan(void); //键扫描void search_up(void); //接收频率向上加void search_down(void); //接收频率向下减void setByte1Byte2(void); //设置第一第二字节频率void LCMInit(void);//LCD初始void DelayMs(uint Ms);//1MS基准延时程序void WriteDataLCM (uchar WDLCM);//LCD模块写数据void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模块写指令uchar ReadStatusLCM(void);//读LCD模块的忙标void DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符void LCDshow(void);void DelayMs(uint Ms);//*****************主程序******************************void main(void){numbyte = 5;numbyte_AMP=5;ADDRESS_SEND = 0xC0;// TEA5767写地址 1100 0000ADDRESS_RECEIVE=0XC1;//TEA5767读地址 1100 0001ADDRESS_AMP=0X8E;init(); // 初始化TEA5767LCMInit();//LCD初始LCDshow();while(1){key_scan(); //键扫描}}//**************按键扫描程序**************************void key_scan(void){if(Key1==0){delay10ms();if(Key1==0){. . .. .while(Key1==0);search_up(); //频率向上LCDshow();delay600ms();}}if(Key2==0){delay10ms();if(Key2==0){while(Key2==0);search_down(); //频率向下LCDshow();delay600ms();}}}//*********************LCD1602显示程序*********************void LCDshow(void){num1=FM_FREQ/100000000;num2=(FM_FREQ%100000000)/10000000;num3=(FM_FREQ%10000000)/1000000;num4=(FM_FREQ%1000000)/100000;DisplayOneChar(0, 4,'F');//DisplayOneChar(0, 5,'M');//DisplayOneChar(0, 6,'R');//DisplayOneChar(0, 7,'a');//DisplayOneChar(0, 8,'d');//DisplayOneChar(0, 9,'i');//DisplayOneChar(0, 10,'o');//DisplayOneChar(1, 4, tab1[num1]);DisplayOneChar(1, 5, tab1[num2]);DisplayOneChar(1, 6, tab1[num3]);DisplayOneChar(1, 7, '.');DisplayOneChar(1, 8, tab1[num4]);DisplayOneChar(1, 9,'M');//DisplayOneChar(1, 10,'H');//DisplayOneChar(1, 11,'Z');//}/*====================================================================== LCM初始化. . .. .======================================================================*/void LCMInit(void){LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置DelayMs(100);}//==============================LCD1602显示子程序================================================// 写数据函数: E =高脉冲 RS=1 RW=0//======================================================================*/ void WriteDataLCM(uchar WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}/*====================================================================写指令函数: E=高脉冲 RS=0 RW=0======================================================================*/void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;. . .. .}/*==================================================================== 正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。