基于虚拟终端显示的函数信号发生器
- 格式:doc
- 大小:1.18 MB
- 文档页数:15
基于NI PXI-6251的LabVIEW虚拟信号发生器的设计徐淑英(湖南现代物流职业技术学院,湖南长沙410131)摘要:本文介绍了以Labview为软件开发平台,配合NI PXI-6251多功能数据采集卡的虚拟信号发生器的设计。
与传统的信号发生器相比, 该信号发生器不仅可输出各种标准信号、谐波噪声信号、可用公式描述的任意信号且具有参数调节方便、易实现、可靠度高等优点。
关键词:虚拟仪器LabVIEW VI PXI-62510引言传统仪器是由仪器生产厂家设计并定义好结构功能的,具有固定的输入/输出接口和仪器操作面板的的一种封闭式结构的仪器设备。
虚拟仪器(Virtual Instrument,简称VI)就是在通用计算机硬件平台上,利用数据采集卡,以虚拟仪器软件为核心,在计算机的屏幕上虚拟出仪器的面板以及各种功能,用户在计算机上使用鼠标和键盘操作虚拟仪器,就象操作一台自己设计的实际仪器一样直观、方便、灵活。
虚拟仪器具有良好的集成性、开放性、灵活性和可扩展性。
它广泛的应用于工业测量、测试、分析、计量、设备监控、过程自动化等领域。
1 图形化编程语言——LabVIEW简介LabVIEW(Laboratory Virtual Instrumwent Engineering Workbench)是由NI公司在1986年推出的主要面向计算机测控领域的虚拟仪器软件开发平台。
它是一种面向仪器的图形化的编程语言,具有十分强大的功能,包括数值函数运算、数据采集、信号处理、输入输出控制、信号生成、图像的获取、处理和传输等等。
用户可以通过LabVIEW中的人机交互界面——前面板(Front Pannel)中的控制量和显示量如:旋钮、开关、模拟表头、数字显示器、波形图显示屏等任意构造用户自己的仪器面板;通过背面板(也称代码窗口和流程图)中的功能图标或子VI进行编程,象搭积木一样,轻松组建一个虚拟仪器和测试系统。
2 基于LabVIEW的虚拟仪器的设计思路虚拟仪器的组成结构主要包括硬件和软件两个方面。
基于labview的虚拟信号发生器的设计第1章虚拟信号发生器的结构与组成1.1虚拟函数信号发生器的前面板本虚拟信号发生器主要由一块PCI总线的多功能数据采集卡和相应的软件组成。
将它们安装在一台运行Windowsxp的PC机上。
即构成一台功能强大的函数信号发生器。
本虚拟信号发生器的设计参考了SG 1645功率函数信号发生器。
本函数信号发生器的前面板主要由以下几个部分构成:仪器控制按钮,输出频率控制窗口(包括频率显示单位),频率倍成控制,波形选择,频率微调按钮,直流偏置,方波占空比节,输出波形幅度控制按钮。
频率微调范围:O.1—1 Hz;直流偏置:一10—10V;方波占空比:0—100%;输出波形幅度:0—10V。
此外还增加了许多修饰性的元件如面板上的压控输入、记数输入、同步输出、电压输出等。
使用这些修饰性的元件的目的是为了增加仪器的美观性,并尽量与真实仪器的使用界面相一致。
图1-1 函数信号发生器的前面板1.2虚拟函数信号发生器的硬件构成本虚拟信号发生器的输入输出的硬件部分为一数据采集卡和具有一定配置要求的PC机,数据的输入输出靠对数据采集卡输出输入口的定义来实现。
本设计采用的PCI一1200数据采集卡是一块性价比较好的产品,具备数/模转换的功能。
能将产生的数字信号转换成模拟信号且数模转换精度高,而且还具备滤波功能,从而使输出波形光滑。
它支持单极和双极性模拟信号输入,信号输入范围分别为一5一+5V和0—10V。
提供l6路单端,8路差动模拟输入通道、2路独立的DA输出通道、24线的TTL型数字Ⅳ0、3个l6位的定时计数器等多种功能。
硬件接口部分用于数据输入或输出时的通道设置。
硬件接口部分程序框图如图1-2所示:图1-2硬件接口程序图Device用于指定所用的设备号.该设备号通过Measurment and Automation Exptorer 工具配置。
Waveform Length用于设定数据采集卡的缓冲区的大小。
函数信号发生器操作规程
一、注意事项
1、本仪器采用大规模集成电路,修理时禁用二芯烙铁,校准测试时,测量仪器
或其它设备的外壳应接地良好,以免意外损坏。
2、在更换保险丝时应切断电源,严禁带电操作。
3、简单故障可自己处理,重大故障及严重损坏与厂家联系维修。
4、使用前确认仪器的供电电源为AC220V。
二、使用方法
1、打开电源开关,调节旋纽,“关”为TTL电平,打开则为CMOS电平,输出幅
度可从5V到15V。
2、按函数输出波形选择按钮可选择正弦波、三角波、脉冲波输出。
3、按“扫描/计数“按钮可选择扫描方式和外测频方式。
4、仪器上的函数信号输出幅度衰减开关,“20dB”、“40dB”键均不按下,输出
信号不经衰减,直接输出到插座口。
“20dB”、“40dB”分别按下,则可选择20dB或40dB衰减。
同时按下时为60dB衰减。
5、由信号电平设定器选定输出信号所携带的直流电平。
6、由信号幅度选择器选定和调节输出信号的幅度。
7、由频率选择按钮选定输出函数信号的频段,由频率微调旋钮调整输出信号频
率,直到所需的工作频率值。
8、点频正弦信号输出端输出标准的正弦信号,频率为100Hz,幅度为2Vp-p
中心电平为0)
连云港远洋实业公司
2008.5.01。
函数信号发生器工作原理
函数信号发生器是一种电子设备,能够产生不同形式的电信号,用于测试、实验和调试电子设备。
其工作原理是通过将一个基准信号经过一系列的处理和调整,生成所需的输出信号。
基准信号通常是一个稳定的振荡信号,通过一个精密的振荡器产生。
这个振荡器可以是一个晶振或者多级放大器,其频率和幅度都是可调的。
振荡器输出的信号经过放大器进行放大,以增加信号的幅度。
放大器通常是一个可控增益放大器,通过调节控制电压来改变输出信号的幅度。
放大后的信号通过一个波形调节电路,来生成不同形式的输出信号。
这个波形调节电路可以是一个函数发生器芯片,它可以根据输入的控制电压来产生不同的波形,比如正弦波、方波、矩形波、三角波等。
经过波形调节后的信号,再经过一个滤波器进行滤波,以去除掉不需要的高频杂散分量。
滤波器通常采用电容、电感等元件组成的RC电路或者LC电路。
最后,滤波后的信号再经过一个输出放大器,以增加信号的输出功率。
输出放大器通常是一个功率放大器,可以将信号的功率增大到合适的水平,以满足各种测试、实验和调试的需求。
通过以上的处理和调整,函数信号发生器可以产生不同形式、
不同频率、不同幅度的电信号,用于各种电子设备的测试、实验和调试。
基于ARM的函数信号发生器的设计的开题报告一、选题背景信号发生器是电子仪器中最基本的仪器之一,用于产生各种信号,供其他电子仪器使用。
一般的信号发生器的输出频率范围较窄,同时价格较高,不适合一些需要频繁更换工作频率的场合。
因此,本课题旨在设计一种基于ARM的函数信号发生器,能够通过编程产生各种不同的函数信号,并且输出频率范围更加灵活、价格更加实惠。
二、项目目标1. 设计一个基于ARM的函数信号发生器,能够产生多种不同的函数信号,包括正弦、方波、三角波等;2. 实现信号发生器的输出频率可调,并能够进行频率计数;3. 设计一套完善的控制系统,能够方便地控制信号发生器的操作;4. 开发一款用户界面友好、易于操作的控制软件。
三、项目计划本项目分为以下几个阶段:1. 方案设计:确定输入输出接口、主控芯片、信号类型等设计方案,编写开题报告并提交。
2. 硬件设计:完成硬件部分的设计,包括原理图、PCB设计、部件选型等。
3. 软件设计:设计用户界面友好、易于操作的控制软件,并完成控制系统的设计。
4. 合并测试:进行硬件与软件的整合测试,保证信号发生器的性能。
5. 原型制作:根据测试结果制作功能完善、性能稳定的信号发生器原型,并进行测试和优化。
6. 文档编写:编写完整的用户手册和技术文档。
计划完成时间为三个月,其中方案设计阶段为两周,硬件设计阶段为五周,软件设计阶段为四周,合并测试阶段为一周,原型制作阶段为三周,文档编写阶段为两周。
四、技术路线本项目采用ARM作为主控芯片,基于C语言开发控制程序,使用PWM输出控制信号的频率和幅度。
具体技术路线如下:1. 硬件部分:(1) 主控芯片选用力求性价比高、性能稳定的STM32系列芯片,同时配合一块合适的示波器芯片,来完成信号输出工作。
(2) 信号发生器的各种输出信号,以及控制信号和用户操作指令数据交换通过标准接口进行传输。
(3) 软件部分实现对各种输出信号进行精确设定的相关控制逻辑。
摘要本次设计基于美国国家仪器(NI)的虚拟仪器开发平台Labview,使用图形化语言编程,设计了一款虚拟函数信号发生器。
该虚拟函数信号发生器能够产生正弦波、三角波、方波、锯齿波等波形,其中输出信号的频率、幅值、相位、偏移量以及方波的占空比等都可以在较宽的范围内动态的调节,能够更好的得到满意的波形。
关键词:虚拟仪器;Labview;函数信号发生器;图形化编程目录第1章绪论 (1)第2章虚拟函数信号发生器的设计 (2)2.1 概述 (2)2.2 函数信号发生器程序框图设计 (2)2.2.1 基本函数信号发生器的配置 (2)2.2.2 while循环的设计 (3)2.2.3 程序中的延时机制 (4)2.2.4 波形显示控件的设计 (4)2.3 前面板的界面布局 (7)2.4 帮助信息 (9)第3章程序调试 (10)第4章实验设计总结 (12)参考文献 (13)附录 (14)第1章绪论在有关电参量的测量中,我们需要用到信号源,而信号发生器则为我们提供了在测量中所需的信号源,它可以产生不同频率的正弦信号、方波、三角波、锯齿波、正负脉冲信号、调幅信号、调频信号和随机信号等,其输出信号的幅值也可以按需要进行调节。
传统信号发生器种类繁多,价格昂贵,而且仪器功能固定单一,不具备用户对仪器进行定义及编程的功能,一个传统实验室很难同时拥有多类信号发生器,然而,基于虚拟仪器技术的实验室则能够实现这一要求。
随着计算机技术的迅猛发展,虚拟仪器技术在数据采集、自动测试和仪器控制领域得到了广泛的应用,促进和推动测试系统和仪器控制的设计方法与实现技术发生了深刻的变化。
“软件即是仪器”已成为测试与测量技术发展的重要标志。
虚拟信号发生器就是利用高性能的模块化硬件,结合高效灵活的LabVIEW软件来完成各种测试、测量和自动化应用。
第2章虚拟函数信号发生器的设计2.1概述在传统的测量中,为了得到测量结果我们往往需要一个信号源对测量电路进行激励,这就需要用到函数信号发生器。
目录摘要 (3)Abstract:In order to achieve virtual instrument software development platform and the computer sound card's digital processing between the application of virtual technology to improve the promotion and expansion, this paper presents a virtual sound card based Signal Generator design. The program uses an ordinary PC sound card as a signal of the output channels, with LABVIEW software to complete the design of the virtual signal generator. Experimental results show that the virtual signal generator can achieve the traditional function of the basic functions of the signal generator (3)1 引言 (3)论文研究背景 (4)论文研究意义 (4)研究现状 (4)设计要求 (5)2 声卡与LABVIEW连接 (6)声卡设计的结构 (6)声卡设计参数 (6)声卡与LABVIEW的连接配置 (7)控件的介绍 (7)声卡的连接设计 (7)3 虚拟信号发生器的设计 (10)虚拟信号发生器的程序框图 (10)波形类型切换模块 (10)频率粗调模块 (11)频率细调模块 (11)幅度和矩形占空比可调模块 (12)虚拟信号发生器总图 (13)4 系统的调试 (14)测试设备 (14)4.2使用说明 (14)调试步骤 (15)调试结果 (17)频率调节的测试 (17)幅度调节的测试 (22)数据测试 (25)综合测试效果图 (25)5 结论与展望 (26)结论 (26)5.2展望 (27)参考文献 (27)致谢 (29)附录 (30)基于声卡的虚拟信号发生器的设计职业技术教育学院应用电子技术教育吉卫香(07440108)指导老师:林祝亮摘要:为了实现虚拟仪器软件开发平台与计算机声卡的数字处理技术之间的应用,提高虚拟技术的推广和扩充,本文提出了基于声卡的虚拟信号发生器设计方案。
实验一虚拟信号发生器的的设计学号:044100116 班级:通信041 姓名:马吉炜【实验目的】1.学习和掌握基于LabVIEW开发环境的编程技术2.学习和掌握LabVIEW中信号发生节点的使用3.熟悉虚拟仪器的组成【【实验内容】设计一基于PC机的信号发生器,能够产生方波、正弦波、三角波、锯齿波以及任意函数的波形,并能满足一定的性能指标。
一、信号发生器的用途在研制、生产、使用、测试和维修各种电子元器件、部件以及整机设备时,都需要有信号源,由它产生不同频率、不同波形的电压、电流信号并加到被测器件、设备上,用其他测量仪器观察、测量被测者的输出响应,以分析确定它们的性能参数,如图所示。
这种提供测试用电信号的装置,统称为信号发生器,用在电子测量领域,也称为测试信号发生器。
和示波器、电压表、频率计等仪器一样,信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
二、信号发生器按输出波形分类根据使用要求,信号发生器可以输出不同波形的信号。
按照输出信号的波形特性,信号发生器可分为正弦信号发生器和非正弦信号发生器。
非正弦信号发生器又可包括:脉冲信号发生器、函数信号发生器、扫频信号发生器、数字序列信号发生器、图形信号发生器、噪声信号发生器等。
三、信号发生器的性能指标输出波形----能产生正弦波,余弦波,方波,锯齿波,三角波以及任意函数的波形,可以根据需要改变波形的频率和幅值。
频率范围----理论上全频段,但具体涉及到计算机性能。
输出电压----一般指输出电压的峰—峰值。
波形特性----不同波形有不同的表示法。
一般正弦波和三角波的特性用非线性失真系数表示;而方波的特性参数是上升时间。
如正弦信号发生器的输出在理想情况下应为单一频率的正弦波,但由于信号发生器内部放大器等元、器件的非线性,会使输出信号产生非线性失真,除了所需要的正弦波频率外, 还有其他谐波分量。
人们通常用信号频谱纯度来说明输出信号波形接近正弦波的程度,并用非线性失真系数γ表示:%100122322⨯+++=U U U U nγ1U 是基频分量的振幅,i U 是第i 次谐波分量的振幅。
基于虚拟仪器的信号发生器的设计与实现_翻译设计虚拟仪器是一种将传感器、仪器和设备等硬件部件替换为软件实现的测量仪器。
基于虚拟仪器的信号发生器是利用计算机软件生成各种类型的信号,以模拟实际测量中的信号源。
以下是基于虚拟仪器的信号发生器的设计与实现的一般步骤:1. 软件平台选择:选择适用于信号发生器设计的虚拟仪器软件平台,例如LabVIEW、MATLAB等。
2.界面设计:根据信号发生器的功能需求,设计用户界面。
用户界面应包括信号参数设置、波形展示、开始/停止等控制按钮。
3.信号生成算法实现:根据需要生成的信号类型(如正弦波、方波、三角波等),编写相应的信号生成算法。
算法可以利用基本的数学函数和算法来生成各种类型的信号。
4.参数设置与控制:在用户界面中添加对信号参数的设置和控制。
用户可以通过界面输入信号频率、幅度、相位等参数,并通过控制按钮控制信号的开始和停止。
5.波形展示:在用户界面中显示生成的信号波形。
可以使用波形绘图工具来实时绘制信号波形,或将生成的信号保存为文件进行后续处理和分析。
6.实时更新和响应:信号发生器应能实时更新生成的信号,并对用户输入的参数和控制进行及时响应。
应确保信号发生器的稳定性和准确性。
7.验证与测试:对设计的虚拟仪器信号发生器进行验证和测试。
可以通过与实际信号源进行比较,验证生成的信号是否符合预期。
8. 优化与改进:根据测试结果对虚拟仪器信号发生器进行优化和改进。
可以增加新的功能,修复潜在的bug,并提高信号发生器的性能和稳定性。
总之,基于虚拟仪器的信号发生器的设计与实现主要包括选择软件平台、设计界面、实现信号生成算法、参数设置与控制、波形展示、实时更新和响应、验证与测试以及优化与改进等步骤。
函数信号发生器使用方法
函数信号发生器是一种用于产生各种波形信号的电子设备。
以下是使用函数信号发生器的一般步骤:
1. 首先,确保函数信号发生器与所需设备(如示波器、测试测量仪器等)连接正确。
通常,函数信号发生器具有一个输出端口,您需要使用合适的电缆将其连接到设备上。
2. 打开函数信号发生器的电源,并设置所需的输出波形类型。
函数信号发生器可提供多种波形选择,如正弦波、方波、三角波、锯齿波等。
3. 设置所需的频率或周期。
函数信号发生器可根据需要产生不同频率的信号。
您可以使用仪器的旋钮或按键设置所需的频率或周期。
4. 调整幅度或幅值。
函数信号发生器还可以调整信号的幅度或幅值。
您可以根据需要增加或减少信号的振幅。
5. 可选地,您还可以设置相位或延迟。
某些函数信号发生器还可以调整信号的相位或延迟。
这可以用于对不同信号进行时间校准或调整。
6. 当设置完成后,您可以将函数信号发生器的输出端口连接到所需的设备上,并调整设备上的任何其他参数以适应您的实验需求。
7. 最后,您可以检查连接和调整设备以确保它们按预期工作。
使用示波器或其他测试测量仪器观察产生的信号,并根据需要对设置进行微调。
请注意,具体的函数信号发生器型号和使用方法可能会有所不同,因此最好参考所使用的设备的用户手册以获取详细说明。
通达学院2013 /2014 学年第一学期课程设计实验报告模块名称A VR单片机课程设计(proteus)专业通信工程学生班级学生学号学生姓名指导教师李虹戴海鸿杨洁王明伟AVR单片机软件设计(proteus)报告基本内容包括:1)总体设计原理、思路;根据题目的要求,我们需要事先得到4种波形的信号源,并将其保存在程序存储器中,然后取出程序存储器里的信号源存放在atmega128的外部RAM中,并通过DA1输出到示波器上显示图形。
采用按键外中断INT0~INT4改变输出,加4K7的上拉电阻。
4种波形的切换输出采用INT0中断,调用interrupt [EXT_INT0] void ext_int0_isr(void)函数,发挥部分的输出波形我用的INT1和INT2中断,调用interrupt [EXT_INT1] void ext_int1_isr(void)和interrupt [EXT_INT2] void ext_int2_isr(void)函数,同时DA2接5.16V电压,为DA1的改变提供参考电压值进行加减0.1V的操作,系统的重置采用INT3中断,调用interrupt [EXT_INT3] void ext_int3_isr(void)函数。
参数的输出使用USART0口的虚拟中断显示,8个字节,1个停止位,0奇偶校验位,9600的波特率进行只发不收的显示。
2)硬件方面原理图的设计:包括使用的元器件、典型芯片的介绍;原理图的说明等1.ImageCraft 的ICCAVR 介绍ImageCraft 的ICCAVR 是一种使用符合ANSI 标准的C 语言来开发微控制器MCU程序的一个工具它有以下几个主要特点:ICCAVR 是一个综合了编辑器和工程管理器的集成工作环境IDE,其源文件全部被组织到工程之中。
文件的编辑和工程的构筑也在这个环境中完成。
编译错误显示在状态窗口中并且当你用鼠标单击编译错误时光标会自动跳转到编辑窗口中引起错误的那一行。
这个工程管理器还能直接产生您希望得到的可以直接使用的INTELHEX 格式文件。
INTEL HEX 格式文件可被大多数的编程器所支持用于下载程序到芯片中去。
2、 ICCAVR 中的文件类型及其扩展名文件类型是由它们的扩展名决定的IDE 和编译器可以使用以下几种类型的文件输入文件.c 扩展名----表示是C 语言源文件.s 扩展名----表示是汇编语言源文件.h 扩展名----表示是C 语言的头文件.prj 扩展名----表示是工程文件这个文件保存由IDE 所创建和修改的一个工程的有关信息.a 扩展名----库文件它可以由几个库封装在一起libcavr.a 是一个包含了标准C 的库和AVR 特殊程序调用的基本库如果库被引用链接器会将其链接到您的模块或文件中您也可以创建或修改一个符合你需要的库输出文件.s 对应每个C 语言源文件由编译器在编译时产生的汇编输出文件.o 由汇编文件汇编产生的目标文件多个目标文件可以链接成一个可执行文件.hex INTEL HEX 格式文件其中包含了程序的机器代码.eep INTEL HEX 格式文件包含了EEPROM 的初始化数据.cof COFF 格式输出文件用于在ATMEL 的AvrStudio 环境下进行程序调试.lst 列表文件在这个文件中列举出了目标代码对应的最终地址.mp 内存映象文件它包含了您程序中有关符号及其所占内存大小的信息.cmd NoICE 2.xx 调试命令文件.noi NoICE 3.xx 调试命令文件.dbg ImageCraft 调试命令文件2、Proteus软件Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
Proteus软件具有其它EDA工具软件(例:multisim)的功能。
这些功能是:(1)原理布图(2)PCB自动或人工布线(3)SPICE电路仿真革命性的特点(1)互动的电路仿真用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
(2)仿真处理器及其外围电路可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。
Atmega128ATmega128 是ATMEL公司的 8位系列单片机的最高配置的一款单片机,应用极其广泛。
高性能、低功耗的 AVR 8 位微处理器先进的 RISC 结构– 133 条指令–大多数可以在一个时钟周期内完成– 32 x 8 通用工作寄存器 + 外设控制寄存器–全静态工作–工作于16 MHz 时性能高达16 MIPS –只需两个时钟周期的硬件乘法器·非易失性的程序和数据存储器– 128K 字节的系统内可编程Flash 寿命: 10,000 次写/ 擦除周期–具有独立锁定位、可选择的启动代码区通过片内的启动程序实现系统内编程真正的读- 修改- 写操作– 4K字节的EEPROM 寿命: 100,000 次写/ 擦除周期– 4K 字节的内部SRAM –多达64K 字节的优化的外部存储器空间–可以对锁定位进行编程以实现软件加密–可以通过SPI 实现系统内编程JTAG 接口( 与IEEE 1149.1 标准兼容)–遵循JTAG 标准的边界扫描功能–支持扩展的片内调试–通过JTAG 接口实现对Flash, EEPROM, 熔丝位和锁定位的编程3)软件方面程序流程图的设计、关键代码的说明;#include <iom128v.h>#include <macros.h>#include <math.h>#include<stdio.h>#include<stdlib.h>#define INT8U unsigned char#define INT16U unsigned int//正弦运算缓冲#define pi 3.1415936//接口地址定义#define dac (INT8U *)0xfffe //定义按键1查看编号#define key1() (!(PINC & 0x01)) //定义按键2锯齿波#define key2() (!(PINC & 0x02)) //定义按键3三角波#define key3() (!(PINC & 0x04)) //定义按键4方波#define key4() (!(PINC & 0x08)) //定义按键5正弦波#define key5() (!(PINC & 0x10)) //数码管段码//显示波形编号以及是否产生脉冲标志INT8U bz_boxing;INT8U bz=0;//延时子函数void _delay_us(int x){while(x--);}void _delay_ms(int x){unsigned char i;while(x--){for(i=0;i<120;i++);}}//串口配置9600 晶振为8MHZvoid init_usart(){UBRR0H=0;UBRR0L=51;UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);}//串口发送一个字符void put(unsigned char c){while(!(UCSR0A & (1<<UDRE0)));UDR0=c;_delay_us(50);}//数码管刷新显示波形号void fresh_HZ(){put('1');put('0');put('0');put('0');put('H');put('Z');put('\r');if(bz_boxing==1){put('J');put('U');put('C');put('H');put('I');put('\r ');}if(bz_boxing==2){put('S');put('A');put('N');put('J');put('I');put('A' );put('O');put('\r');}if(bz_boxing==3){put('F');put('A');put('N');put('G');put('B');put('O' );put('\r');}if(bz_boxing==4){put('Z');put('H');put('E');put('N');put('G');put('X' );put('I');put('A');put('N');put('\r');}}//波形发生器软件功能实现方法://电压公式,输出的字节乘以参考电压Vref再除以255;//当输出的字节0--255循环递增时候,输出电压值有5--0v递减;从而出现锯齿波效果,//当输出字节0-255递增然后255--0递减,形成三角波;//当输出字节为200持续输出一段时间后,在持续输出0,形成方波;//当输出字节按照正弦函数值进行就得到正弦波;//----锯齿----------------void boxing_1(){INT8U i; for(i=0;i<255;i++){*dac=i;_delay_ms(3); }} //---三角---------------void boxing_2(){INT8U i;for(i=0;i<255;i++){*dac=i;_delay_ms(3); }for(i=255;i>0;i--){*dac=i;_delay_ms(3); }}//--------方波--------------//持续为5然后在持续为0 形成方波void boxing_3(){INT8U i;for(i=0;i<255;i++){*dac=200;_delay_ms(3); }for(i=255;i>0;i--){*dac=0;_delay_ms(3); }}//-------正弦------------------------//利用sin函数输出正弦值形成正弦void boxing_4(){float i;for(i=0;i<=2*pi;i+=0.02){*dac=128+sin(i)*127;_delay_us(100); }}//主函数void main (){DDRA=0xff;PORTA=0xff;DDRB=0xff;PORTB=0xff;DDRC=0x00;PORTC=0xff;DDRD=0xFF;PORTD=0xff;DDRE=0xff;PORTE=0xff;DDRF=0xff;PORTF=0xff;//允许外部接口MCUCR=0X80;init_usart();SEI();while(1){//bz=1显示波形if(bz==1){if(bz_boxing==1)boxing_1();if(bz_boxing==2)boxing_2();if(bz_boxing==3)boxing_3();if(bz_boxing==4)boxing_4();}//------波形1----if (key1()){ _delay_ms(4);if (key1()){bz=1;bz_boxing=1;_delay_ms(14);} }//-----波形2------if (key2()){ _delay_ms(4);if (key2()){bz=1;bz_boxing=2;_delay_ms(14);} }//-----波形3-----if (key3()){ _delay_ms(4);if (key3()){bz=1;bz_boxing=3;_delay_ms(14);} }//-----波形4----if (key4()){ _delay_ms(4);if (key4()){bz=1;bz_boxing=4;_delay_ms(14);} }//----暂停-查看波形的编号----if (key5()){ fresh_HZ();_delay_ms(14);}while(key5());}}4)调试过程,最终的实现结果分析等。