首页 大学生毕业设计 基于TEA5767和单片机的数字FM收音机设计

大学生毕业设计 基于TEA5767和单片机的数字FM收音机设计

举报
开通vip

大学生毕业设计 基于TEA5767和单片机的数字FM收音机设计摘  要 本设计是一个数字调频收音机(FM),就是接受频率调制的无线电信号,经过解调还原成原信号的电子设备,利用单片机控制有FM功能的专用芯片,设计一个基于TEA5767模块的数字FM收音机。本设计采用模块化设计,整个系统由控制模块,FM音频模块和功放模块组成。本设计核心采用的是TEA5767芯片,它是由PHILIPS公司推出的针对低电压应用的单芯片数字调谐FM立体声收音机芯片。TEA5767芯片内集成了完整的IF频率选择和鉴频系统,就可实现FM收音机的全部功能。采用的是Lcd1602液晶显示屏,实现单片机的频...

大学生毕业设计 基于TEA5767和单片机的数字FM收音机设计
摘  要 本 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 是一个数字调频收音机(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课题背景 随着科学技术的不断发展,新颖的调频收音机的不断出现,技术不断的提高,设计出来的收音机外型精致和小巧。从分离元件到集成电路,这标志着收音机的内部电路简单。用一个集成块就能完成所有的工作。从早期的调幅收音机到现在的调频收音机,我们可以想象收音机的不断的改进和不断创新,使收音机的发展空间愈来愈大。现在,出现了新一代高科技产品——数字调频收音机,功能强大,性能优良,设计精巧耐用。 1.2课题概述 收音机的接收原理就是把从天线接收到的高频信号经检波(解调)还原成音频信号,送到耳机变成音波。由于广播事业发展,天空中有了很多不同频率的无线电波。如果把这许多电波全都接收下来,音频信号就会象处于闹市之中一样,许多声音混杂在一起,结果什么也听不清了。为了设法选择所需要的节目,在接收天线后,有一个选择性电路,它的作用是把所需的信号(电台)挑选出来,并把不要的信号“滤掉”,以免产生干扰,这就是我们收听广播时,所使用的“选台”按钮。 选择性电路的输出是选出某个电台的高频调幅信号,利用它直接推动耳机(电声器)是不行的,还必须把它恢复成原来的音频信号,这种还原电路称为解调,把解调的音频信号送到耳机,就可以收到广播。 二.设计要求与思路 2.1收音机的设计要求: 可对无线接收机的频率进行控制。通过键盘可以设置接收频率,接收频率在88-108MHz内自选20M的带宽。 2.2系统设计整体思路 (1)硬件部分:整体由52单片机控制,组成由液晶显示屏、功放模块、TEA5767收音机模块、按键。如下图所示: 图为:系统方案设计框图 三、主要电路模块的实现方案比较及选择 AM:改变载波的振幅称振幅调制。AM是指对信号进行幅度调制。一般做法就是先在原信号上叠加一个直流信号以保证信号f(t)+A>0,然后乘上一个高频的余弦信号,即得到g(t)=[f(t)+A]coswt。在频域上的效果就是将原信号的频谱移动到w处,以适合信道传输的最佳频率范围。g(t)的包络线即f(t)+A,用一个简单的包络检测电路就可以接收并还原信号了。 FM:改变载波的频率称频率调制。音频信号的改变往往是周期性的。与“FM无线电波”相同,“FM合成理论”同样也有着发音体(载体)和调制体两个元素。发音体或称载波体,是实际发出声音的频率振荡器;调制体或称调制器. 本次方案选用的是FM调制。理由有以下几点: 1) 在同样的频率、功率等条件下,用调频方式传输信号比调幅方式要远得多。因为调幅方式的载频电平要高出噪声电平三四十分贝才能得到良好的图像指标,而调频方式只要高出噪声电平几分贝即可。 2) 调频比调幅抗干扰能力强:外来的各种干扰、加工业和天电干扰等,对已调波的影响主要表现为产生寄生调幅,形成噪声。调频制可以用限幅的方法,消除干扰所引起的寄生调幅。而调幅制中已调幅信号的幅度是变化的,因而不能采用限幅,也就很难消除外来的干扰。 3) 另外,信号的信噪比愈大,抗干扰能力就愈强。而解调后获得的信号的信噪比与调制系数有关,调制系数越大,信噪比越大。由于调频系数远大于调幅系数,因此,调频波信噪比高,调频广播中干扰噪声小。 4) 调频波比调幅波频带宽。 3.1控制模块方案选择: 方案:控制核心选择STC89C52单片机,该单片机有一个8位的微处理器,与通用的微处理器基本相同,STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。优势为结构简单,价格不高,易于购买。缺点为缺少AD转换功能,运行速度较慢。 由于方案的单片机使用较为广泛,功能较为了解。故采用此方案作为控制模块。 3.2液晶显示模块方案选择: 方案:用Lcd1602显示屏,该显示屏具有2行16个字符。Lcd1602具有体积小、重量轻、功耗低、寿命长、无辐射、无污染等优点,低压、微功耗极低的工作电压,只要2V-3V即可工作,而工作电流仅几个微安即每个显示字符只有几个微安。优势为结构简单,价格不高,易于购买。实际中应用到的机会比较大。 通过自己所掌握的知识与能力,由于对Lcd1602的使用比较了解。故采用此次模块。 3.3无线芯片方案选择: TEA5767芯片,通过I2C接口与单片机进行通信。单片机按键对TEA5767进行初始化输入接收频段的频率,TEA5767内部对信号滤波、放大、解调处理,输出信号经过功放进行放大,插上耳麦即可收听到电台节目,接收频率为87M~108MHz。 方案(1)采用无线芯片TEA5767,自己设计外围电路。 方案(2)采用相关厂家生产的TEA5767模块来实现。 很显然,第一种方案需要自己设计电路、画PCB和焊接,而TEA5767采用的是FVQFN40(耐热的薄型四脚扁平封装)封装,在短时间内和有限的条件下实现硬件功能的难度相当大。所以本设计采用第二种选择方案——使用现成的模块。 四、系统电路图 4.1微控制器模块 单片机是控制单元的核心,起着控制收音机所有运行状态的作用。单片机控制模块使用的是STC89C52,使用该芯片很容易实现对其他模块的控制。通过对单片机STC89C52写入程序,可以方便的用软件来控制整个过程。 STC89C52单片机,支持USB口或者是串口两种下载程序方式,不用另买烧写器,编程器等产品,可以方便的烧写程序到单片机里;单片机内部有P0、P1、P2、P3个八位双向I/O口,外设与这些端口可以直接相接,无需另外的接口芯片。P0-P3既可以按字节输入或输出,也可以按进位进行输入输出,共32条口线,其控制十分灵活方便。 单片机特点: (1) 集成度高,体积小,可靠性高      (2) 控制功能强 (3) 低电压,低功耗                  (4) 性价比高 图4.1单片机最小系统 P1口负责控制LCD液晶显示。通过软件模拟SPI总线控制显示内容。 P2.6接TEA5767模块的DAT线。 P2.7接TEA5767模块的CLK线。 RET接复位端的RST    P3.0接下载线的RXD P3.1接下载线的TXD P3口负责扫描按键。 P3.2接按键1。 P3.3接按键2。 P3.4接按键3。 P3.5接按键4。 P3.6接按键5。 P3.7接按键6。 4.2FM模块 图4.2  FM模块原理图 DAT线接微控制器模块P2.6引脚。 CLK线接微控制器模块P2.7引脚。 DAT和CLK线组成IIC总线与微控制器通信。 OUTL输出左声道。 OUTR输出右声道。 4.2.1 FM模块介绍 在方案设计时就已经确定FM部分采用按照datasheet推荐的应用设计电路图生产的模块。本设计FM模块采用B20C封装的完整版收音机模块,外接引脚只有10个,开发者只需要关注引脚而不需要关注模块的内部结构,开发方便简单,使用过程简单。 4.3 工作原理: 由于TEA5767收音机模块,必须要由单片机通过控制总线向芯片内的寄存器写入控制字才能正常工作。而TEA5767收音机模块的控制总线有I2C和3-wire两种。在设计过程中,我们把模块的8脚(MODE)接地,因此,我们采用I2C总线方式。 我们通过往单片机写入相关程序,然后通过I2C总线,实现单片机与TEA5767模块之间的双向转。利用不同的按键操作,实现频率的各种改变。在手动搜索模式下,通过按键的操作,增加(减少)频率值,然后通过I2C总线,传送数组到模块的寄存器中,转化为内PLL值。而在自动搜索模式中,我们通过按键控制模块内部PLL值的增加(减少),然后通过读取模块内部的数组,通过计算,得出频率值,显示在数码管上,以带动蜂鸣器的工作。 4.3.1.串行总线工作模式: 串行总线在传送数据过程中共有三种类型信号,它们分别是:开始信号,结束信号和应答信号。 开始信号:CLOCK为高电平时,DATA由高电平向低电平跳变,开始传送数据; 结束信号:CLOCK为高电平时,DATA由低电平向高电平跳变,结束传送数据; 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。  4.3.2 串行总线基本操作: ⑴串行规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟 CLOCK 控制总线传输方向,并产生起始条件和停止条件。DATA线上的数据状态仅在CLOCK为低电平的期间才能改变,CLOCK为高电平的期间,DATA状态的改变被用来表示起始和停止条件。 参见下图:        ⑵控制字节: 在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符接着三位为片选位,前7位结合起来表示芯片地址位(CS3667 地址固定为 1100000),最后一位为读写位,当为1时为读操作,为0时为写操作。 如下图所示: ⑶写入模式: 写入多个字节时,收到每个字节后发出一应答信号(一个时钟长度低电平脉冲)。控制器收到应答信号后,根据实际情况作出是否继续传递信号的判断(也就是说是否发出传输停止信号)。若未收到应答信号,由判断为受控单元出现故障。写入模式时,应答信号都由被接收数据IC发出。 ⑷读取模式 读取模式时,当IC接受到控制器发送的地址和读操作后产生一低电平脉冲应答信号后,被读IC发送第1字节数据,发送完,等待由控制芯片发出低电平脉冲应答信号,收到后继续发送第2字节数据……,在最后一个字节读操作的第9个周期,为了结束读操作,控制器必须在第9个周期时发出停止条件者在第9个始终周期内保持DATA为高电平,然后发出停止条件。 4.3.3数据传送: 数据序列:address,byte1,byte2,byte3,byte4,byte5 address中Bit0(LSB)=0表示对CS3667的写操作,Bit7为每字节的最高位(MSB),做为传输每字节第一位。 每位数据在CLOCK下跳沿产生,一直稳定到CLOCK上升沿后,任何一个字节后发出的停止条件可以缩短传输时间。 当写入数据时,在还没完成所有字节传送之前发出停止条件: 1)还未被写入的字节将保持原值。 2)如果第一个数据字节没有被写完,则已写位被写入值覆盖,但不执行新的锁台信息。 4.3.4、三线总线工作模式: 三线总线通过控制 W/R,CLOCK,DATA 三信号线进行操作。最大工作时钟频率为400kHz。 ⑴数据传送 数据序列:byte1,byte2,byte3,byte4,byte5 写入信号:CLOCK为低电平时,W/R由低电平向高电平跳变,开始写入数据。 读取信号:CLOCK为低电平时,W/R由高电平向低电平跳变,结束读取数据当CLOCK为低电平时,W/R由低电平向高电平跳变,开始写入数据。数据在CLOCK上升沿时必须稳定,数据可以在CLOCK低电平时变化,在紧接着的CLOCK上升沿数据被写入。更换锁台信息,在新锁台数据的前两字节传送完后,或其后字节传完后可以发出传输停止条件。 当CLOCK为低电平时,W/R由高电平向低电平跳变,结束读取数据。伴随着下跳沿,BYTE1的最高位已经被读取到DATA上,被读取数据在每个CLOCK下跳沿产生,在CLOCK上升沿从总线上被读走。 如果做连续的写入或者读取操作,PIN W/R至少要被触发一个时钟周期。 五.系统软件设计 按照总体设计,收音机的控制器使用STC公司生产的单片机,因为在程序中不需要涉及精确实时操作,所以我们使用C语言进行软件编写,这样可以大大提高程序编写时的效率。 程序主要是单片机主控制程序,通过不同按键的操作,经过单片机的编译、识别,来实现收音机不同功能的操作。 我们设计可调频收音机时采用Keil uvision4来编译程序,再借助于串口线,下载编译完成的HEX文件到单片机,接下来就要对收音机进行程序调试。 5.1 主程序设计 : 定义按键控制端口: 按键控制端口:P2.0~P2.5 P2.0=1时 自动向上搜索频率 P2.1=1时 自动向下搜索频率 P2.2=1时 以0.01MHZ的频率增加 P2.3=1时 以0.01MHZ的频率减少 P2.4=1时 电平转换     5.2 流程图: 六.硬件电路测试与检测 6.1 硬件装配 设计就采用普通的万用版进行装配,在装配时要注意以下几点: (1)晶振部分要紧靠着芯片引脚,导线要尽量粗,在焊接时采用用焊锡铺粗来处理 (2)电源输入一定要添加去耦电容 (3)TEA5767模块和单片机引脚的距离尽量靠近,SDA线和CLK线业尽量铺粗。 (4)天线安装尽量靠近芯片引脚,一定要加上匹配电容 6.2 系统测试 硬、软件设计完成后就进入到系统测试阶段,将调试好的程序下载到单片机,插入插座,接上+5V直流电源,插上收音耳机。发现显示屏有显示设定频率,TEA5767工作正常。顺利的是,调试好的程序能够正常工作,调频按钮能够正常调整频率。经调试,系统能够搜索的频率范围为87.5~108MHz,能够接收到10~12电台,由于没有专用天线,电路板质量也不高,再加上电台本身信号强度的问题,有4~5个电台的音质效果不是很好,干扰很大。尽管有不尽人意之处,但总体设计要求已经达到,是一个成功的设计。 七.结束语 单片机控制的数字FM收音机的总体测试效果已经达到设计要求,是一个基本成功的设计。 总结设计过程,本设计的关键是对单片机的了解,以及对TEA5767芯片的学习,进行相关操作,设定其工作参数,这个设计我学到了一下几点: (1) 能熟练阅读芯片数据手册。 (2) 学会通过软件模拟I2C总线通信协议。 (3) 和学期中课程设计相比,更能够注重硬件焊接中的细节问题。 同时找到了自己的不足之处,硬件焊接过程中多次出错,对小型元器件焊接不熟练,多次导致短路,编程能力也有待加强,在今后的工作中要加强学习! 八.参考文献 [1]刘瑞新。单片机原理及应用教程[M].北京:机械工业出版社,2003.7. [2]康华光。电子技术基础(模拟部分)[J].北京:高等教育出版社,2006.1. [3]康华光。电子技术基础(数字部分)[M].北京:高等教育出版社,2000.1. [4]谭浩强。C 程序设计[M]. 北京:清华大学出版社,2005.7. [5]李朝青。单片机原理及接口技术[M].北京:北京航空航天大学出版社,1993.4 [6]阮维国,黄建宇。电子技术实验[M].北京:兵器工业出版社,2006.12. 九.致    谢 在 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 结束之际,我要感谢那些在我学习过程中给予我大量帮助的老师,同学门。 首先,我要感谢教育和培养我的所有老师,从他们身上,我不仅学习到了大量的宝贵知识,更学到了做人原则。 其次,我要感谢吴老师。本论文是在吴老师的指导下完成的,从论文的选题到论文的写作无不凝结的吴老师的心血。在我们设计的过程中,不断给与我们解释, 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ,启发,引导等帮助。让我们补充了理论的知识和实践上的经验。在他的身上,我看到了严谨的态度和务实的精神。再次感谢吴老师严谨的工作作风和专业的学术知识,帮我克服了许多技术和理论上的困难。 同时感谢我院、系领导对我们的教导和关注;感谢大学三年传授我们专业知识的所有老师。谢谢他们呕心沥血的教导。还有谢谢我周围的同窗朋友,他们给了我无数的关心和鼓励,也让我的大学生活充满了温暖和欢乐。如果没有他们的帮助,此次 毕业论文 毕业论文答辩ppt模板下载毕业论文ppt模板下载毕业论文ppt下载关于药学专业毕业论文临床本科毕业论文下载 的完成将变得困难。他们在我设计中给了我许多宝贵的意见和建议。同时也要感谢自己遇到困难的时候没有一蹶不振,取而代之的是找到了最好的方法来解决问题。 十.附    录 10.1电路原理图: 10.2电路PCB图: 10.3电路实物图: 10.4元器件清单: 序号 名称 型号 数量 序号 名称 型号 数量 1 排针   200 2 电解电容 100UF/16V 1 3 电容 104 5 4 电容 30PF 2 5 电容 10UF 5 6 电容 10UF 5 7 电容 0.1UF 1 8 电阻 10K 9 9 电阻 620R 1 10 电阻 4.7K 8 11 电阻 220R 1 12 电阻 1K 1 13 晶振 12M 1 14 按键 两脚按键 7 15 按键 六脚按键 7 16 芯片 STC89C52RC 1 17 模块 TEA5767 1 18 芯片 TDA2822 2 19 发光二极管   1 20 蜂鸣器 PHONELACK2 1 21 插座   1 22 显示屏 LCD1602 1                 十一.操作框图 · 程序框图 十二.程序 12.1  主程序: #include #include #include "TEA5767.h" #include "I2C.h" #include "Lcd1602.h" ///////////端口定义//////////////////////// sbit Key1=P2^0; sbit Key2=P2^1; sbit Key3=P2^2; sbit Key4=P2^3; sbit Key5=P2^4; sbit Key6=P2^5;    /////////////////////////////////////////// ///////////////////////////////////////////            #define max_freq 108000              //108Mhz 89800; #define min_freq 87500                //87.5Mhz #define max_pll 0x339b                //108MHz时的pll. #define min_pll 0x299d                //87.5MHz时的pll. #define Add_Freq    1 #define Dec_Freq    0 #define REFERENCE_FREQ    32.768      //TEA5767晶振 unsigned char radio_write_data[5]={0x2A,0x9E,0xC0,0x17,0x00};        //初始化寄存器配置 89.6MHZ unsigned char rdata[5]={0x2A,0x9E,0xC0,0x17,0x00};        //89.6 unsigned char radio_read_data[5];                    unsigned int Pll_Data;                  //定义频率 unsigned long Frequency_Data=89600;//    设置初始频率为87.6MHz unsigned char index=1;//天线感应信号的能力, /////////////////////////////////////// //////延迟程序,@12.000MHz,50ms//////// void Delay()        { unsigned char i, j; i = 98; j = 67; do { while (--j); } while (--i); } //////////////////////////////////////// /////////////////频率显示地址/////////// void LCDshow(void) { unsigned char str[8]; unsigned char num1,num2,num3,num4,num5; num1=(Frequency_Data/100000)%10;  num2=(Frequency_Data/10000)%10; num3=(Frequency_Data/1000)%10; num4=(Frequency_Data/100)%10; num5=(Frequency_Data/10)%10; str[0]=num1+'0'; str[1]=num2+'0'; str[2]=num3+'0'; str[3]='.'; str[4]=num4+'0'; str[5]=num5+'0'; str[6]='\0'; LcdShowStr(0,1,str); } /////////////////////////////////////////// ////////读TEA5767状态,并转换成PLL值////// void Radio_Read(void) { unsigned char temp_l,temp_h; Pll_Data = 0; ATIICxx_PRead(&radio_read_data[0],5); temp_l = radio_read_data[1];  //PLL值 temp_h = radio_read_data[0];  //PLL值 temp_h &= 0x3f; Pll_Data = temp_h*256+temp_l; Get_Frequency(); } //////////////////////////////////////// //由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 = (unsignedlong)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25-225); else Frequency_Data = (unsignedlong)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25+225);} //由频率计算PLL void Get_Pll(void) { unsigned char hlsi; hlsi = radio_read_data[2]&0x10; if (hlsi) Pll_Data = (unsigned int)((float)((Frequency_Data+225)*4)/(float)REFERENCE_FREQ);    //频率单位:k else Pll_Data = (unsigned int)((float)((Frequency_Data-225)*4)/(float)REFERENCE_FREQ);    //频率单位:k } ///////自动搜台,mode=1,频率增加搜台; mode="0:频率减小搜台".///////// void Auto_Search(unsigned char mode) { LcdShowStr(10,0,"Auto  ");      //当搜索时,显示Auto if(mode)                        //mode=1,自动向上搜索 { switch(index)          //电平转换 { case 0: radio_write_data[2] = 0xA0;//低电平 低本振立体声非静音 break; case 1: radio_write_data[2] = 0xC0;//中低电平 低本振立体声非静音 break; case 2: radio_write_data[2] = 0xE0;//高电平 低本振立体声非静音 break; } if(Pll_Data > max_pll)          //当频率处于最高时, { Pll_Data = min_pll;      //自动转为最低频率 } } else//向下搜索 { switch(index) { case 0: radio_write_data[2]=0x20; //低电平 break; case 1: radio_write_data[2]=0x40; //中低电平 break; case 2: radio_write_data[2]=0x60; //高电平 break; } if(Pll_Data < min_pll) { Pll_Data = max_pll; } }  //////////调用I2C总线的写模式//////// ATIICxx_PWrite(&radio_write_data[0],5); Delay();//延时 Radio_Read(); LCDshow();    while(!(radio_read_data[0]&0x80))//RF电台就绪标志 若RF=1 则发现了一个电台或搜索到头;若 RF=0 未找到电台 { Delay();//延时 Radio_Read(); if((radio_read_data[0]&0x40)==0x40)//搜索到头 { if(mode) { //ATIICxx_PWrite(&rdata[0],5);//初始化TEA5767(89.8Mhz) } else { //ATIICxx_PWrite(&radio_write_data[0],5);//初始化                TEA5767(89.8Mhz) } } LCDshow();    }  LcdShowStr(10,0,"Normal"); }      /////////////微调程序/////////////////////// void Search10(unsigned char mode) { LcdShowStr(10,0,"hand  "); Delay();//延时 if(mode) { Frequency_Data += 10; if(Frequency_Data > max_freq) Frequency_Data = min_freq; radio_write_data[2] = 0xA0;//低电平 低本振立体声非静音 } else//向下搜索 { Frequency_Data -= 10; if(Frequency_Data < min_freq) Frequency_Data = max_freq; radio_write_data[2]=0x20; //低电平 ,向下搜索模式 }            Get_Pll(); radio_write_data[0] = Pll_Data/256; radio_write_data[1] = Pll_Data%256;                                        radio_write_data[3] = 0x17;//去噪 radio_write_data[4]=0x00; ATIICxx_PWrite(&radio_write_data[0],5); LCDshow();    LcdShowStr(10,0,"Normal"); } //////////////////////////////////////// /////////抖动延迟程序/////////////////// void delay15ms(void)  //误差 0us { unsigned char i, j; i = 30; j = 43; do { while (--j); } while (--i); } ///////////////////////////////////////// //////////////按键功能///////////////////                                                  void Key() { unsigned char str[3]; if(Key1==0) { delay15ms(); while(Key1==0);//自动频道+ Auto_Search(Add_Freq); } else if(Key2==0)//自动频道- { delay15ms(); while(Key2==0); Auto_Search(Dec_Freq); } else if(Key3==0)  //手动微加0.01 { delay15ms(); if(Key3==0) { Search10(Add_Freq); } } else if(Key4==0)  //手动微减0.01 { delay15ms(); if(Key4==0) { Search10(Dec_Freq); } } else if(Key5==0)// { delay15ms(); while(!Key5); if(index<2) { index++; } else { index=0; } str[0]=index+'0'; str[1]='\0'; LcdShowStr(15,1,str); } } ///////////////////////////////////// //////////////屏幕初始化///////////// void InitLCD() { unsigned char str[3]; str[0]=index+'0'; str[1]='\0'; LcdInit(); LcdShowStr(0,0,"FM radio"); LcdShowStr(7,1,"MHZ"); LcdShowStr(10,0,"Normal"); LcdShowStr(15,1,str); } ////////////////////////////////////// void main(void) { InitLCD();//屏幕设置 ATIICxx_PWrite(&radio_write_data[0],5);//初始化TEA5767(89.8Mhz) Delay(); Radio_Read();  //把输入TEA5767的地址转换为频率 LCDshow();      //在屏幕上显示出来 while(1)      //按键的不同操作 { Key(); } } 12.2  I2C总线程序: #include #include #include "I2C.h" /*******************************************************************/ /* IIC读写程序芯片型号*/ /*******************************************************************/ sbit I2C_SCK=P0^0; /*实时时钟时钟线引脚 */ sbit I2C_SDA=P0^1; /*实时时钟数据线引脚 */ /*******************************************************************/ #define ATIIcxxDriverAddressW 0xC0 #define ATIIcxxDriverAddressR 0xC1 #define _Nop()  _nop_(),_nop_(),_nop_(),_nop_(),_nop_()  /*定义空指令*///1us /*******************************************************************/ struct bytedata_2 { unsigned char ByteH; unsigned char ByteL; }; union int2byte { unsigned int IntData; struct bytedata_2 ByteData; }; /*******************************************************************/ //启动I2C总线,退出时SCL为低 void I2C_Start(void) { I2C_SDA=1;    /*发送起始条件的数据信号*/ _Nop(); I2C_SCK=1; _Nop();    /*起始条件建立时间大于4.7us,延时*/ _Nop(); _Nop(); _Nop(); _Nop();  I2C_SDA=0;    /*发送起始信号*/ _Nop();    /* 起始条件锁定时间大于4μs*/ _Nop(); _Nop(); _Nop(); _Nop();      I2C_SCK=0;    /*钳住I2C总线,准备发送或接收数据 */ } //*停止I2C总线 void I2C_Stop(void) { I2C_SCK=0; I2C_SDA=0;  /*发送结束条件的数据信号*/ _Nop();          /*发送结束条件的时钟信号*/ I2C_SCK=1;  /*结束条件建立时间大于4μs*/ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); I2C_SDA=1;  /*发送I2C总线结束信号*/ } //MCU等待应答位(返回0表示应答) bit I2C_WaitAck(void) { unsigned char ucErrTime = 200;  //因故障接收方无ACK,超时值。 I2C_SCK=0; I2C_SDA=1; _Nop(); I2C_SCK=1; while(I2C_SDA) { ucErrTime--; if (ucErrTime == 0) { I2C_Stop(); return 0; } } I2C_SCK=0; return 1;  } //MCU应答信号 void I2C_Ack(void) { I2C_SCK=0; I2C_SDA=0; _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); I2C_SCK=1; _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); I2C_SCK=0; } //MCU发送非应答信号 void I2C_Noack(void) { I2C_SCK=0; I2C_SDA=1; _Nop(); _Nop(); I2C_SCK=1; _Nop(); _Nop(); I2C_SCK=0; } void I2C_Send_Byte(unsigned char sendbyte) { unsigned char i = 8; while( i-- ) { I2C_SCK = 0; _Nop(); //_Nop(); if ( sendbyte &0x80 ) I2C_SDA =1; else I2C_SDA =0; _Nop(); //_Nop(); I2C_SCK = 1; _Nop(); //_Nop(); sendbyte <<= 1; } I2C_WaitAck(); } static unsigned char I2C_Receive_Byte(void) { unsigned char i = 8, data_buffer; I2C_SDA = 1; while ( i--) { I2C_SCK =0; _Nop();_Nop(); I2C_SCK =1; _Nop();_Nop(); data_buffer <<= 1; if ( I2C_SDA ) data_buffer++; } return (data_buffer); } void ATIICxx_PWrite(unsigned char *McuAddress,unsigned char count)//写数据 { I2C_Start(); I2C_Send_Byte( ATIIcxxDriverAddressW ); while(count--)//写入数据 { I2C_Send_Byte( *(unsigned char*)McuAddress ); ((unsigned char*)McuAddress)++; } I2C_Stop(); } void ATIICxx_PRead(unsigned char *McuAddress,unsigned char count)//读数据 { I2C_Start();//发送起始信号 I2C_Send_Byte( ATIIcxxDriverAddressR );//发送器件地址 while(count--) { *McuAddress = I2C_Receive_Byte(); I2C_Ack(); McuAddress++; } I2C_Noack();//应答位 I2C_Stop();//发送停止信号 } 12.3  Lcd1602程序: #include #define LCD1602_DB P1 sbit LCD1602_RS = P2^7; sbit LCD1602_RW = P2^6; sbit LCD1602_E = P3^4; void LcdWaitReady() //等待液晶准备好 { unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do { LCD1602_E = 1; sta = LCD1602_DB; //读取状态字 LCD1602_E = 0; } while (sta & 0x80); //bit7 等于1 表示液晶正忙,重复检测直到其等于0 为止 } void LcdWriteCmd(unsigned char cmd) //写入命令 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 { LcdWaitReady(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DB = cmd; LCD1602_E = 1; LCD1602_E = 0; } void LcdWriteDat(unsigned char dat) //写入数据函数 { LcdWaitReady(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DB = dat; LCD1602_E = 1; LCD1602_E = 0; } void LcdShowStr(unsigned char x, unsigned char y, const unsigned char *str) //显示字符串,屏幕起始坐标(x,y),字符串指针str { unsigned char addr; //由输入的显示坐标计算显示RAM 的地址 if (y == 0) addr = 0x00 + x; //第一行字符地址从0x00 起始 else addr = 0x40 + x; //第二行字符地址从0x40 起始 //由起始显示RAM 地址连续写入字符串 LcdWriteCmd(addr | 0x80); //写入起始地址 while (*str != '\0') //连续写入字符串数据,直到检测到结束符 { LcdWriteDat(*str); str++; } } void LcdInit() //液晶初始化函数 { LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口 LcdWriteCmd(0x0C); //显示器开,光标关闭 LcdWriteCmd(0x06); //文字不动,地址自动+1 LcdWriteCmd(0x01); //清屏
本文档为【大学生毕业设计 基于TEA5767和单片机的数字FM收音机设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_954223
暂无简介~
格式:doc
大小:268KB
软件:Word
页数:59
分类:工学
上传时间:2019-02-16
浏览量:31