51单片机+TEA5767+数码管的FM收音机制作电路图+程序
基于TEA5767的USB调频收音机设计

音质和速 度 与 网络 连接情 况有 很大 关系 .与 网络 收音机相 比较 ,US B收音机 没有 收听 费用 ,便于
携带 ,不受 网络条件 限制 ,随 时随地 都能 收听 , 同 时通过 完 善计算 机软件 , 也可 具有 自定义 频道 ,
自动关机 等 附加功 能 .
图 1 系统 框 图
传给上位机 ,任何具有 US B连结功能的 Wi o 个人计 算机或笔记本 电脑,只要通 过 US n ws d B接 口连接本设 计, 就 能通过计算机扬 声器播放调频广播 音频.
关 键 词 :T A5 6 ;调 频 收音 机 ; US E 77 B 中图 分 类 号 :T 7 . M5 1 6 文 献 标 识 码 :A 文 章编 号 : 17 — 3 8( 0 0 卜0 1— 6 6 20 1 2 1 )0 0 20
的管线 式 8 5 0 1处理 器和 1k 闪存 以及 UAR 、 6B T
高度集 成化 , 占用 面积很 小 .
C 0 1 3 0微 处理器 控制通 过 1C总线 控制 85 F 2 2
S u 和 SI MB s P 串行 界面 .芯 片 内建 模拟功 能则包 括
T A5 6 E 7 7芯 片 , E 5 6 T A 7 7音频输 出被微 处理 器 的 模数 转 换 器 ( ADC)进行 采 样 ,采 样 结 果通 过
1 收音机硬件设计
1 1 硬 件总体 设计 .
1 2 微控 制器 电路设计 .
微 控制器 采用 型号 为 C8 5 F 2 0 1 3 0的芯片 ,该芯
片是 C g a 公 司推 出的 US 微控 制器 ,芯 片体积 ynl B 小巧 , 内有 高速 8 5 单片机 内核 ,并 内建 US 20 0l B.
大学生毕业设计 基于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课题背景随着科学技术的不断发展,新颖的调频收音机的不断出现,技术不断的提高,设计出来的收音机外型精致和小巧。
51单片机数码管显示程序设计

练习3主程序参考:
ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030H START: MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 MOV DISBUF,#0 MOV DISBUF+1,#1 MOV DISBUF+2,#2 MOV DISBUF+3,#3 MOV DISBUF+4,#4 MOV DISBUF+5,#0 MOV FLASH,#11000000B MOV R0,#0 LOOP: MOV DISBUF+5,R0 LCALL DELAY INC R0 CJNE R0,#10,LOOP MOV R0,#0 AJMP LOOP
恢复现场
返回
动态显示参考程序1:定义变量
;--------------------------------------------------------;动态显示程序 ;--------------------------------------------------------;全局变量定义 FLAG EQU 20H ;标志位 DISSEG EQU P0 ;显示段驱动 DISBIT EQU P2 ;显示位驱动P2.7-P2.2 DISBUF EQU 21H ;显示缓冲区首地址21H-26H DISBITBUF EQU 27H ;当前显示位计数器0-5 FLASH EQU 28H ;闪烁控制xxxxxx00,将x=1闪烁,=0不闪 ;小数点的处理: ;若显示‘3’,缓冲区放‘3’,若显示‘3.’,缓冲区放‘3+80H’, 最高位为1 S_PULSE EQU FLAG.0 ;秒脉冲 CNT_2D5MS EQU 2FH ;2.5MS计数器 CNT_10MS1 EQU 30H ;10MS计数器 CN_0D5S EQU 31H ;0.5秒计数器 ;----------------------------------------------------------
【尚择优选】最新51单片机控制的FM收音机.doc

专业综合课程设计基于单片机控制的FM收音机班级:通信(三)班成绩:基于单片机控制的FM收音机摘要:单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。
单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。
正因为单片机有如此多的优点,因此其应用领域之广,几乎到了无孔不入的地步。
在我国,单片机已被广泛地应用在工业自动化控制、自动检测、智能仪表、智能化家用电器、航空航天系统和和国防军事、尖端武器等各个方面。
我们可以开发利用单片机系统以获得很高的经济效益。
更重要的意义是单片机的应用改变了控制系统传统的设计思想和方法。
以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。
这种以软件结合硬件或取代硬件并能提高系统性能的控制技术称为微控制技术。
例如,本文所要论述的通过单片机来控制TEA5767HN芯片及驱动LCD1602液晶屏实现FM收音并显示频率。
现在人们常使用的收音机为手动调频收台,使用较为麻烦,而且由于接收灵敏度不高,所接收的频段较窄。
本设计采用的是TEA5767HN芯片,它是由PHILIPS公司推出的针对低电压应用的单芯片数字调谐FM立体声收音机芯片。
TEA5767HN芯片内集成了完整的IF频率选择和鉴频系统,只需很少的低成本外围元件,就可实现FM收音机的全部功能。
另外,它具有高性能的RFAGC电路,其接收灵敏度高;参考频率选择灵活;可实现自动搜台。
关键词:89C52单片机;TEA5767HN芯片;2822功率放大器AbstractThistestconstitutewithstc89c52singlechipmicPoco,tea5767model,2822 poweramplifier,1602andperipheralcircuit.Inthedesignprocess,weusedmodu lardesignforseveraltPpes,suchassearchingmodel,displaPmodel,storagemod elandsomeancillarPfunction.STCseriessinglechiphasverPgoodcontrolabili tPandstableleveltomeettherequirements.前言:本设计研究FM收音机分为硬件电路和程序设计两个方面。
51单片机FM收音机-用户指南资料

用户指南——51单片机FM收音机2015年河南惠思通电子科技有限公司Henan Huistone Electronic Technology Co.,Ltd目录1 项目背景 (1)2 项目概述 (1)2.1主要功能 (1)2.2设计方案 (1)3 硬件电路 (2)3.1FM接收模块 (2)3.2创新平台底板 (4)3.351单片机核心模块 (5)3.4LCD1602液晶模块 (6)3.58位独立按键模块 (7)4 软件程序 (9)4.1程序流程 (9)4.2主要函数 (9)5 拓展功能 (10)6 装箱清单 (10)1 项目背景收音机从发明到现在,经历了一个多世纪。
技术上从最早期矿石收音机、到电子管收音机,再到后来的半导体收音机,发展到现在高度集成化的集成电路收音机。
体积上,也由早期需要架设天线的收音机,到桌旁听,再到随身听,发展到现在直接集成到手机或耳机上的收音机。
老式收音机当前,常见的广播电台主要由AM(调幅)和FM(调频)两种方式。
AM主要集中在中波电台(526.5kHz~1606.5kHz)和短波电台(2.3~26.1MHz)。
FM主要集中在(87~108MHZ)之间。
由于FM具有较强的抗噪能力,声质优美清晰,因此得到了广泛的应用。
FM方式的频率较高,天线尺寸可以做得很短,也便于小型化,很容易嵌入到其它的电子设备中。
在本项目中,就用到了飞利浦TEA系列立体声收音机接收芯片,结合单片机作为人机交互,自己动手DIY一个FM收音机。
2 项目概述2.1 主要功能该项目实现的主要功能及参数:1、采用液晶作为显示器。
2、可接收87.5~108MHz范围内的调频广播电台。
3、立体声,耳机输出声音。
4、按键可实现音量调节和自动搜台两个功能。
2.2 设计方案项目采用“电子积木+底板”的形式,通过电子积木拼接,实现项目功能。
主要积木包括:51单片机核心板、独立按键模块、FM模块、LCD1602液晶模块。
系统框图这是51单片机FM收音机实物图:实物图3 硬件电路3.1 FM接收模块该模块采用RDA5802E芯片为核心的,新一代数字调频收音机模块。
通过单片机模拟I2C总线来控制TEA5767收音模块(具有自动搜索功能)

/****************************************************功能:通过单片机模拟I2C总线来控制TEA5767收音模块,通过4个按键调整收音频率,达到换台的目的设计者:姚松金联系QQ:190719416编写日期:2015年7月20日****************************************************/#include <reg52.h>#include <intrins.h>#include <string.h>#include <math.h>#define uchar unsigned char#define uint unsigned int/****************************************************位定义及变量定义****************************************************/sbit key5=P1^5;//手动搜索加sbit key6=P1^6;//手动搜索减sbit key7=P1^4;//向上自动搜索sbit key4=P1^7;//向下自动搜索uchar idata sbuf[5];//要写入5767的数据uchar idata rbuf[5];//缓存读出的数据uint temp1; //计算频率合成时用的变量unsigned long PLL,frequency=104300; //开机初始化的电台频率为104.3MHz extern bit flag1,flag2;bit led_flag,hisi;uchar code led2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,//从左边开始递增亮灯0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//从右边开始递增亮灯0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//从左边开始递减灭灯0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,//从右边开始递减灭灯0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,//一个亮灯从左边开始移动0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//一个亮灯从右边开始移动0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//一个暗灯从左边开始移动0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//一个暗灯从右边开始移动0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81,0xff,//从外向内灭灯/从内向外灭灯0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0xff};/****************************************************子函数声明****************************************************/void delayus(uchar x);void delayms (uchar b);void iic_start();void iic_stop();void iic_ack();//i2c应答bit iic_testack();void iic_write8bit(uchar input);//i2c写8位数uchar iic_read8bit();//读取8bit数据void write_com(uchar com);//写1602命令函数void write_data(uchar date);//写1602数据函数void init1602();//1602初始化函数void LCD1602_String(uchar *str);void LCD1602_setXY(uchar y,uchar x);/**************************************************** 计算PLL(单位KHZ)函数****************************************************/ void get_pll(){unsigned long freq1,y=frequency;freq1=y;hisi=sbuf[2]&0x10;if(hisi)PLL=(uint)((float)(freq1+225)/(float)8.192);elsePLL=(uint)((float)(freq1-225)/(float)8.192);}/**************************************************** 计算频率(单位HZ)函数****************************************************/ void get_frequency(){uint y=0;y=PLL;hisi=sbuf[2]&0x10;if(hisi)frequency=(unsigned long int)((y*(float)8.192-225));elsefrequency=(unsigned long int)((y*(float)8.192+225)); }/**************************************************** 写5个字节到收音模块,在写字节前需要先写器件地址****************************************************/ void radio_write(void){uchar i;iic_start();iic_write8bit(0xc0); //TEA5767写地址if(!iic_testack()){for(i=0;i<5;i++){iic_write8bit(sbuf[i]);iic_ack();}delayus(5);;}iic_stop();}/****************************************************从收音模块读5个字节出来,读字节前需要先写器件的读地址指令****************************************************/void radio_read(){uchar i,tempH,tempL;iic_start();iic_write8bit(0xc1);//写读命令iic_testack();for(i=0;i<5;i++){rbuf[i]=iic_read8bit();iic_ack();}iic_stop();tempH=rbuf[0];tempL=rbuf[1];tempH&=0x3f;PLL=tempH*256+tempL;//get_frequency();}/****************************************************写频率到1602函数****************************************************/void write_FREQ(uchar add,uchar date){write_com(0x80+0x40+add);//第二行数据指针地址40H为第二行的第一个字符write_data(0x30+date);}/****************************************************显示频率函数****************************************************/void LCDshow(void){uchar num1,num2,num3,num4,num5;num1=frequency/100000;num2=frequency%100000/10000;num3=frequency%10000/1000;num4=frequency%1000/100;num5=frequency%100/10;if(num1==0){write_com(0x80+0x40+5);write_data(0x20);}else write_FREQ(5,num1);write_FREQ(6,num2);write_FREQ(7,num3);write_FREQ(9,num4);write_FREQ(10,num5);}/**************************************************** 手动搜索电台****************************************************/ void Search(bit mode){if(mode){frequency+=100;//手动设置频率,+0.1MHz;if(frequency>108000) //频率如果大于108.5MHzfrequency=87500; //频率设定为87.5MHz }else{frequency-=100;//手动设置频率,-0.1MHz;if(frequency<87500) //频率如果小于87.5MHzfrequency=108000; //频率设定为108.5MHz }get_pll();sbuf[0]=PLL/256;sbuf[1]=PLL%256;radio_write();LCDshow();}/*************************************************** 自动搜台,mode=1,频率增加搜台; mode="0:频率减小搜台".****************************************************/void Auto_Search(bit mode){do{if(mode){frequency+=100;//手动设置频率,+0.1MHz;if(frequency>108000) //频率如果大于108.5MHzfrequency=87500;}else{frequency-=100;//手动设置频率,-0.1MHz;if(frequency<87500) //频率如果小于87.5MHzfrequency=108000; //频率设定为108.5MHz }get_pll();sbuf[0]=PLL/256+0x80;sbuf[1]=PLL%256;radio_write();LCDshow();radio_read();}while(!(((rbuf[3]&0xf0)/16)>=7));sbuf[0]&=0x7f;radio_write();LCDshow();}/**************************************************** 收音机按键扫描函数****************************************************/ void radio_key_scan(void){static bit curr_encoder_b,last_encoder_b;static bit st=0;uchar i,num,led;temp1++;if(led_flag){if(temp1>4000){temp1=0;if(led==79)led=0;P3=led2[led];led++;}}if(flag1==1) //此语句写空格刷新显示{flag1=0;write_com(0x80+1);write_data(' ');write_com(0x80+2);write_data(' ');radio_read();num=(rbuf[3]&0xf0)/16/4;//显示天线信号强度for(i=0;i<num;i++){write_com(0x80+i);write_data(i);}LCD1602_setXY(1,11);if(rbuf[2]&0x80){write_com(0x80+14);//显示立体声标志write_data(3);write_com(0x80+15);write_data(4);}else{write_com(0x80+14);write_data(' ');write_com(0x80+15);write_data(' ');}radio_write();LCDshow();}if(key7==0&&key4!=0)//控制跑马灯开启或者关闭{delayms(10);if(key7==0&&key4!=0)Auto_Search(1);}if(key4==0&&key7!=0){delayms(10);if(key4==0&&key7!=0)Auto_Search(0);}if(key4==0&&key7==0&&flag1==1){flag1=0;led_flag=~led_flag;//跑马灯标志位if(led_flag)P3=0x00; //当标志位为真时关闭跑马灯,系统上电默认跑马灯是开启的else P3=0xff;while(key4==0||key7==0);}if(key5&&key6){st=0;return;}last_encoder_b=key6;while(!key5){curr_encoder_b=key6;st=1;}if(st){st=0;if((last_encoder_b==0)&&curr_encoder_b==1){Search(1);}else if((last_encoder_b==1)&&(curr_encoder_b==0)){Search(0);}}}。
基于单片机的FM收音机设计

ELECTRONIC ENGINEERING & PRODUCT WORLD2022.4电子产品世界基于单片机的FM收音机设计Design of home internet detection system based on STM32许可嘉,杨晓军 (成都大学电子信息与电气工程学院,成都610106)摘 要:该设计是单片机控制电路与TEA5767模块电路及音频功率放大电路共同组成的FM收音机电路,用来实现频道接收、保存、播放等功能。
系统采用STC89C52为主控,TEA5767作为数字信号处理器,I2C总线协议为主控与数字信号处理器之间的通信协议,可以实现频道自动搜索、接收、保存、播放等功能。
通过LCD显示器实时显示当下操作及相应频道所在频率。
最终测试结果表明:该设计可以实现频率在87.5 MHz~108 MHz调频广播的接收,本设计能够达到了既定的设计目标。
关键词:单片机;FM收音机;TEA5767;I2C总线随着现代科学技术的不断发展,电子产品也不断更新换代,单片机的广泛应用使用使现在的电子产品设计越来越方便、功能越来越好,而单片机是所有微处理器中性价比最高的一种,它的功能不断完善,种类不断增加,因此它的应用领域也不断扩大,本文我们将单片机与FM收音机芯片综合运用起来,设计了一款可以实现调频、存台的FM收音机系统。
1 系统方案1.1 系统总体设计该系统设计采用模块化设计,主要由存储模块,主控制器,数字处理芯片和音频功率放大器组成。
系统工作原理框图如图1所示,由主控制器接收按键信号进行人机交互,通过I2C总线,主控制器作为主机,TEA5767为从机,双机通信,TEA5767芯片输出音频信号经LM386放大后通过耳机或扬声器播放,系统运行时,收听电台的频率可在LCD显示器上实时显示,通过按键手动控制频率搜台,或切换至自动搜台模式,音频输出设备音量可由电位器调节[8]。
2 系统硬件设计该系统的硬件设计部分分为TEA5767数字处理电路、主控制器电路和音频功放电路。
基于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)绪论 ................................................................................................................ 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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,超时值。