天津工程师范学院2007届本科生毕业设计
1 引言1.1 通信的发展人类社会的发展可视为一部信息传播技术的发展史。从古代的烽火到近代的旗语,都是人们寻求快速远距离通信的手段。直到19世纪电磁学的理论与实践已有坚实的基础后,人们开始寻求用电磁能量传送信息的方法。信息传播促进社会进步和科学技术的发展;科学技术的进步又不断地改进、更新人类信息传播的媒体和工具,并促进信息更迅速、更广泛的传播。
面向21世纪的无线通信,无线通信的系统组成、信道特性、调制与编码、接入技术、网络技术、抗衰落与抗干扰技术以及无线通信的新技术和新应用的发展更是一日千里。
1.2 广播的发展现状在21世纪的今天,广播的主要技术方式是调频广播,它是继调幅广播(20世纪20年代开始的)的第二代广播,它开始于20世纪50年代,克服了中波广播的很多致命不足,如串台严重、频带不够分配,信噪比差等,而实现了高保真度、动态范围宽、信噪比较好、较少串台现象。
调频广播因其优秀的音质和抗干扰性能而成为城市广播覆盖的主要手段。随着城市规模的日益扩展,调频发射台的功率也跟着成数量级地增大,由原来的100W、300W上升到1KW、3KW、甚至10KW,而发射天线的高度也由几十米上升到百余米甚至三四百米。随之逐步形成了高塔大功率覆盖的格局。
从广播业界的角度来看,高塔大功率覆盖模式的主要优点是建设方便,省事省力,见效快。但其固有缺点和带来的负面影响也是不容忽视的,主要有以下几点:因调频广播工作于米波段,极易因高大建筑物和其他物体反射形成多径干扰;因高山和低谷等地形因素会产生收不到信号的阴影区;大区制覆盖因频率不能复用造成规划困难;频谱利用率低;不能解决长距离交通线的连续覆盖问题。从社会发展的角度来看,它还有更重要的三条缺点:浪费能源,覆盖区场强不均匀度可达60dB,大量超出需要的无效辐射,形成能源的巨大浪费;污染环境,大功率FM发射台在天线附近周边地区辐射场强超过环境电磁波卫生标准已是不争的事实;对航空无线电业务造成干扰。
由于相关的国家标准和国家军用标准及频率规划多是10年以前制定的,那时寻呼业和调频广播刚起步不久,对干扰的认识还远不充分,已不适应当今电磁环境现状。当时规定的17dB的防护率早已被突破,10KM的防护间距也已形同虚设。
在世界各国,频率资源是有限的。国家已严格限制频率的使用范围。广播频率是政府部门颁发的,现在很多公司、媒体都愿意斥巨资竞标频谱使用权。无线广播中,单一载频用来传输单一的或者单套立体声节目。由于传统的大功率的调频广播频率资源的限制,使广播技术工作者开辟了另一种广播技术形式:小调频同步广播,它的特点是多布点、小功率、同频、同相、同步广播,使用的是现有的调频技术,不过存在着多点同步问题,这在技术上是可以克服的。信号传输可使用微波、有线甚至卫星方式。
由于采用小功率按需布点的方法,在满足覆盖需要的前提下,把单台发射机的功率大幅度降了下来,降到10W、50W、最大不超过300W,这就使诸多问题迎刃而解。对于多径干扰,由于功率小了,大部分反射波场强下降到不至于产生干涉的水平,并且由于布点多,部分多径干扰区可能被互相掩盖;可以用同步补点的办法消除阴影区;小功率辐射易于规划,且提高频谱利用率;可方便组成单频网,满足交通线上的无缝覆盖,保证驾乘人员的不间断接收;场强不均匀度仅为30dB,加上使用低高度垂直极化天线,极大地减小对空辐射和根部近场辐射,既节约能源,又满足电磁环境卫生标准,并可避免造成对航空频段的干扰。
1.3 设计思路任何一个地区、一个城市都需要有很多专业的服务及新闻宣传,如交通信息咨询、健康咨询、股市信息咨询等,广播又是大众最灵活的信息接受媒体,这需要建立很多的广播电台,而作为一个国家的频率资源是严格控制和有限的,因此,小调频广播就成了未来广播的另一种主要形式,它是广播发展的其中一个方向,是数字音频广播(DAB)、网络广播的有力补充,既节约了频谱资源,又实现了广播功能。
为了实现上述要求,本文作者采用单片机AT89S52和调频专用发射芯片 BH1415F及数码显示设计了一套完整的无线调频发射系统,设计为可在88MHz--98MHz范围内任意设置发射频率,并且可以预置频道,发射频率通过单片机控制最小调整值为0.1MHz,具有单声道/立体声控制,实现了语音信息的短距离无线传输,可广泛应用于学校无线广播、电视现场导播、汽车航行、无线演说等场所。
2系统概述2.1 系统功能要求设计一个无线调频发射系统,实现语音信号的短距离传输。由于语音业务对误码不敏感,可以采用调频方式发送信息,设计中采用了BH1415F构成音频无线发射电路。无线调频发射器可以在88--98MHz范围内任意设置发射频率,可以预置发射频道,发射频率的最小调整值为0.1MHz,具有单声道/立体声控制,发射距离在20--50米之间。
语音信号采用调频方式与调幅相比,有利于改善输出音频信号的信噪比,以保证语音业务的可靠传输,下表是调幅和调频的优缺点比较:
表2-1 调幅和调频优缺点比较
| | |
| | 1.传送音频频带较宽(100Hz—5KHz)适宜于高保真音乐广播 2.抗干扰性强,内设限幅器除去幅度干扰 3.应用范围广,用于多种信息传递 4.可实现立体声广播 |
| 1.传送音频频带窄 (200Hz—2500Hz),高音缺乏 2.传播中易受干扰,噪声大 | |
2.2系统组成本设计由单片机、键盘、数码显示、调频发射、调频放大和电源模块等六部分组成,系统框图如图2-1所示。通过操作键盘可以设置和更改发射的频率;单片机用于控制数码管显示对应的发射频率和发送频率信号到调频调制电路中;调频发射将输入的音频信号调制后通过载波发送出去;数码管用于显示发射的频率;调频放大将得到的调制信号进行放大;电源模块则为整个电路提供电源。

3 方案论证与比较3.1 无线调频发射电路设计方案论证与选择方案1:采用单片调频发射集成电路组成芯片MC2833。它可构成发射高频率信号的功率放大器。电路由音频放大器、可变电抗器、射频振荡器、输出缓冲器以及放大电路构成。由集成芯片MC2833组成的调频发射机,先将语音通过话筒变成音频电压信号送给音频放大器进行音频电压放大,此音频电压信号经耦合电容送给可变电抗的输入端脚3去控制可变电抗,而由可变电抗以及电感、晶体与高频振荡器组成调频振荡电路,产生调频波经缓冲送给两级二倍频放大器。电路实现基本框图如图3-1所示。但由于该芯片涉及到的谐振回路较多,不易统调,因而频率不易控制,导致信号不稳定,容易跑台,实现较为困难。
方案2:采用集成芯片BA1404及相关电路构成。它主要由前置音频放大器,立体声调制器,FM调制器及射频放大器组成。利用内部参考电压改变变容二极管的电容值,可实现发射频率的调整。图3-2所示为电路框图。此电路可实现立体声调频发射,典型调频频段为75-108MHz,振荡频率不易调整,尤其是低端频率实现困难,难以实现要求频段的调整。
方案3:采用集成芯片BH1415F及相关电路构成。BH1415F是将预加重电路、限幅电路、低通滤波电路(LPF)一体化,使音频信号的质量比分立元件的电路(如:BA1404、NJM2035等)有很大改进。此电路可实现立体声调频发射,采用了MCU 数据直接频率设定,可设定70-120MHz频率,由于采用了锁相环锁频并与调频发射电路一体化,使发射的频率非常稳定,并且可靠性好,抗干扰能力强,容易实现调频的要求。
综上所述,为了实现中心频率的控制和系统设计的功能要求,本设计选择方案3,即采用集成芯片BH1415F及相关电路构成音频无线发射电路。
3.2 压控振荡器方案论证与选择
方案1:采用分立元件构成。利用低噪声场效应管,用单个变容二极管直接接入振荡回路作为压控器件。
图3-3 压控振荡电路
电路是电容三点式振荡器,如图3-3所示。该方法实现简单,但是调试困难,而且输出频率不易灵活控制[5]。
方案2:采用压控振荡器和变容二极管,及一个LC谐振回路构成变容二极管压控振荡器。只需要调节变容二极管两端的电压,便可改变压控振荡的输出频率。由于采用了集成芯片,电路设计简单,系统可靠性高,并且利用锁相环频率合成技术可以使输出频率稳定度进一步提高。
综上所述,方案2具有更优良的特性和更简单的电路构成,所以使用方案2作为本次设计的方案。
4 系统硬件电路的设计4.1 单片机控制电路 系统采用的微控制器是ATMEL公司生产的低功耗、高性能单片机AT89S52,它有32个外部双向输入/输出 (I/O) 端口,片内含8k bytes的可重复编程的Flash存储器和256 bytes的随机存取数据存储器 (RAM),3个16位可编程定时计数器,1个全双工串行通信口,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统。AT89S52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
4.1.1 内部结构AT89S52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O口、串行I/O口和中断系统等几大单元以及数据总线、地址总线和控制总线三大总线构成。图4-1为单片机内部结构框图[13]。
(1) 中央处理器
中央处理器(CPU)是整个单片机的核心部件,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
(2) 程序存储器
AT89S52共有8KB个E2PROM,用于存放用户程序,原始数据或表格。
(3) 数据存储器(RAM)
AT89S52内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。

图4-1内部结构框图
(4) 并行输入输出口
AT89S52共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
(5) 串行输入输出口
AT89S52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
(6) 定时/计数器
AT89S52有三个16位的可编程定时/计数器,以实现定时或计数功能,并以其定时或计数结果对单片机进行控制。
(7) 中断系统
AT89S52具备较完善的中断功能,有两个外中断、三个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有两级的优先级别选择。
4.1.2 引脚功能

图4-2 AT89S52芯片引脚图
(1) 电源和晶振
VCC:供电电压。
GND:接地。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
(2) I/O口
① P0口
P0口的字节地址为80H,位地址为80H~87H。P0口既可以作为通用I/O口使用,也可以作为单片机系统的地址/数据线使用。当作为输出口使用时,由于输出电路是漏极开路,必须外接上拉电阻才能有高电平输出。
② P1口
P1口的字节地址为90H,位地址为90H~97H。P1口只能作为通用I/O口使用。当作为输出口使用时,已能对外提供推拉电流负载,外电路无需再接上拉电阻;当作为输入口使用时,应先向其锁存器写入“1”,使输出驱动电路的FET截止。
③ P2口
P2口的字节地址为0A0H,位地址为0A0H~0A7H。P2口用于为系统提供高位地址,但只作为地址线使用而不作为数据线使用。此外,P2口也可作为通用I/O口使用。
④ P3口
P3口的字节地址为0B0H,位地址为0B0H~0B7H。P3口可以作为通用I/O口使用,但在实际应用中它的第二功能信号更为重要。
P3口引脚的第二功能,如下所示:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(计时器0外部输入)
P3.5 T1(计时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
(3) 4根控制线
① RST:复位信号。保持RST脚两个机器周期以上的高电平,就可以完成CPU系统复位操作,使系统的一些单元内容回到规定值。
② /PSEN:外部程序存储器读选通信号。在读外部ROM时,/PSEN有效(低电平),以实现外部ROM单元的读操作。
③ /EA/VPP:访问程序存储器控制信号。当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;而当/EA为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。
④ ALE/PROG:地址锁存控制信号。在系统扩展时,ALE用于控制P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。此外由于ALE是以六分之一晶振频率的固定频率输出的正脉冲,因此也可作为外部时钟或外部定时脉冲使用。
4.2 调频调制发射电路 本系统调频调制发射部分电路采用了ROHM公司的调频发射专用集成电路BH1415F。BH1415F 是一种无线音频传输集成电路,它可以将计算机声卡、游戏机、CD、DVD、MP3、调音台等立体声音频信号进行立体声调制发射传输,配合普通的调频立体声接收机就可实现无线调频立体声传送。适合用于生产立体声的无线音箱、无线耳机、CD、MP3、DVD、PAD、笔记本计算机等的无线音频适配器开发生产。这个集成电路是由提高信噪比(S/N)的预加重电路、防止信号过调的限幅电路、控制输入信号频率的低通滤波电路(LPF)、产生立体声复合信号的立体声调制电路、调频发射的锁相环电路(PLL)组成。
4.2.1 调频调制电路的特点(1)将预加重电路、限幅电路、低通滤波电路(LPF)一体化,使音频信号的质
量比分立元件的电路(如:BA1404、NJM2035等)有很大改进。
(2)导频方式的立体声调制电路。
(3)采用了锁相环锁频并与调频发射电路一体化,合发射的频率非常稳定。
(4)采用了MCU 数据直接频率设定,可设定70-120MHz频率,使用上非常方便。
4.2.2 结构图
图4-3 BH1415F 内部结构图
4.2.3 允许的最大值
表4-1 BH1415F 工作时允许的最大值(Ta=25℃ 基本电路测量)
4.2.4 工作范围
表4-2 BH1415F 工作范围(Ta=25℃)
4.2.5 调频调制发射电路的组成(1)预加重电路
预加重电路是一个非线性的音频放大器,它的内部工作点为1/2Vcc,因为它是非线性放大器,所以输入阻抗取决为内部电阻R3=43 KΩ,预加重时间取决于内部电阻R2=22.7K和外部电容C1=2200p。
(2)限幅电路
限幅电路是由二极管限幅的反相放大器组成,它的内部工作点为1/2 Vcc。
图4-4 限幅电路
(3)低通滤波电路
低通滤波电路是由二阶低通反馈放大电路组成,它的分频点为15KHz。
图4-5 低通滤波电路
具体的公式如下:
Q=0.577、ω0=1.274 、fc=15KHz
R1=R2=R3=Rf=100KΩ (4-1)
Cf=1/ω0 Rf=1/(2πX1.274X15KX100K)=83.28pF (4-2)
C1=3Q Cf =3X0.577X83.28pF=144pF≈150pF (4-3)
C2=Cf/3Q=83.28p/(3X0.577)=48≈50pF (4-4)
(4)立体声调制电路
音频信号从第1脚和第22脚输入后通过预加重电路、限幅电路和低通滤波电路后送到混合器(MPX)中,另外由第13、14脚接入7.6MHz晶体的振荡电路通过200分频后产生的38KHz副载波信号,同时38KHz副载波通2分频产生的19KHz导频信号。音频信号和38KHz的副载波信号被多路复合器进行了平衡调制,产生了一个主信号(L+R)和一个通过DSB 调制的38KHz 副载波信号(L-R),并与19KHz导频信号组成复合信号从第5脚输出。
(5)FM发射电路
FM发射电路采用稳定频率的锁相环系统。这一部分由高频振荡器、高频放大器及锁相环频率合成器组成。调频调制由变容二极管组成的高频振荡器实现,高频振荡器是一个锁相环的VCO,立体声复合信号通过它直接进行调频调制。
高频振荡器是由第9脚外部的LC 回路与内部电路组成,振荡信号经过高频放大器从11脚输出,同时输送到锁相环电路进行比较后从第7脚输出一个信号对高频振荡器的值进行修正,确保频率稳定。如果频率超过锁相环设定的频率,第7 脚将输出的电平变高;如果是低于设定频率,它将输出的电平变低;相同的时候,它的电平将不变。
4.3 键盘部分4.3.1 单片机键盘和键盘接口概述
单片机使用的键盘可分为独立式和矩阵式两种。独立式实际上就是一组相互独立的按键,这些按键可直接与单片机的I/O接口连接,其方法是每个按键独占一条口线,接口简单[12]。矩阵式键盘也称行列式键盘,因为键的数目较多,所以键按行列组成矩阵(如图4-6所示)。
图4-6 键盘接口电路图
按一个键到键的功能被执行主要应包括两项工作:一是键的识别,即在键盘中找出被按的是哪个键,通过接口电路来实现;另一项是键功能的实现,通过执行中断服务程序来完成。下面来介绍键盘接口问题[13]。
具体来说,键盘接口应完成以下操作功能:
a 键盘扫描,以判定是否有键被按下(称之为“闭合键”)。
b 键识别,以确定闭合键的行列位置。
c 产生闭合键的键码。
d 排除多键、串键(复按)及去抖动。
这些内容通常是以软硬件结合的方式来完成的,即在软件的配合下由接口电路来完成。但具体那些由硬件完成由软件完成,要看接口电路的情况。总的原则是,硬件复杂软件就简单,硬件简单软件就得复杂一些。
4.3.2 单片机键盘接口和键功能的实现(1) 键盘接口处理内容
① 键扫描
键盘上的键按行列组成矩阵,在行列的交点上都对应有一个键。为判定有无键按下(闭合键)以及被按键的位置,可使用两种方法:扫描法和翻转法,其中
扫描法使用较为普遍。
② 去抖动
当扫描表明有键被按下之后,紧接着应进行去抖动处理。因为常用键盘的键实际上就是一个机械开关结构,被按下时,由于机械接触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动,如图4-7所示。抖动时间长短与键的机械特性有关,一般为5~10ms。而键的稳定闭合时间和操作者按键动作有关,大约为十分之几到几秒不等。
图4-7 键闭合和断开时的电压抖动
③ 键码计算
被按键确定下来之后,接下来的工作是计算闭合键的键码,因为有了键码,才能通过散转指令把程序执行转到闭合键所对应的中断服务程序上去。也可以直接使用该闭合键的行列值组合产生键码,但这样做会使各子程序的入口地址比较散乱,给JMP指令的使用带来不便。所以通常都是以键的排列顺序安排键号,这样安排,使键码既可以根据行号列号以查表求得,也可以通过计算得到。若各行的首号依次是00H,04H,08H,0CH。若列号按0~3顺序,则键码的计算公式为: 键码=行首号+列号
④ 等待键释放
计算键码之后,再以延时后进行扫描的方法等待键释放。等待键释放是为了保证键的一次闭合仅进行一次处理。
综上所述,键盘接口处理的核心内容是测试有无闭合键,对闭合键进行去抖动处理,求得闭合键的键码。
为了使键盘操作更稳定可靠,还可以加一些附加功能。例如屏蔽功能:在对一个闭合键已进行处理时,再按下其它键不会产生影响;对于一个键,不管按下多长时间,仅执行一次键处理子程序等。
(2) 键盘接口的控制方式
在单片机的运行过程中,何时执行键盘扫描和处理,可有以下3种情况:
① 随机方式,每当CPU空闲时执行键盘扫描程序。
② 中断方式,每当有键闭合时才向CPU发出中断请求,中断响应后执行键盘扫描程序。
③ 定时方式,每隔一定时间执行一次键盘扫描程序,定时可由单片机定时器完成。
(3) 键处理子程序
在计算机中每一个键都对应一个处理子程序,得到闭合键的键码后,就可以根据键码,转相应的键处理子程序(分支是使用JMP等散转指令实现的),进行字符、数据的输入或命令的处理,这样就可以实现相应键所设定的功能[14]。
4.4 LC振荡电路LC振荡器起振条件
相位平衡条件:Xce和Xbe必需为同性质的电抗,Xcb必需为异性质的电抗,且它们之间满足下列关系:

(4-5)
即

(4-6)
幅度起振条件:
(4-7)
式中:

——晶体管的跨导,

——反馈系数, AU——放大器的增益,

——晶体管的输入电导,

——晶体管的输出电导,

——晶体管的等效负载电导,

一般在0.1~0.5之间取值。
4.5 调频放大电路 调频放大电路部分采用UPC1651 对调制信号进行放大。
4.6 电源模块设计4.6.1 单元电源电路设计为了能够让单片机和调频发射部分更好,更稳定地工作,采用了图4-8所示单元电源电路,由电源变压器、桥堆和滤波电容器所组成。电源变压器的初级电压输入为220V,次级输出电压为12V[15] [16]。
由于单片机所需的是+5V电源,经滤波电容和三端稳压集成电路MC7812后可得到+12V电压,MC7812能将15V~25V的直流电压变换成12V的稳定电压,在12V的电压中含有少量的低频成分和接收外界的高频成分,再经后一级滤波后送三端稳压集成电路7805,7805能将大于7V~15V的直流电压变换成5V的稳定电压。同时由于电流较大导致三端稳压集成电路MC7812和7805过热,为了确保电路工作正常,给两个芯片分别加上散热片。
图4-8 电源电路图
4.6.2 直流稳压电源的检测本系统对电源要求高,因为稳定性和可靠性在发射电路重要意义。为了提高稳定性,所以采用如图4-8的稳压电源,电源电路的主要部件采用集成的三端稳压器件如7812与7805,稳压电源输入电压范围宽,输出电压稳定,抗干扰能力强,以满足调频发射机的要求[12]。
数字万用表对稳压电源的测试结果:
表4-3 稳压电源的测试结果
5 系统程序的设计5.1 主程序首先,进行整个程序的初始化及清屏,开机时先显示一下“088.0”,预制发射频率为88MHz,送入BH1415F,然后进入查键和显示函数的循环。当有按键按下时,程序判断是哪个键被按下,然后执行相应的按键功能,并调用数码显示,显示所设置的发射频率;当没有键按下时,返回键盘扫描,再判断是否有键被按下。本次程序设计的整体流程图,如图5-1所示:
5.2 延时子程序延时函数在本系统中主要用于1ms的显示延时和10ms的按键消抖。
5.3 LED动态扫描子程序扫描函数使用单片机的两个端口,一个端口用于输出段码,一个端口用于行扫描,以实现LED 的动态显示。扫描函数执行一次约为4ms,在第二位LED显示时点亮小数点。其程序流程图如图5-2所示:
5.4 频率数据转换子程序 将频率数据由十进制BCD码转为十六进制数。
5.5 控制命令合成子程序BH1415F的频率控制字为两个字节(如图5—3所示)。两个字节中低11位(D0—D10)为频率数据,其值乘以0.1即为BH1415F 的输出频率(单位为MHz)。高5位(D0—D15)为控制位。其中D11(MONO)位单声道/立体声控制位,该位为0时表示单声道发射模式,该位为1时表示立体声发射模式。D12(PD0)、D13(PD1)位用于相位控制,通常为0,当分别为01和10时可使发射频率在最低和最高处。D14(T0)和D15(T1)用于测试模式控制,通常为00,当为10时为测试模式。合成时将控制命令(5位)与数据的最高3位合成一个字节。
图5-3 BH1415F的频率控制字及传送格式
5.6 BH1415F字节写入子程序按照BH1415F字节传送要求,按低位先送、低字节先送的原则。传送的延时应精确,程序流程图如图5-4、5-5所示。
5.7 查键子程序系统采用4×4行列式键盘。键盘部分应实现如下功能:首先,对键盘进行扫描,判断是否有键被按下。如果没有,则转回键盘扫描,看下次是否有键被按下;如果有键被按下,则先对键进行去抖动,然后算出是哪个键被按下,再延时等待键释放。因为每一个键都对应一个处理子程序,得到闭合键的键码后,就可以根据键码,转相应的键处理子程序(分支是使用JMP等散转指令实现的),进行字符、数据的输入或命令的处理。这样就可以实现该键所设定的功能。
根据上述说明,画出本次程序设计的键处理流程图,如图5-6所示:
6 系统调试及性能分析6.1 硬件调试硬件调试时先检查电路板的焊接情况,在检查无误后可以通电检查。实际制作中可结合示波器对晶振及P0、P1、P2口的波形情况进行综合硬件测试分析。
6.2 软件调试软件调试使用伟福编译软件,源程序编译及仿真调试应分段或以子程序为单位一个一个进行,最后可以结合硬件实时运行调试。
6.3 发射频率的调试调通程序及硬件的情况下,在BH1415F的11脚接上一段电线作为发射天线,在室内可以收到调频广播。
如果调不出频率,或者出了频率但不由单片机控制,该类问题主要是压控调试不对,没有锁相。在LC振荡电路中,把振荡产生的信号接入示波器,观察示波器,调节中周的磁芯改变L的值使示波器的频率读数达到93MHz左右。先测试变容二极管上的电压,频率越高,电压越高,调节电感匝距,使得频率设置在98MHz时,电压接近Vcc,频率设置在88MHz时,电压接近0V。当发现频率的最高端达不到98MHz时应减小振荡电感(减小匝数);而在低端的频率达不到要求时,要增加线圈匝数。
在调试中选用MC1648做压控振荡,虽然频率达到了设计要求,但是干扰特别明显,导致接收到的音频信号质量下降。考虑发射信号的音质很重要,不采用MC1648,直接使用LC 振荡电路。LC 振荡电路的调试过程中需要多次更换电容和电感线圈,调整振荡电路使BH1415F 可以振荡。
如果调试中频率覆盖范围没有达到预期的效果,一个原因是变容二极管变容范围不够大;也有可能LC振荡电路调整的不完善。振荡电感调好后用胶封住,防止发射器工作时由于振动而产生频率漂移。
6.4 性能分析用BH1415F设计的小功率调频发射器不仅设计简单,而且频率设定灵活,可有效地避开当地的调频电台,可应用于室内广播、电视伴音转发等小范围的无线调频转播。
结 论此次设计将应用于无线通信领域,并且针对当前市场上短距离无线产品的不足进行了改进。测试结果表明,设计要求的各项指标均可以基本实现,尽管发射的带宽没有到达预计的结果,原因是变容二极管的变容范围不够大。要得到稳定度高的发射频率应采用锁相环技术,来降低中心频率的漂移。此外,语音信号采用调频方式与调幅相比,有利于改善输出音频信号的信噪比,以保证语音业务的可靠传输。
无线调频发射系统应用了大量的高频电子线路技术,尤其是其中的高频信号处理设计电路要有电路调试的环境,受实际调试环境的影响教大,调试具有较大难度。在电路的设计制作中,一定要遵循高频布线规则,并且可以在焊接电路的过程中适当接入退耦电容,有效的滤除杂波信号的干扰。
通过方案论证、资料查询及电路设计和反复调试,不断的解决电路调试过程中的问题,最终在规定的时间内完成了设计任务。本设计由于水平有限,电路及程序设计还有需要改进的地方,在今后的学习和研究中,将继续改进完善。
另外在调试过程中,以保证作品实现功能准确为前提,尽量做到电路简单、美观,效果好成本低,以增强其实用价值。
参考文献[1] 李广第,朱月秀等.单片机基础.北京:北京航空航天大学出版社,2001.
[2] 何立民.单片机高级教程-应用与设计.北京:北京航空航天大学出版社, 2000.
[3] 沈德金等. MCS-51系列单片机接口电路与应用程序实例.北京:北京航空航天大学出版社,1990.
[4] 李光飞,李良儿等.单片机课程设计实例指导.北京:北京航空航天大学出版社,2004.
[5] 铃木宪次.高频电路的设计与制作.科学出版社,2005.
[6] 张洪润,蓝清华等. 单片机应用技术教程.北京:清华大学出版社,1997.
[7] 李华. MCS-51系列单片机实用接口技术.北京:北京航空航天大学出版社 1993.
[8] 全国大学生电子设计竞赛组委会.第五届全国大学生电子设计竞赛获奖作品选编第1版,北京理工大学出版社,2005.
[9] 李鹏飞.AVR单片机与4×4小键盘的使用.无线电, 2006 (5):39-41.
[10] 李光飞,楼然苗等单片机C程序设计实例指导.北京:北京航空航天大学出版社, 2005.
[11] 赵晓安. MCS-51单片机原理及应用.天津:天津大学出版社,2001.
[12] 宋东生.整流滤波电路,无线电,2002(453):42-43.
[13] 吴景狄.单片机的键盘及LED数码显示接口.电子世界,2001(4):30-31.
[14] 陈粤初等. 单片机应用系统设计与实践.北京:北京航空航天大学出版社,1991.
[15] 谭博学,苗汇静等.集及成电路原理应用.电子工业出版社,2003.
[16] 黄智伟,王彦等.全国大学生电子设计竞赛训练教程.电子工业出版社,2004.
[17] 周兴华.变容二极管和电调谐.电子世界,2000(6):54.
[18] 求是科技. 单片机典型模块设计实例导航.北京:人民邮电出版社,2004.
[19] AT89C51,AT89C52说明书[S] ATMEL公司提供
[20] WU Xunwei,HANG Guoqiang,Massoud Pedram. Low power DC circuits employing AC power supply, SCIENCE IN CHINA (INFORMATION SCIENCES), 2002 Vol.45 No.3, 232.
附录1:原理图
单片机源程序如下:
- ;26H-29H放显示小数位、个位、十位、百位BCD码数,24H-25H放频率控制数据(十六进制)
- ;
- CONBITL EQU 21H ;频率控制字节低8位
- CONBITH EQU 22H ;频率控制字节高8位
- KEYWORD EQU 23H ;存放键扫描时P1口值
- ORG 0000H ;程序开始地址
- LJMP START ;转START执行
- ORG 0003H ;
- RETI ;不用中断程序
- ORG 000BH ;
- RETI ; 不用中断程序
- ORG 0013H ;
- RETI ; 不用中断程序
- ORG 001BH ;
- RETI ; 不用中断程序
- ORG 0023H ;
- RETI ; 不用中断程序
- ORG 002BH ;
- RETI ;
- ;初始化程序
- CLEARMEN: MOV R0,#20H ;20H-29H循环清0
- MOV R1,#0AH ;
- CLEARLOOP: MOV @R0,#00H ;
- INC R0 ;
- DJNZ R1,CLEARLOOP ;
- MOV P0,#0FFH ;四端口置1
- MOV P1,#0FFH ;
- MOV P2,#0FFH ;
- MOV P3,#0FFH ;
- CLR P3.0 ;BH1415禁止操作
- CLR P3.1 ;
- CLR P3.2 ;
- LCALL KEYFUN15 ;置立体声发射方式,开立体声发射指示灯
- CLEAR1: MOV PCON,#00H ;控制寄存器清0
- MOV 29H,#00H ; 置初始值为88MHZ(显示为088.0)
- MOV 28H,#08H ;
- MOV 27H,#08H ;
- MOV 26H,#00H ;
- LCALL DISPUPDAT
- RET ;子程序返回
- ;
- ;主程序
- START: LCALL CLEARMEN ;上电初始化
- MAIN: LCALL KEYWORK ;调查键子程序
- LCALL DISPLAY ;LED显示一次
- AJMP MAIN ;转MAIN循环
- NOP ;PC出错处理
- NOP ;
- AJMP START ;重新初始化
- ;
- ; 4*4行列扫描查键子程序
- KEYWORK: MOV P1,#0FFH ; 置P1口为输入状态
- CLR P1.0 ;扫描第一行(第一行为0)
- MOV A,P1 ;读入P1口值
- ANL A,#0F0H ;低四位为0
- CJNE A,#0F0H,KEYCON ;高四位不为全1(有键按下)转KEYCOON
- SETB P1.0 ; 扫描第二行(第二行为0)
- CLR P1.1 ;
- MOV A,P1 ; 读入P1口值
- ANL A,#0F0H ; 低四位为0
- CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
- SETB P1.1 ; 扫描第三行(第三行为0)
- CLR P1.2 ;
- MOV A,P1 ; 读入P1口值
- ANL A,#0F0H ; 低四位为0
- CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
- SETB P1.2 ; 扫描第四行(第四行为0)
- CLR P1.3 ;
- MOV A,P1 ; 读入P1口值
- ANL A,#0F0H ; 低四位为0
- CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
- SETB P1.3 ;结束行扫描
- RET ;子程序返回
- KEYCON: LCALL DL10MS ;消抖处理
- MOV A,P1 ;再读入P1口值
- ANL A,#0F0H ; 低四位为0
- CJNE A,#0F0H,KEYCHE ; 高四位不为全1,确有键按下,转KEYCHE
- KEYOUT: RET ;干扰,子程序返回
- KEYCHE: MOV A,P1 ;读P1口值
- MOV KEYWORD,A ;放入23H暂存
- CJLOOP: LCALL DISPLAY ;调显示子程序
- MOV A,P1 ;读P1口值
- ANL A,#0F0H ;低四位为0
- CJNE A,#0F0H,CJLOOP ;高四位为全1(键还按着),转CJLOOP等待释放
- MOV R7,#00H ;键释放,置R7初值为#00H(查表次数)
- MOV DPTR,#KEYTAB ;取键值表首址
- CHEKEYLOOP: MOV A,R7 ;查表次数入A
- MOVC A,@A+DPTR ;查表
- XRL A,KEYWORD ;查表值与P1口读入值比较
- JZ KEYOK ;为0(相等)转KEYOK
- INC R7 ;不等,查表次数加1
- CJNE R7,#10H,CHEKEYLOOP ;查表次数不超过16次转CHEKEYLOOP再查
- RET ;16次到,退出
- ;
- KEYOK: MOV A,R7 ;查表次数入A(即键号值)
- MOV B,A ;放入B
- RL A ;左移
- ADD A,B ;相加(键号乘3处理JMP 3字节指令)
- MOV DPTR,#KEYFUNTAB ;取键功能散转表首址
- JMP @A+DPTR ;查表
- KEYFUNTAB: LJMP KEYFUN00 ; 键功能散转表。跳至0号键功能程序
- LJMP KEYFUN01 ;
- LJMP KEYFUN02
- LJMP KEYFUN03
- LJMP KEYFUN04
- LJMP KEYFUN05
- LJMP KEYFUN06
- LJMP KEYFUN07
- LJMP KEYFUN08
- LJMP KEYFUN09
- LJMP KEYFUN10
- LJMP KEYFUN11
- LJMP KEYFUN12
- LJMP KEYFUN13
- LJMP KEYFUN14
- LJMP KEYFUN15 ; 跳至15号键功能程序
- RET ;散转出错返回
- ;
- ;键号对应P1口数值表(同时按下两键为无效操作)
- KEYTAB: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH
- DB 0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH
- ;
- ;0号键功能程序
- KEYFUN00: INC 29H
- MOV A,29H
- CLR C
- CJNE A,#02H,FUN00
- FUN00: JC FUN00OUT
- MOV 29H,#00H
- FUN00OUT: MOV A,29H
- XRL A,#01H
- JNZ F00OUT1
- MOV 28H,#00H
- AJMP F00OUT
- F00OUT1: MOV 28H,#08H
- F00OUT: LCALL DISPUPDAT
- RET
- ;
- ;01号键功能程序
- KEYFUN01: INC 28H
- MOV A,28H
- CLR C
- CJNE A,#0AH,FUN01
- FUN01: JC FUN01OUT
- MOV 28H,#00H
- FUN01OUT: MOV A,29H
- XRL A,#01H
- JNZ F01OUT
- MOV 28H,#00H
- AJMP F001OUT
- F01OUT: MOV A,28H
- XRL A,#08H
- JZ F001OUT
- MOV A,28H
- XRL A,#09H
- JZ F001OUT
- MOV 28H,#08H
- F001OUT: LCALL DISPUPDAT
- RET
- ;
- ;02号键功能程序
- KEYFUN02: INC 27H
- MOV A,27H ;
- CLR C ;
- CJNE A,#0AH,FUN02
- FUN02: JC FUN02OUT
- MOV 27H,#00H
- FUN02OUT: LCALL DISPUPDAT
- RET ;
- ;
- ;03号键功能程序
- KEYFUN03: INC 26H ;
- MOV A,26H ;
- CLR C ;
- CJNE A,#0AH,FUN03
- FUN03: JC FUN03OUT
- MOV 26H,#00H
- FUN03OUT: LCALL DISPUPDAT
- RET
- ;
- ;04号键功能程序
- KEYFUN04: MOV 29H,#01H
- MOV 28H,#00H
- MOV 27H,#09H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;05号键功能程序
- KEYFUN05: MOV 29H,#01H ;
- MOV 28H,#00H
- MOV 27H,#08H
- MOV 26H,#00H
- LCALL DISPUPDAT ;
- RET
- ;
- ;06号键功能程序
- KEYFUN06: MOV 29H,#01H
- MOV 28H,#00H
- MOV 27H,#05H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;07号键功能程序
- KEYFUN07: MOV 29H,#01H
- MOV 28H,#00H
- MOV 27H,#00H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;08号键功能程序
- KEYFUN08: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#08H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;09号键功能程序
- KEYFUN09: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#06H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;10号键功能程序
- KEYFUN10: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#04H
- MOV 26H,#00H
- LCALL DISPUPDAT
- ; RET
- ;11号键功能程序
- KEYFUN11: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#02H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;12号键功能程序
- KEYFUN12: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#00H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;13号键功能程序
- KEYFUN13: MOV 29H,#00H
- MOV 28H,#08H
- MOV 27H,#08H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;14号键功能程序
- KEYFUN14: MOV 29H,#00H
- MOV 28H,#08H
- MOV 27H,#07H
- MOV 26H,#08H
- LCALL DISPUPDAT
- RET
- ;
- ;15号键功能程序
- KEYFUN15: CPL 03H
- JNB 03H,MONO
- CLR P3.3
- LCALL PUTBIT
- RET
- MONO: SETB P3.3
- LCALL PUTBIT
- RET
- ;
- ; 将BCD码转为十六进制数,与5位控制码合成操作码,写入控制芯片
- DISPUPDAT: LCALL BCDB
- LCALL CONCOMMAND
- LCALL PUTBIT
- RET ;
- ; 将BCD码转为十六进制数程序
- BCDB: MOV CONBITL,#00H ; 控制字清0
- MOV CONBITH,#00H ; 控制字清0
- MOV CONBITL,26H
- MOV A,27H ;个位数乘10操作
- MOV B,#10 ;
- LCALL MULLOOP ;调乘法子程序
- MOV A,28H ;十位数乘100操作
- MOV B,#100
- LCALL MULLOOP ; 调乘法子程序
- MOV A,29H ;
- JNZ ADD3E8
- RET ; 百位数为0退出
- ADD3E8: CLR C ;清进位档标志
- MOV A,#0E8H ;低8位加法
- ADD A,CONBITL ;累加
- MOV CONBITL,A ;放回CONBITL
- MOV A,#03H ; 高8位加法
- ADDC A,CONBITH ;控制字高8位处理
- MOV CONBITH,A ;放回CONBITH
- RET ;返回
- ;
- ;乘法及累加处理程序(将四位显示的十进制BCD码转为1个二进制数)
- MULLOOP: MUL AB ;乘法
- CLR C ;清进位标志
- ADD A,CONBITL ;积低8位与CONBITL相加
- MOV CONBITL,A ;放回CONBITL
- MOV A,CONBITH ;
- ADDC A,B
- MOV CONBITH,A ;放回CONBITH
- RET ;返回
- ;
- ;频率控制数据与5位控制码合成BH1415控制字
- CONCOMMAND: ANL CONBITH,#07H ;高四位为0
- MOV A,20H ;控制字放入A
- ORL A,CONBITH ;合成控制字
- MOV CONBITH,A ;放回CONBITH
- RET ;返回
- ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; 显示程序 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;共阳LED显示,P0口输出段码,P2口输出扫描字
- DISPLAY: MOV R1,#26H ;显示首址
- MOV R5,#0FEH ;设扫描字
- PLAY: MOV A,R5 ;放入A
- MOV P2,A ;P2口输出
- MOV A,@R1 ;取显示数据
- MOV DPTR,#TAB ;取段码表首址
- MOVC A,@A+DPTR ;查段码
- MOV P0,A ;从P0输出
- MOV A,R5 ;读入扫描字
- JB ACC.1,PLAY1 ; 不是十位(LED),不显示小数点
- CLR P0.7 ;是十位,显示小数点
- PLAY1: LCALL DL1MS ;点亮1毫秒
- INC R1 ;指向下一显示数据
- JNB ACC.3,ENDOUT ;是第四位LED,退出
- RL A ;不是,左移一位
- MOV R5,A ;放回R5
- SETB P0.7 ;关小数点
- AJMP PLAY ;转PLAY循环
- ENDOUT: MOV P2,#0FFH ;显示结束,关显示输出口
- MOV P0,#0FFH ;
- RET ;返回
- ;
- ;0-9共阳段码表
- TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH
- ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; 发送控制字节子程序 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;
- PUTBIT: MOV A,CONBITL ;低8位控制字入A
- SETB P3.2 ;BH1415使能(允许写)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载: