毕业设计(论文)基于DDS函数信号发生器.doc

上传人:仙人指路1688 文档编号:4016288 上传时间:2023-04-01 格式:DOC 页数:63 大小:4.21MB
返回 下载 相关 举报
毕业设计(论文)基于DDS函数信号发生器.doc_第1页
第1页 / 共63页
毕业设计(论文)基于DDS函数信号发生器.doc_第2页
第2页 / 共63页
毕业设计(论文)基于DDS函数信号发生器.doc_第3页
第3页 / 共63页
毕业设计(论文)基于DDS函数信号发生器.doc_第4页
第4页 / 共63页
毕业设计(论文)基于DDS函数信号发生器.doc_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《毕业设计(论文)基于DDS函数信号发生器.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于DDS函数信号发生器.doc(63页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)题目:基于DDS函数信号发生器 届 别: 系 别: 电 子 信 息 系 专 业: 应 用电 子 技 术 班 级: 学生姓名: 学 号: 指导教师: 目录一、绪论- 4 -二、系统硬件设计- 6 -2.1、引言- 6 -2.2、AD9851为核心的DDS模块- 6 -2.2.1、基本原理及性能特点- 6 -2.2.2、采用 DDS 的 AD9851- 8 -2.2.3、AD9851 的原理- 9 -2.2.4、AD9851在本系统中的应用- 10 -2.3、单片机为核心的按键LCD显示控制模块- 12 -2.3.1、STC89C52为核心的控制器- 12 -2.3.2、LCD12

2、864显示部分- 12 -2.4、滤波模块- 18 -2.5、供电模块- 19 -2.6、通信模块- 19 -2.7、本章小结- 20 -三、软件部分设计- 21 -3.1、程序设计流程及描述- 21 -3.2、AD9851程序模块设计- 22 -3.3、LCD12864程序模块设计- 23 -3.4、主程序设计- 27 -3.5、中断函数部分- 28 -3.6、本章小结- 29 -四、实物的使用说明- 30 -4.1、使用说明- 30 -4.2、实物图片- 31 -五、设计调试与验证- 33 -5.1、调试报告- 33 -5.2、本章小结- 34 -六、本人设计心得- 36 -七、致谢- 3

3、7 -八、参考文献- 38 -九、附录- 39 -8.1、附录一:原理图及PCB图- 39 -8.2、附录二:程序- 40 -一、 绪论频率合成器是电子系统的心脏,是决定电子系统性能的关键设备,随着现代无线电通信事业的发展,移动通信、雷达、制导武器和电子对抗等系统对频率合成器提出越来越高的要求,低相噪、高纯频谱和高速捷变的频率合成器一直是频率合成技术发展的主要目标,DDS 技术的发展将有力地推动这一目标的实现。频率合成技术从30 年代发展到现在,已经进入成熟阶段。目前最常用的频率合成方案有两种,直接混频级联法和数字锁相环法。由于数字集成电路的迅猛发展,集成合成器和数字计算技术频率合成方案大量涌

4、现。大规模集成电路的应用又为数字技术的方案提供了广阔的前景。在现代电子学的各个领域,常常需要高精度且频率可方便调节的信号发生器。各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。本设计的核心问题是信号的控制问题,其中包括信号频率、信号种类以及信号强度的控制。在设计的过程中,我们综合考虑了以下四种实现方案:方案一:采用555集成芯片函数发生器,555可以产生可变的正弦波、方波、三角波及实现频率控制,但由于产生的频率较低,本方案将不采用。方案二:采用低温漂、低失真

5、、高线性单片压控函数发生器ICL8038,产生频率(0.001300KHZ)可变的正弦波、三角波、方波及数控频率调整。但是,由于ICL8038自身的限制,输出频率稳定度只有10-3(RC振荡器)。而且,由于压控的非线性,频率步进的步长控制比较困难。方案三:采用MAX038函数发生器,MAX038是一个精密高频波形产生器。能精密地产生三角波、锯齿波、矩形波(含方波)、正弦波信号。频率范围从0.1Hz20MHz,最高可达40MHz,各种波形的输出幅度均为2V(PP)。但由于此芯片目前已经停产,销售的价格比较昂贵。方案四:采用DDS波形发生技术,采用AD9851和单片机相结合的方式实现对频率的控制。

6、 AD9851内部的控制字寄存器首先寄存来自外部的频率、相位控制字,相位累加器接收来自控制字寄存器的数据后,决定最终输出信号频率和相位的范围及精度然后再经过内部D/A转换器,得到最终的数字合成信号。这个高速DDS芯片时钟频率可达180MHz, 输出频率可达70 MHz,分辨率为0.04Hz。 综合考虑其性价比,选择方案四。本设计采用DDS技术作为本设计的核心,不仅基于其低成本,而且在输出频率控制方面也显得很方便。其输出的频率、幅度均可调,精度高,分辨率低等一系列优点将是本设计方案的不二之选。二、 系统硬件设计2.1、引言本函数信号发生器主要由AD9851芯片产生我们希望的正弦波,然后通过芯片内

7、部自带的高速比较器得到方波,再将方波通过外围的积分电路得到最后的三角波。综合分析以上四种实现方法的性价比,采用DDS芯片AD9851来设计函数信号发生器。以51单片机为控制核心,一方面,对AD9851的频率相位控制字进行控制,产生所需要的正弦波形。另一方面,对液晶LCD12864进行控制,通过菜单的模式,选择所需要的频率输出方式。采用独立式键盘输入相应的操作命令,使得整个设计显得更加直观明了。硬件电路主要由AD9851为核心的DDS模块、单片机为核心的按键LCD显示控制模块、滤波模块、供电模块、通信模块等构成。首先,通过供电模块给系统上电,然后,把编写好的程序通过通信模块下载到单片机中,最后,

8、通过液晶和独立式键盘进行菜单式的操作,单片机对AD9851进行控制,进而输出所需要的频率。2.2、AD9851为核心的DDS模块2.2.1、基本原理及性能特点 的基本原理是利用采样定理,通过查表法产生波形。的结构有很多种,其基本的电路原理可用图 3 来表示。 相位累加器由位加法器与位累加寄存器级联构成。 每来一个时钟脉冲,加法器将频率控制字与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据回馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制

9、字进行线性相位累加。 由此可以看出, 相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是输出的信号频率。 用相位累加器输出的数据作为波形内存()的相位取样地址,这样就可把存储在波形内存内的波形抽样值 (二进制编码) 经查找表查出,完成相位到幅值转换。波形内存的输出送到转换器,转换器将数字量形式的波形幅值转换成所要求合成频率的模拟量形式信号。低通滤波器用于滤除不需要的取样分量,以便输出频谱纯净的正弦波信号。 在相对带宽、频率转换时间、高分辨力、相位连续性、 正交输出以及集成化等一系列性能指标方面远远超过了传统频率合成技术所能达

10、到的水平,为系统提供了优于模拟信号源的性能。 ()输出频率相对带宽较宽 输出频率带宽为s(理论值)。但考虑到低通滤波器的特性和设计难度以及对输出信号杂散的抑制, 实际的输出频率带宽仍能达到s。()频率转换时间短 是一个开环系统,无任何反馈环节,这种结构使得的频率转换时间极短。事实上,在的频率控制字改变之后,需经过一个时钟周期之后按照新的相位增量累加,才能实现频率的转换。因此,频率转换的时间等于频率控制字的传输时间,也就是一个时钟周期的时间。时钟频率越高,转换时间越短。的频率转换时间可达纳秒数量级,比使用其它的频率合成方法都要短数个数量级。 ()频率分辨率极高 若时钟s 的频率不变,的频率分辨率

11、就由相位累加器的位数决定。 只要增加相位累加器的位数即可获得更小的频率分辨率。目前,大多数的分辨率在数量级,许多小于甚至更小。 ()相位变化连续 改变输出频率,实际上改变的每一个时钟周期的相位增量,相位函数的曲线是连续的,只是在改变频率的瞬间其频率发生了突变,因而保持了信号相位的连续性。()输出波形的灵活性 只要在内部加上相应控制如调频控制、 调相控制和调幅控制,即可以方便灵活地实现调频、调相和调幅功能,产生、和等信号。另外,只要在的波形内存存放不同波形数据, 就可以实现各种波形输出, 如三角波、锯齿波和矩形波甚至是任意的波形。当的波形内存分别存放正弦和余弦函数表时,既可得到正交的两路输出。(

12、)其它优点 由于中几乎所有部件都属于数字电路, 易于集成, 功耗低、体积小、重量轻、可靠性高,且易于程控,使用相当灵活,因此性价比极高。2.2.2、采用 DDS 的 AD9851本系统采用了美国仿真器件公司采用先进 DDS 直接数字频率合成技术生产的高集成度产品 AD9851 芯片。AD9851 是在 AD9850 的基础上,做了一些改进以后生成的具有新功能的 DDS 芯片。AD9851 相对于 AD9850 的内部结构,只是多了一个 6 倍参考时钟倍乘器,当系统时钟为 180MHz 时,在参考时钟输入端,只需输入 30MHz 的参考时钟即可。如图 4(AD9851 内部结构)所示,AD985

13、1 是由数据输入寄存器、频率/相位寄存器、具有 6 倍参考时钟倍乘器的 DDS 芯片、10位的模/数转换器、内部高速比较器这几个部分组成。其中具有 6 倍参考时钟倍乘器的 DDS 芯片是由 32 位相位累加器、正弦函数功能查找表、D/A 变换器以及低通滤波器集成到一起。这个高速 DDS 芯片时钟频率可达 180MHz, 输出频率可达 70 MHz,分辨率为 0.04Hz。2.2.3、AD9851 的原理 AD9851 可以产生一个频谱纯净、频率和相位都可编程控制且稳定性很好的模拟正弦波,这个正弦波能够直接作为基准信号源,或通过其内部高速比较器转换成标准方波输出,作为灵敏时钟发生器来使用。AD9

14、851 的各引脚功能如下,引脚排列,如图 5 :D0D7:8 位数据输入口,可给内部寄存器装入 40 位控制数据。PGND:6 倍参考时钟倍乘器地。PVCC:6 倍参考时钟倍乘器电源。W-CLK:字装入信号,上升沿有效。FQ-UD:频率更新控制信号,时钟上升沿确认输入数据有效。FREFCLOCK:外部参考时钟输入。CMOS/TTL 脉冲序列可直接或间接地加到 6 倍参考时钟倍乘器上。在直接方式中,输入频率即是系统时钟;在 6 倍参考时钟倍乘器方式,系统时钟为倍乘器输出。AGND:模拟地。AVDD:模拟电源(+5)。DGND:数字地。DVDD:数字电源(+5)。RSET、DAC:外部复位连接端。

15、 VOUTN:内部比较器负向输出端。VOUTP:内部比较器正向输出端。VINN:内部比较器的负向输入端。VINP:内部比较器的正向输入端。DACBP:DAC 旁路连接端。IOUTB: “互补”DAC 输出。IOUT:内部 DAC 输出端。 图 5RESET:复位端。低电平清除 DDS 累加器和相位延迟器为 0Hz 和 0 相位,同时置数据输入为串行模式以及禁止 6 倍参考时钟倍乘器工作。2.2.4、AD9851在本系统中的应用由于 AD9851 是贴片式的体积非常小,引脚排列比较密,焊接时必须小心,还要防静电,焊接不好就很容易把芯片给烧坏。还有在使用中数据线、电源等接反或接错都很容易损坏芯片。

16、此外,为了不受外界干扰,添加了不少的滤波电路,显得整个电路完美。AD9851有并行和串行两种控制方式,本设计中采用并行控制方式,在并行输入方式下,通过8位总线D0D7将外部控制字输入到寄存器,在WCLK(字输入时钟)的上升沿装入第一个字节,并把指针指向下一个输入寄存器,连续5个WCLK的上升沿读入5个字节数据到输入寄存器后,WCLK的边沿就不再起作用。然后在FQUD(频率更新时钟)上升沿到来时将这40位数据从输入寄存器装入到频率相位寄存器,这时DDS输出频率和相位更新一次,同时把地址指针复位到第一个输入寄存器以等待下一次的频率相位控制字输入。图6即为AD9851控制字并行输入时序。并行方式由5

17、组8位控制字反复送入,前8位控制输出相位、6倍参考时钟倍频器、 电源休眠和输入方式,其余各位构成32位频率控制字。图6AD9851在本设计中的应用电路图,如图7所示:图72.3、单片机为核心的按键LCD显示控制模块2.3.1、STC89C52为核心的控制器为了节约成本,本电路中采用LQFP封装44脚的单片机,该系列单片机是51单片机中增强型单片机,它体积小,工作稳定可靠,功耗低,抗干扰能力强等优点,使得本设计能顺利地完成。本电路中主要使用了该单片机的P0、P1、P2以及部分P3口,P0口主要是和液晶的8位数据口相连接,以便对液晶进行读写操作;P1口是与AD9851的8位数据口相连,对频率、相位

18、控制字进行控制;P2口中的P2.0、P2.1、P2.2分别与液晶的控制引脚RS、R/W、E相连,其余5位是和独立式键盘S1、S2、S3、S4、S5相连接;P3口中P3.0、P3.1分别是与MAX232的9、10引脚相连,从而进行串口通信,P3.2是和AD9851中的复位引脚(22)相连,P3.6、P3.7分别与AD9851的W_CLK、FQ_UD两个控制引脚相连,另外,还有单片机的第4引脚与一些阻容组件构成系统的复位电路,以及14、15引脚与外部的无源晶振构成系统振荡电路,还有16、38引脚是与电源相连接。以上即为STC89C52的引脚在本电路中的使用分配情况。2.3.2、LCD12864显示

19、部分由于本设计采用带中文字库的液晶,使得整个系统运行显得更加直观明了,它具有串行、并行两种控制方式,本设计采用8位并行接口方式。1、引脚说明及在电路中的连接方式管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态

20、数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式(见注释1)16NC-空脚17/RESETH/L复位端,低电平有效(见注释2)18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)(见注释3)20KVSS背光源负端(见注释3)1、2引脚分别与电源相连接;3号引脚接电位器的中间部分;4、5、6引脚是与单片机的P2.0、P2.1、P2.2相连;由于采用该液晶的8位并行接口方式,所以714引脚与单片机的P0口相连,进行数据传输;16脚悬空;15、17

21、、19接+5V电源;18引脚接电位器的一端;20脚接地。2.模块主要硬件构成说明控制器接口信号说明:1、RS,R/W的配合选择决定控制接口的4种模式:RSR/W功能说明LLMPU写指令到指令缓存器(IR)LH读出忙标志(BF)及地址记数器(AC)的状态HLMPU写入数据到数据缓存器(DR)HHMPU从数据缓存器(DR)中读出数据2、E信号:E状态执行动作结果高低I/O缓冲DR配合/W进行写数据或指令高DRI/O缓冲配合R进行读数据或指令低/低高无动作 忙标志:BF BF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0时,模块为准备状态,随时可接受外部

22、指令和数据.利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块之工作状态. 字型产生ROM(CGROM) 字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DFF 的状态是指令DISPLAY ON/OFF和RST信号控制的。 显示数据RAM(DDRAM)模块内部显示数据RAM提供642个字节的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三

23、种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个字节,组成两个字节的编码形成中文字型的编码BIG5(A140D75F),GB(A1A0-F7FFH)。 字型产生RAM(CGRAM)字型产生RAM提供图像定义(造字)功能, 可以提供四组1616点的自定义图像空间,使用者可以将内部字型没有提供的图像字型自行定义到CGRAM中

24、,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。 地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令缓存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6DB0中。光标/闪烁控制电路此模块提供硬件光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。3、指令说明 模块控制芯片提供两套控制命令,基本指令和扩充指令如下:指令表1:(RE=0:基本指令)指 指 令 码功 能令RSR/WD7D6D5D4D3D2D1D0清除显示000000

25、0001将DDRAM填满20H,并且设定DDRAM的地址计数器(AC)到00H地址归位000000001X设定DDRAM的地址计数器(AC)到00H,并且将光标移到开头原点位置;这个指令不改变DDRAM 的内容显示状态开/关0000001DCBD=1: 整体显示 ONC=1: 游标ON B=1:光标位置反白允许进入点设定00000001I/DS指定在数据的读取与写入时,设定光标的移动方向及指定显示的移位元光标或显示移位元控制000001S/CR/LXX设定光标的移动与显示的移位元控制位;这个指令不改变DDRAM 的内容 功能 设定00001DLXREXXDL=0/1:4/8位数据RE=1: 扩

26、充指令操作RE=0: 基本指令操作 设定CGRAM 地址0001AC5AC4AC3AC2AC1AC0设定CGRAM 地址 设定DDRAM 地址0010AC5AC4AC3AC2AC1AC0设定DDRAM 地址(显示位址)第一行:80H87H第二行:90H97H读取忙标志和地址01BFAC6AC5AC4AC3AC2AC1AC0读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值写数据到RAM10数据将数据D7D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM)读出RAM的值11数据从内部RAM读取数据D7D0(DDRAM/CGRAM/IRAM/GRAM)

27、指令表2:(RE=1:扩充指令)指 指 令 码功 能令RSR/WD7D6D5D4D3D2D1D0 待命模式0000000001进入待命模式,执行其它指令都棵终止待命模式卷动地址开关开启000000001SRSR=1:允许输入垂直卷动地址SR=0:允许输入IRAM和CGRAM地址 反白 选择00000001R1R0选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R000,第一次设定为反白显示,再次设定变回正常 睡眠 模式0000001SLXXSL=0:进入睡眠模式SL=1:脱离睡眠模式 扩充 功能 设定00001CLXREG0CL=0/1:4/8位数据RE=1: 扩充指令操作RE=0:

28、 基本指令操作G=1/0:绘图开关 设定绘图RAM 地址0010AC60AC50AC4AC3AC3AC2AC2AC1AC1AC0AC0设定绘图RAM先设定垂直(列)地址AC6AC5AC0再设定水平(行)地址AC3AC2AC1AC0将以上16位地址连续写入即可备注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。3、读写时序图3.1 数据传输过程8位和4位数据线的传输过程3.2 时序图 单片机向液晶写命令的时序(

29、8位数据线模式) 单片机从液晶中读数据的时序(8位数据线模式)2.4、滤波模块由于直接从AD9851输出端输出的波形为阶梯波,波形不够平滑,因此,本设计中需要在输出端设置一个截止频率为25MHz的低通滤波器。在AD公司AD9851的数据手册上提供了一个截止频率为70MHz的椭圆低通滤波器,其电路图如图2-4所示。图2-4在该电路图上运用反归一化的方法进行更改就可以得到所需的电路,可以省却进行查表计算的麻烦。该滤波器的3dB截止频率为f1=70MHz,与要求的3dB截止频率f0 =25MHz相比,频率标定系数FSF为FSF=f0/f1=25/70=0.36将70MHz截止频率的滤波器的电感、电容

30、值同时除以FSF,即可得到25MHz截止频率的椭圆低通滤波器,如图2-4所示。25MHz椭圆低通滤波器的组件值为 L1=470nH/FSF=470nHx2.8=1.32uH L2=390nH/FSF=390nHX2.8=1.09uHL3=390nH/FSF=390nH*2.8=1.09uH C1=22pF/FSF=22pFX2.8=61.6pF C2=1pF/FSF=1pFPFX2.8=2.8PF C3=33PF/FSF=33PFX2.8=92.4PF C4=5.6PF/FSF=5.6PFX2.8=15.68PF C5=22PF/FSF=22PFX2.8=13.16PFC6=4.7PF/FSF

31、=4.7PFX2.8=13.94PF C7=22PF/FSF=22PFX2.8=61.6PF该滤波器对组件值要求不高,可使用10%误差的电感和5%电容即可。将上述元器件取为标称值,则Ll=1.5uH;L2=1.2uH;L3=1.2uH;Cl=56pF;C2=2.7pF;C3=100PF;C4=16PF;C5=13PF;C6=14PF;C7=56PF。2.5、供电模块在电路中并没有自带+5V稳压电源模块,为了减小线路板的面积,节约制作成本,因此,用USB代替系统供电,这样不仅可以减少线路板的使用面积,而且USB供电也比较稳定,所受干扰也比较小。另外,电路中还留出了+5V电源的接口,这样可以方便其

32、它+5V电源的接入。电路如下图所示:2.6、通信模块由于所用的单片机为LQFP封装,所以在下载程序的时候,本电路中使用了串口下载,因为计算机上的电平为232电平,而本电路中所用的是TTL电平,所以在进行通信时需要一电平转换电路,电路中使用MAX232芯片及其电容构成一个转换电路,如下图所示:2.7、本章小结本章主要针对于硬件电路的设计,通过各个子模块来阐述硬件电路的原理。采用DDS技术的AD9851芯片是本电路的核心,通过与单片机的数据传输进行频率的合成,产生正弦波形。经测定该电路整体性能良好,工作稳定且操作方便,电路中使用了液晶显示模块,操作界面非常友好,例如从液晶上面可以很清晰地看到输出频

33、率的三种模式(定频模式、扫频模式、调频模式),通过独立式键盘选择一种模式便可输出相应的频率。整个硬件电路结构简单,焊接美观,能够实现基本的功能。该信号发生器主要有三点不足,一、所有的输入、输出接口都是采用的排针,使得连接不方便;二、AD9851输出端采用的椭圆低通滤波器,滤波的效果不明显;三、输出波形的幅度随着频率的变化而变化,输出幅度不稳定。针对于以上的不足日后还要加以改善,例如把波形输出端的排针换成圆形插孔形式的,便于与示波器连接,外接5V电源端也可以换成圆形插孔,使得与电源的连接更加稳固;此外,还可以在输出端加上由AD603构成的自动幅度控制,再加上检波电路,使得输出波形的幅度更加趋于稳

34、定。三、 软件部分设计3.1、程序设计流程及描述关于程序的设计,采用模块化的思想,例如程序中的定频模块、扫频模块、跳频模块等这几个都是单独写在一个函数中,然后依次在另一个函数中调用,模块化的设计思想主要有可移植性强,易于整个程序修改等特点。本程序设计步骤主要分为四大块,一是,对液晶的初始化;二是,键盘扫描,如有效按键按下时程序便调用相应的子程序;三是,主程序调用各个函数,实现一个整体;四是定时器T0、T1中断函数;整个系统的程序流程图,如图3-1所示:YN系统上电液晶初始化有效按键跳频模式扫频模式定频模式有效按键有效按键有效按键N N N Y Y Y执行相应程序执行相应程序执行相应程序图3-1

35、3.2、AD9851程序模块设计关于AD9851程序的编写,主要从它的初始复位函数以及发送频率控制字函数去写,编写的时候要严格对照它的时序,否则就会出现错误。以下即为AD9851的实用程序:AD9851初始复位子函数,如下所示:void DDS_Rest() DDS_WK=0; DDS_FD=0; DDS_RT=1; _nop_(); _nop_(); DDS_RT=0; 这个函数被下面发送控制字函数调用;void Parallel_AD9851() DDS_Data=Control_AD9851;_nop_();_nop_();_nop_();_nop_();/延时很重要,对时序 DDS_W

36、K=1;/字装入信号,上升沿有效 DDS_WK=0; DDS_Data=W1;_nop_();_nop_();_nop_();_nop_();_nop_(); DDS_WK=1;/字装入信号,上升沿有效 DDS_WK=0; DDS_Data=W2;_nop_();_nop_();_nop_();_nop_();_nop_(); DDS_WK=1;/字装入信号,上升沿有效 DDS_WK=0; DDS_Data=W3;_nop_();_nop_();_nop_();_nop_();_nop_(); DDS_WK=1;/字装入信号,上升沿有效 DDS_WK=0; DDS_Data=W4;_nop_(

37、);_nop_();_nop_();_nop_();_nop_(); DDS_WK=1;/字装入信号,上升沿有效 DDS_WK=0; DDS_FD=1; DDS_FD=0;单片机向AD9851发送控制字程序:void Set_Freq(float Freqency) DDS_Freq= (ulong)(23.86115*Freqency); / SYSCLK = 180 MHz / DDS_Freq = (unsigned long)(23.86092942*Freqency);由于float数据类型的有效位为7位 W4=(uchar)DDS_Freq&0xff; DDS_Freq=DDS_F

38、req8; W3=(uchar)DDS_Freq&0xff; DDS_Freq=DDS_Freq8; W2=(uchar)DDS_Freq&0xff; DDS_Freq=DDS_Freq8; W1=(uchar)DDS_Freq&0xff; Parallel_AD9851();3.3、LCD12864程序模块设计关于液晶的操作,在编写程序时也要严格按照数据手册上给出的时序,写它的每一个子模块,下面即为液晶在整个系统中用到的所有子程序:#define LCD_Data P0 /液晶数据端口#define Busy 0x80sbit LCD_E=P22; /液晶12864的位定义sbit LCD_

39、RW=P21;sbit LCD_RS=P20;void Delay1ms(int t) /1毫秒延时子函数int i,j;for(i=0;it;i+) for(j=0;j120;j+);/读状态uchar ReadStatusLCD(void) LCD_Data = 0xFF; LCD_RS = 0; LCD_RW = 1; LCD_E = 1; while (LCD_Data & Busy); /检测忙信号 LCD_E = 0; return(LCD_Data);/写数据 void WriteDataLCD(uchar WDLCD) ReadStatusLCD(); /检测忙 LCD_RS

40、= 1; LCD_RW = 0; LCD_Data = WDLCD; LCD_E = 1; _nop_(); _nop_(); LCD_E = 0;/写指令void WriteCommandLCD(uchar WCLCD,BuysC) /BuysC为0时忽略忙检测 if (BuysC) ReadStatusLCD(); /根据需要检测忙 LCD_RS = 0; LCD_RW = 0; LCD_Data = WCLCD; LCD_E = 1; _nop_(); _nop_(); LCD_E = 0; /读数据uchar ReadDataLCD(void) LCD_RS = 1; LCD_RW =

41、 1; LCD_E = 0; _nop_(); _nop_(); LCD_E = 1; return(LCD_Data);void LCDInit(void) /LCM初始化 WriteCommandLCD(0x30,1); /显示模式(基本指令)设置,开始要求每次检测忙信号 WriteCommandLCD(0x01,1); /显示清屏 WriteCommandLCD(0x06,1); / 显示光标移动设置,游标右移 WriteCommandLCD(0x0C,1); / 显示开及光标设置,游标关,反白关void LCDClear(void) /清屏 WriteCommandLCD(0x01,1

42、); /显示清屏 WriteCommandLCD(0x34,1); / 显示光标移动设置 WriteCommandLCD(0x30,1); / 显示开及光标设置/按指定位置显示一串字符void DisplayListChar(uchar X, uchar Y, uchar code *DData) uchar ListLength,X2; ListLength = 0; X2=X; if(Y4) Y=4; X &= 0x0F; /限制X不能大于16,Y在1-4之内 switch(Y) case 1:X2|=0X80;break;/根据行数来选择相应地址case 2:X2|=0X90;break;case 3:X2|=0X88;break;case 4:X2|=0X98;break; WriteCommandLCD(X2, 1)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号