数字信号处理课程设计报告.docx

上传人:b****7 文档编号:23707565 上传时间:2023-05-20 格式:DOCX 页数:17 大小:86.56KB
下载 相关 举报
数字信号处理课程设计报告.docx_第1页
第1页 / 共17页
数字信号处理课程设计报告.docx_第2页
第2页 / 共17页
数字信号处理课程设计报告.docx_第3页
第3页 / 共17页
数字信号处理课程设计报告.docx_第4页
第4页 / 共17页
数字信号处理课程设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数字信号处理课程设计报告.docx

《数字信号处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

数字信号处理课程设计报告.docx

数字信号处理课程设计报告

目录

 

1、课程设计名称

2、课程设计前期介绍(凌阳单片机)

1、源来

2、简介

3、优点

4、语音模块

3、课程设计内容及要求

4、课程设计原理

1、硬件设计

2、软件设计

5、主程序代码

6、调试

7、心得及体会

8、附录

1、原件清单

2、原理图

3、实物图

1、课程设计名称

基于凌阳16位单片机的定时报警器

2、课程设计前期介绍(凌阳单片机)

2.1源来

  随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理数据处理以及数字信号处理,DSP(DigitalSignalProcessing)等领域。

凌阳的16位单片机就是为适应这种发展而设计的。

2.2简介

  它的CPU内核采用凌阳最新推出的MicrocontrollerandSignalProcessor16位微机处理器芯片,以下简称µ’nSP。

围绕micro;’nSP所形成的16位u’nSP系列单片机,以下简称µ’nSP家族。

采用的是模块式集成结构,它以µ’nSP内核为中心集成不同规模的ROMPAM和功能丰富的各种外设部件。

µ’nSP内核是一个通用的和结构。

除此之外的其它功能模块均为可选结构。

以及这种结构可大可小可有可无,借助这种通用结构附加可选结构的积木式的构成,便可成为各种系列的派生产品,以适合不同场合,这样做无疑会使每种派生产品具有更强的功能和更低的成本。

µ’nSP家族有有以下特点:

体积小,集成度高,可靠性好易于扩展。

µ’nSP家族把各功能把各功能部件模块化地集成在一个芯片里。

内部采用总线结构,因为减少了各功能部件之间的连接,提高了其可靠性和抗干扰能力,另外,模块化的结构易于系列的扩展,以适应不同用户的需求。

具有较强的中断处理能力。

μ’nSPTM家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。

高性能价格比:

μ’nSPTM家族片内带有高寻址能力的ROM,静态RAM和多功能的I/O口,另外μ’nSPTM的指令系统提供出具有较高运算速度的16位,16位的乘法运算指令和内积运算指令,为其应用添加了DSP功能,使得μ’nSPTM家族运用在复杂的数字信号处理方面既很便利又比专用的DSP芯片廉价。

2.3优点

  功能强、效率高的指令系统:

μ’nSPTM的指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。

低功耗、低电压:

μ’nSPTM家族采用CMOS制造工艺,同时增加了软件激发的弱振方式,空闲方式和掉电方式,极大地降低了其功耗,另外,μ’nSPTM家族的工作电压范围大,能在低电压供电时正常工作,且能用电池供电,这对于其在野外作业等领域中的应用具有特殊的意义。

2.4语音模块

支持语音识别,语音产生。

  凌阳单片机的语音识别模块自带语音的API函数,其中包括A2000格式和S480格式自动播放及手动播放的播放函数,S240、MS01格式自动播放的播放函数、DVR格式的语音录放函数和语音识别函数,让凌阳单片机不但可以作为普通的单片机开发系统,而且还可以作为一个语音系统进行语音播放、语音录放和语音识别,大大降低了凌阳单片机的开发难度,并增强了凌阳单片机的使用领域和功能。

三、课程设计内容及要求

所谓的定时报警器,就是调节时间,进行倒计时,时间到时,播放报警语音。

此次设计,是需要通过3个按键实行时间调整以及开启倒计时。

其中一个为复选键,即第一个键按下第一次,可以调节分的数字,第二下,可以调节秒数,第三下时,开启定时器,进行倒计时。

而第二个键以及第三个键则分别调整加以及减。

由于本次采用的是4位数码管,并经过程序设计,最大定时为一个小时。

四、课程设计原理

4.1硬件设计

本次试验采用4位共阴数码管,以及三个点触开关。

数码管:

  

4位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。

a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。

1af23b

  。

  

  。

  eddpcg4

即:

12-9-8-6为公共端,A-11B-7C-4D-2E-1F-10G-5DP-3

**4位数码管区分共阴阳极的方法

  首先数码管有共阴极和共阳极之分,区别他们的方法是若公共端接地,其他端接电源,若各段测试能亮,说明是共阴的,反之共阳的;若公共端接电源,其他端分别接的,测得各端亮,则说明是共阳的,反之为共阴的。

世面上的四位一体的数码管一般都没有datasheet,所以掌握他们管脚的分布是很重要的一个环节。

点触开关:

这里采用点触开关,就犹如电子手表调节时间按键,触发一次,数字相应的变换一次。

我将点触开关连接在了IOA15~IOA13,初始化时,将IOA15~IOA13给了高电平,在硬件连接时,三个开关的一端接在一起,引出一个端口接在单片机的-端口,将开关按下,对应的IO端口得到低电平,软件中的键扫描程序将作出相应的反应。

4.2软件设计

软件设计时,主要是两个部分。

一是时间通过定时器倒计时,二是按键调节时间。

相对来讲,前者较简单,先完成前面部分,再逐一完善整个程序。

模块一:

时间

首先计算共阴极数码管0~9的代码为:

0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f

进行单片机中IOA,IOB中32个接口的初始化,我设计的试验中,将IOA低八位作为数码管段选端,IOA高三位作为3个点触开关信号的输入端,IOB低四位作为四位数码管的位选端。

根据相应的需要设置为高、低电平。

这里开timerA,采用8192Hz作为时间脉冲,初值可计算,为fccch,以及中断源的初始化:

*P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1;//设置定时器TimerA:

8192Hz

*P_TimerA_Data=0xfccc;//计数初值,定时时间为0.1s

*P_INT_Ctrl=C_IRQ1_TMA;

开始主程序,我们需要在程序中设置全局变量fent,fen,sect,sec分别代表数码管的1~4位。

并在主程序中设置初值,比如sec=sect=fent=0,fen=1(定时一分钟)。

时间显示会逐一变化,是因为中断中,定时器A将开始计时,并以8192Hz的频率,进行访问,当fccc减至0时,0.1s时间到,我们需要在main.c中设一个中断函数,即:

voidIRQ1(void)__attribute__((ISR));//中断函数

voidIRQ1(void)

{

temp++;

*P_INT_Clear=C_IRQ1_TMA;//清除中断标志控制单元

}

每0.1s,temp++,当temp为10时,即为1s时间,即可在程序中作出相应响应。

模块二:

按键

按键扫描是一个比较麻烦的问题,由于程序运行周期很快,按键的时间相对来讲,显得很慢,每当按下键,程序可能已经运行了几十遍甚至上百遍。

也就是数字会变化很快,不能达到预想目的,也就是,按一下第二个键,分钟或秒钟就加1,按第三个键,相应的减1。

所以程序中需要一个延时函数,即:

voiddelay(z)//延时函数

{

intx,y;

for(x=z;x>0;x--)

for(y=10;y>0;y--);

*P_WatchDog_Clear=0x0001;

而第一个键作为复选键,需要在实行它的功能时做相应的条件,比如第三下开启定时器,也就是打开中断:

__asm("INTIRQ");//安装定时,开放IRQ的总中断允许位,但FIQ中断仍禁止

i==0;

而时间变化的逻辑顺序,参考主程序源代码。

模块三:

报警功能的实现

首先是找到相应的音频文件,我实在酷狗中寻找的盗车报警器,然后用酷狗的铃声制作中将其转化为.wav格式,再用凌阳单片机的格式转化工具,这里采用s480,所以转化为.48k格式,并将其复制到你所建立的工程文件夹中,具体实现自动语音播放请参照《16位单片机原理及应用》彭宣戈主编第十章。

课本采用的是A2000,步骤都是一样的。

5、主程序代码

#include"SPCE061V004.h"

#include"hardware.h"

#include"s480.h"

#defineP_WatchDog_Clear(volatileunsignedint*)0x7012

#defineKEY_ALL0xff00//使用IOA8~IOA15作为键盘输入口

staticintb[10]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};//共阴

inttemp,fent,fen,sec,sect,i;

intGetKey(void);

voidplay();

voiddisplay(intfent,intfen,intsect,intsec);

voiddelay(intz);

voidkeyscan(void);

main()

{

*P_IOA_Attrib=0x00ff;//设置A口低8位为同向低输出,高8位为同向上拉输入bw

*P_IOA_Dir=0x00ff;

*P_IOA_Data=0xff00;

*P_IOB_Attrib=0x00ff;//初始化IB0~IB3,控制数码管的位选

*P_IOB_Dir=0x00ff;

*P_IOB_Data=0x0000;

*P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1;//设置定时器TimerA:

8192Hz

*P_TimerA_Data=0xfccc;//计数初值,定时时间为0.1s

*P_INT_Ctrl=C_IRQ1_TMA;

fent=fen=sec=sec=temp=i=0;

while

(1)

{

delay(10);

if(GetKey()==0x8000)//IOA15复选键

{

delay(500);

if(i==3)

{

__asm("INTIRQ");//安装定时,开放IRQ的总中断允许位,但FIQ中断仍禁止

i==0;

}

i++;

}

if(GetKey()==0x4000)//IOA14加法键

{

delay(500);

if(i==1)

{

fen++;

if(fen==10)

{

fent++;

if(fent==6)

fent=0;

fen=0;

}

}

elseif(i==2)

{

sec++;

if(sec==10)

{

sect++;

if(sect==6)

{

sect=sec=0;

}

sec=0;

}

}

}

if(GetKey()==0x2000)//IOA12

{

delay(500);

if(i==1)

{

fen--;

if(fen<0)

{

fent--;

if(fent<0)

{

fent=5;

fen=9;

}

fen=9;

}

}

elseif(i==2)

{

sec--;

if(sec<0)

{

sect--;

if(sect<0)

{

sect=5;

sec=9;

}

sec=9;

}

}

}

if(temp==10)

{

sec--;

if(sec<0)

{

sec=9;

sect--;

if(sect<0)

{

sect=5;

fen--;

if(fen<0)

{

fen=9;

fent--;

if(sec==sect==fen==fent==0)

{

sec=sect=fen=fent=0;

play();

}

}

}

}

temp=0;

fent=0;

}

display(fent,fen,sect,sec);//显示四位数值

*P_WatchDog_Clear=0x0001;

}

}

voiddisplay(fent,fen,sect,sec)//数码管的位选,片选状态

{

*P_IOA_Data=b[fent];

*P_IOB_Data=0xfffe;//IOB0选中

delay(5);

*P_IOA_Data=b[fen]+0x0080;//IOB1选中的小数点点亮

*P_IOB_Data=0xfffd;//IOB1选中

delay(5);

*P_IOA_Data=b[sect];

*P_IOB_Data=0xfffb;//IOB2选中

delay(5);

*P_IOA_Data=b[sec];

*P_IOB_Data=0xfff7;//IOB3选中

delay(5);

}

voiddelay(z)//延时函数

{

intx,y;

for(x=z;x>0;x--)

for(y=10;y>0;y--);

*P_WatchDog_Clear=0x0001;

}

#include"SPCE061V004.h"

voidIRQ1(void)__attribute__((ISR));//中断函数

voidIRQ1(void)

{

temp++;

*P_INT_Clear=C_IRQ1_TMA;//清除中断标志控制单元

}

 

intGetKey(void)//按键扫描

{

unsignedintKeyvalue;//Keyvalue

unsignedinti=0;

unsignedintk=0;

*P_IOA_Dir&=~KEY_ALL;//初始化IOA的相t应端为上拉输入

*P_IOA_Attrib&=~KEY_ALL;

*P_IOA_Buffer|=KEY_ALL;

//等待有键按下,即有端口变为零

i=(*P_IOA_Data&KEY_ALL)^KEY_ALL;//获取按键值

delay

(1);//停顿片刻,判断是否为干扰

k=(*P_IOA_Data&KEY_ALL)^KEY_ALL;//再获取一次

if(i==k)//如果两次相同,输出该值

Keyvalue=k;

else

Keyvalue=0;

returnKeyvalue;

*P_WatchDog_Clear=C_WDTCLR;

}

 

voidplay()

{

SACM_S480_Initial

(1);//自动方式播放初始化

SACM_S480_Play(0,3,3);

while((SACM_S480_Status())&0x0001)

{

SACM_S480_ServiceLoop();

*P_WatchDog_Clear=0x0001;

}

}

6、调试

调试期间,硬件是没有问题的,12个管脚中,4个位选,8个段选,虽然数码管不是按一定的顺序引出的管脚,但在万能版上可以走线。

而最容易出现的问题,就是时间变化的逻辑关系,我在调试的时候,首先调试的是按键功能,按键的键扫描,本来安装软件中,是含有key.asm,是一个键扫描的子程序,并且61开发板中含有key1,key2,key3三个键的,由于刚开始的时候不知道它对应的端口在哪,也就在万能版中自己焊接了三个点触开关。

数码管显示,是直接给相应的段低电平,可以显示出想要的结果。

播放语句,是调试最久的一个模块,虽然之前做过自动播放的试验,可这次却各种调试都有问题,喇叭有电流,可就是不播放音乐,甚至想直接用蜂鸣器代替是,和同学一起努力下,发现了问题,播放音乐程序中没有相应的判断播放问题,只是在中断之前就已经播放,没有考虑到播放后程序的运行,致使语音指挥脉冲信号。

7、心得及体会

1、通过这次课程设计,加强了我们动手、思考和解决问题的能力。

在整个设计过程中,我们通过这个方案包括设计了一套电路原理,和数码管的选择。

这个课程设计硬件部分总共使用了一块四位共阴数码管,三个点触开关

2、在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不了,因此耗费在这上面的时间用去很多。

3、我沉得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。

平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。

而且还可以记住很多东西。

比如一些中断,IO口,平时看课本,这次看了,下次就忘了,通过动手实践让我们对整个61开发板映象深刻。

认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。

所以这个期末测试之前的课程设计对我们的作用是非常大的。

4、在制作硬件部分时,发现细心耐心,恒心一定要有才能做好事情,首先是线的布局上既要美观又要实用和走线简单,兼顾到方方面面去考虑是很需要的,否则只是一纸空话。

5、在画好原理图后的做硬件时,由于61开发板的各个端口地址的不熟悉,导致各个端口的初始化,增加了布线难度,也产生很多不曾注意的问题,今后要牢记这个教训,使以后布线更加顺利。

6、经过一个星期的实习,过程曲折可谓一语难尽。

在此期间我们也失落过,也曾一度热情高涨。

从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。

生活就是这样,汗水预示着结果也见证着收获。

劳动是人类生存生活永恒不变的话题。

通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈电子设计为我们的社会付出。

我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以,而且设计也是一次自我挑战,和同学一起的做可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这一个礼拜的合作,我感觉我和同学们之间的距离更加近了;我想说,确实很累,但当我看到自己所做的成果时,心中也不免产生兴奋;正所谓“三百六十行,行行出状元”。

我们同样可以为社会作出我们应该做的一切,这有什么不好?

我们不断的反问自己。

也许有人不喜欢这类的工作,也许有人认为设计的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就可。

社会需要我们,我们也可以为社会而工作。

既然如此,那还有什么必要失落呢?

于是我们决定沿着自己的路,执着的走下去。

对我而言,知识上的收获重要,精神上的丰收更加可喜。

挫折是一份财富,经历是一份拥有。

这次实习必将成为我人生旅途上一个非常美好的回忆!

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在老师和同学的辛勤指导下,终于游逆而解。

同时,在老师的身上我们学也到很多实用的知识。

7、此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。

 

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

当前位置:首页 > 成人教育 > 电大

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

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