信号发生器
信号发生器

分类介绍
01
正弦
02
低频
03
高频04微波 Nhomakorabea06
频率合成式
05
扫频和程控
1
函数发生器
2
脉冲
3
随机
4
噪声
5
伪随机
信号发生器正弦信号发生器:正弦信号主要用于测量电路和系统的频率特性、非线性失真、增益及灵敏度等。 按频率覆盖范围分为低频信号发生器、高频信号发生器和微波信号发生器;按输出电平可调节范围和稳定度分为 简易信号发生器(即信号源)、标准信号发生器(输出功率能准确地衰减到-100分贝毫瓦以下)和功率信号发生 器(输出功率达数十毫瓦以上);按频率改变的方式分为调谐式信号发生器、扫频式信号发生器、程控式信号发 生器和频率合成式信号发生器等。
电源自适应的方波发生器原理图主振级产生低频正弦振荡信号,经电压放大器放大,达到电压输出幅度的要 求,经输出衰减器可直接输出电压,用主振输出调节电位器调节输出电压的大小。
电源自适应的方波发生器原理图
右图的电路是一种不用电源的方波发生器,可供电子爱好者和实验室作简易信号源用。电路是由六反相器 CD4096组成的自适应方波发生器。当输入端输入小信号正弦波时,该信号分两路传输,其一路径C1、D1、D2、C2 回路,完成整流倍压功能,给CD4096提供工作电源;另一路径电容C3耦合,进入CD4096的一个反相器的输入端, 完成信号放大功能(反相器在小信号工作时,可作放大器用)。该放大信号经后级的门电路处理,变换成方波后 经CD4096的12、8、10脚输出。输出端的R2为可调电阻,以保证输出端信号从0~1.25V可调。该方波发生器电路 简单,制作容易,因此可利用该方波发生器电路,作市电供电的50Hz方波发生器。
《信号发生器》课件

信号发生器的基本原理
总结词
信号发生器的基本原理概述
详细描述
信号发生器的基本原理是利用振荡器产生一定频率和幅度的正弦波,然后通过波 形合成技术生成其他波形。振荡器通常由电感和电容组成,通过改变电感或电容 的参数,可以改变输出信号的频率。
信号发生器的分类
总结词
信号发生器的分类概述
详细描述
信号发生器有多种分类方式。按波形分类,可分为正弦波信号发生器、方波信号发生器和脉冲信号发生器等;按 频率分类,可分为低频信号发生器、高频信号发生器和微波信号发生器等;按用途分类,可分为测量用信号发生 器和测试用信号发生器等。
《信号发生器》PPT课件
目 录
• 信号发生器概述 • 信号发生器的工作原理 • 信号发生器的应用 • 信号发生器的使用与维护 • 信号发生器的发展趋势与展望
01
信号发生器概述
信号发生器的定义与用途
总结词
信号发生器的定义与用途概述
详细描述
信号发生器是一种能够产生电信号的电子设备,广泛应用于通信、测量、控制 等领域。它可以产生各种波形,如正弦波、方波、三角波等,用于测试、模拟 和控制系统。
干燥、通风良好、无尘的环境中,避免强烈振动和磁场干扰。
05
信号发生器的发展趋势与展望
信号发生器的发展历程
信号发生器的起源
信号发生器的历史可以追溯到20 世纪初,当时它被用于电信和广
播领域。
模拟信号发生器
在20世纪的大部分时间里,模拟信 号发生器占据主导地位,它通过连 续的电压或电流输出信号。
数字信号发生器
信号发生器的正确使用方法
信号发生器的正确使用方法包括
首先,确保电源连接正确,避免电源电压过高或过低;其次,根据需要选择合适的输出信号类型和参 数,如波形、频率、幅度等;再次,确保输出连接正确,避免连接短路或开路;最后,遵循安全操作 规程,避免发生意外事故。
信号发生器的基本组成

信号发生器的基本组成信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。
它在测量、测试、调试和维修电子设备中起到了非常重要的作用。
信号发生器的基本组成包括以下几个部分:1. 振荡器:这是信号发生器的核心部分,用于产生所需的信号波形。
振荡器可以是晶体振荡器、LC 振荡器或 RC 振荡器等,具体取决于所需的频率范围和波形。
2. 波形产生电路:波形产生电路用于将振荡器产生的信号转换为所需的波形,如正弦波、方波、三角波等。
这可以通过使用滤波器、放大器、比较器等电子元件来实现。
3. 频率调节电路:频率调节电路用于调整信号的频率。
这可以通过改变振荡器的元件参数、使用频率合成器或锁相环等技术来实现。
频率调节通常可以通过手动旋钮、按键或外部控制信号进行。
4. 幅度调节电路:幅度调节电路用于调整信号的输出电平。
这可以通过可变增益放大器、衰减器或外部控制信号来实现。
幅度调节可以使信号发生器产生不同强度的信号,以满足不同的测试需求。
5. 输出电路:输出电路将生成的信号传递到外部设备或测试装置。
它可以包括放大器、滤波器、隔离器等,以确保信号的质量和稳定性。
6. 控制和显示界面:信号发生器通常配备控制和显示界面,用于设置和显示相关参数,如频率、幅度、波形类型等。
这可以通过旋钮、按钮、显示屏或连接到计算机进行远程控制来实现。
除了以上基本组成部分,一些高级信号发生器还可能包括调制功能、扫描功能、数字信号生成能力、存储和调用波形的能力等。
这些附加功能可以根据具体的应用需求进行选择和配置。
总之,信号发生器的基本组成部分包括振荡器、波形产生电路、频率和幅度调节电路、输出电路以及控制和显示界面。
这些部分协同工作,以产生各种频率和波形的电信号,为电子测试和调试提供了重要的工具。
信号发生器的分类

信号发生器的分类信号发生器是电子测试仪器中常用的一种设备,用于产生不同频率、幅度和波形的电信号。
根据其功能和应用领域的不同,信号发生器可以分为多种类型。
本文将对几种常见的信号发生器进行分类和介绍。
一、函数发生器(Function Generator)函数发生器是最常见的一种信号发生器,它可以产生多种波形信号,如正弦波、方波、锯齿波和三角波等。
函数发生器可以根据用户的需求,通过调节频率、幅度和相位等参数,生成不同形态的信号。
它广泛应用于电子实验、通信测试和教学等领域。
二、任意波形发生器(Arbitrary Waveform Generator)任意波形发生器是一种高级的信号发生器,可以产生任意复杂的波形信号。
与函数发生器相比,任意波形发生器可以通过用户提供的采样点数据,生成非周期性的任意波形信号。
任意波形发生器在研发新产品、模拟真实信号和测试复杂系统等方面具有重要应用。
三、脉冲发生器(Pulse Generator)脉冲发生器是专门用于产生脉冲信号的设备。
脉冲发生器可以产生具有特定频率、宽度和占空比的脉冲信号,常用于数字电路测试、脉冲测量和脉冲信号调试等领域。
脉冲发生器还可以模拟各种脉冲干扰,用于电磁兼容性测试和抗干扰性能评估。
四、频率计(Frequency Counter)频率计是一种用于测量信号频率的设备,通常与信号发生器配合使用。
频率计可以精确地测量输入信号的频率,并显示在数码显示屏上。
频率计广泛应用于科研实验、无线通信、广播电视等领域,常用于校准信号发生器和检测频率稳定性。
五、噪声发生器(Noise Generator)噪声发生器是一种用于产生随机噪声信号的设备。
噪声发生器可以产生不同类型的噪声信号,如白噪声、粉噪声和高斯噪声等。
噪声发生器在通信系统测试、声学实验和信号处理等领域具有重要应用,可以模拟真实环境中的噪声情况。
六、微波信号发生器(Microwave Signal Generator)微波信号发生器是专门用于产生微波频率信号的设备。
信号发生器的功能和使用方法

信号发生器是一种用于产生各种类型和频率的电信号的仪器,常用于电子测试、实验和通信设备调试等领域。
其主要功能和使用方法如下:
功能:
1.产生标准信号:信号发生器可以产生各种类型的标准信号,如正弦波、方波、脉冲波、三角波等,用于测试和测量电路的性能和响应。
2.调节信号参数:信号发生器可以调节信号的频率、幅度、相位等参数,以满足测试和实验的需求。
3.产生调制信号:信号发生器还可以产生调制信号,如调幅信号、调频信号、调相信号等,用于调试和测试调制解调器、通信设备等。
4.产生噪声信号:一些信号发生器还具有产生噪声信号的功能,用于测试和测量器件或系统的抗干扰能力和性能。
使用方法:
1.设置频率:选择所需的信号类型,通过旋转或按键操作设置所需的频率。
2.设置幅度:根据需要,设置信号的幅度(峰值、峰峰值、或功率)大小。
3.调节相位:若需要,通过旋转或按键操作,调节信号的相位。
4.选择输出方式:选择信号的输出方式,可以通过电缆连接到被测试的设备或电路中,或者使用内置的示波器检测输出信号。
5.调整信号参数:根据实际需求,对信号的频率、幅度、相位等参数进行调整,以满足测试、实验和调试的要求。
6.监测和分析信号:使用示波器或其他测量仪器,监测和分析输出信号的波形和特征,以评估被测试设备或电路的性能和响应。
需要注意的是,使用信号发生器时应遵循安全操作规程,确保信号发生器和被测试设备之间的连接正确可靠,防止过载或短路等意外情况的发生。
信号发生器的使用

信号发生器的使用介绍信号发生器是一种用于产生各种类型和频率的电子信号的仪器。
它们被广泛应用于电子设备测试和调试、通信系统分析、音频设备评估等领域。
本文将介绍信号发生器的基本原理、常见类型、主要功能以及使用方法。
基本原理信号发生器基于电子技术原理,通过产生可调频率和振幅的电信号来模拟各种实际环境中的信号。
信号发生器通常由一个稳定的振荡器和相关控制电路组成。
振荡器的频率和振幅可以通过用户界面进行调整和控制。
常见类型1. 函数发生器函数发生器是最常见的信号发生器类型之一。
它可以产生各种形状的波形信号,如正弦波、方波、三角波、锯齿波等。
函数发生器通常具有可调节的频率、幅度和相位等参数,并可以通过内置的触发器和计数器实现复杂的信号模式。
2. 频率合成发生器频率合成发生器是一种高级信号发生器,它可以生成非常精确的特定频率信号。
它的原理是通过将多个频率信号合成为一个复杂的信号,以产生所需精确频率的输出信号。
3. 脉冲发生器脉冲发生器是专门用于生成脉冲信号的信号发生器。
它常用于测试和测量应用中,例如测量脉冲响应、传输信号的时延等。
4. 同步发生器同步发生器是一种专门用于产生同步信号的信号发生器。
它可以生成与特定频率和相位的外部事件同步的信号。
同步发生器常用于测试和测量领域中的同步应用,例如测量信号延迟、同步多台仪器等。
主要功能信号发生器具有多种主要功能,可以根据实际需求进行选择和配置。
1. 频率和振幅调节信号发生器允许用户精确地调节产生的信号的频率和振幅。
用户可以根据需要设置特定的频率和振幅值,并观察信号在设备或系统中的响应。
2. 波形选择和生成信号发生器可以产生不同类型的波形信号,如正弦波、方波、三角波、锯齿波等。
用户可以根据需要选择合适的波形,并根据需要调整相关参数。
3. 脉冲调节对于脉冲发生器,用户可以调节脉冲的宽度和周期。
这可以用于测试和测量应用,如测量脉冲响应、传输信号的时延等。
4. 频率合成频率合成发生器可以合成特定频率的信号。
什么是信号发生器它在电子测试设备中的应用有哪些
什么是信号发生器它在电子测试设备中的应用有哪些什么是信号发生器?它在电子测试设备中的应用有哪些信号发生器是一种用于产生不同类型电信号的电子设备。
它可用于各种电子测试和测量,以及在无线通信、音频频率响应、功能验证和故障排查等方面的应用。
本文将介绍信号发生器的基本原理和主要应用领域。
一、信号发生器的基本原理信号发生器的基本原理是通过特定的电路和控制系统来产生不同类型的电信号。
它通常包括一个振荡器和一个输出级,用于产生和放大电信号。
振荡器根据设定的频率和波形参数产生电信号,并将信号传递给输出级进行放大,从而输出到外部电路或设备。
信号发生器的主要参数包括频率、幅度、相位和波形等。
频率是指信号发生器产生信号的周期性,通常以赫兹(Hz)为单位。
幅度是指信号的振幅,通常以伏特(V)为单位。
相位是指信号的相对时间偏移,通常以角度或时间单位来表示。
波形则指信号的形状,如正弦波、方波、脉冲等。
二、信号发生器在电子测试设备中的应用1. 信号发生器在无线通信领域的应用信号发生器在无线通信领域中起到重要作用。
它可用于测试和评估无线电频率、带宽和调制技术的性能。
通过调节信号发生器的频率和幅度,可以模拟出不同的无线信号,如调幅(AM)信号、调频(FM)信号和调相(PM)信号等。
这对于无线电通信设备的设计、调试和性能验证非常关键。
2. 信号发生器在音频频率响应测试中的应用信号发生器也广泛应用于音频设备的测试和评估。
通过产生不同频率和幅度的信号,可以测试音箱、耳机、音频放大器等设备的频率响应和失真程度。
同时,信号发生器还可用于测试音频信号的信噪比、动态范围和音频变调等参数。
3. 信号发生器在功能验证和故障排查中的应用信号发生器在电子设备的功能验证和故障排查中也发挥着重要作用。
它可以用来模拟各种输入信号,验证设备的各项功能是否正常工作。
例如,通过输入不同频率和幅度的信号,可以测试电路板的各个部件是否正常,或者定位故障出现的位置。
同时,信号发生器还可用于测量设备的动态响应、阻抗匹配和信号损耗等参数。
简述信号发生器的作用
信号发生器的作用1. 信号发生器的定义和概述信号发生器是一种电子测试设备,用于产生各种类型的电信号。
它可以产生不同频率、幅度、相位和波形的信号,用于电子设备的测试、测量和校准。
2. 信号发生器的主要功能信号发生器具有以下主要功能:2.1 波形生成功能信号发生器可以根据需求生成各种类型的波形,包括正弦波、方波、脉冲波、三角波、锯齿波等。
这些波形广泛应用于电子设备的测试、仿真和研究中。
2.2 频率调节功能信号发生器可以通过调节频率参数,生成不同频率的信号。
频率调节范围通常从几赫兹到数千兆赫兹,甚至更高。
这使得信号发生器在射频(RF)和微波(MW)领域的测试中有很大的用途。
2.3 幅度调节功能信号发生器可以通过调节幅度参数,改变信号的幅度。
这对于测试设备的线性度、灵敏度和增益等性能参数非常重要。
2.4 相位调节功能信号发生器可以通过调节相位参数,改变信号的相位。
相位调节功能在通信和信号处理系统的测试和调试中起着至关重要的作用。
2.5 脉宽调节功能信号发生器可以通过调节脉宽参数,改变信号的脉冲宽度。
这对于测试脉冲信号设备的性能和响应特性非常重要。
2.6 调制功能信号发生器还具有调制功能,可以对信号进行调幅、调频、调相等各种调制方式。
这对于通信系统的测试和调整至关重要。
2.7 多信号同步功能一些高级信号发生器还具有多信号同步功能,可以产生多个相互关联的信号,并实现各种复杂的测试和仿真场景。
3. 信号发生器的应用领域信号发生器在各个领域的应用非常广泛,包括但不限于以下几个方面:3.1 通信系统测试信号发生器广泛应用于无线通信系统的测试和调试。
它可以产生各种带宽、频率和调制方式的信号,用于测试和评估通信系统的性能和容量。
3.2 射频测试信号发生器在射频测试中也发挥着重要作用。
它可以产生高频率的信号,用于测试射频设备的参数和性能。
3.3 校准和测量信号发生器可以用于校准其他测试设备,如示波器、频谱分析仪等。
它还可以用作标准信号源,用于测量和比较其他设备的性能参数。
信号发生器的使用方法
信号发生器的使用方法
信号发生器是一种用于产生不同频率、幅度和波形的电信号的仪器。
它广泛应用于电子测试、通信系统调试和科学研究等领域。
以下是信号发生器的使用方法:
1. 准备工作:确保信号发生器和被测试设备的电源均已连接并正常工作。
检查信号发生器的输出端口是否与被测试设备的输入端口正确连接。
2. 设置输出频率:通过旋转频率调节旋钮或在仪表面板上输入频率值来设置所需的输出频率。
确保所选频率在信号发生器所能提供的范围内。
3. 选择波形类型:信号发生器通常能提供多种波形类型,如正弦波、方波、脉冲波和三角波等。
通过相应的按钮或旋钮来选择所需的波形类型。
4. 调整幅度:信号发生器的幅度控制功能可用于调整输出信号的振幅。
通过幅度控制旋钮来调整输出信号的幅度大小。
5. 设置偏置:如果需要在输出信号中添加直流偏置,则可以通过偏置控制旋钮来调整偏置电压的大小。
6. 运行信号发生器:确认以上参数设置无误后,可以打开信号发生器的电源开关,并调整输出信号的持续时间(如果有该功能)。
7. 监测输出信号:使用示波器或其他合适的测试设备来监测信号发生器输出的信号波形和幅度,以确保其符合要求。
8. 调整参数:根据需要,可以通过微调旋钮或按钮来进一步调整输出信号的频率、幅度和波形类型等参数。
9. 停止使用:在使用完信号发生器后,首先关闭被测试设备的电源,然后再关闭信号发生器的电源开关。
请根据具体的信号发生器型号和使用手册进行操作,以确保正确和安全地使用信号发生器。
信号发生器的分类
信号发生器的分类信号发生器是一种用于产生特定频率、幅度和波形的电信号的仪器。
根据不同的应用场景和信号特性,信号发生器可以分为多种类型。
下面将介绍几种常见的信号发生器分类。
一、基本信号发生器基本信号发生器是最简单的一类信号发生器,主要用于产生常规的波形信号,如正弦波、方波、三角波等。
它通常具有固定的频率范围和可调节的幅度。
基本信号发生器常用于电子实验、通信系统测试等领域。
二、函数信号发生器函数信号发生器是一种能够产生多种复杂波形的信号发生器。
它具有丰富的波形选择,如任意波形、噪声信号、脉冲信号等。
函数信号发生器通常具有更高的频率范围和更精确的频率调节能力,适用于高精度测量和频率特性测试。
三、微波信号发生器微波信号发生器是一种专门用于产生微波频率信号的仪器。
微波信号发生器具有更高的频率范围,通常在几百兆赫兹至数十千兆赫兹之间。
它适用于射频通信、雷达系统、卫星通信等高频领域。
四、脉冲信号发生器脉冲信号发生器是一种专门用于产生脉冲信号的仪器。
它可以产生具有不同脉宽、占空比和重复频率的脉冲信号,用于模拟数字电路、计数器、触发器等应用。
脉冲信号发生器通常具有快速上升和下降时间,以确保脉冲信号的准确性和稳定性。
五、音频信号发生器音频信号发生器是一种用于产生音频频率信号的仪器。
它通常用于音频设备测试、音频系统校准和声学研究等领域。
音频信号发生器可以产生不同频率、振幅和相位的音频信号,用于测试音响设备的频率响应、失真等参数。
六、视频信号发生器视频信号发生器是一种用于产生视频信号的仪器。
它可以产生不同标准(如PAL、NTSC、SECAM)的视频信号,并具有丰富的测试模式,如彩条、灰度图、色阶等。
视频信号发生器通常用于电视、监视系统、视频设备测试等领域。
以上是几种常见的信号发生器分类,每种类型的信号发生器都有自己特定的应用领域和功能特点。
在实际应用中,根据需要选择合适的信号发生器可以提高工作效率和测试精度。
随着科技的不断进步,信号发生器的功能和性能也在不断提升,为各行各业的研发和测试工作提供了更多可能性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子设计作品报告姓名:班级:电子1102班信号发生器姓名:摘要本设计以ATxmega256A3BU单片机为中心控制系统,由液晶显示模块、波形产生模块、幅度放大模块组成。
通过按键切换三种输出波形(方波、三角波、正弦波)。
对于改变频率,设定四种工作模式。
通过按键,对产生波形的频率在20Hz到9999Hz的范围内分别可以进行步长为5Hz频率加减调频、步长为1Hz频率加减调频、逐位调频(通过按键,分别对频率数字的每一位进行调节)以及频率锁死工作模式。
通过LED0、LED1以及LCD500的亮灭组合来指示不同的工作模式。
在LCD500屏幕上,能同步显示输出波形名称、频率、改变频率模式以及作者中英文姓名。
波形输出引脚依次与滤波器和放大器相连接,通过调节放大器可变电阻改变波形幅值,使波形幅值在1v到5v内调节。
一、系统方案1、信号发生对三个波形,通过数学计算,分别对方波、三角波、正弦波三个波形每周期各自取32个采样点。
在Atmel Studio编译环境下,对ATxmega256A3BU进行编程。
把三个波形的数据分别赋值于三个16位无符号整型数组内,每个数组32个元素。
如图1.1所示,利用单片机DAC模块,在XMEGA-A3BU Xplained板上的J2的第二个引脚输出的波形。
通过编程,使手动对SW1按键的电位变化分别调用存有三个波形的数组,利用按键SW1循环选择输出方波、三角波、正弦波。
图1.1 XMEGA-A3BU Xplained板面示意图2、频率改变单片机晶振基准频率为32MHz,令 n f f N f f N F N /,/0==其中,0f 为输出频率,F f 为晶振基准频率,N f 为基准频率经分频器分频后的值,N 为分频器的分频系数,n 为输出波形每周期采样点数。
本系统实质通过按键改变N 和n 来改变输出频率。
3、显示模块利用XMEGA-A3BU Xplained 板上自备的LCD500显示。
LCD 液晶不但能显示中文字符、英文字符和数字,而且显示效果较好,容易编程实现。
4、幅值改变由于通过编写程序,只能使XMEGA-A3BU Xplained 板输出波形幅值在0到1v 内变化。
所以,将 XMEGA-A3BU Xplained 板波形输出引脚接入20Hz 到20000Hz 帯通滤波器再接入2级放大器输出。
通过改变放大器的可变电阻,使输出波形幅值在1v 到5v 之间进行自由的变换 。
二、系统设计1、总体设计思路通过ATxmega256A3BU 单片机,控制波形切换、频率改变、液晶显示;通过控制放大器可变电阻控制输出波形幅值。
系统如图2.1所示。
图2.1 系统简示图2、波形选择及频率改变模块根据采样定理,周期性波形单个周期采样频率大于周期波自身频率二倍。
经测试,当每个波形每周期为32个采样点时能在0——3000Hz 内良好输出波形; 当每个波形每周期为16个采样点时能在0——6000Hz 内良好输出波形;当每个波形每周期为8个采样点时能在0——12000Hz 内良好输出波形; 当每个波形每周期为4个采样点时能在0——24000Hz 内输出波形,但此时失真较明显。
因此,本系统采用当输出频率小于2000Hz 时,每个波每周期输出32个数据; 当输出频率在2000Hz 到4500Hz 时,每个波每周期输出16个数据;当输出频率在4500Hz 到10000Hz 时,每个波每周期输出8个数据。
256A3BU 单片机 滤波器 放大器 LCD500 显示波形输出当初始化时,输出频率为20Hz的方波同时LCD屏幕显示频率与与输出波形。
根据图1.1,通过按键SW1,可使输出波形可依次在方波、三角波、正弦波和无输出信号状态下循环,并在屏幕上同步显示输出波的类型。
等步长频率调节模式:最开始,频率调节是处于锁死状态。
按键SW0,LED0和LCD亮,表示进入5Hz频率增加调节模式。
此时,按键SW2可改变波形频率,每次增加步长为5Hz,屏幕同步显示改变频率。
第二次按键SW0,表LED0和LCD亮,表示进入5Hz频率减小调节模式。
此时,按键SW2可改变波形频率,每次减小步长为5Hz,屏幕同步显示改变频率。
第三次按键SW0,表LED1和LCD亮,表示进入1Hz频率增加调节模式。
此时,按键SW2可改变波形频率,每次增加步长为1Hz,屏幕同步显示改变频率。
第四次按键SW0,表LED1和LCD亮,表示进入5Hz频率减小调节模式。
此时,按键SW2可改变波形频率,每次减小步长为1Hz,屏幕同步显示改变频率。
第五次按键SW0,回到锁死状态,所有灯灭掉。
此时完成一个频率调节模式循环。
逐位调频模式:由于步长为5Hz和1Hz频率调节,对于较大频率调节过程比较繁琐,所以本系统设计了逐位改变频率模式。
按键SW0,使系统处于锁死状态。
按键SW1,使波形输出到无信号输出状态。
再通过按键SW2可对输出频率个位数字进行设置,并在LCD上显示。
同理,此时按键SW0可依次进入对频率十位、百位、千位数字改变模式,并在LCD上显示工作状态。
在不同位数调节模式下,通过按键SW2可分别对各个位数上数字进行设置。
设置好输出频率后,按键SW1选择输出波形,可输出设置频率的特定波形。
3、液晶显示模块图2.2 LCD 500电路连接图通过程序点阵输入,使ATxmega256A3BU单片机控制液晶显示能同步显示输出波的类型,频率,调节模式,能同时显示汉字、英文字符、数字。
4、幅度放大模块我们通过改变放大器可变电阻来,使最终波形在幅值在1v到5v内改变。
我们输出的信号为小信号,如果想要在1v到5v之间进行自由的变换,就需要放大器进行放大,所以我们设计了一个放大电路。
我们采用了2级放大电路,经过第一级的放大之后进入第二级,第二级中我们采用了可变电阻通过电阻阻值的改变而改变第二级放大的倍数,一级与二级放大倍数乘积就是放大倍数,从而实现放大倍数的可调,使我们输出的电压能够在1v到5v之间改变。
为了实现一个通带我20hz到20khz的带通滤波器,我们用Filter Solutions 软件先设计了一个高通滤波器,使其截至频率为20Hz,大于20Hz频率的波能够通过,我们接着又用Filter Solutions设计了一个低通滤波器,使其截至频率为20KHz,当大于20KHz的波通过时会被滤掉,将2个滤波器连接后使用,这样就实现了通带为20Hz到20khz的带通滤波器。
仿真后用扫描仪观察即可。
由于系统从XMEGA-A3BU Xplained板输出波形幅值小于1v,所以我们给定我们给出一个电压为1v,频率为1KHz的交流正弦电源输入,仿真电路如下。
放大器电路仿真截图:图2.3 放大器仿真电路图滤波器仿真截图:图2.4 滤波器仿真电路图三、软件设计程序全部由C 语言编写,可实现波形类型的选择、频率档位、电压输入、频率步进值和电压初值的设定,显示部分可实时显示输出信号的类型、频率和频率步进值。
主程序流程图,如图2.5所示。
图2.5 主程序流程图 控制输入 设定波形输出,输出性质显示 方波 三角波 正弦波 开始初始化显示, 预设波形输出 等待近键按键识别波形选择 频率控制 幅度控制四、测试1、输出波形频率测试设置频率(Hz) 液晶显示频率(Hz) 输出频率(Hz)20 20 201000 1000 1000.52000 2000 20014000 4000 4000.55000 5000 50007000 7000 70009999 9999 9999表4.1 输出波形频率测试表2、输出波形幅度范围测试测试方法与过程:对于放大器和滤波器,我们都先采用multisim仿真软件进行仿真测试。
测试软件:multisim仿真软件测试结果:放大器:用软件我们给了一个能发出500mv电压,1khz频率的电源,通过改变可变电阻,实现对电压的放大,实现在我们输出电压能够经过放大在1v---5v范围内自由改变。
可变电97 95 94 92 91 90 88 87 85阻改变值(%)1.036 1.7272.072 2.7633.109 3.4544.145 4.4915.182 放大电压(v)表4.2 波形幅值输出仿真测试五、结论我们以ATxmega256A3BU单片机为核心控制,通过可编程放大电路实现了正弦波、方波、三角波的输出功能。
其频率能在0——10000Hz内自由输出,实现了等步距调节和逐位调节。
幅度能在1到5v内自由变化。
并实现液晶屏幕同步显示改变信息。
在系统的设计过程中,力求硬件电路简单,充分发挥软件编程方便灵活的特点,并最大限度挖掘单片机的资源。
C程序:#include <asf.h>//一定要有#include <board.h>#include <sysclk.h>#include <st7565r.h>#define my_button0 IOPORT_CREATE_PIN(PORTE,5) #define my_button1 IOPORT_CREATE_PIN(PORTF,1)#define my_button2 IOPORT_CREATE_PIN(PORTF,2)#define SPEAKER_DAC DACB#define SPEAKER_DAC_CHANNEL DAC_CH0#define NR_OF_SAMPLES 32char table_character[][6]={{0x00,0x00,0x00,0x00,0x00,0x00, }, // space { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines };static const uint16_t square[NR_OF_SAMPLES] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30000,30000,30000,30000,30000,30000,30000,30000,30000,30000,30000,30000,30000,30000,30000,30000,};static const uint16_t triangle[NR_OF_SAMPLES] = {0, 4096, 8192, 12287, 16384, 20480, 24576, 28672,32768, 36864, 40960, 45056, 49151, 53248, 57343, 61440, 65535, 61440, 57343, 53248, 49151, 45056, 40960, 36864, 32768, 28672, 24576, 20480, 16384, 12287, 8192, 4096,};static const uint16_t sine[NR_OF_SAMPLES] = {32768, 35327, 37784, 40050, 42036, 43666, 44877, 45623,45875, 45623, 44877, 43666, 42036, 40050, 37784, 35325,32771, 30211, 27752, 25486, 23500, 21870, 20659, 19913,19661, 19913, 20659, 21870, 23500, 25486, 27752, 30211,};char able_character[][8]={0x10,0xFF,0x91,0xFF,0x38,0x74,0xD3,0x10,0x7E,0x7E,0x42,0x7E,0xFF,0x2C,0x38,0xEF,0xFF,0x8,0xFF,0xAD,0x89,0xAD,0x89,0x83,0xFF,0x8,0xFF,0xAD,0x89,0xAD,0x89,0x83,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x10,0xFE,0xFE,0x48,0x7E,0x8,0x4A,0x99,0x54,0x74,0x75,0xFF,0x5C,0x74,0x54,0x54,0x10,0xFF,0x74,0xFF,0x18,0xFF,0x10,0x30,0x28,0x28,0xEE,0x2C,0x28,0x28,0xE9,0x2E,0x10,0x10,0xFF,0x18,0x18,0x24,0xC6,0x83,0x52,0x54,0xFF,0xFD,0x7C,0xFF,0x8,0x38,0x10,0xFF,0x28,0x48,0x7E,0x2C,0x4A,0x99};static void evsys_init(void){sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_EVSYS);EVSYS.CH3MUX = EVSYS_CHMUX_TCC0_OVF_gc;}void tc_init(void){tc_enable(&TCC0);tc_set_wgm(&TCC0, TC_WG_NORMAL);tc_write_period(&TCC0,427755000.0/BOARD_XOSC_HZ);tc_write_clock_source(&TCC0, TC_CLKSEL_DIV1_gc);}void dac_init(void){struct dac_config conf;dac_read_configuration(&SPEAKER_DAC, &conf);dac_set_conversion_parameters(&conf, DAC_REF_BANDGAP,DAC_ADJ_LEFT);dac_set_active_channel(&conf, SPEAKER_DAC_CHANNEL, 0);dac_set_conversion_trigger(&conf, SPEAKER_DAC_CHANNEL, 3);#ifdef XMEGA_DAC_VERSION_1dac_set_conversion_interval(&conf, 1);#endifdac_write_configuration(&SPEAKER_DAC, &conf);dac_enable(&SPEAKER_DAC);}void write_string(uint8_t page,uint8_t startline,char *pString) {uint8_t i;st7565r_set_page_address(page);st7565r_set_column_address(startline);while (*pString){for (i=0;i<6;i++){st7565r_write_data(table_character[*pString-32][i]);}pString++;}}void write_smy(uint8_t page,uint8_t startline,char *pString){uint8_t i;st7565r_set_page_address(page);st7565r_set_column_address(startline);while (*pString){for (i=0;i<8;i++){st7565r_write_data(able_character[*pString-32][i]);}pString++;}}int main(void){//! the page address to write touint8_t page_address;//! the column address, or the X pixel.uint8_t column_address;//! store the LCD controller start draw lineuint8_t start_line_address = 0;//! value used for delay, needs to be volatile due to compiler optimizationboard_init();sysclk_init();ioport_init();evsys_init();tc_init();dac_init();delay_init();ioport_set_pin_dir(my_button1,IOPORT_DIR_INPUT);ioport_set_pin_mode(my_button1, IOPORT_MODE_PULLUP);ioport_set_pin_dir(my_button2,IOPORT_DIR_INPUT);ioport_set_pin_mode(my_button2, IOPORT_MODE_PULLUP);ioport_set_pin_dir(my_button0,IOPORT_DIR_INPUT);ioport_set_pin_mode(my_button0, IOPORT_MODE_PULLUP);st7565r_init();// set addresses at beginning of displayst7565r_set_page_address(0);st7565r_set_column_address(0);// 清屏一下,否则可能出现乱点for (page_address = 0; page_address <= 8; page_address++) { st7565r_set_page_address(page_address);for (column_address = 0; column_address < 128; column_address++) {st7565r_set_column_address(column_address);/* fill every other pixel in the display. This will producehorizontal lines on the display. */st7565r_write_data(0x00);}}st7565r_set_display_start_line_address(0X00);//write_smy(3,5," $!$#$$+$($)$*");write_string(2,5,"Mr Li, Mr Liang");write_string(0,5,"Frequency(Hz)");write_string(1,67,"0");write_string(1,60,"2");write_string(0,95,"SQ");Bool value0;Bool value1;Bool value2;uint8_t i=0;uint8_t k=0;uint16_t j=0;uint8_t m=0;uint16_t b=0;uint16_t c=0;uint16_t d=0;uint16_t e=0;uint16_t n=0;uint8_t x=0;uint16_t y=0;while(1){ value0= !(ioport_get_pin_level(my_button0));value1 = !(ioport_get_pin_level(my_button1));//断开为1,此处置零value2 = !(ioport_get_pin_level(my_button2));if(value0){m++;m %= 5;if(m==0&&k==3){ write_string(0,95,"x1 ");}else if(m==1&&k==3){ write_string(0,95,"x10 ");}else if(m==2&&k==3){ write_string(0,95,"x100 ");} else if(m==3&&k==3){ write_string(0,95,"x1000 ");}else if(k!=3){switch(k){ case 0:write_string(0,95,"SQ ");break;case 1:write_string(0,95,"Tri ");break;case 2:write_string(0,95,"Sin ");break;case 3:write_string(0,95," ");break;}}delay_ms(500); }ioport_set_pin_level( LED0 ,!((m==1)||(m==2)));ioport_set_pin_level(LED1 ,!((m==3)||(m==4)));ioport_set_pin_level(NHD_C12832A1Z_BACKLIGHT ,m);if(value2) {if(k!=3){if (m==1){ j++;tc_write_period(&TCC0,(1705000000.0/(j+4))/ BOARD_XOSC_HZ);e=j%2;d=(j/2)%10;c=((j+4)/20)%10;b=((j+4)/200)%10;if(e==0){write_string(1,67,"0");}else{write_string(1,67,"5");}switch (d){case 0:write_string(1,60,"2");break;case 1:write_string(1,60,"3");break;case 2:write_string(1,60,"4");break;case 3:write_string(1,60,"5");break;case 4:write_string(1,60,"6");break;case 5:write_string(1,60,"7");break;case 6:write_string(1,60,"8");break;case 7:write_string(1,60,"9");break;case 8:write_string(1,60,"0");break;case 9:write_string(1,60,"1");break;}if(j>15){switch (c){case 0:write_string(1,53,"0");break;case 1:write_string(1,53,"1");break;case 2:write_string(1,53,"2");break;case 3:write_string(1,53,"3");break;case 4:write_string(1,53,"4");break;case 5:write_string(1,53,"5");break;case 6:write_string(1,53,"6");break;case 7:write_string(1,53,"7");break;case 8:write_string(1,53,"8");break;case 9:write_string(1,53,"9");break;}}else{write_string(1,53," ");}if(j>195){switch (b){case 0:write_string(1,46,"0");break;case 1:write_string(1,46,"1");break;case 2:write_string(1,46,"2");break;case 3:write_string(1,46,"3");break;case 4:write_string(1,46,"4");break;case 5:write_string(1,46,"5");break;case 6:write_string(1,46,"6");break;case 7:write_string(1,46,"7");break;case 8:write_string(1,46,"8");break;case 9:write_string(1,46,"9");break;}}else{write_string(1,46," ");}n=(5*j);delay_ms(500);}else if(m==2){ j--;tc_write_period(&TCC0,(1705000000.0/(j+4))/ BOARD_XOSC_HZ );e=j%2;d=(j/2)%10;c=((j+4)/20)%10;b=((j+4)/200)%10;if(e==0){write_string(1,67,"0");}else{write_string(1,67,"5");}switch (d){case 0:write_string(1,60,"2");break;case 1:write_string(1,60,"3");break;case 2:write_string(1,60,"4");break;case 3:write_string(1,60,"5");break;case 4:write_string(1,60,"6");break;case 5:write_string(1,60,"7");break;case 6:write_string(1,60,"8");break;case 7:write_string(1,60,"9");break;case 8:write_string(1,60,"0");break;case 9:write_string(1,60,"1");break;}if(j>15){switch (c){case 0:write_string(1,53,"0");break;case 1:write_string(1,53,"1");break;case 2:write_string(1,53,"2");break;case 3:write_string(1,53,"3");break;case 4:write_string(1,53,"4");break;case 6:write_string(1,53,"6");break;case 7:write_string(1,53,"7");break;case 8:write_string(1,53,"8");break;case 9:write_string(1,53,"9");break;}}else{write_string(1,53," ");}if(j>195){switch (b){case 0:write_string(1,46,"0");break;case 1:write_string(1,46,"1");break;case 2:write_string(1,46,"2");break;case 3:write_string(1,46,"3");break;case 4:write_string(1,46,"4");break;case 5:write_string(1,46,"5");break;case 6:write_string(1,46,"6");break;case 7:write_string(1,46,"7");break;case 8:write_string(1,46,"8");break;case 9:write_string(1,46,"9");break;}} else{write_string(1,46," ");}n=(5*j);delay_ms(500);}else if (m==3){n++;tc_write_period(&TCC0,(853*******.0/(n+20))/ BOARD_XOSC_HZ );e=n%10;d=(n/10)%10;c=((n+20)/100)%10;b=((n+20)/1000)%10;switch(e){ case 0:write_string(1,67,"0");break;case 2:write_string(1,67,"2");break;case 3:write_string(1,67,"3");break;case 4:write_string(1,67,"4");break;case 5:write_string(1,67,"5");break;case 6:write_string(1,67,"6");break;case 7:write_string(1,67,"7");break;case 8:write_string(1,67,"8");break;case 9:write_string(1,67,"9");break;}switch (d){case 0:write_string(1,60,"2");break;case 1:write_string(1,60,"3");break;case 2:write_string(1,60,"4");break;case 3:write_string(1,60,"5");break;case 4:write_string(1,60,"6");break;case 5:write_string(1,60,"7");break;case 6:write_string(1,60,"8");break;case 7:write_string(1,60,"9");break;case 8:write_string(1,60,"0");break;case 9:write_string(1,60,"1");break;}if(n>79){switch (c){case 0:write_string(1,53,"0");break;case 1:write_string(1,53,"1");break;case 2:write_string(1,53,"2");break;case 3:write_string(1,53,"3");break;case 4:write_string(1,53,"4");break;case 5:write_string(1,53,"5");break;case 6:write_string(1,53,"6");break;case 7:write_string(1,53,"7");break;case 8:write_string(1,53,"8");break;case 9:write_string(1,53,"9");break;}}else{write_string(1,53," ");}if(n>879){switch (b){case 0:write_string(1,46,"0");break;case 1:write_string(1,46,"1");break;case 2:write_string(1,46,"2");break;case 3:write_string(1,46,"3");break;case 4:write_string(1,46,"4");break;case 5:write_string(1,46,"5");break;case 6:write_string(1,46,"6");break;case 7:write_string(1,46,"7");break;case 8:write_string(1,46,"8");break;case 9:write_string(1,46,"9");break;}} else if(n<880){write_string(1,46," ");}j=(n/5);delay_ms(500);}else if(m==4){ n--;tc_write_period(&TCC0,(853*******.0/(n+20))/ BOARD_XOSC_HZ );e=n%10;d=(n/10)%10;c=((n+20)/100)%10;b=((n+20)/1000)%10;switch(e){ case 0:write_string(1,67,"0");break;case 1:write_string(1,67,"1");break;case 2:write_string(1,67,"2");break;case 3:write_string(1,67,"3");break;case 4:write_string(1,67,"4");break;case 5:write_string(1,67,"5");break;case 6:write_string(1,67,"6");break;case 7:write_string(1,67,"7");break;case 8:write_string(1,67,"8");break;case 9:write_string(1,67,"9");break;}switch (d){case 0:write_string(1,60,"2");break;case 1:write_string(1,60,"3");break;case 2:write_string(1,60,"4");break;case 3:write_string(1,60,"5");break;case 4:write_string(1,60,"6");break;case 5:write_string(1,60,"7");break;case 6:write_string(1,60,"8");break;case 7:write_string(1,60,"9");break;case 8:write_string(1,60,"0");break;case 9:write_string(1,60,"1");break;}if(n>79){switch (c){case 0:write_string(1,53,"0");break;case 1:write_string(1,53,"1");break;case 2:write_string(1,53,"2");break;case 3:write_string(1,53,"3");break;case 4:write_string(1,53,"4");break;case 5:write_string(1,53,"5");break;case 6:write_string(1,53,"6");break;case 7:write_string(1,53,"7");break;case 8:write_string(1,53,"8");break;case 9:write_string(1,53,"9");break;}}else{write_string(1,53," ");}if(n>879){switch (b){case 0:write_string(1,46,"0");break;case 1:write_string(1,46,"1");break;case 2:write_string(1,46,"2");break;case 3:write_string(1,46,"3");break;case 4:write_string(1,46,"4");break;case 5:write_string(1,46,"5");break;case 6:write_string(1,46,"6");break;case 7:write_string(1,46,"7");break;case 8:write_string(1,46,"8");break;case 9:write_string(1,46,"9");break;}} else if(n<880){write_string(1,46," ");}j=(n/5);delay_ms(500);}}else if(k==3){if(x!=10){if(m==0){e=x;}else if(m==1){d=10*x;}else if(m==2){c=100*x;}else if (m==3){b=1000*x;}}else if(x==10){if(m==0){e=0;}else if(m==1){d=0;}else if(m==2){c=0;}else if (m==3){b=0;}}if(m!=4){switch(x){case 0:write_string(1,67-m*7,"0");break;case 1:write_string(1,67-m*7,"1");break;case 2:write_string(1,67-m*7,"2");break;case 3:write_string(1,67-m*7,"3");break;case 4:write_string(1,67-m*7,"4");break;case 5:write_string(1,67-m*7,"5");break;case 6:write_string(1,67-m*7,"6");break;case 7:write_string(1,67-m*7,"7");break;case 8:write_string(1,67-m*7,"8");break;case 9:write_string(1,67-m*7,"9");break;case 10:write_string(1,67-m*7," ");break;}}y=b+c+d+e;if(y<2000){tc_write_period(&TCC0,(8505500000.0/y)/ BOARD_XOSC_HZ );}else if((y>1999)&&(y<4500)){tc_write_period(&TCC0,(17033000000.0/y)/ BOARD_XOSC_HZ );}else if(y>4499){tc_write_period(&TCC0,(33977000000.0/y)/ BOARD_XOSC_HZ );}x++;x%=11;delay_ms(500);}}if(value1){k++;k%=4;delay_ms(500);if(k==0){write_string(0,95,"SQ ");}else if(k==1){write_string(0,95,"Tri ");}else if(k==2){write_string(0,95,"Sin ");}else if(k==3){switch(m){case 0:write_string(0,95,"x1 ");break;case 1:write_string(0,95,"x10 ");break;case 2:write_string(0,95,"x100 ");break;case 3:write_string(0,95,"x1000 ");break;}}}if(y<2000){if(k==0){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, square[i]);i++;i %= NR_OF_SAMPLES;}else if(k==1){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, triangle[i]);i++;i%= NR_OF_SAMPLES;}else if(k==2){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, sine[i]);i++;i %= NR_OF_SAMPLES;}}else if((y>1999)&&(y<4500)){if(k==0){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, square[2*i]);i++;i %= 16;}else if(k==1){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, triangle[2*i]);i++;i%=16;}else if(k==2){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, sine[2*i]);i++;i %= 16;}}else if(y>4499){if(k==0){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, square[4*i]);i++;i %= 8;}else if(k==1){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, triangle[4*i]);i++;i%=8;}else if(k==2){dac_wait_for_channel_ready(&SPEAKER_DAC,SPEAKER_DAC_CHANNEL);dac_set_channel_value(&SPEAKER_DAC, SPEAKER_DAC_CHANNEL, sine[4*i]);i++;i %= 8;}}}}。