FFT在单片机上的实现 下载本文

河南科技大学毕业设计(论文)

参考文献

[1] 韩建海、马尾.机械工程测试技术[J].清华大学出版社.2010.5 [2] 孙立功.电子技术(电工学II)[J].高等教育出版社.2010.12

[3] 吴继发、陈特放.单片机实现音频频谱显示的快速算法研究[M].2009.11 [4] 姚永平.STC12C5A60S2系列单片机器件手册[Z].2011.2 [5] 伟纳电子.通用1602液晶显示模块使用手册[Z].2011.8

[6] 张登奇、李宏民、李丹.按时间抽取的基2FFT算法分析及MATLAB实现[M].电子技术.2011第38卷第2期

[7] 胡汉才.单片机原理及接口技术[J].北京:清华大学出版社.1999 [8] 潘永雄.新编单片机原理与应用[J].西安 西安电子科技大学出版社,2003 [9] 陈享成.耿长青.基于单片机的显示终端设计[M].电力自动化设备,2007 [10] 陈兴文.刘燕.单片机应用系统硬件调试技巧[M].中国测控网,2009 [11] 卢官明、宗肪.数字音频原理及应用[J].机械工业出版社.2001.6 [12] 宋瑜.数字音频及多媒体广播接收系统[J].世界广播电视出版社.2003.12 [13] 张韶高.数字声频技术原理及应用[J].国防工业出版社.2001.2 [14] 林福宗.多媒体技术基础[J].清华大学出版社.2001.6

25

河南科技大学毕业设计(论文)

致 谢

如果说任何机会都是需要去创造出来的话,那么那个创造者,其实就是自己。时间过得真快,转眼间已经有一个多月了,现在回想起来,往事还历历在目。但是不可否认的却是这些经历将会是我人生当中不可多得的财富和经验的累积。

在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。

在此要感谢我的指导老师黄晓东对我悉心的指导,感谢老师给我的帮助。导师渊博的专业知识、严谨的治学态度,精益求精的工作作风、平易近人的人格魅力对我影响深远。不仅使我树立了远大的学习目标、掌握了基本的研究方法,还使本人明白了许多为人处事的道理。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太完美,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。在此,谨向黄老师表示崇高的敬意和衷心的感谢!

26

河南科技大学毕业设计(论文)

附 录

一、主程序代码

#include #include #include

#define NOP5 _nop_();_nop_();_nop_();_nop_();_nop_()

#define FOSC 32782266L #define NMS 4

#define T1MS (65536-NMS*FOSC/12/1000)

sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚

unsigned char code User[8][8]=

{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F}, {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F}, {0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F}, {0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F}, {0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F}, {0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, {0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}};

unsigned char code nxd[32]=

{0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30, 1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31};

unsigned char data1[32];

struct complex{float re,im;}; struct complex data2[32];

27

河南科技大学毕业设计(论文)

unsigned char frq1[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; unsigned char frq2[16]=

{16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16}; unsigned char p=0;unsigned char l; unsigned char lcd_flag=0; unsigned char count=10; bit AD_flag=0;

unsigned char point=0; unsigned char temp;

/*********************函数功能:延时1ms*********************/ void delay1ms()

{ unsigned char i,j; for(i=0;i<12;i++) for(j=0;j<30;j++); }

/*******************函数功能:延时若干毫秒********************/ void delay(unsigned int n) { unsigned int i; for(i=0;i

/*****************函数功能:判断液晶模块的忙碌状态**************/ bit BusyTest(void) {

bit result;

RS=0; // RS为低电平,RW为高电平时,可以读状态 RW=1;

E=1; //E=1,才允许读写 }

NOP5; //空操作 NOP5; NOP5;

NOP5; //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0;

return result;

28