基于DSP的正弦波.上斜波,下斜波,梯形波,方波等波形函数发生器源程序
基于DSP的正弦信号发生器的设计

软件设计
正弦波子程序流程图 :
软件设计
调幅和调相流程图: 调幅和调相流程图:
汇报内容
• • • • • • 背景 正弦波信号发生器的几种实现方法比较 正弦波信号发生器的数字实现 硬件设计 软件设计 结论
结论
文中分析了正弦波的产生原理,并给出了硬 件电路和软件编写流程;设计了一个更好的 实现人机对话的正弦波信号发生器,给出了 显示和键盘的接口电路。该设计改进了传统 的需要用软件界面来输入幅值和频率值的方 法,更方便的实现调节输出波形的幅值和频 率值。
正弦波信号发生的数字实现 产生正弦波的方法有两种:
查表法。 优点:处理速度快;调频调相容易。 不足:要得到较高的精度,存储空间足够大以存放 查找表。 适用:对精度要求不高的场合。 泰勒级数展开法。 优点:需要的存储单元很少;精度高;展开的级数 越多,失真度就越小;调频调相易。 不足:处理速度慢。
正弦波信号发生的数字实现
硬件设计
DSP与LCD显示和键盘连接电路: DSP与LCD显示和键盘连接电路: 显示和键盘连接电路
硬件设计
键盘电路:
汇报内容
• • • • • • 背景 正弦波信号发生器的几种实现方法比较 正弦波信号发生器的数字实现 硬件设计 软件设计 结论
软件设计
主程序流程图: 主程序流程图:
设计采用采用模块化思路来编写,包括主程序、 设计采用采用模块化思路来编写,包括主程序、正 采用模块化思路来编写 弦波产生程序、调幅和调相子程序等功能子程序。 弦波产生程序、调幅和调相子程序等功能子程序。
性差,波形精度不够高且用较多硬件等。
正弦波信号发生器的几种实现方法比较
基于DSP的正弦波信号发生器:
组成:DSP处理芯片、 D/A转换器等。 优点:可程控调幅、调频,调节精度高,实
一个简单的dspC语言例子

一个简单的dsp C语言例子开发平台: CCS集成开发环境通过这个简单的例子, 可以大致了解用C语言开发dsp程序的原理。
程序要求: 用C语言编写产生正弦调幅波信号的源程序;正弦调幅波的公式在离散域中的表示:y(n) = (1 + M*sin(2 * PI * fb / fs * n)) * sin(2 * PI * fa / fs * n);编写文件1.sin_am.c#include<stdio.h>#include<math.h>#define TRUE 1#define pi 3.1415926536int y[500],i;float M;void main(){puts("amplitude modulation sinewave example started.\n");M = 50;for(i = 0; i < 500; i++)y[i]= 0;while(TRUE){for(i = 0; i < 500; i++)y[i]=(int)((1 + M / 100 * sin(i * 2 * pi * 20 / 4000))* sin(i * 2 * pi * 200 / 4000)* 16384);puts("program end");}}2.sin_am_v.asm (reset vector file).title "sin_am_v.asm".sect ".vectors".ref _c_int00RESET:B _c_int00.end..3.sin_am.cmdsin_am.objsin_am_v.obj-m sin_am.map-o sin_am.outMEMORY{PAGE 0:EPROG: origin = 0x1400, len = 0x7c00 VECT: origin = 0xff80, len = 0x80PAGE 1:USERREGS: origin = 0x60, len = 0x1c IDATA: origin = 0x80, len = 0x3000 }SECTIONS{.vectors:>VECT PAGE 0.text:>EPROG PAGE 0.cinit:>EPROG PAGE 0.bss:>IDATA PAGE 1.const:>IDATA PAGE 1.switch:>IDATA PAGE 1.system:>IDATA PAGE 1.stack:>IDATA PAGE 1}"*.cmd"文件说明:链接命令文件是实现对段的存储空间位置的定位, C语言程序中常用已初始化和未初始化段如下:已初始化段包括:.init 存放C程序中的变量的初值和常量, 放在ROM和RAM 中均可, 一般属于PAGE 0.const 存放C程序中的字符常量、浮点常量和用const声明的常量, 放在ROM和RAM中均可, 一般属于PAGE 1.text 存放C程序代码, 放在ROM和RAM中均可, 一般属于PAGE 0.switch 存放C程序中的语句的跳针表, 放在ROM和RAM中均可, 一般属于PAGE 0未初始化段包括:.bss 为C程序中的全局和静态变量保留存储空间, 一般存放于RAM中, 属于PAGE 1.stack 为C程序系统堆栈保留存储空间, 用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果, 一般存放于RAM中, 属于PAGE 1.sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间, 一般存放于RAM中, 属于PAGE 14.vary_M.gelmenuitem "Myfunctions"slider vary_M(0, 100, 10, 1, Amount_of_modulation){M = Amount_of_modulation;}该文件用于调试的时候可随意改变变量M的值, 该文件通过file->load GEL File添加到工程中, 调试的时候可选择GEL->My Functions->vary_M来打开vary_M滑动条组件。
基于DSP设计正弦信号发生器

基于DSP设计正弦信号发生器一.设计目的设计一个基于DSP的正弦信号发生器二.设计内容利用基于CCS开发环境中的C54X汇编语言来实现正弦信号发生装置。
三.设计原理一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。
查表法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精度高,但需要的存储器容量很大。
泰勒级数展开法需要的存储单元少,具有稳定性好,算法简单,易于编程等优点,而且展开的级数越多,失真度就越小。
本文采用了泰勒级数展开法。
一个角度为θ的正弦和余弦函数,可以展开成泰勒级数,取其前5项进行近似得:式中:x为θ的弧度值,x=2πf/fs(fs是采样频率;f是所要发生的信号频率。
正弦波的波形可以看作由无数点组成,这些点与x轴的每一个角度值相对应,可以利用DSP处理器处理大量重复计算的优势来计算x轴每一点对应的y的值(在x轴取N个点进行逼近)。
整个系统软件由主程序和基于泰勒展开法的SIN子程序组成,相应的软件流程图如图。
三.总体方案设计本设计采用TMS320C54X系列的DSP作为正弦信号发生器的核心控制芯片。
通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如下:1.利用sinx和cosx子程序,计算0°~45°(间隔为0.5°)的正弦和余弦值2.利用sin(2x)=2sin(x)cos(x)公式,计算0°~90°的正弦值(间隔为1°)3.通过复制,获得0°~359°的正弦值4.将0°~359°的正弦值重复从PA口输出,便可得到正弦波四.软件操作DSP 集成开发环境 CCS是 Code Composer Studio 的缩写,即代码设计工作室。
它是 TI 公司推出的集成可视化 DSP 软件开发工具。
DSP CCS 内部集成了以下软件工具:◆ DSP 代码产生工具(包括 DSP 的 C 编译器、汇编优化器、汇编器和链接器)◆ CCS 集成开发环境(包括编辑、建立和调试 DSP 目标程序)◆ 实时基础软件 DSP/BIOS (必须具有硬件开发板)◆ RTDX、主机接口和 API(必须具有硬件开发板)在 CCS 下,用户可以对软件进行编辑、编译、调试、代码性能测试(profile)和项目管理等工作。
DSP课程设计--多波形信号发生器

DSP课程设计报告——多波形信号发生器目录一、实验目的 (2)二、实验内容 (2)三、实验原理 (3)1.产生连续的波形的方法 (3)1.1 查表法: (3)1.2计算法: (3)2. TLV320AIC23B的内部结构及工作原理 (3)四、程序设计 (4)五、程序调试 (10)1、编译过程 (10)2、.cmd程序(5502.cmd)全文及其解释: (10)3、程序运行结果(图形和数据显示): (12)六、硬件输出演示: (14)七、实验感想与体会....................................................................................... 错误!未定义书签。
八、参考文献 (16)一、实验目的1.学习并掌握D/A转换器的初始化设置及其应用2.学习并掌握使用DSP产生正弦波的原理和算法,进而掌握任意信号波形(如三角波、锯齿波、矩形波等信号)产生的原理和算法。
3.比较产生信号的两种主要方法(查表法和计算法)的优缺点。
4.熟练使用软件CCS3.3对程序的完整调试过程。
二、实验内容使用DSP产生300~16000Hz的正弦、方波、锯齿波和三角波信号,输出信号的幅度从0~1Vrms(有效值)。
要求使用计算法,并且频率可变、幅度可变。
本实验要求用软件CCS3.3编程实现,并与硬件连接进行功能演示。
三、实验原理1.产生连续的波形的方法1.1 查表法:把事先将需要输出的数据计算好,存储在DSP 中,然后依次输出就可以了。
查表法的优点是速度快,可以产生频率较高的波形,而且不占用DSP 的计算时间;查表法的缺点在于需要占用DSP 的内部的存储空间,尤其对采样频率比较大的输出波形,这样,需要占用的内部的空间将更大,而DSP 内部的存储空间毕竟有所限制。
这使得查表法的应用场合十分有限。
1.2计算法:采用计算的方法依次计算数据而后输出,然后再计算而后输出。
多种波形发生器实验分析报告

多种波形发生器实验分析报告目录一、实验概述 (2)1. 实验目的 (2)2. 实验设备与材料 (3)3. 实验原理 (4)二、实验内容与步骤 (5)1. 波形发生器设计与搭建 (6)1.1 设计要求与方案选择 (7)1.2 波形发生器硬件搭建 (9)1.3 波形发生器软件编程 (10)2. 多种波形合成与输出 (12)2.1 合成波形的设计与实现 (12)2.2 波形输出设置与调整 (13)2.3 实时监控与数据分析 (15)3. 实验测试与结果分析 (16)3.1 测试环境搭建与准备 (17)3.2 实验数据采集与处理 (18)3.3 结果分析与讨论 (19)三、实验结果与讨论 (20)1. 实验结果展示 (21)2. 结果分析 (22)2.1 各波形参数对比分析 (23)2.2 性能评估与优化建议 (24)3. 问题与改进措施 (25)四、实验总结与展望 (26)1. 实验成果总结 (27)2. 存在问题与不足 (28)3. 后续研究方向与展望 (29)一、实验概述本次实验旨在研究和分析多种波形发生器的性能特点,包括产生信号的频率、幅度、波形稳定性等方面。
实验中采用了多种类型的波形发生器,如正弦波、方波、三角波、梯形波等,并对其输出波形进行了详细的测量和分析。
实验过程中,我们首先对各种波形发生器的基本功能进行了测试,确保其能够正常工作。
我们对不同波形发生器产生的波形进行了对比分析,重点关注了波形的频率、幅度和波形稳定性等关键指标。
我们还对波形发生器的输出信号进行了频谱分析和噪声测试,以评估其性能表现。
通过本次实验,我们获得了丰富的实验数据和经验,为进一步优化波形发生器的设计提供了有力支持。
实验结果也为我们了解各种波形发生器在实际应用中的性能表现提供了重要参考。
1. 实验目的本次实验的主要目的是深入研究和理解多种波形发生器的原理及其在实际应用中的表现。
通过搭建实验平台,我们能够模拟和观察不同波形(如正弦波、方波、三角波等)的产生与特性,进而探究其各自的优缺点以及在不同场景下的适用性。
基于某DSP的任意信号发生器设计汇总情况

数字信号处理(DSP)综合设计性实验报告学院:电子信息工程学院班级:通信0708指导教师:高海林学生:原凌云07211253张丽康07211256北京交通大学电工电子教学基地2004年12月28日目录一、设计任务 (3)二、实验目的 (3)三、设计内容 (3)四、实验原理 (4)五、程序设计 (6)1、程序源代码2、实验截图和结果六、实验总结 (22)七、参考资料 (23)一、设计任务书信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。
信号发生器在现代工程中应用非常广泛。
在实际中常需要产生一些特殊波形,用于仿真实际信号的波形,以检测和调试测量装置。
使用DSP 和D/A 转换器可以产生连续的正弦波信号,同样也能产生方波、锯齿波、三角波等其它各种信号波形。
本设计要求采用DSP及其D/A转换器产生上述各种信号波形。
二、实验目的(1)了解产生信号的两种方法及各自的优缺点。
(2)掌握使用DSP产生正弦波的原理和算法,进而掌握一般信号产生的原理和方法。
(3)掌握5402DSK CODECC(A/D、D/A)的工作原理和初始化过程。
(4)掌握使用指针访问片上ROM中正弦查找表的方法。
三、设计内容使用DSP 产生300—4000HZ 的正弦信号,要求使用查表法,测量产生的信号波形的频率和幅度,并且频率可变、幅度可变、直流分量可变。
用软件CCS5000编程实现,并硬件(DSK 板或示波器)连接进行功能演示。
使用计算法产生余弦波分量。
发挥部分:(1)使用DSP 产生300—4000HZ 的方波、锯齿波和三角波。
(2)使用现有程序,实现不改变源程序,频率和幅度自动可调。
四、实验原理产生连续信号的方法通常有两种:查表法和计算法,查表法不如计算法使用灵活。
基于dsp的正弦波信号发生器课程设计

目录第1章绪论 (1)1 DSP简介 (1)第2章总体方案的分析和设计 (2)2.1 总体方案设计 (2)2.2正弦波信号发生器 (2)第3章硬件设计 (3)3.1硬件组成 (3)3.2控制器部分 (4)3.4人机接口部分 (5)第4章软件设计 (6)4.1流程图 (6)4.2 正弦信号发生器程序清单 (7)第5章总结 (12)参考文献 (12)第1章绪论1 DSP简介数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,信号处理已经在通信等领域得到极为广泛的应用。
图一是数字信号处理系统的简化框图。
此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换成模拟信号输出。
其中抗混叠滤波器的作用是将输入信号x (t)中高于折叠频率的分量滤除,以防止信号频谱的混叠。
随后,信号经采样和A/D 转换后,变成数字信号x(n)。
数字信号处理器对x(n)进行处理,得到输出数字信号y (n),经D/A转换器变成模拟信号。
此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。
图1.1数字信号处理系统简化框图数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。
第2章 总体方案的分析和设计2.1 总体方案设计1.基于DSP 的特点,本设计采用TMS320C54X 系列的DSP 作为正弦信号发生器的核心控制芯片。
基于DSP的正弦信号发生器

基于DSP的正弦信号发生器1.正弦信号在各种科学和工程领域中广泛应用,如通信系统、音频处理、医学诊断等。
因此,制作一个能够生成正弦信号的设备是非常必要的。
传统的方法是使用模拟电路,但这种方法需要用到很多电子元器件,难以控制和调整。
同时,传统的模拟电路还容易受到电磁干扰、温度等环境因素的影响,导致输出的信号失真。
因此,数字信号处理(DSP)技术逐渐成为生成正弦波信号的常见方法,能够实现高精度、低失真的输出。
2. 设计概述本文介绍一种基于DSP的正弦信号发生器的设计。
该设计采用TMS320C5505数字信号处理芯片和信号解调电路,通过软件和硬件设计,实现了一个高精度、低失真的正弦信号发生器。
2.1 硬件设计本设计采用了TMS320C5505数字信号处理器集成电路作为主控芯片。
该芯片具有低功耗、高性能、灵活性和易于开发等优点。
除此之外,还需要电源模块、时钟模块、信号解调模块等。
2.2 软件设计本设计采用了C语言进行程序设计。
使用Code Composer Studio作为开发环境,将程序编译后烧录到芯片中。
代码的主要实现过程为:1.生成一个只包含一周期正弦波形的信号2.将该信号送入DA(Digital to Analog)转换器,使其变为模拟信号3.经过信号解调器后输出到外部接口信号的生成采用的是Taylor级数展开,可以实现高精度的波形生成。
信号解调电路主要是由低通滤波器、防干扰电路和放大电路等模块组成。
3. 实验结果经过实验测试,本设计输出的正弦波信号的频率可以在0~10kHz范围内任意设定。
信号的失真率小于0.1%。
同时,本设计还支持正弦波的相位调节和幅度调节等功能。
通过外部的控制,可以实现信号的精准控制和调节。
4.本文介绍了一种基于DSP的正弦信号发生器的设计,通过使用数字信号处理技术,实现了高精度、低失真的正弦波信号的生成。
该设计具有灵活性和可扩展性,可以为各种科学和工程领域提供高精度的正弦信号源。
基于DSP的正弦波信号发生器(汇编语言)

正弦波信号发生器一、实验目的1.了解用泰勒级数展开法计算角度正弦值和余弦值;2.了解产生正弦信号的方法;3.熟悉使用汇编语言编写较复杂的程序;4.熟悉在CCS 环境下计算角度正弦值和余弦值及产生正弦波的方法;二、实验原理泰勒级数展开法是根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。
正弦函数和余弦函数可以展开成泰勒级数,其表达式:递推公式: sin()2cos()sin[(1)]sin[(2)]cos()2cos()sin[(1)]cos[(2)]nx x n x n x nx x n x n x =---=--- 由递推公式可以看出,在计算正弦和余弦值时,需要已知cos(x )、sin(n -1)x 、sin(n -2)x 和cos(n -2)x 。
用这种方法求少数点还可以,如产生连续正弦波、余弦波,则积累误差太大,不可取。
下面主要用泰勒级数展开法求正弦和余弦值,以及产生正弦波的方法。
三、实验内容与步骤1.用泰勒级数展开法计算sin(x)的值;(1)在 CCS 中新建项目:sinx.pjt ,建立文件sinx.asm 、vectors.asm 和sinx.cmd 。
并将此三个文件加入到项目中。
******************************************************* 用泰勒级数开展开式计算一个角度的正弦值 **sin(x)=x(1-x*x/2*3(1-x*x/4*5(1-x*x/6*7(1-x*x/8*9))))*******************************************************.title "sinx.asm".mmregs .def startSTACK: .usect "STACK",10start: STM #STACK+10,SPLD #d_x,DPST #6487H,d_x ;x-->d_x CALLsin_start end:B end sin_start:35792222sin()3!5!7!9! 111123456789(((())))x x x x x x x x x x x =-+-+=----⨯⨯⨯⨯24682222cos()12!4!6!8! 11112345678((()))x x x x x x x x x =-+-+=----⨯⨯⨯.def sin_startd_coeff .usect "coeff",4.datatable: .word 01C7H ;c1=1/(8*9).word 030BH ;c2=1/(6*7).word 0666H ;c3=1/(4*5).word 1556H ;c4=1/(2*3)d_x .usect "sin_vars",1d_squr_x .usect "sin_vars",1d_temp .usect "sin_vars",1d_sinx .usect "sin_vars",1c_1 .usect "sin_vars",1.textSSBX FRCTSTM #d_coeff,AR5RPT #3MVPD #table,*AR5+STM #d_coeff,AR3STM #d_x,AR2STM #c_1,AR4ST #7FFFH,c_1SQUR *AR2+,A ;A=x^2ST A,*AR2 ;(AR2)=x^2||LD *AR4,B ;B=1MASR *AR2+,*AR3+,B,A ;A=1-x^2/72,T=x^2MPYA A ;A=T*A=x^2(1-x^2/72)STH A,*AR2 ;(d_temp)=x^2(1-x^2/72)MASR *AR2-,*AR3+,B,A ;A=1-x^2/42(1-x^2/72),T=x^2(1-x^2/72)MPYA *AR2+ ;B=x^2(1-x^2/42(1-x^2/72))ST B,*AR2 ;(d_temp)=x^2(1-x^2/42(1-x^2/72))||LD *AR4,B ;B=1MASR *AR2-,*AR3+,B,A ;A=1-x^2/20(1-x^2/42(1-x^2/72))MPYA *AR2+ ;B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))ST B,*AR2 ;(d_temp)=B||LD *AR4,B ;B=1MASR *AR2-,*AR3+,B,A ;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))MPYA d_x ;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))STH B,d_sinx ;sin(theta)RET.end*******************************************************中断向量文件vectors.asm******************************************************.title "vectors.asm".ref start.sect ".vectors"B start.end*******************************************************链接命令文件******************************************************vectors.objsinx.obj-O sinx.out-m sinx.map-estartMEMORY{PAGE 0:EPROM: org=0090H,len=0F70HVECS: org=0080H,len=0010HPAGE 1:SPRAM: org=1000H,len=1000HDARAM: org=2000H,len=2000H}SECTIONS{.text :>EPROM PAGE 0.data :>EPROM PAGE 0STACK :>SPRAM PAGE 1sin_vars :>DARAM PAGE 1coeff :>DARAM PAGE 1.vectors :>VECS PAGE 0}(2)编译、链接项目文件sinx.pjt。
基于DSP的正弦波信号发生器设计

基于DSP的正弦波信号发生器设计————————————————————————————————作者:————————————————————————————————日期:目录第1章绪论 (1)1 DSP简介 (1)第2章总体方案的分析和设计 (2)2.1 总体方案设计 (2)2.2正弦波信号发生器 (2)第3章硬件设计 (3)3.1硬件组成 (3)3.2控制器部分 (4)3.4人机接口部分 (5)第4章软件设计 (6)4.1流程图 (6)4.2 正弦信号发生器程序清单 (7)第5章总结 (12)参考文献 (12)第1章 绪论1 DSP 简介数字信号处理(Digital Signal Processing ,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,信号处理已经在通信等领域得到极为广泛的应用。
图一是数字信号处理系统的简化框图。
此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换成模拟信号输出。
其中抗混叠滤波器的作用是将输入信号x (t)中高于折叠频率的分量滤除,以防止信号频谱的混叠。
随后,信号经采样和A/D 转换后,变成数字信号x(n)。
数字信号处理器对x(n)进行处理,得到输出数字信号y (n),经D/A 转换器变成模拟信号。
此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。
图1.1 数字信号处理系统简化框图数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
DSP产生不同的波形

附录一DSP源程序include < math. h ># define PI (double) 3. 1415926535897932384626433832795# define BUFF-LENGTH 64# define MAX- FREQ 30000# define MAX- GAIN 511unsigned int data- buffer[BUFF-LENGTH] ;void sin-calc ( unsigned int gain ) / / 正弦{double angle ;double answer ;int i ;double delta-angle = (PI/ 2. 0) / ( (double)BUFF-LENGTH) ;for (i = 0 ,angle = 0 ;i < BUFF-LENGTH;i + + ,angle + = delta-angle) {answer = gain 3 sin(angle) + 0. 5 ;data- buffer[ i ] = (unsigned int) answer ;}}void tri-calc ( unsigned int gain ) / / 三角波{double answer ;double delta = ( (double) gain) / ( (double)BUFF-LENGTH) ;int i ;for (i = 0 ,answer = 0 ; i < BUFF-LENGTH; i + + , answer += delta) {data- buffer[ i ] = (unsigned int) (answer + 0. 5) ;}}void squ-calc ( unsigned int gain) / / 方波{int i ;for (i = 0 ;i < BUFF-LENGTH;i + + ){data- buffer[ i ] = gain ;}# define freq-to-code- rate (double) 107. 3741824/ / @40MHz unsigned long freqword-calc(unsigned int need-freq)double temp ;temp = (double) need-freq 3 freq-to-code- rate + 0. 5 ;return ( (unsigned long) temp) ;}附录二D/A转换程序.global_InitC5402.global_OpenMcBSP.global_CloseMcBSP.global_WRDA50.global_WRDA50t.global_WRDA50tt.global_Test.include MMRegs.hInitC5402:NOPLD#0,DP; //重新设置数据页尖DSP 实现任意波形发生器8STM#0,CLKMD; //DSP时钟软件设置STM#0,CLKMD; //STM#0x4007,CLKMD; //设置C5402DSP时钟为40MHz*STM#0x4007,CLKMD;STM#0x0000,IMR; //周边中断失效STM#0Xffff,IFR;RETNOPNOP****************等待McBSP0 RX完成********************* IfRXRDY1:NOPSTM SPCR1,McBSP0_SPSA; //设置McBSP0使能端为RXLDM McBSP1_SPSD,AAND#0002H,A;BCIfRxRDY1,AEQ;NOPNOPRET; //返回NOPNOP****************等待McBSP0 TX完成********************* IfTxRDY1:NOPSTM SPCR2,McBSP0_SPSA; //设置McBSP0使能端为TXLDM McBSP0_SPSD,AAND#0002H,A;BC IfTxRDY1,AEQ;NOPNOPRET;NOPNOP_WRDA50:nopnopoo:CALL IfRxRDY1 Ldm McBSP0_DRR1,b And #0fffeh,bCALL IfTXRDY1 stlm b,McBSP0_DXR1 b ooretnopnopwait:stm 20h,ar3loop1:stm 020h,ar4loop2:banz loop2,*ar4-banz loop1,*ar3-retnopnop.end。
基于DSP的可调波形信号发生器配套程序

7附录7.1 C程序/**********DSP可调波形发生器C程序*********/#include "scancode.h"#define PI 3.1415926ioport unsigned int port3002;ioport unsigned int port3003;ioport unsigned int port1000;ioport unsigned int port1004;ioport unsigned int port8001;ioport unsigned int port8002;/*******************端口定义***********************/#define LED port3002#define DIP port3003#define DAC0 port1000#define LDAC port1004#define CTRKEY port8001 //键盘数据读寄存器#define CTRCLKEY port8002 // 清除键盘寄存器/*********************延时模块*********************/void Delay(unsigned int nDelay) // 延时子程序{int ii,jj,kk=0;for ( ii=0;ii<nDelay;ii++ ){for ( jj=0;jj<64;jj++ ){kk++;}}}/*********************主程序模块*******************/main(){unsigned int nKeyCode,flag,N,F1,V1,V2;float x,x1,x2,sinx,cosx;int uDA0;int i;V1=256; //V1用来控制锯齿波幅度;初值是256,可用按键加减V2=254; //V2用来控三角波幅度;初值是254,可用按键加减F1=1; //F1用来控制锯齿波频率;初值是1,可用按键加减N=360; //N是正弦波采样点数,用来控制正弦波频率;初值是360,可用按键加减uDA0=0;x=0;flag=0; //三角波产生辅助标志/********************波形发生模块*******************/while(1){DAC0=uDA0; // 通道0赋值LDAC=0x1f; // 启动转换i=DIP; // 取拨码开关状态i=i&0x03; // 屏蔽高6位LED=i; // 输出到LEDnKeyCode=CTRKEY;nKeyCode&=0x0ff;nKeyCode=CTRCLKEY;/****************拨码开关选择波形模块****************/switch ( i ){//V1的值可由按键5,6控制,从而改变锯齿波幅度case 0x01: //上锯齿波uDA0+=F1; uDA0%=V1; break;case 0x02: //三角波//从0逐次加1到255是三角波的上升线,到255后逐次减1到0是三角波的下降线if(uDA0<=V2&&flag==0){flag=0;uDA0+=1;}else{flag=1;uDA0-=1;if(uDA0==0)flag=0;}break;case 0x03: //正弦波x+=(2*PI)/N; //N的值在按键中增减,改变N的值可以改变正弦波频率if(x<=PI/4){//将sinx和cosx按泰勒级数展开sinx=x*(1-x*x/(2*3)*(1-x*x/(4*5)*(1-x*x/(6*7)*(1-x*x/(8*9)*(1-(x*x/(10*11)))))));cosx=1-x*x/(2*1)*(1-x*x/(4*3)*(1-x*x/(6*5)*(1-x*x/(8*7)*(1-(x*x/(10*9))))));}else if(x<=PI/2){x1=PI/2-x;sinx=x1*(1-x1*x1/(2*3)*(1-x1*x1/(4*5)*(1-x1*x1/(6*7)*(1-x1*x1/(8*9)*(1-(x1*x1/(10*11)))))) );cosx=1-x1*x1/(2*1)*(1-x1*x1/(4*3)*(1-x1*x1/(6*5)*(1-x1*x1/(8*7)*(1-(x1*x1/(10*9))))));}else if(x<=PI){x2=x-PI;sinx=x2*(1-x2*x2/(2*3)*(1-x2*x2/(4*5)*(1-x2*x2/(6*7)*(1-x2*x2/(8*9)*(1-(x2*x2/(10*11)))))) );cosx=1-x2*x2/(2*1)*(1-x2*x2/(4*3)*(1-x2*x2/(6*5)*(1-x2*x2/(8*7)*(1-(x2*x2/(10*9))))));}else{x=0;sinx=0;}uDA0=128+127*2*sinx*cosx;break;}/*******************按键调频调幅模块********************/if ( nKeyCode!=0 && nKeyCode!=0x0ff ) //如果有键按下,执行内部程序{switch(nKeyCode){case 2:N-=18; //按键2每按一下,采样点数减18,增加正弦波的频率if(N<=0)N=360;F1+=1; //按键2每按一下,F1加1,减小锯齿波的频率break;case 3:N+=18; //按键3每按一下,采样点数加18,减少正弦波的频率F1-=1; //按键3每按一下,F1减1,增加锯齿波的频率if(F1<=0)F1=1;break;case 5:V1++ ; //锯齿波幅度增加if(V1>=255)V1=255;V2++; //三角波幅度增加if(V2>=255)V2=254;break;case 6:V1--; //锯齿波幅度减少if(V1==0)V1=256;V2--; //三角波幅度减少if(V2==0)V2=254;break;}}}}。
基于DSP的可调波形信号发生器

基于DSP的可调波形信号发⽣器DSP课程设计基于DSP的可调波形信号发⽣器专业:电⼦信息⼯程1111指导⽼师: 张静组员:⽬录1 绪论 (3)1.1信号发⽣器发展及背景 (3)1.2信号发⽣器的研究⽬的 (3)2 基于DSP信号发⽣器的⽅案选择 (4)2.1 查表法 (4)2.2 计算法 (4)3 硬件模块设计 (5)3.1 系统硬件框图设计 (5)3.2 系统硬件构成 (5)3.3 DSP芯⽚特点功能 (8)4 软件模块设计 (10)4.1 程序流程图 (10)4.2 三种波形设计⽅案和流程图 (10)4.3 波形选择及调频调幅程序设计 (12)5 软硬件调试 (12)5.1 CCS软件连接实验箱 (12)5.2软件调试结果 (13)6 结束语 (15)6.1 总结 (15)7附录........................................................................................... 错误!未定义书签。
7.1 C程序.............................................................................................. 错误!未定义书签。
基于DSP的可调频调幅波形信号发⽣器摘要:该设计阐述了基于TMS320VC5416 DSP实现信号发⽣器的设计原理和实现⽅法,详细介绍了所设计的信号发⽣器的硬件结构和程序设计。
该信号发⽣器是⽤DSP芯⽚产⽣各种波型离散值,然后利⽤DSP实验箱上的D/A模块将DSP芯⽚⽣成的数字波型转换成模拟波,可以⽣成正弦波、⽅波、锯齿波、三⾓波等其它各种信号波形,利⽤按键和拨码模块来改变波型频率和幅度值。
关键词:信号发⽣器;D/A 转换;TMS320VC5416;硬件结构;程序设计;常⽤波形Based on DSP can FM modulation waveform signal generatorAbstract:The design of signal generator based on TMS320VC5416 DSP, expatiate on the design principle and realization method, introduces in detail the design of the hardware structure and software design of the signal generator. The signal generator is to use DSP chips to produce all kinds of wave type discrete values, and then use D/A module on DSP experiment box will be generated by the DSP chip, digital wave type into analog wave can generate sine wave, squarewave, sawtooth wave, triangle wave, and other various signal waveform, use the buttons and dial the code module to change mode frequency and amplitude values.Key words:signal generator; D/A conversion; TMS320VC5416; The hardware structure; Program design; Common waveform 1 绪论1.1信号发⽣器发展及背景⾃70年代微处理器出现以后,利⽤微处理器、模数转换器和数模转换器,硬件和软件使信号发⽣器的功能扩⼤,能够产⽣出⽐较复杂的波形。
数字信号处理(DSP)系统的正弦波发生器

组成, 这些点与 ! 轴的每一个角度值相对应, 那 么我们可以利用 #$& 处理器处理大量重复计算 的优势来计算 ! 轴每一点对应的 % 的值 0 在 ! 轴取 *5, 个点来进行逼近 1 ! 例如给出 ! 值为 ! L / I 5 执行结果 :G6 ! I .8@" @/9 2 弧度 0 ,! 9 @./ 弧度 1 , 误差在万分之一内, 如果改变 ! 值, 2 I ,! 9,9 ,5, 便可以计算其他角度的正弦值了 ! 这个 程序的 计算是 定义 在小数 方式 下的 ! 即它的最大值只能是 9;;;2 , 其中的最高位为符 号位 ! 首先在数据存储器中定义五个字 ! 其中 M ? N 存储公式中的 ! 值,即弧度值 ! M ? :OPQ ? ! 保存 !+ 供公式调用 ! M ? :G6N 保存得到的 :G6 ! 值 ! M ? HRST 自定义空间,存储计算的中间值 ! - ? " 保存一个 接近 " 的 "5 进制小数 9;;;2! 又在数据存储器
数字信号处理 0 #$& 1 系统的正弦波发生器
孙 清
0 辽宁省医疗器械学校,辽宁 沈阳 "",,+/ 1
摘 关
要:介绍了用数字信号处理器 0 #$& 1 芯片所组成的 #$% 板系统, 利用泰勒级数展开法实现了正 键 词:数字信号处理器;正弦波发生器 U #$% 板 文献标识码: 8
弦波发生器 ! 给出了详细的编程思路及软件流程图 ! 中国分类号: ’V C""! +
正弦值计算 正弦值计算
+ + !V $ R $ *UUU- 、 !? $ R $ +XXU-N 这 样 公 ? X % V 式中用到的常数都定义完毕了 N 分析一下公式 发 现 它 可 以 分 解 为 四 个 + Y " % 2 ;Z R ZZ @ 的 形 式,且由公式的最内部向外推即可得到。同样, 应用上述方法可以得到一个计算给定弧度的余 弦程序 N 但有这样一个问题,由于程序的编制采用小 数形式, 其弧度大于 + 的正弦值得不到, 这就对正 弦波的产生造成了障碍 N 可由于正弦波的特殊的 对称形式给程序的编制找到了出口 N 即* )"(? 之 !"# 2 " ( ? @ 的弧度为 *N TQX? [+, 间的任意正弦、 余弦值可以利用汇编程序得到 N 又 可以利用公式: !"# %! $ %!"# ! R &’! ! 得到 * ) " ( % 之间的正弦值 N 而 * ) " ( % 的正弦曲线与 " ( % ) " 的正弦曲线通过 " $ " ( % 这条轴左右对称 N 那么就可以得到 " ( % ) " 的正弦值 N 而 * ) " 的 正弦曲线的相反数通过 # $ " 这条轴与 " ) %" 左右对称 N 这样 " ) %" 的正弦值也得到了 N 一 个周期内完整正弦波就得到了 N
基于dsp的正弦波发生器课程设计概要

第1章 绪论1.1 DSP 简介数字信号处理(Digital Signal Processing ,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,信号处理已经在通信等领域得到极为广泛的应用。
图一是数字信号处理系统的简化框图。
此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换成模拟信号输出。
其中抗混叠滤波器的作用是将输入信号x (t)中高于折叠频率的分量滤除,以防止信号频谱的混叠。
随后,信号经采样和A/D 转换后,变成数字信号x(n)。
数字信号处理器对x(n)进行处理,得到输出数字信号y (n),经D/A 转换器变成模拟信号。
此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。
图1.1 数字信号处理系统简化框图数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为抗混叠 滤波器A/D数字信号处理D/A低通滤波器x(n)y(n) x(t)y(t)一系列新兴学科的理论基础。
1.2课题研究的目的意义科技的进步带动了DSP技术的发展,现代控制设备的性能和结构发生了巨大的变化,我们已经进入了高速发展的信息时代,DSP技术也成为当今科技的主流之一,被广泛地应用于生产的各个领域。
对于本次设计,其目的在于:(1) 了解DSP及DSP控制器的发展过程及其特点。
信号发生器(正弦波,方波,三角波)51单片机C语言代码

/**************************************//* 信号发生器(正弦波,方波,三角波)*/ /*************************************/#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit cs=P2^0;sbit clk=P2^1;sbit din=P2^2;sbit key1=P1^0;sbit key2=P1^1; uchar keydat;uchar flag;被置零立马停止发信号//tlc5615 片选端口//tlc5615 时钟线//tlc5615 传输端口//按键的单片机接口//波形发生终止信号的标志位一旦uchar m,num; uchar dat=0xff;uchar code tosin[141]={//正弦波的编码0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16, 0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b, 0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45, 0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63, 0x66,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x74,0x75, 0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e, 0x7f,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79, 0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x6f,0x6c,0x69, 0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c, 0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a, 0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a, 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01, 0x00};uchar flagsqu; 中断控制)// 方波高低电平控制为 (运用定时器 1void delay(uchar z) //延时函数{uchar x,y;for(x=0;x<110;x++)for(y=z;y>0;y--);}void prepare() {cs=1;din=1;clk=0;cs=0; 为低时进? //tlc5615 的初始化//cs 的上升沿和下降沿必须在clk}/* 用中断来产生方波void Squtranslator(){TR1=1;的持续时间占空比//启动定时器 1 控制高低电平do{do{_wave=0;}while((!flagsqu) && flag==1);// 如果一旦终止信号的//产生可以立马退出循环flagsqu=0;do{_wave=1;}while((!flagsqu) && flag==1); flagsqu=0; }while(flag);flag=1;TR1=0;}*/void Squtranslator() //方波函数{uchar j;uchar dat1=0x7f;while(flag){do{}prepare();dat=dat1;for(j=0;j<12;j++) { din=(bit)(dat>>7);clk=1;dat=dat<<1; clk=0;}cs=1;为低时进行delay(200);if(dat1==0)dat1=0x7f;elsedat1=0;}while(flag);}//将数据的最高位赋给din//一位位的传输//cs 的上升沿和下降沿必须在//使高低电平持续一段时间//完成了0和0x7f 之间的替换clkvoid Tratranslator() //锯齿波的发生函数{uchar j;uchar dat1=0x7f;while(flag){do{prepare();dat=dat1;for(j=0;j<12;j++){din=(bit)(dat>>7);clk=1;dat=dat<<1;clk=0;}cs=1;为低时进行delay(2);dat1--;}while(flag && dat1);do{//将数据的最高位赋给din//一位位的传输//cs 的上升沿和下降沿必须在//稍加延时//一旦有终止信号就可以停止clk{uchar i,j;prepare(); dat=dat1; for(j=0;j<12;j++){din=(bit)(dat>>7); //将数据的最高位赋给 dindelay(2); dat1++;}while(flag && (!(dat1==0x7f)));}}void Sintranslator(uchar wave[],uchar num )//正弦波的转换函数clk=1; dat=dat<<1; clk=0;}cs=1;为低时进行//一位位的传输//cs 的上升沿和下降沿必须在clk//稍加延时uchar dat1;do{for(i=0;i<num;i++){prepare();dat1=wave[i]; //打开片选开始工作for(j=0;j<12;j++){din=(bit)(dat1>>7); //将数据的最高位赋给dinclk=1;dat1=dat1<<1; //一位位的传输clk=0;if(flag==0)break;}cs=1; //cs 的上升沿和下降沿必须在clk 为低时进行delay(1); //稍加延时if(flag==0)break;}}while(flag); //等待控制键的暂停}void keyscan() //切换功能按键返回键值函数{uchar i;for(i=0;i<4;i++){if(key1==0){delay(10);if(key1==0){keydat++;do{}while(!key1); //松手检测if(keydat==4)keydat=1;//加满回零处理}}}}void keycountrl() // 切断输出控制函数{if(key2==0){delay(10);{case 1:if(key2==0)flag=0;do{}while(!key2); //松手检测}}}void main (){uchar temp;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1){do{switch(keydat)//确定定时器的工作方式 //给定时器 0 赋予初值 //开总中断 //开启定时器 0 中断flag=1;do{Sintranslator(tosin,141);}while(flag);break;case 2: flag=1;do{Tratranslator();}while(flag);break;case 3: flag=1;do{Squtranslator();}while(flag);break;default:break;}}while(flag);temp=keydat; // 装载键值while(keydat==temp); // 在这里等待键值的改变}}void Time0() interrupt 1{TH0=(65536-50000)/256; //定时器0 用来扫描按键不断地扫描dTL0=(65536-50000)%256;num++;if(num==4){keyscan();keycountrl();num=0;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
要求可以使用拨码开关控制波形的输出,其对照如下:#include "DSP281x_Device.h" // DSP281x Headerfile Include File #include "DSP281x_Examples.h" // DSP281x Examples Include File #include "f2812a.h"#define DIPS (*(unsigned int *)0xc0001)// Prototype statements for functions found within this file.// interrupt void ISRTimer2(void);void dac_loop(void);typedef unsigned char uint8; /*开始*/typedef unsigned int uint16;typedef unsigned long uint32;uint8 const code ZXB_code[256]={0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c};/*结束*/void main(void){InitSysCtrl();dac_loop();}void dac_loop(void){int i,j,m,k;i=0;//m=DIPS&0x0f;for(;;){ m=DIPS&0x0f;if(m==0) //拨码开关值为0,显示上斜波形for(i=0;i<=0xfff;i+=0x10){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}if(m==1) //拨码开关值为1,显示下斜波形for(i=0;i<=0xfff;i-=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}if(m==2) //拨码开关值为2,显示三角波形{for(i=0;i<=0xfff;i+=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(k=0xfff;k>=0;k-=0x10){DA_DA TA_L=k&0xff; //第一通道数据输出量低8位DA_DA TA_H=((k>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}}if(m==3) //拨码开关值为3,显示梯形波{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0x0f|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=0; //第一通道数据输出量低8位DA_DA TA_H=0|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}}if(m==4) //拨码开关值为4,显示方波{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0xf|DA_CHN1;//第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x15;j++); //更改频率}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0; //第一通道数据输出量低8位DA_DATA_H=0|DA_CHN1; //第一通道da数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x15;j++); //更改频率}}////////if(m==5) //拨码开关值为5,显示更改频率后的上斜波形for(i=0;i<=0xfff;i+=0x10){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}if(m==6) //拨码开关值为6,显示更改频率后的下斜波形for(i=0;i<=0xfff;i-=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x15;j++); //更改频率}if(m==7) //拨码开关值为7,显示更改频率后的三角波形{for(i=0;i<=0xfff;i+=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(k=0xfff;k>=0;k-=0x10){DA_DA TA_L=k&0xff; //第一通道数据输出量低8位DA_DA TA_H=((k>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}}if(m==8) //拨码开关值为8,显示更改频率后的梯形波形{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0x0f|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=0; //第一通道数据输出量低8位DA_DA TA_H=0|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++) ;//更改频率}}if(m==9) //拨码开关值为9,显示更改频率后的方波{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0xf|DA_CHN1;//第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0; //第一通道数据输出量低8位DA_DATA_H=0|DA_CHN1; //第一通道da数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}}if(m==10) //拨码开关值为10,显示更改频率后的正弦波{uint16 data x;while(1){for(x=0;x<256;x++){DA_DA TA_L =ZXB_code[x]&0xff;DA_DA TA_H=(( ZXB_code[x]>>8)&0x0f)|DA_CHN1;DA_CTL=0;}}}}}。