1、使用DSPF2812的GPIO功能,读取外部手动按键的信号,相应改变正弦信号的幅值、相位、频率和偏移(幅值,采用有符号16位整型变量定义)。3) 附加设计:使用DSPF2812的GPIO功能,读取外部手动按键的信号,相应输出正弦波、三角波、方波、锯齿波。并分别实现四种波形的幅值和频率的调节。4) 高级设计:用8个七段数码管,每隔一秒依次循环显示三种信息,包括:日期(格式为2014-06-12);自己的学号(格式为学号的低8位,例如学号为112033101的同学,应当显示:12033101);当前的幅值(格式为:AP-00000AP-32767);频率即每周期的离散采样点数(格式为:PEAD-0
2、12);当前按键坐标(格式为:X X)。5)终极设计:利用点阵循环显示本人姓名。三、 设计方案本次课程设计是基于DSP的可调信号发生器的设计,系统设计方案框图如图3.1所示。通过读取外部手动按键的信号,转换显示CCS窗口的波形,按键控制波形如图3.2所示;同时在数码管上动态显示幅值、频率、学号、按键坐标和日期。图3.1 系统设计方案框图图3.2 按键控制波形四、 软件、硬件设计(根据设计内容适当处理,硬件设计应包括PCB4.1、软件设计软件设计模块包含了按键矩阵模块、波形发生模块、数码管显示模块、点阵显示模块和综合调试显示结果。4.1.1 按键矩阵模块使用DSPF2812的GPIO功能,判断按
3、键是否按下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.1 4*5按键矩阵4*5的按键矩阵,通过9个GPIO端口来扫描控制,即可判断出哪一个按键被按下。按键左
4、端接GPIOA11-GPIOA15,按键右端接GPIOA7-GPIOA10。通过对GPIOA端口进行初始化,按键左端为输出口,按键右端为输入口,将GPIOA11-GPIOA15赋值0,通过对按键右端进行扫描,如果某个按键被按下,则该按键右端对应的GPIO口值为0,否则应为1。按键矩阵模块及原理图如图4.1所示。图4.1 4*5按键矩阵模块及原理图4.2.2 数码管显示实验箱上有8只8段数码管,使用74F164芯片(串入并出芯片)对数码管进行控制。8只数码管的控制使用串行方式,实现8只流水数码管。其中3只电路如图4.2所示,另外5只接线相同。图4.2 数码管模块及其硬件结构五、 设计总结5.1
5、调试结果本次课程设计调试结果如下所示:数码管轮流显示:图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.42. 苏奎峰,吕强等.TMS320X281x DSP原理及C程序开发北京航空航天大学出版社,20083. TMS320F28
6、1x Data Sheet. Texas Instruments.4. TMS320F28x Control and Interrupts Reference Guide. Texas Instruments.5. TMS320F28x Event Manager (EV) Reference Guide. Texas Instruments.6. TMS320F28x Optimizing CC+ Compiler Users Guide. Texas Instruments.7. TMS320F28x DSP CPU and Instruction Set Reference Guide.
7、 Texas Instruments.七、附录/*源代码*/#include DSP28_Device.h#include #define SIZE 512#define pi 3.14int A=1000;/正弦信号幅度int offset=0;/正弦信号偏移量int f=1;/正弦信号频率int s=0,count=1,flag=0;/正弦信号初始相位int sineSIZE;/正弦信号数组unsigned int t;int strnum=0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,
8、0x8E;/*09*/int day=0xDA,0x60,0xBF,0xFC,0x67,0x60,0xFC,0xDA;/显示日期int studentnum17=0xE0,0x60,0x60,0xF2,0xF2,0xFC,0xDA,0x60;/显示学号int Anum=0,0,0,0,0,0x02,0xCE,0xEE;/显示幅度int fnum=0,0,0,0x02,0x7A,0xEE,0x9E,0xCE;/显示频率int key=0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60;/显示按键坐标int ch8=0xFE,0x60,0x60,0xF2,0xF2,0x
9、FC,0xDA,0x60;/缓存int ch18=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;int str1=0x0900,0xFD08,0x0908,0x0910,0x0920,0x7940,0x4104,0x47FE,0x4140,0x7940,0x0920,0x0920,0x0910,0x094E,0x5184,0x2100;/名字1int str2=0x0100,0x0100,0x0104,0xFFFE,0x0100,0x0100,0x0110,0x3FF8,0x0000,0x0200,0x1180,0x5084,0x5012,0x9012,0x0
10、FF0,0x0000;/名字2int str3=0x0100,0x0088,0x3FFC,0x2080,0x2080,0x2088,0x3FFC,0x2080,0x2080,0x2140,0x2140,0x2220,0x2220,0x4410,0x880E,0x3004;/名字3unsigned int *CPLDDREG = (unsigned int*)0x2004;unsigned int *CPLDDREGL = (unsigned int*)0x2006;unsigned int *LEDM_LC = (unsigned int*)0x2018;/16unsigned int *LE
11、DM_LR = (unsigned int*)0x201A;union CPLD_DREGL MYDREGL;/ union CPLD_DREG MYDREG;unsigned int keypress=0;unsigned int keyx,keyy;void delay(unsigned int);void ldelay(unsigned int);void FB(void);/产生方波void SJ(void); /产生三角波void JC(void); /产生锯齿波void ZX(void); /产生正弦波void WriteLED(unsigned int);void WriteLE
12、Ds(unsigned int *);void Time0();void KeyNO(int *ch2);void XueHao();void Ap();void Pead();void main(void) Uint16 a=0x0800; unsigned int i,j,x,y,l,g,k; InitSysCtrl(); /初始化系统 DINT; /关中断 IER = 0x0000; IFR = 0x0000; InitPieCtrl(); /初始化PIE控制寄存器 InitPieVectTable(); /初始化PIE矢量表 InitGpio(); /初始化GPIO EINT; ERT
13、M; MYDREG.all = 0xffff; /init DREG MYDREG.bit.BUFFER_OEn = 0; /BUFFER_OEn = 0 *CPLDDREG = MYDREG.all;MYDREGL.all = 0xffff; /init DREGL /MYDREGL.bit.LEDM_CSn = 0; /LEDM_CSn = 0 while(1) a=0x0800;/*逐行逐列按键扫描,将按键所在位置的坐标存入KEYX和KEYY*/ for (i=0;i5;i+) GpioDataRegs.GPADAT.all=0xffff; GpioDataRegs.GPADAT.all
14、=GpioDataRegs.GPADAT.all&(a30000) A=30000; if(keyx=0&keyy=0&A=A-500; if(A0) A=500; if(keyx=1&f=f+1;f=f-1; if(f0) 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; ch12=strnumkeyx%10;ch14=strnumkeyy%10;ldelay(10);switch(cou
15、nt)case 1:FB();case 2:SJ();case 3:JC(); case 4:ZX();switch(flag)case 0:flag = 1;Time0(); case 1:flag = 2;Xuehao(); case 2:flag = 3;Ap(); case 3:flag = 4;Pead();flag = 0;KeyNO(ch1);WriteLEDs(ch); ldelay(1000); for(i=1;17;i+) for(j=0;ji;j+) l=i-j-1; g=(0x00018)|(str1j8)|(str2j8)|(str3j void FB(void)fo
16、r(t=0;t0) sinet=A; else sinet=-A; void SJ(void) int k,T; T = SIZE/f/2; k= A/T; for(t=0; if( (t/T) % 2 = 0) sinet = k*(t%T)+offset; sinet = A-k*(t%T)+offset;void JC(void) T = SIZE/f; k = A/T; sinet = k*(t%T)+offset;void ZX(void)void XueHao() unsigned char i; for(i=0;8; chi=studentnum17i;void KeyNO(in
17、t *ch2) chi=ch2i;void Time0() chi=dayi;void Ap() ch0= AnumA%10; ch1= Anum(A/10)%10; ch2=Anum(A/100)%10; ch3= Anum(A/1000)%10; ch4= AnumA/10000; ch5=0x03; ch6=0xCE; ch7=0xEE;void Pead() ch0= fnumf/10; ch1= fnum(f%100)/10; ch2= fnum(f%1000)/100; ch3= 0x03; ch4= 0x7A; ch5= 0xEE; ch6= 0x9E; ch7= 0xCE;vo
18、id WriteLED(unsigned int index) unsigned int i; if(index &(0x01i) MYDREGL.bit.LEDSAB = 1; else MYDREGL.bit.LEDSAB = 0; (*CPLDDREGL) = MYDREGL.all; MYDREGL.bit.LEDSCLK = 0; MYDREGL.bit.LEDSCLK = 1;void WriteLEDs(unsigned int * index) unsigned int i,ii; for(ii=0;ii0) k-; delay(5000); void delay(unsigned int t) while(t t-;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1