摘 要:本设计是基于数字频率合成技术,采用单片机来完成控制的FM调制器。利用锁相环式频率合成器,由单片机实现对PLL频率合成芯片MC145152的控制。可自动改变频率,步进达100KHz;可实时测量压控振荡器输出频率,并用液晶显示器显示;采用了AGC电路来稳定输出电压;功率放大选用三极管S9018,提高了放大器的效率。同时系统还实现了频率扩展、立体声编码等实用性功能。程序设计采用C语言,在单片机AT89C52芯片上编程实现,经测试,整机功能齐全,发射信号正常;输出频率稳定度优于10-5;输出功率≥100mW;输出阻抗为50Ω。
关键词:压控振荡器 数字频率合成 单片机 MC1648
The modulate of FM Transmitter
Abstact:The system adopting microcontrollers 51 to design the Frequency Modulation
Transmitter is based on the digital frequency synthesize technical. The system is made up of Voltage Control LC Oscillator, Phase Locked Loop, AGC circuit, Dual–Modulus Prescaler, microcontrollers circuit , peak to peak voltage value measure circuit, LCD module and keyboard.The digital PLL circuit is made up of some integrate circuits,they are MC145152、MC1648、MC12022.it can improve stability of frequency. It can automatically change and measure the frequency of Transmitter with a step of 5 kHz and Pout and display it by LCD. Meantime it realizes the functions of expanding the frequency, stereo coding, amplify the power etc.Mocrocontrollers adopts AT89C51 which is produced by Corp Atmel , it belong to the catena of 51,adapting to designing the program with C. It is proved to be well functioning, the output frequency is stable,the sine wave is beautiful and lubricity. because of adopting the digital PLL frequency synthesize technical, the stability of frequency add to 10-6; when the signal pass filter.The Signal-to-Noise attain the standard of A , promulgated by nation.
Keywords:VCO digital frequency synthesize singlechip MC1648
目 录
第一章 系统设计………………………………………………………………3
1.1 总体设计方案…………………………………………………………………….3 1.1.1 设计要求…...…………………………………………………………………...3 1.1.2 设计思路…...…………………………………………………………………...3 1.1.3 方案论证与比较………………………………………………………………...3 1.1.4 系统组成…...…………………………………………………………………...6
第二章 单元电路设计……..…………………………………………………...6
2.1 压控振荡器的设计.………………………………………………………………6 2.2 锁相环路的设计……....……………………………………………………….…9 2.2.1 PLL频率合成电路设计……………...………………………………………..10 2.2.2 前置分频器……..…………………………………………………………….11 2.2.3 鉴相器………..……………………………………………………………...12 2.2.4 环路滤波器…………..………………………………………………………13 2.2.5 电源电路………………………………………………………………………14 2.3 功率放大电路的设计....………………………………………………………...14 2.4 立体声编码器的设计…………………………………………………………...15 2.5 输出功率测量的设计…………………………………………………………...16 2.6 控制电路设计和频率计算…………....………………………………………...16
第三章 软件设计……………………………………………………………….18
3.1 MC145152的控制和显示部分的设计…...……………………………………..18 3.2 测频计的设计…………………………………………………………….……..19 3.3 TLC549的控制程序设计………………………………………………………..20 3.4 液晶显示驱动的设计…………………………………………………………...20
第四章 系统测试……………………………………………………………….21
4.1 测试使用的仪器…………………………………………………………….…..21 4.2指标测试和测试结果………………………………………………………..…..21 4.2.1输出频率范围和稳定度的测试………...………………......……………………21 4.2.2输出功率的测试…………...………………...…………………………………21 4.2.3 VCO可实现的功能…………………………………………………………21
第五章 结束语…………………………………………………………….……22 第六章 参考文献……………………………………………………………….22 附录…….……………………………………………………………………………22
第一章 系统设计
1.1 总体设计方案
1.1.1 设计要求 1.基本要求
(1) 载波的频率范围68Mhz~88Mhz; (2) 步进100Khz,随时可调; (3) 载波频率稳定度优于10-3; (4) 最大频偏:75Khz;
(5) 频率响应:100hz~10Khz, ±6dB; (6) 失真度:100hz~10Khz, ≤3%dB; (7) 信噪比:20lgS/N≥40dB;
(8) 残波辐射:10lgP0/PN≥40dB;
(9) 射频输出功率:100mW,负载50Ω; (10)能显示载频频率和输出载波功率。 2.发挥部分:
(1)载波频率稳定度提高到10-5; (2)加载立体声编码器;
(3)进一步提高残波辐射指标,优于50dB;
(4)进一步提高音质三大指标(即频率响应、失真度和信噪比); (5)其他(例如扩大载波的频率范围等)。
1.1.2 设计思路
按照题目的要求,主要设计一个FM调制器,使其输出68Mhz到88Mhz的频率信号。该设计的核心是数字频率合成技术,利用锁相环的原理,使VCO的频率锁定在参考频率的稳定度上。采用自动增益控制(AGC)电路使输出电压幅值稳定。控制和显示部分的设计采用单片机来完成。并且增加了立体声编码等功能,使该方案更加完善。
1.1.3方案论证与比较
1.压控振荡器的设计方案论证与选择
方案一:采用分立元件构成。利用低噪声场效应管J310作振荡管,用两对变容二极管直接接入振荡回路作为压控器件,电路属于电感三点式振荡器。图1.1.1为其简化电路图。该方法实现简单,但是调试困难,而且输出频率不易灵活控制。
C8J1L3VD31n11J310VD1VapcUo10uH2222L4VD410uHVD21
1
图1.1.1 分立元件构成的VCO简化电路
方案二:采用压控振荡芯片MC1648和变容二极管MV209,外接一个LC谐振回路构成变容二极管压控振荡器。选取适当的电感,便可改变MC1648的输出频率。另外,MC1648内部有放大电路和自动增益控制,可以实现输出频率稳幅,射极跟随器有隔离作用,可减小负载对振荡器工作状态的影响。由于采用了集成芯片,电路设计简单,系统可靠性高,并且利用锁相环频率合成技术可以使输出频率稳定度进一步提高。
图1.1.2 大规模压控振荡器电路(MC1648)
综上,拟定方案二利用压控振荡芯片MC1648和变容二极管MV209,外加一个LC并联谐振回路来设计压控振荡器。
2.频率合成器的设计方案论证与选择
频率合成是整机的核心,为了得到高度稳定的频率输出,并且输出频率可调,可以采用
-5
锁相环频率合成技术,输出频率稳定度与晶振的稳定度相当,达到10,频率步进可以为任意值。此技术采用单片机来实现控制。
方案一:模拟锁相环路法,通过环式的减法降频,将VCO的频率降低,与参考频率进行鉴相。优点是:可以得到任意小的频率间隔;鉴相器的工作频率不高,频率变化范围不大,比较好做,带内带外噪声和锁定时间易于处理。不需要昂贵的晶体滤波器。频率稳定度与参考晶振的频率稳定度相同。缺点是分辨率的提高要通过增加循环次数来实现,电路超小型化和集成化比较困难。
方案二:数字锁相环路法,如图1.1.3所示,通过数字逻辑电路把VCO(压控振荡)的频率降低到鉴相器的参考频率上,采用的是除法降频。除具有方案一的优点外,克服了方案一的缺点,还能与灵活方便的数字电路结合,做成数控可变分频,得到任意的频率,并且便于集成化,大大简化电路连线,缩短电路制作时间,降低整机体积。
综合考虑,本设计采用方案二。
图1.1.3数字锁相环频率合成原理
3.控制模块的设计方案论证与选择
方案一:采用单片机控制,其使用灵活方便,能较大限度的开发其自身资源,性价比高。
方案二:采用FPGA(现场可编程逻辑门阵列)作为系统的控制核心。由于FPGA具有
强大的资源,使用方便灵活,易于进行功能扩展,特别是结合EDA(电子设计自动化),可以达到很高的效率。系统的多个部件如频率测量电路,键盘控制电路,显示控制等都可以集成到一块芯片上,大大减小了系统的体积,并且提高了系统的稳定性。
考虑到目前使用FPGA的成本较高,作为产品,选用方案一更合适。 4.测频模块的设计方案论证与选择
方案一:采用数字集成电路设计一个频率计来测量输出频率。该电路的设计中包括了放大整形电路、时基电路、逻辑控制电路、计数器、锁存器等,其组成框图如图1.1.4所示。其中放大整形电路可由晶体管3DG100与74LS00等组成;时基电路由555定时器构成的多谐振荡器产生;逻辑控制器由74LS123构成,产生高低电平控制锁存器和计数器的工作;计数器选用74LS90;锁存器选用74LS273;最后通过74LS48译码显示。虽然原理简单,实现比较容易,但是电路复杂,可靠性不高。
图1.1.4 数字集成频率计组成框图
方案二:采用单片机来实现测频功能。将压控振荡器的输出频率经过前置分频器MC12022进行高速分频后再经过74LS390进行固定分频,然后送入单片机测量,并实时送入液晶显示器显示测得的频率。由于MC12022可对输入正弦波整形,所以不需外加整形电路,这样硬件电路十分简单,只利用软件编程便可实现一系列的功能。集成于一块芯片上,可靠性高,准确性好,且容易实现。
图1.1.5 采用单片机实现的频率计组成框图 综上,拟定方案二用单片机实现输出频率的测量。 5. 功率放大电路方案选择与论证
方案一:采用电子管作为高频功放的电子器件。就高频大功率而言,电子管在输出功率和最高工作频率方面仍占优势。
方案二:采用晶体管作为高频功放的电子器件。晶体管具有体积小、重量轻、耗电省、使用寿命长等优点,但其内部物理过程比电子管复杂得多,且其高频功放工作状态的计算十分困难,通常只进行定性的分析与估算,再依靠实验调整到预期的状态。
结合本设计实际需要考虑,决定采用方案二。 6.立体声编码模块的设计方案论证与选择
方案一:采用分立元件组成立体声编码模块。利用该方法实现比较简单,但外围电路复杂,调试麻烦,而且可靠性不高。
方案二:采用调频立体声发射芯片BA1404。它是将立体声调制、FM调制和RF放大功能
集成在一个芯片上制成的。弥补了过去用分立元件来设计调频电路的不足,而且具有立体声调制的功能。仅用很少的外围元件就可得到优美的立体声调频信号。
综上,拟定方案二设计立体声编码器。 7.显示方式选择
方案一:采用LED数码管显示。该方案只能显示有限的符号和数码字,而且功耗大。而本设计中要求显示的内容丰富,不适应利用该方法。
方案二:采用字符型LCD显示。可以显示英文及数字,质量轻,耗电小,显示内容多。 综上,拟定方案二采用LCD实时显示载频频率。 8. 电源方案选择与论证
单片机的工作需要稳定的+5V直流电压,运放和三极管则需要+12V直流电压,所以需对市电进行变压、整流、滤波、稳压,为系统提供这两种直流电压。
方案一:采用变压器将220V交流电变换为20V交流电,再进行全波整流、滤波,最后用三端稳压管7812和7805进行稳压,可分别得到+12V,+5V。
方案二:采用电源模块得到20V直流电压输出,再通过三端稳压集成芯片进行稳压,得到两种输出电压。
方案一简单易行,且成本低,试验阶段我们采用方案一。
1.1.4系统组成
经过一系列的方案比较与论证,最终确定的系统组成框图如图1.1.6所示。由
MC145152、MC1648系列集成电路组成数字锁相频率合成器;采用变容二极管MV209调频。用户可使用简易的按键,通过单片机AT89C52控制发射频率,监测发射频率,同时液晶显示器向用户反馈信息。另外,可使用串行接口实现单片机与计算机通信,从而可在计算机上操作发射机,并实现智能化。音源不仅可以从麦克风、卡带机、CD机等接入,还可通过计算机接入,从而大大扩展了音源媒体,甚至可使用网络资源。功率放大部分则可根据实际需要,接入后续功放。
图1.1.6 系统组成框图
第二章 单元电路设计 12.1 压控振荡器与调频电路设计 234D压控振荡器是频率合成电路的关键部分,采用集成的VCO芯片MC1648,其工作电压5V,输出频率最高可达225MHz,输出频谱纯度高。结合由一个由变容二极管MV209(由于条件限制,采用了变容二极管MV2109进行替代,但其工作原理是一样的,只是参数有点不同。下面仍以MV209为例进行说明)和电感组成的并联LC谐振槽路,振荡频率将受变容二极管的偏置电压控制。图2.1.1为压控振荡电路图。 12VR135.6kC13R143.3kR12C100.1u100kC1110uVD2VD3C12104R103.3kR115.6k12V104C15R16160R15100k10u音频输入C6CR1720k10uFVD1VD4MV209INDUCTORMV209MV209L1MC1648MC1648误差电压MV209 图2.1. 1 压控振荡器谐振回路 由图可见,两个变容二极管是背靠背连接的,其特点是:对于直流和调制信号而言,它们相当于并联,所处的偏置点和受调制状态一样,如图2.1.2 (a) 所示;而对于高频信号而言,它们相当于串联,使得每个变容二极管两端的电压幅度下降了一半,这就减弱了高频电压的作用,其等效电路如图 2.1.2 (b) 所示。 B 图 2. 1.2 背靠背变容二极管等效电路图 变容二极管是同极性端对接的,这使得它们对于高频电压的相位刚好相反,可防止高频电压幅度过大时,变容二极管导通对谐振回路的影响。在单个变容二极管电路中,出现这种现象将导致回路Q值大大下降,此外,还会削弱高频振荡电压的谐振成分。因为变容二极A管是非线性器件,高频信号的输入必然产生谐波分量(不是调制信号的谐波),可能引起交叉调制干扰。对接之后,两二极管的高频信号反相,可抵消部分谐波成分。
集成压控振荡器芯片MC1648,其工作电压5V,工作频率1.0MHz~150MHz,其槽路由变容二极管和电感并联组成,通过改变变容二极管的反偏电压来改变振荡频率。如图2.1.2所示:VD5与VD7 、VD6与VD8分别串联后再并联,其等效的容量CVD1(CVD5CVD6),2因此,在两对变容二极管的偏置电压相同的情况下,MC1648的输出频率可由下式计算: 。 f01/2LC (式2-1)其中,CCC1(CVD5CVD6)40,C0为场效应管输入电容,L为电感量。 2C4C0CVD的大小受所加偏置电压U控制,它们之间的关系可由图2.1.3所示电路测出。方法为:
从扫频仪输入0~300MHz的扫频信号,同时用扫频仪检测该电路的谐振频率。调节电位器R3使变容二极管的偏压以0.5V为间隔从1V~10V变化,从扫频仪观测电路的谐振点频率并记录下来。根据式2-1,利用Matlab计算出频率与容量的关系,进而得到偏置电压与容量关系曲线,如图2.1.4所示
C43.3pfin+12VR1R250K1R31k210uH1100k1000p2C6MV209C7L21000pC53.3pfoutCd00
图2.1.3 电容特性测量电路
图2.1.4 变容二极管特性曲线
从CVD/U曲线上易见,偏置电压取值3.5V~7.5V时,CVD的变化近似线性,从25 pF~18 pF。又fo的范围为:68MHz~88MHz,根据式(2-1),有:
L=1/2f0CVD
2取CVDmax=25pF,fo=68MHz,得L=0.22μH 取CVDmax=18pF,fo=88MHz,得L=0.18μH
因此,取L=0.18μH可满足要求。
以上是对MV209说的。对于MV2109,它的参数有些不同。它的可调范围很窄,只能实现29.5pF~38pF。因而能调出来的范围比较窄。对于68MHz~88MHz的高频信号而言,利用上述公式计算得出CVDmax=38pF,fo=68MHz,得L=0.15μH
CVDmax=29pF,fo=88MHz,得L=0.13μH 因而理论上取L=0.13μH即可满足要求。
MC1648内部含有放大电路和自动增益控制电路,可以稳定输出频率的幅度。该电路外围元器件少,调试方便。其内部电路如图2.1. 5所示。
Vcc2Vcc114R1R31Q1Q9R2Q3Q23OUTPUTQ4Q11Q10Q7Q6D112D21Q52Q87VEE11012BIASTANKPOINT8VEE5AGC
图2.1.5 MC1648内部电路图
MC1648的第10脚输出一个约1.5V的稳定电压,可作为变容二极管的一个偏压。谐振槽路从10脚和12脚接入,与内部的Q7,Q4,Q5,D1,Q8组成一个移相720°的正反馈正弦振荡电路,Q6的基极连接Q7的集电极,也形成正反馈。另外,MC1648内部有放大电路和自动增益控制电路(D1,Q8,Q6,Q7),可以稳定输出频率的幅度,输出信号经AGC电路采样后从5脚接入。当振荡幅度增大时,Q8的基极电压增大,集电极电流增大,Q7的Ube减小从而放大倍数减小,输出幅度将减小;反之,如果振荡幅度减小,则恒流源Q8的电流减小,Q6、Q7的放大倍数将增大,输出幅度也因此增大。Q3,Q2和射极跟随器Q1为输出缓冲级,有隔离作用,可减小负载对振荡器工作状态的影响。
从变容二极管的特性知道,其容量是其偏压的函数,并且在一定范围内近似线性,因此该槽路还可作调频调制用,即将调制信号叠加到变容二极管的偏置端上,调制信号的变化必然引起变容二极管容量的变化,从而必将引起振荡频率的变化,即实现了调频。为了使产品的稳定性更佳,在此多加一对变容二极管专门作为调频用。
2.2 锁相环式频率合成器的设计
1频率合成器的控制由单片机来实现,电路如图2.2.1所示。由式fo=(PN+A)fr知道,输出频率可由A和N来控制,A和N的值分别从P2.2~P2.7(6位)和P0口(8位)向MC145152发送。本来发送N值需要10位数据线,但因为在fo=68MHz~88MHz频段,如果采用参考频率fr=10kHz,根据式fo=(PN+A)fr计算,可以得到N值最高两位(N9,N8)恒为0,故可省去两个单片机的输出口,而将MC145152的N9,N8两脚直接接地。 234U01234567891011121314151617191820P10P11P12P13P14P15P16P17RESETP3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDXTAL1XTAL2GNDAT89C51S4KEY3S5KEY4VCCVCCP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7EA/VPALE/PROGPSENP2.7/AD15P2.6/AD14P2.5AD13P2.4/AD12P2.3/AD11P2.2/AD10P2.1/AD9P2.0/AD8VCC4039N038N137N236N335N434N533N632N731VCC30292827262524232221C14Fout10pU112723212224251011121314151617181920456FINOSC INA0A1A2A3A4A5N0N1N2N3N4N5N6N7N8N9RA0RA1RA2LDMOD CNTLOSC OUTPHIRPHIV28926785N0N1N2N3N4N5N6N7MC145152P2(28)VCCJ5103987654321 图2.2.1频率合成控制电路 锁相环的基本原理框图如图2.2.2所示。锁相环路主要由晶振、参考分频器、压控振荡器(VCO)、鉴频/鉴相器(FD/PD)、低通滤波器(LPF)、可编程分频器组成。它是应用数字逻辑电路将VCO频率一次或多次降低至鉴相器频率上,再与参考频率在鉴相电路中进行比较,通过低通滤波器取出误差信号来控制VCO的频率,使之锁定在参考频率的稳定度上。由于采用了大规模集成电路块MC145152,将图中的晶振、参考分频器、鉴频鉴相器、可编程分频器都集成在一个芯片中,不需要再单独设计。同时利用单片机来控制MC145152,确定分频系数A、N和发射频率的对应关系。下面将分别介绍各部分的功能。 12345TitleSizeBDate:File:Nu1-SeG:\\张
图2.2.2 锁相环基本原理框图 2.2.1 PLL频率合成电路设计
锁相环频率合成器是以大规模集成PLL芯片MC145152为核心设计的。MC145152是MOTOROLA公司生产的大规模集成电路,它是一块采用并行码输入方式置定、由14根并行输入数据编程的双模CMOS-LSI锁相环频率合成器。图2.2.3为其内部组成框图。MC145152内含参考频率振荡器、可供用户选择的参考分频器(12×8 ROM参考译码器和12bit÷R计数器)、双端输出的鉴相器、控制逻辑、10位可编程的10bit÷N计数器、6位可编程的6bit÷A计数器和锁定检测等部分。其中,10bit÷N计数器、6bit÷A计数器、模拟控制逻辑和外接双模前置分频器组成吞脉冲程序分频器。整个过程中输入的脉冲数共有Q=A(P+1)+(N-A)P=PN+A,即吞脉冲程序分频器的总分频比为:D=PN+A。(A的范围0~63,N的范围0~1023)。由此可以计算出频率和A、N值的对应关系,利用单片机控制器改变其值,便可达到
改变输出频率的目的。
图2.2.3 MC145152内部结构图
参考分频器是为了得到所需的频率间隔而设定的。频率合成器的输出频谱是不连续的,两个相邻频率之间的最小间隔就是频率间隔。在MC145152中,外部稳定参考源由OSCin输入,经12位分频将输入频率÷R,然后送入FD/PD中。R值由RA0、RA1、RA2设定,如表2.2.1所示。例如,当RA0RA1RA2=101时,R=1024,即对晶振频率进行1024分频。
表2.2.1 MC145152参考分频器分频系数选择表
RA2 RA1 RA0 R 0 0 0 8 0 0 1 64 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 128 256 512 1024 1160 2048 鉴相器的作用实际上相当于一个模拟乘法器。鉴相器将参考分频器出来的很稳定的步长信号和压控振荡器产生的频率经可编程分频之后得到的不稳定的频率信号进行比较,输出为两者之间的相位差。低通滤波器将其中的高频分量滤掉。 2.2.2 前置分频器
由于发射机的频率高达68MHz以上, MC145152的电路无法对其直接分频,必须先用ECL电路的高速分频器进行预分频,把频率降低,然后由MC145152继续分频,得到一个参考频率相等的频率,并进行鉴相。为使分频系数连续可调,可编程分频电路采用的是吞咽脉冲计数法,如图2.2.4所示。它由ECL(非饱和型逻辑电路)的高速分频器MC12022及MC145152内部的÷A减法计数器,÷N减法计数器构成。
(a)P/P+1前置分频器方框图 (b)吞咽脉冲计数示意图
图2.2.4 吞咽式脉冲计数原理图
MC12022有64和65两种分频系数。M为其控制端(从MC145152的9脚输出,输入MC12022的6脚)。M为高电平时,MC12022以P+1=65为分频系数,M为低电平时则以P=64为分频系数。÷N 和÷A是可预置数的减法计数器,由并行输入口分别预置6位的A值和10位的N值。PD为数字鉴相器。fo为压控振的输出频率(即发射频率)。
吞咽脉冲计数器开始计数时,M的初值为1,÷A和÷N两个计数器被置入预置数并同时计数,当计到A(P+1)个输入脉冲(fo)时,÷A计数器计完A个预置数,M变为0;此时÷A计数器被控制信号关闭,停止计数;而÷N计数器中还有N-A个数,它继续计(N-A)P个输入脉冲后,输出一个脉冲到鉴相器PD。此时一个工作周期结束,A和N值被重新写入两个减法计数器,M又变为1,接着重复以上过程。整个过程中输入的脉冲数共有Q=A(P+1)+(N-A)P=PN+A,也就是说,该吞咽脉冲计数器的总分频系数为PN+A。
可见,采用吞咽脉冲计数方式,只要适当选取N值与A值,就能得到任意的分频比。为实现锁相,必须有fo/( PN+A)= fr。反过来,由于fo=fr×(PN+A),改变N和A的值,也能改变fo,这就是输出频率数字化控制的原理。
÷A计数器为8位,因此A值最大为63,MC12022的P值为64。如果参考频率fr=10kHz,则输出频率fo=(PN+A)fr=(64N+A)×10kHz。
例如,要使发射频率为78MHz:
63
先令A=0, 则N=(fo/ fr-A)/P=(78×10/10×10)/64=121.875, 取N =121=1111001B,
63
进而A=(fo/ fr)-PN=(78×10/10×10)-64×121=56=111000B。
以此类推,需要得到某个输出频率时,利用单片机计算得到N和A的值,分别送至MC145152的N9~N0和A5~A0口,这就实现了对发射频率的控制。
2.2.3 鉴相
模拟鉴相器对输入其中的两个信号进行相位比较,一个是由稳定度很高的标准晶振经过分频得到的,另一个是由压控振输出频率经分频反馈回来的,这两个信号通过鉴相器,也就是经过一个模拟乘法器后得到一个相位误差信号。设两个输入信号分别为:
rtrtUrmsinrt1tUrtUrmsinrt2tUytUymsinytytUymsin其中,2tyrtyt,将两个信号相乘得到:
1UrUyUrmUymsin2rt1(t)2(t)sin1(t)2(t)
2再经过一个低通滤波器,取出其中的误差信号UctAcsin1(t)2(t),滤去其高频成分,将其直流成分用来调整压控振的输出频率。
本设计采用的鉴相器集成在MC145152中,它是一种新型数字式鉴频/鉴相集成电路,具有鉴频和鉴相功能,不需要辅助捕捉电路就能实现宽带捕捉和保持。数字鉴相器有如下特性:
设R为参考频率信号,V为压控振分频信号,f、g为数字鉴相器两个输出信号。根据R和V的不同可以分四种情况,如图2.2.5所示。
图2.2.5 数字鉴相器输入输出关系
(1)fR 以上两种情况下数字鉴相器实际工作在鉴频模式下,两个频率相差越大,输出的负脉冲宽度越大。 (3)fR=fV,R的相位超前V时,f端输出负脉冲,g端输出恒为高电平。设 θe为负脉冲的宽度,Vm为脉冲幅度。 (4)fR=fV,R的相位滞后V时,f端输出恒为高电平,g端输出负脉冲。 以上两种情况中,鉴相器输出的负脉冲宽度随着R和V之间的相位差θ变化而变化,θ越大,输出的负脉冲宽度越大。 根据数字鉴相器的这种特性,在其后加一级差分放大器,取出f和g电压的差信号Vg-Vf,再通过积分取出其中的有效电压,此电压就反映了fR和fV之间的关系。环路滤波器前级的有源网络就起到这个作用。 2.2.4 环路滤波器 环路滤波器的作用是取出鉴相器输出的误差信号中的直流成分,以用于调节压控振荡器的输出频率。同时,压控振荡器还有调频的作用,调频使得输出频率随调制信号产生偏移。因此,锁相和调频是相互矛盾的:锁相的目的是使输出频率稳定,而调频则要求输出频率随着调制信号的变化而变化。环路滤波器正是解决这一矛盾的关键。由于振荡器中心频率不稳主要由温度、湿度、直流电源等外界因素引起,其变化是缓慢的;而音频调制信号幅度的变化相对来说是一种快变化。因此,将环路滤波器的通带上限频率限制在几Hz内,只有慢变化因素引起的误差信号可以通过,而调制信号引起频偏时,它产生的误差信号被滤除,不作用于锁相环,这样就既可以保证中心频率的稳定度,又不影响调频。根据式2-2可计算出低通滤波器的截止频率f0,一般情况下该截止频率值小于10Hz。 1R5R5jC4U3UI21R1R5R5jC4 (2-2) UI1U2U2U01R2R13jC5U3U22f0MC145152中的鉴相器输出的两个误差信号分别是一个与参考频率同频的方波信号和一个固定电平。为取出其直流成分,可以先用一级有源积分网络将方波信号转化为直流,此直流中含有较多交流成分,再用一级无源低通网络滤除,然后加到压控振荡器上。 环路滤波器电路如图2.2.6所示。有源积分网络由运算放大器LM358和一些阻容元件组成。无源低通网络的参数则是利用Matlab进行计算、仿真后得到的,仿真结果如图2.2.7 所示。 图2.2.6 滤波电路图 图2.2.7 低通滤波器频率特性曲 2.2.5 电源电路 本机需使用两种电压,+5V和+12V,采用三端稳压集成7805和7812稳压,如图2.2.8所示。在此之前则使用现成的电源得到15V电压,该电源的原理是:先将220V交流市电通过变压器降压,再经整流,滤波得到+15V直流电。由于单独制作这样的电源成本较高且性能指标的提高难度较大,所以试验阶段采用市面上现成的高性能变压器电源。 图2.2.8 三端集成稳压管稳压电路 2.3 功率放大电路的设计 发射机的功率决定了其所能覆盖的范围,发射功率越大,信号覆盖的半径越大,MC1648输出的幅度只有100mV左右,必须在其后加多级功率放大器以提高输出级的带负载能力,增大其发射功率。初级功放由于放大的是小信号,只能工作在甲类,选用低噪声高频功放三极管9018,电路如图2.2.9所示。 图2.2.9 功率放大电路图 基极馈电电位设置在0.8V,集电极采用高频扼流圈L2和电容C17馈入+12V直流,电感对高频信号呈高阻抗,对直流短路,这样来自电源或外界的干扰信号就不会加到三极管的集电极上,输出的噪声就减小了。射极采用自偏压方式,接R22到地,C24为旁路电容,滤除高频成分对放大器的影响。R22必须选得比较小,否则发射极电位太高导致基射极偏压小于0.7V,三极管无放大作用。初级功放的输入输出均使用电容耦合形式。(由于没有晶体滤波器,我们没有在此处使用滤波) 为了使功率最大限度输出,必须使输出阻抗与负载阻抗匹配。可以证明,当输出阻抗与负载阻抗相等时,输出功率最大。传输线变压器可以用来作阻抗变换,它采用高频磁心与漆包线绕制。例如一个4:1的传输线变压器绕法为:取长短相同的两段漆包线并排,按同一绕向绕在高频磁心上,取其中第一根线的头作为输入端,第二根线的尾接地,剩下的两头(即第一根线的尾和第二根线的头)相接作为输出。 2.4 立体声编码器的设计 双声道立体声传声系统,比起单声道系统来,无论在音质的改善还是临场感的增强方面都有极大的飞跃。 本设计采用调频立体声发射芯片BA1404。BA1404是为数不多的调频发射集成电路之一,它集成度高,将立体声调制、FM调制和射频放大电路集成在一个芯片上;需要的外围元件少;工作可靠;电源电压适应范围宽,低至1.5V时仍能正常工作。BA1404最突出的特点是主振与放大输出电路隔离得非常好,输出电路对主振频率几乎没有影响。 图2.4.1为BA1404的结构框图。它主要由前置音频放大器(AMP),立体声调制器(MPX),FM调制器及射频放大器组成。表2.4.1为BA1404的引脚功能。 应用电路如图2.4.2所示: 图2.4.2 立体声编码电路图 对于立体声编码这一块,我们已经做好PCB,也试做了一次,但效果不好。后来由于时间的限制以及双面板的缘故,还有几个电阻没有,我们最终没有做这一部分。 2.5 输出功率测量的设计 该电路由一个二极管2AP30和一个电容构成。其原理如图2.5.1所示。输入电压加到该电路中,正半周时二极管导通,对电容充电,对应一个电压值;负半周时二极管截止,电容放电。因充电时间小,而放电时间常数很大,故运放输入端加进的是一个脉动直流源。经直流放大器后,输出一个大约几伏的直流电压U0。然后将输出电压经AD转换后送入单片机就可以直接测得输出电压值。由于负载为50Ω已知,故可由公式P=U\\R计算出输出功率,并利用程序控制其显示。 2 图2.5.1 功率测量原理 此方法经上一届电子设计竞赛参赛者证明是可行的。我们本打算用此电路进行功率的测量,但因为时间的缘故,同时我们想尽快做出来,最后我们只是在理论上分析了一下。 2.6 控制电路设计和频率计算 控制电路的作用是有:响应按键输入,控制液晶显示,计算并向MC145152输出控制信号以及监测发射频率。核心是使用单片机AT89C52,单片机使用11.0592MHz晶振, 从 X1,X2口接入,晶振的两个引脚分别接30pF的负载电容到地。控制电路如图2.6.1所示。 图2.6.1 基于AT89C52的控制电路 测频可利用单片机来完成。测频原理如图2.6.2所示。单片机内部有两个计时/计数器,一个用来计时,产生一个标准的时基闸门信号,一个用来计数,计下闸门时间内输入的脉冲个数,然后经换算得到实际输入的频率。 图2.6.2 单片机测频原理 与MC145152类似,单片机同样无法对高达68MHz的频率直接进行测量,必须先对发射频率进行预分频,降到单片机能够承受的频率,并转换成为通用TTL电平。再接入测频接口,所测结果采用液晶显示。MC12022的输出频率至少为68MHz/65=1.05MHz,高于单片机的测频上限,还无法直接利用,因此再接一个分频比为100的分频器,采用价格较低的74HC390,它为双十进制计数器。 VCO输出频率的范围是68~88MHz。首先应确定参考频率fr, ,fr为步长(频率间隔)的整数倍。频率间隔fr’ 可由式2.3确定。 fr'frR (2.3) 由于R值是固定的,只能从8个参考值中选择,采用10.2400MHz的晶振作为标准频率。对其进行÷R分频。R取2048,进行分频得到5kHz的脉冲信号作为频率间隔fr’。该值可通过单片机改变。 由fr 确定的N值和A值的范围应该在MC145152范围内(A的范围0~63,N的范围0~1023),并且必须满足N>A。采用吞咽脉冲计数的方式,式2.4为总分频比。只要N>A,尽管P为固定值,但合理选择N和A的值,∑即可连续。 =A(P1)(NA)PPNA (2.4) 此时fc 被锁定在: fcPNAfr (2.5) 其中N为0~1023;A为0~63;P=64(由MC12022确定)。 现举例计算确定A、N的值,使输出频率为fc=5MHz,步长fr’ = 5KHz (前面已经给出计算过程)。由式2.5计算可得(PN+A)=5M÷5K=1000,1000÷64=15.625。由此可得,N=15,A=0.625×64=40。通过此方法可以方便的算出每个频率对应的参数。 第三章 软件设计 软件设计的关键是对PLL芯片MC145152的控制以及测频显示。软件实现的功能是: ①设定频率间隔fr ÷R,即确定调频步进; ②设定分频系数A、N的值,以得到需要的输出频率; ③测量输出频率并显示; ④控制TLC549的工作; ⑤驱动液晶显示器; 3.1 MC145152的控制和显示部分的程序设计 图3.1.1为软件设计流程图。选用晶振频率为10.2400MHz,首先确定其频率间隔,对其进行÷R分频,若R取2048,得到频率间隔为5kHz。这样改变计数方法,可以使调频步进分别为5kHz,100kHz和500kHz。分为三个档,若选择的档位不同,A、N值的计算可由前述的公式来完成,但是在编程过程中并不是将该算法存入程序,而是寻找到A、N的变化规律,找到简单的计算方法。表3-1为步进不同时分别对应的A、N值,限于篇幅,只取其中一部分,通过观察可发现其变化规律。频率范围为68~88MHz。图3.1.1为参数计算的流程图。当步进分别为5kHz、100kHz、500kHz时,A的值分别增加1、20和36,由于A值的范围是0~63,而且必须满足N>A的条件,所以当A值大于63时,A值变为A-64。图3.1.1为软件设计流程图。其中的参数计算规律在图3.1.2所示的参数计算流程图中列出。在程序设计中,不需要将每个变化都存入单片机,而是使用一个变量fa,其值分别对应不同的步进取值为1、20或36,选择档位不同,fa就取相应的值即可。这样节省了系统资源,可根据设定频率确定A、N值并送到MC145152中。程序详见附录。 表3-1 频率间隔为5KHz,100KHz,500KHz时对应的A、N值例表(部分) 5KHz 70.0 70.01 70.02 70.03 70.04 70.05 A值 N值 48 50 52 54 56 58 218 218 218 218 218 218 218 218 218 218 218 100KHz A值 70.1 70.2 70.3 70.4 70.5 70.6 70.7 70.8 70.9 71.0 71.1 4 24 44 0 20 40 60 16 36 56 12 N值 219 219 219 220 220 220 220 221 221 221 222 500KHz 70.5 71.0 71.5 72.0 72.5 73.0 73.5 74.0 74.5 75.0 75.5 A值 20 56 28 0 36 8 44 16 52 24 60 N值 220 221 223 225 226 228 229 231 232 234 235 70.005 49 70.015 51 70.025 53 70.035 55 70.045 57 图3.1.1 软件设计流程图 图3.1.2 参数计算流程图 3.2 频率测量部分的程序设计 频率测量是对设定的输出频率进行实时测定并显示。编程用C语言来实现。该程序包括4个模块:分频器、测频控制器、计数器和锁存器。最终将测得的数据锁存后送到液晶显示出来。图3.2.1为其原理框图。利用计数器对被测频率脉冲计数,当时钟周期为1S时测得的脉冲个数即为所测频率。由于采用的实验小板的晶振是12MHz,首先对其分频,得到一个1KHz的时钟信号作为测频控制器的时钟信号。而测频控制器是为了完成自动测频而设计的。它控制计数器的工作,使其计数周期为1S,1S之后就停止计数,将此时的计数值送入锁存器锁存,同时对计数器清零,开始下一个周期的计数,该计数值就是测得的频率。程序详见附录。 3.2.1 频率测量原理框图 3.3 TLC549的控制程序设计 此控制程序设计主要是对TLC549的工作时序进行控制。TLC549是8位MOS型A/D转换器,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路,其转换时间很短,为17us。其引脚如下图所示。 图3.3.1 TLC549的引脚图 其工作时序图如下: 图3.3.2 TL549时序图 3.4 液晶显示驱动的程序设计 1) MDLS字符型液晶显示模块的时序图 MDLS字符型液晶显示模块的写操作时序图如图3.4.1所示。 图3.4.1 MDLS字符型液晶显示模块的写操作时序图 从图3.4.1的时序图可以看到数据写入的条件:寄存器Rs为高电平,读/写标志R/W为低电平,建立地址,接下来使能信号E为高电平,数据被写入,当使能端E为下降沿的时候数据被完全建立。从地址的建立、保持到数据的建立、保持的结束,整个过程需要的时间至少为355ns。 2) 液晶显示驱动子程序 本机使用点阵式液晶显示模块,它是由横向与纵向交错的点阵组成的,可显示字符,数字等。模块内部有显示存储器,存储器的每一个单元对应显示屏上的每一个点,储存单元是1还是0决定了该点是亮还是灭。显示驱动程序的作用就是把要显示的内容转换成ASCII码,送到显示存储器中。程序详见附录。 第四章 系统测试 4.1 测试使用的仪器(略) 4.2 指标测试和测试结果 4.2.1 输出频率范围和稳定度的测试 式4-1为频率稳定度的计算公式。同时测量最小和最大的输出频率,看该频率能稳定在哪个范围之类。 A=f1f0f0100% (4-1) 其中A为频率稳定度,f1为实测频率,f0为标称频率。. 理论上采用MV209应该有较大的可调范围。但采用了MV2109,经过实测,只锁住了4个频率,信号比较清晰。在90到92及97到100MHz也能收到,但无法锁住频率。 4.2.2 电压峰-峰值的测试 用示波器来测量输出电压峰-峰值并计算其精度。 振荡频率(MHz) Vp-p(V) 92 0.108 93 0.112 95 0.113 96 0.109 其平均值为0.1105V,精度为(0.1105-0.1)/0.1*100%=10.5%. 4.2.3 输出功率的测试 首先调节LC振荡器,使其输出为92MHz的正弦信号,使用+12V的单直流电源为功率放大器供电,接一个50Ω的纯电阻作为负载,用数字万用表测出该电阻两端电压值Um,按照式4-2便可计算出输出功率。 U P=m22测量次数 1 2R (4-2) 表4-2-3 功率测量数据表 2 3 4 5 6 平均值 电压Um(V) 功率(uW) 0.041 4.20 0.045 5.06 0.048 5.76 0.042 4.44 0.044 4.84 0.038 3.61 0.0447 4.652 经过实测,我们的功率只有这么大,但用接收机能在十几米远处接收到信号,且信号比较清晰。如再接丙类功放会有更好的效果,距离也可达到更远。 第五章 结束语 通过一段时间的设计与制作以及反复的调试与改进,智能控制调频广播发射机的基本部分制作完成,实现了频率自动跟踪锁定,中心频率稳定度达要求,发射频率可数字化控制,调频发射工作正常。性能指标达到较高水平,输出信噪比大于40dB,残波抑制比大于40dB,初级发射功率理论可上百毫瓦,但实测很低,只有5uW左右。本机电路采用的器件为插件式器件,这类器件体积较大,引脚较长,在高频电路中容易产生分布参数,给电路性能带来不良的影响。如果使用贴片式元器件,可以减小分布参数的影响,大大缩小系统体积,不过也增加了制作难度。 第六章 参考文献 1. 高吉祥主编.高频电子线路【M】.北京:电子工业出版社.2003年. 2. 高吉祥.电子技术基础实验与课程设计【M】.北京:电子工业出版社.2002年. 3. 高吉祥.数字电子电路.【M】.北京:电子工业出版社.2003年. 4. 高吉祥.模拟电子电路.【M】.北京:电子工业出版社.2003年. 5. 王建校、杨建国、宁改娣等.51系列单片机及C51程序设计【M】 北京:科学出版社.2002 年. 6. 杨忠煌、黄博俊、李文昌.单芯片8051实务与应用【M】.北京:中国水利水电出版社.2001 年. 7. 马忠梅、马岩、张凯等.单片机的C语言应用程序设计【M】.北京:北京航空航天大学 出版社.1997年. 8. 马忠梅、马岩、张凯、马岩. 单片机的C语言应用程序设计(第3版)【M】. 北京:北 京航空航天大学出版社.2003年. 9. 周立功等.单片机基础实验指导书【M】.广州:广州周立功单片机发展有限公司.2003年. 10. A.J.Viterbi: ”Acquisition and Tracking Behavior of Phase-Locked Loops”, JPL External Publication No. 673, July 14, 1999. 11. 潘永雄、沙河、刘向阳,电子线路CAD使用教程【M】.西安:西安电子科技大学出版 社 12.陈邦媛.射频通信电路【M】 北京:科学出版社.2002年. 13.李广弟、朱月秀、王秀山.单片机基础. 【M】. 北京:北京航空航天大学出版社.2001 年. 第七章 附录 7.1 程序清单 /*------------------------------------------------------------------------------------------------------------------*/ /************头文件声明***********************/ #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long /******************液晶使能信号输入端及寄存器选择操作预定义******************/ #define LCD_RS T0 #define LCD_E INT0 /***************可位寻址特殊功能寄存器名定义******************/ sbit P2_0=P2^0; sbit P2_1=P2^1; sbit ACC0=ACC^0; sbit ACC1=ACC^1; sbit ACC2=ACC^2; sbit ACC3=ACC^3; sbit ACC4=ACC^4; sbit ACC5=ACC^5; sbit ACC6=ACC^6; sbit ACC7=ACC^7; /*************** 位及变量定义*****************/ bit temp,key1_save,key2_save,key3_save,key4_save,keyon,keyoff; uchar state,cursor_shift; uchar cursor[5]={0,9,3,0,0}; uint t0count; uint A_data,N_data; uchar data_com,data_show; uchar dat1,dat2,dat3,dat4,dat5; uchar order[4]={0x38,0x01,0x06,0x0C}; uchar code data1[22]={0x4e,0x61,0x6e,0x68,0x75,0x61,0x55,0x6e,0x69,0x76,0x65, 0x72,0x73,0x69,0x74,0x79,0x53,0x65,0x74,0x46,0x4d,0x3a}; uchar code data2[22]={0x4e,0x61,0x6e,0x68,0x75,0x61,0x55,0x6e,0x69,0x76,0x65, 0x72,0x73,0x69,0x74,0x79,0x52,0x75,0x6e,0x46,0x4d,0x3a}; uchar i=0; ulong FMdata,count_fm,temp1,FM_temp; ulong k; /****************函数声明******************/ get_A_N_data(long FMdata); lcd_set_display(dat1,dat2,dat3,dat4,dat5,cursor_shift); lcd_run_display(dat1,dat2,dat3,dat4,dat5); /****************延时子程序*****************/ void delay(uint v) {while(v!=0)v--;} /****************读键盘子程序*********************/ read_key() {keyon=0; if(WR==0) {key1_save=1;keyon=1;} if(RD==0) {key2_save=1;keyon=1;} if(P2_1==0) {key3_save=1;keyon=1;} if(P2_0==0) {key4_save=1;keyon=1;} if(keyon==1) {keyoff=1;}} /***************键盘处理子程序***************/ key_process() {while(keyoff) {delay(100); read_key(); if(keyon==0) {keyoff=0; if(key1_save==1) {state=state+1; if(state>=2) {state=0;} key1_save=0;} if(key2_save==1&&state==0) {cursor_shift=cursor_shift+1; if(cursor_shift>=12) {cursor_shift=6;} key2_save=0;} if(key3_save==1&&state==0) {switch(cursor_shift) {case 6: cursor[0]=cursor[0]+1; if(cursor[0]==2) cursor[0]=0; break; case 7: cursor[1]=cursor[1]+1; if(cursor[1]==10) cursor[1]=0; break; case 8: cursor[2]=cursor[2]+1; if(cursor[2]==10) cursor[2]=0; break; case 10: cursor[3]=cursor[3]+1; if(cursor[3]==10) cursor[3]=0; break; case 11: cursor[4]=cursor[4]+1; if(cursor[4]==10) cursor[4]=0; break;} key3_save=0;} if(key4_save==1&&state==0) {switch(cursor_shift) { case 6: if(cursor[0]>0) {cursor[0]=cursor[0]-1;} else cursor[0]=1; break; case 7: if(cursor[1]>0) {cursor[1]=cursor[1]-1;} else cursor[1]=9; break; case 8: if(cursor[2]>0) {cursor[2]=cursor[2]-1;} else cursor[2]=9; break; case 10: if(cursor[3]>0) {cursor[3]=cursor[3]-1;} else cursor[3]=9; break; case 11: if(cursor[4]>0) {cursor[4]=cursor[4]-1;} else cursor[4]=9; break; } key4_save=0;} if(state==0) {lcd_set_display(cursor[0],cursor[1],cursor[2],cursor[3],cursor[4],cursor_shift);}} FMdata=cursor[0]*10000+cursor[1]*1000+cursor[2]*100+cursor[3]*10+cursor[4]+2;}} /***************A、N输出数据生成及输出程序********************/ get_A_N_data(long FMdata) { N_data=FMdata/64; A_data=FMdata%64; ACC=N_data; P0=ACC; ACC=0; ACC=A_data; temp=ACC7; ACC7=ACC0; ACC0=temp; temp=ACC6; ACC6=ACC1; ACC1=temp; temp=ACC5; ACC5=ACC2; ACC2=temp; temp=ACC4; ACC4=ACC3; ACC3=temp; P2=ACC; P2_1=1; P2_0=1;} /**************液晶写指令程序*****************/ write_com(uchar data_com) {LCD_RS=0; LCD_E=1; P1=data_com; delay(500); LCD_E=0;} /**************液晶写数据程序****************/ write_data(uchar data_show) {LCD_RS=1; LCD_E=1; P1=data_show; delay(500); LCD_E=0;} /***************液晶初始化程序*****************/ initial_lcd(void) {write_com(order[0]); write_com(order[1]); write_com(order[2]); write_com(order[3]);} /***************频率设置状态下液晶显示程序*************/ lcd_set_display(dat1,dat2,dat3,dat4,dat5,cursor_shift) { write_com(0x0D); write_com(0x80); for(i=0;i<16;i++) write_data(data1[i]); write_com(0xc0); for(i=16;i<22;i++) write_data(data1[i]); write_data(dat1+0x30); write_data(dat2+0x30); write_data(dat3+0x30); write_data(0x2E); write_data(dat4+0x30); write_data(dat5+0x30); write_data(0x4D); write_data(0x48); write_data(0x7A); write_com(0xC0+cursor_shift);} /****************运行状态下频率显示程序***************/ lcd_run_display(dat1,dat2,dat3,dat4,dat5) { write_com(0x80); for(i=0;i<16;i++) write_data(data2[i]); write_com(0xc0); for(i=16;i<22;i++) write_data(data2[i]); write_data(dat1+0x30); write_data(dat2+0x30); write_data(dat3+0x30); write_data(0x2E); write_data(dat4+0x30); write_data(dat5+0x30); write_data(0x4D); write_data(0x48); write_data(0x7A); } /*************************主函数****************************/ main() {delay(2560); TMOD=0x51; TH0=0x4b; /* 定时器初值预置 */ TL0=0xff; SCON=0x70; TH1=0; TL1=0; t0count=0; EA=1; ET0=1; TR0=1; PT0=1; ET1=1; TR1=1; initial_lcd(); FMdata=9302; FM_temp=9302; key1_save=0; key2_save=0; key3_save=0; key4_save=0; dat1=0x30+1; dat2=0x30; dat3=0x30+5; dat4=0x30+3; dat5=0x30+2; keyon=0; cursor_shift=6; state=1; get_A_N_data(FMdata); k=416*N_data; k=k/(65*N_data-A_data); while(1) {P2_0=1; P2_1=1; RD=1; WR=1; read_key(); key_process(); temp1=count_fm/2; temp1=temp1*k; temp1=temp1/10; temp1=temp1-2; dat1=temp1/10000; temp1=temp1%10000; dat2=temp1/1000; temp1=temp1%1000; dat3=temp1/100; temp1=temp1%100; dat4=temp1/10; temp1=temp1%10; dat5=temp1/1; if(state==1) {lcd_run_display(dat1,dat2,dat3,dat4,dat5); if(FMdata!=FM_temp) { while((FMdata-FM_temp>15)) { FM_temp=FM_temp+15; get_A_N_data(FM_temp); delay(10000); } while((FM_temp-FMdata>6)) { FM_temp=FM_temp-6; get_A_N_data(FM_temp); delay(10000); } FM_temp=FMdata; get_A_N_data(FM_temp); k=416*N_data; k=k/(65*N_data-A_data);} } } } /*****************定时器0中断*********************/ time0() interrupt 1 using 1 { TH0=0x4b; TL0=0xff; t0count=t0count+1; if(t0count==40) {count_fm=TH1*256; count_fm=count_fm+TL1; TH1=0x0; TL1=0x0; t0count=0;} } time1() interrupt 3 using 2 {TH1=0x0; TL1=0x0;} 因篇幅问题不能全部显示,请点此查看更多更全内容