基于DSP的可调信号发生器设计Word下载.docx

上传人:b****4 文档编号:17838242 上传时间:2022-12-11 格式:DOCX 页数:21 大小:1.53MB
下载 相关 举报
基于DSP的可调信号发生器设计Word下载.docx_第1页
第1页 / 共21页
基于DSP的可调信号发生器设计Word下载.docx_第2页
第2页 / 共21页
基于DSP的可调信号发生器设计Word下载.docx_第3页
第3页 / 共21页
基于DSP的可调信号发生器设计Word下载.docx_第4页
第4页 / 共21页
基于DSP的可调信号发生器设计Word下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于DSP的可调信号发生器设计Word下载.docx

《基于DSP的可调信号发生器设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于DSP的可调信号发生器设计Word下载.docx(21页珍藏版)》请在冰豆网上搜索。

基于DSP的可调信号发生器设计Word下载.docx

使用DSPF2812的GPIO功能,读取外部手动按键的信号,相应改变正弦信号的幅值、相位、频率和偏移(幅值,采用有符号16位整型变量定义)。

3)附加设计:

使用DSPF2812的GPIO功能,读取外部手动按键的信号,相应输出正弦波、三角波、方波、锯齿波。

并分别实现四种波形的幅值和频率的调节。

4)高级设计:

用8个七段数码管,每隔一秒依次循环显示三种信息,包括:

①日期(格式为2014-06-12);

②自己的学号(格式为学号的低8位,例如学号为112033101的同学,应当显示:

12033101);

③当前的幅值(格式为:

AP-00000~AP-32767);

频率即每周期的离散采样点数(格式为:

PEAD-012);

当前按键坐标(格式为:

XX)。

5)终极设计:

利用点阵循环显示本人姓名。

三、

设计方案

本次课程设计是基于DSP的可调信号发生器的设计,系统设计方案框图如图3.1所示。

通过读取外部手动按键的信号,转换显示CCS窗口的波形,按键控制波形如图3.2所示;

同时在数码管上动态显示幅值、频率、学号、按键坐标和日期。

图3.1系统设计方案框图

图3.2按键控制波形

四、软件、硬件设计(根据设计内容适当处理,硬件设计应包括PCB

4.1、软件设计

软件设计模块包含了按键矩阵模块、波形发生模块、数码管显示模块、点阵显示模块和综合调试显示结果。

4.1.1按键矩阵模块

使用DSPF2812的GPIO功能,判断按键是否按下keypress=1。

再用标志位flag控制选择输出波形。

4.1.2波形发生模块

通过手动按键控制CCS窗口显示波形:

正弦波、方波、三角波、锯齿波。

(1)正弦波

(2)三角波

(3)锯齿波

(4)方波

4.1.3数码管显示模块

提取幅度的数值,分别放入Amp[]数组中,调用WriteLEDs()数码管显示,在数码管上显示幅度、频率、学号、日期和按键坐标。

4.1.4点阵显示模块

图3.3点阵模块及原理图

4.2、硬件设计

硬件电路设计模块包含了矩阵按键电路、数码管显示电路,以及点阵显示电路。

4.2.14*5按键矩阵

4*5的按键矩阵,通过9个GPIO端口来扫描控制,即可判断出哪一个按键被按下。

按键左端接GPIOA11-GPIOA15,按键右端接GPIOA7-GPIOA10。

通过对GPIOA端口进行初始化,按键左端为输出口,按键右端为输入口,将GPIOA11-GPIOA15赋值0,通过对按键右端进行扫描,如果某个按键被按下,则该按键右端对应的GPIO口值为0,否则应为1。

按键矩阵模块及原理图如图4.1所示。

图4.14*5按键矩阵模块及原理图

4.2.2数码管显示

实验箱上有8只8段数码管,使用74F164芯片(串入并出芯片)对数码管进行控制。

8只数码管的控制使用串行方式,实现8只流水数码管。

其中3只电路如图4.2所示,另外5只接线相同。

图4.2数码管模块及其硬件结构

五、设计总结

5.1调试结果

本次课程设计调试结果如下所示:

数码管轮流显示:

图5.1显示当前幅值

图5.3显示每周期的离散采样点数

图5.2显示学号

图5.4显示日期

图5.5显示按键坐标

输出各种波形:

图5.3显示每周期的离散采样点数

图5.6正弦波形

图5.7三角波

图5.8方波

图5.9锯齿波

图5.10波形的幅值与周期

3.点阵显示结果

(显示名字的截图)

5.2心得体会

六、参考文献

[1].顾卫钢.手把手教你学DSP——基于TMS320X281x.北京:

北京航空航天大学出版社,2011.4

[2].苏奎峰,吕强等.TMS320X281xDSP原理及C程序开发北京航空航天大学出版社,2008

[3].TMS320F281xDataSheet.TexasInstruments.

[4].TMS320F28xControlandInterruptsReferenceGuide.TexasInstruments.

[5].TMS320F28xEventManager(EV)ReferenceGuide.TexasInstruments.

[6].TMS320F28xOptimizingC/C++CompilerUser’sGuide.TexasInstruments.

[7].TMS320F28xDSPCPUandInstructionSetReferenceGuide.TexasInstruments.

七、附录

/*************源代码**************/

#include"

DSP28_Device.h"

#include<

math.h>

#defineSIZE512

#definepi3.14

intA=1000;

//正弦信号幅度

intoffset=0;

//正弦信号偏移量

intf=1;

//正弦信号频率

ints=0,count=1,flag=0;

//正弦信号初始相位

intsine[SIZE];

//正弦信号数组

unsignedintt;

intstrnum[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E};

/*0~9*/

intday[]={0xDA,0x60,0xBF,0xFC,0x67,0x60,0xFC,0xDA};

//显示日期

intstudentnum17[]={0xE0,0x60,0x60,0xF2,0xF2,0xFC,0xDA,0x60};

//显示学号

intAnum[]={0,0,0,0,0,0x02,0xCE,0xEE};

//显示幅度

intfnum[]={0,0,0,0x02,0x7A,0xEE,0x9E,0xCE};

//显示频率

intkey[]={0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60};

//显示按键坐标

intch[8]={0xFE,0x60,0x60,0xF2,0xF2,0xFC,0xDA,0x60};

//缓存

intch1[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

intstr1[]={0x0900,0xFD08,0x0908,0x0910,0x0920,0x7940,0x4104,0x47FE,

0x4140,0x7940,0x0920,0x0920,0x0910,0x094E,0x5184,0x2100};

//名字1

intstr2[]={0x0100,0x0100,0x0104,0xFFFE,0x0100,0x0100,0x0110,0x3FF8,

0x0000,0x0200,0x1180,0x5084,0x5012,0x9012,0x0FF0,0x0000};

//名字2

intstr3[]={0x0100,0x0088,0x3FFC,0x2080,0x2080,0x2088,0x3FFC,0x2080,

0x2080,0x2140,0x2140,0x2220,0x2220,0x4410,0x880E,0x3004};

//名字3

unsignedint*CPLDDREG=(unsignedint*)0x2004;

unsignedint*CPLDDREGL=(unsignedint*)0x2006;

unsignedint*LEDM_LC=(unsignedint*)0x2018;

//16

unsignedint*LEDM_LR=(unsignedint*)0x201A;

unionCPLD_DREGLMYDREGL;

//

unionCPLD_DREGMYDREG;

unsignedintkeypress=0;

unsignedintkeyx,keyy;

voiddelay(unsignedint);

voidldelay(unsignedint);

voidFB(void);

//产生方波

voidSJ(void);

//产生三角波

voidJC(void);

//产生锯齿波

voidZX(void);

//产生正弦波

voidWriteLED(unsignedint);

voidWriteLEDs(unsignedint*);

voidTime0();

voidKeyNO(int*ch2);

voidXueHao();

voidAp();

voidPead();

voidmain(void)

{

Uint16a=0x0800;

unsignedinti,j,x,y,l,g,k;

InitSysCtrl();

//初始化系统

DINT;

//关中断

IER=0x0000;

IFR=0x0000;

InitPieCtrl();

//初始化PIE控制寄存器

InitPieVectTable();

//初始化PIE矢量表

InitGpio();

//初始化GPIO

EINT;

ERTM;

MYDREG.all=0xffff;

//initDREG

MYDREG.bit.BUFFER_OEn=0;

//BUFFER_OEn=0

*CPLDDREG=MYDREG.all;

MYDREGL.all=0xffff;

//initDREGL

//MYDREGL.bit.LEDM_CSn=0;

//LEDM_CSn=0

while

(1)

{

a=0x0800;

/**********逐行逐列按键扫描,将按键所在位置的坐标存入KEYX和KEYY****************************/

for(i=0;

i<

5;

i++)

{

GpioDataRegs.GPADAT.all=0xffff;

GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all&

(~(a<

<

i));

delay(500);

if(GpioDataRegs.GPADAT.bit.GPIOA10==0){keypress=1;

keyx=i;

keyy=0;

break;

}

elseif(GpioDataRegs.GPADAT.bit.GPIOA9==0){keypress=1;

keyy=1;

elseif(GpioDataRegs.GPADAT.bit.GPIOA8==0){keypress=1;

keyy=2;

elseif(GpioDataRegs.GPADAT.bit.GPIOA7==0){keypress=1;

keyy=3;

}

if(keyx==0&

&

keyy==1&

keypress==1)

{keypress=0;

A=A+500;

if(A>

30000)A=30000;

if(keyx==0&

keyy==0&

A=A-500;

if(A<

0)A=500;

if(keyx==1&

f=f+1;

f=f-1;

if(f<

0)f=1;

if(keyx==2&

s=s+1;

s=s-1;

if(keyx==3&

offset=offset+1;

offset=offset-1;

if(keyx==4&

count=1;

count=2;

keyy==2&

count=3;

keyy==3&

count=4;

ch1[2]=strnum[keyx%10];

ch1[4]=strnum[keyy%10];

ldelay(10);

switch(count)

case1:

FB();

case2:

SJ();

case3:

JC();

case4:

ZX();

switch(flag)

case0:

flag=1;

Time0();

case1:

flag=2;

Xuehao();

case2:

flag=3;

Ap();

case3:

flag=4;

Pead();

flag=0;

KeyNO(ch1);

WriteLEDs(ch);

ldelay(1000);

for(i=1;

17;

i++)

for(j=0;

j<

i;

j++)

{

l=i-j-1;

g=~(0x0001<

l);

*LEDM_LR=g;

*LEDM_LC=(str1[j]>

>

8)|(str1[j]<

8);

delay(12000);

}

ldelay

(1);

for(i=1;

*LEDM_LC=(str2[j]>

8)|(str2[j]<

ldelay

(1);

*LEDM_LC=(str3[j]>

8)|(str3[j]<

}

}

voidFB(void)

for(t=0;

t<

SIZE;

t++)

{

sine[t]=A*sin(2*pi*f*t/512+s)+offset;

if(sine[t]>

0)

sine[t]=A;

else

sine[t]=-A;

}

voidSJ(void)

intk,T;

T=SIZE/f/2;

k=A/T;

for(t=0;

if((t/T)%2==0)

sine[t]=k*(t%T)+offset;

sine[t]=A-k*(t%T)+offset;

voidJC(void)

T=SIZE/f;

k=A/T;

sine[t]=k*(t%T)+offset;

voidZX(void)

voidXueHao()

unsignedchari;

for(i=0;

8;

ch[i]=studentnum17[i];

voidKeyNO(int*ch2)

ch[i]=ch2[i];

voidTime0()

ch[i]=day[i];

voidAp()

ch[0]=Anum[A%10];

ch[1]=Anum[(A/10)%10];

ch[2]=Anum[(A/100)%10];

ch[3]=Anum[(A/1000)%10];

ch[4]=Anum[A/10000];

ch[5]=0x03;

ch[6]=0xCE;

ch[7]=0xEE;

voidPead()

ch[0]=fnum[f/10];

ch[1]=fnum[(f%100)/10];

ch[2]=fnum[(f%1000)/100];

ch[3]=0x03;

ch[4]=0x7A;

ch[5]=0xEE;

ch[6]=0x9E;

ch[7]=0xCE;

voidWriteLED(unsignedintindex)

unsignedinti;

if(index&

(0x01<

i))

MYDREGL.bit.LEDSAB=1;

else

MYDREGL.bit.LEDSAB=0;

(*CPLDDREGL)=MYDREGL.all;

MYDREGL.bit.LEDSCLK=0;

MYDREGL.bit.LEDSCLK=1;

voidWriteLEDs(unsignedint*index)

unsignedinti,ii;

for(ii=0;

ii<

ii++)

for(i=0;

if(index[ii]&

voidldelay(unsignedintk)

while(k>

0)

k--;

delay(5000);

}

voiddelay(unsignedintt)

while(t>

t--;

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1