音频信号频谱分析及银行存取款管理_第1页
音频信号频谱分析及银行存取款管理_第2页
音频信号频谱分析及银行存取款管理_第3页
音频信号频谱分析及银行存取款管理_第4页
音频信号频谱分析及银行存取款管理_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

音频信号频谱分析摘要在当今的数字化时代背景下,DSP已成为通信、计算机、消费类电子产品等领域的基础器件,是集成电路中发展最快的电子产品,并成为电子产品更新换代的决定因素。DSP芯片已经被广泛地应用于当今技术革命的各个领域,而且DSP技术也正以极快的速度被应用在通信、电子系统、信号处理系统等许多领域中。本次课程设计介绍了音频信号频谱分析的原理以及其所涉及的硬件结构和软件设计,该设计是基于TMS320C5416DSP芯片的音频信号频谱分析的设计系统的主要功能对语音信号进行采样滤波后FFT变换,并用采集的音频信号进行频谱分析,FFT算法采用TLC320AIC23编写DSP程序实现。然后通过LCD观察其频谱分布。关键词:DSP;音频信号;频谱分析;FFT;LCD目录TOC\o"1-2"\h\u1绪论 11.1选题背景 11.2设计要求 12系统总硬件设计方案 22.1硬件系统框图 22.2TLV320AIC23芯片简介 22.3TMS320C5416DSP芯片 32.412864LCD 33系统模块设计 43.1语音信号采集模块 43.2语音信号处理模块 83.3LCD显示模块 94设计结果显示 95设计心得 11参考文献 12附录设计程序 13第41页,共52页1绪论1.1选题背景目前,在微电子技术发展的带动下,DSP芯片的发展日新月异,DSP的功能日益强大,性能价格比不断上升,开发手段不断改进。DSP芯片已经完全走下了“贵族”的圣坛。DSP芯片已经在通信与电子系统、信号处理系统、自动控制、雷达、军事、航空航天、医疗、家用电器、电力系统等许多领域中得到了广泛的应用,而且新的应用领域在不断地被发掘。DSP处理速度快,功耗低,性能好,基于TMS320C5416DSP芯片的语音存储容量大,具有很好的通信音质等特点,因此被广泛应用于很多领域中。本设计实现的语音分析系统具有如下优点:1.音频数据占用资源少2.音质通信级3.开发难度低4.语音芯片与DSP接口电路简单5.体积小该语音分析系统的设计能够完成语音采集,播放,存储,频谱分析,基本实现了语音分析功能。随着技术的进步,TMS320C5416DSP与TLV320AIC23的结合的语音编码方案将会有更好的应用前景。1.2设计要求DSP课程设计是对《数字信号处理》、《DSP原理及应用》等课程的较全面练习和训练,是实践教学中的一个重要环节。通过本次课程设计,综合运用数字信号处理、DSP技术课程以及其他有关先修课程的理论和生产实际知识去分析和解决具体问题,并使所学知识得到进一步巩固、深化和发展。初步培养学生对工程设计的独立工作能力,掌握电子系统设计的一般方法。通过课程设计完成基本技能的训练,如查阅设计资料和手册、程序的设计、调试等,提高学生分析问题、解决问题的能力。本题目通过TLC320AIC23采集音频信号(f.max<10kHz),编写DSP的FFT处理程序(自定频谱分辨力),获得幅频特性之后,在点阵液晶中大致显示出幅频图。并在液晶中用文字显示频率幅值前三的频率值。DSP与TLC320AIC23接口电路的原理图绘制;DSP控制TLC320AIC23的程序编写与调试;TLC320AIC23进行语音模拟量到数字信号的转换,实现声音的采集,在CCS软件中分析信号的幅频特性;编写DSP的FFT处理程序;控制点阵液晶,实现绘图功能,将幅频图显示出来;按要求编写课程设计报告书,正确、完整的阐述设计和实验结果;在报告中绘制程序的流程图,并文字说明。2系统总硬件设计方案2.1硬件系统框图本系统用DSP芯片TMS320C5416与音频编解码芯片TLV320AIC23实现硬件接口和软件设计,并在此硬件基础上实现语音信号的采集、频谱分析并用LCD显示语音信号的幅频特性曲线。本系统包括音频采集、DSP对语音信号的处理、LCD显示三部分。系统结构如图2-1所示:TLV320AIC23TLV320AIC23TMS320C5416DSP12864LCD音频信号输入数据接口控制接口图2-12.2TLV320AIC23芯片简介TLV320AIC23(以下简称AIC23)是TI推出的一款高性能的立体声音频Codec芯片,内置耳机输出放大器,支持MIC和LINEIN两种输入方式(二选一),且对输入和输出都具有可编程增益调节。AIC23的模数转换(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。与此同时,AIC23还具有很低的能耗,回放模式下功率仅为23mW,省电模式下更是小于15uW。由于具有上述优点,使得AIC23是一款非常理想的音频模拟I/O器件,可以很好的应用在随声听(如CD,MP3……)、录音机等数字音频领域。2.3TMS320C5416DSP芯片系统采用的主芯片是TI公司的一款16位定点DSP:TMS320C5416(以下简称C5416),主要是考虑到C5416片内具有128K*16位的内部RAM,这对提高系统总体性能和集成度有很大的帮助。另外C5416还具有3个MCBSP多通道缓冲串口,该串口与SPI器件兼容,提供多达128个发送和接收通道。与其他C54xDSP芯片一样C5416具有功耗低、运算速率高、性价比高的优点。另外C5416具有如下特点:当核电压为1.6伏特时的工作频率可达到160MIPS;能访问64K数据存储空间、64KI/O空间、以及192K程序存储空间。TMS320C5416作为主芯片实现语音信号采集、存储和各模块之间的通信等控制,其主要功能有:上电自举,读取键盘值并初始化音频编码芯片和液晶屏,控制TLV320AIC23并通过液晶屏显示TLV320AIC23的工作状态,TMS320C5416通过以下引脚与TLV320AIC23连接。BCLKX0/BCLKX1:缓冲串口0和1的发送时钟,用于对来自缓冲串行口发送移位寄存器和传送至数据发送引脚的数据进行定时;BDX0/BDX1:缓冲串行口数据发送端,来自缓冲串行口发送移位寄存器中的数据经该引脚串行发送;BFSX0/BFSX1:用于发送输出的帧同步脉冲;BDR0:缓冲串行口数据接收端;BFSR0:用于接收输入的帧同步脉冲;X2/CLKIN:由晶振接到内部振荡器的输入引脚。2.412864LCD带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。3系统模块设计3.1语音信号采集模块从适应语音信号频率、满足实时性、降低成本、简化设计的要求出发,本系统选择TLV320AIC23。TLV320AIC23是一种高性能的立体声音频Codec芯片作为从设备,主要完成输入语音信号的A/D转换,语音采样编解码及滤波处理,该芯片构成简单,功能强大。AIC23的管脚和内部结构框图如下:

从上图可以看出,AIC23主要的外围接口分为以下几个部分:一.数字音频接口:主要管脚为

BCLK-数字音频接口时钟信号(bit时钟),当AIC23为从模式时(通常情况),该时钟由DSP产生;AIC23为主模式时,该时钟由AIC23产生;

LRCIN-数字音频接口DAC方向的帧信号(I2S模式下word时钟)

LRCOUT-数字音频接口ADC方向的帧信号

DIN-数字音频接口DAC方向的数据输入

DOUT-数字音频接口ADC方向的数据输出

这部分可以和DSP的McBSP(Multi-channelbufferedserialport,多通道缓存串口)无缝连接,唯一要注意的地方是McBSP的接收时钟和AIC23的BCLK都由McBSP的发送时钟提供。二.麦克风输入接口:主要管脚为

MICBIAS-提供麦克风偏压,通常是3/4AVDD

MICIN-麦克风输入,由AIC结构框图可以看出放大器默认是5倍增益

连接示意图如下:

三.LINEIN输入接口:主要管脚为

LLINEIN-左声道LINEIN输入

RLINEIN-右声道LINEIN输入

连接示意图如下:

四.耳机输出接口:主要管脚为

LHPOUT-左声道耳机放大输出

RHPOUT-右声道耳机放大输出

LOUT-左声道输出

ROUT-右声道输出

从框图可以看出,LOUT和ROUT没有经过内部放大器,所以设计中常用LHPOUT和RHPOUT,连接示意图如下:

五.配置接口:主要管脚为

SDIN-配置数据输入

SCLK-配置时钟

DSP通过该部分配置AIC23的内部寄存器,每个word的前7bit为寄存器地址,后9bit为寄存器内容。六.其他:主要管脚为

MCLK-芯片时钟输入(12.288M、11.2896M、18.432M、16.9344M)

VMID-半压输入,通常由一个10U和一个0.1U电容并联接地

MODE-芯片工作模式选择,Master或者Slave

CS-片选信号(配置时有效)

CLKOUT-时钟输出,可以为MCLK或者MCLK/2(详见寄存器配置)TLV320AIC23通过以下引脚与TMS320C5416连接。BCLK:I2S(一种TLV320AIC23的数字音频接口支持的通用的音频格式)串行数据传输时钟,当TLV320AIC23为主模式时BCLK由TLV320AIC23产生并提供给DSP,频率为主时钟的1/4,当从模式时由DSP产生;DIN:I2S格式串行数据输入端,送入立体声DAC;DOUT:I2S格式串行数据输出端,由立体声ADC产生;LRCIN/LRCOUT:I2S格式数据输入/出帧同步信号;SCLK:控制端口移位时钟;SDIN:控制端口串行数据输入,用来传输配置TLV320AIC23内部寄存器数据;/CS:控制端口输入和地址锁存选择端,在SPI控制模式下,作为数据锁存控制端,在I2C模式下,定义外设的7位地址;XTI/MCLK:晶体或外部时钟输入端,TLV320AIC23内部时钟由它产生。TLV320AIC23的工作时钟由外接的一个11.2896M的晶振提供,TLV320AIC23从电路模块电路如图3-1所示。图3-1TLV320AIC23从电路模块电路3.2语音信号处理模块有语音信号采集模块所采集的模块经过A/D转换输入TMS320C5416DSP芯片对其进行FFT运算,得其幅频特性曲线。FFT算法的实现主要分为三个步骤:1.实现输入数据的比特反转,输入数据的比特翻转实际上就是将输入数据进行位码倒置,以便在整个运算后的输出序列是一个自然序列。2.实现N点复数FFT,这一过程的实现分为三个功能块,即第一级蝶形运算、第二级蝶形运算、第三级蝶形运算乃至log2N级蝶形运算。对于任何一个2的整数幂N=2m,总可以通过M次分解到2点的DFT计算。通过这样的M次分解,可构成M(log2N)级迭代计算,每级由N/2个蝶形运算组成。3.功率谱计算,即计算X(k)=X(n)WNnk,X(k)一般是由实部和虚部组成。因此计算功率普时,只需将FFT变换好的数据,按照实部和虚部求它们的平方和即可。设计的子程序流图如图3-2所示;初始化初始化输入数组排序计算第一层中间值计算层数计算对应层步长计算计算各层中间结果计算结果输出计算层数=0?YN图3-2FFT运算子程序流图3.3LCD显示模块本设计中,采用并行8位数据接口输入方式,把LCD映射到DSP芯片的I/O空间,通过读写I/O地址来控制液晶,TMS320C5416DSP芯片对该地址输出数据,实现LCD的显示控制。LCD显示子程序流程图如图3-3所示。图3-3LCD显示子程序流图4设计结果显示运用C语言编写设计所需要的程序(见附录),把程序下载到的实验箱中,观察LCD上所显示的幅频特性曲线如图4-1,图4-2所示。图4-1基波幅频特性曲线图4-2混频信号幅频特性曲线上图中所显示的分别是基波和基波三次谐波以及五次谐波所叠加而得信号的幅频特性曲线,并且所给信号是一定的,LCD的只进行一次扫描,并且是点状图。对程序稍作修改可以实现动态显示,也可以实现用柱形图来表示频谱,如图4-3所示。图4-3幅频特性柱状图5设计心得这两周的课程设计实习周终于结束了,通过两周以来同学和老师的共同努力,我们终于完成了设计要求。但大家脸上的表情都是欣慰和欢喜的,到底工夫不负有心人。回想过去两周,这里面的辛苦只有做是课程设计的人才明白,才能体会。通过这种综合性训练,要学生达到以下的目的和要求:1.结合课程中所学的理论知识,独立设计方案。达到学有所用的目的。2.学会查阅相关手册与资料,通过查阅手册和文献资料,并掌握合理选用的原则,培养独立分析与解决问题的能力。这次设计我们学到了很多东西,虽然作出来的东西很基础,但是我们加深了对知识的理解和掌握。作为一名大四的学生,我觉得能做类似的课程设计是十分有意义的。同时这是一次团队合作开发过程,一次难得的经历。通过此次设计试验也着重能够学到许多东西。如果说任何机会都是需要去创造出来的话,那么那个创造者,其实就是你自己。时间过得真快,转眼间已经有两个星期了,现在回想起来,往事还历历在目。但是不可否认的却是这些经历将会是我人生当中不可多得的财富和经验的累积。参考文献[1]邹彦.DSP原理及应用[M].北京:电子工业出版社,2005,1.[2]戴明桢.TMS320C54xDSP结构、原理及应用[M].北京航空航天大学出版社,2001,8.[3]胡圣尧.DSP原理及应用[M].东南大学出版社,2008.7.[4]清源科技.TMS320C54xDSP应用程序设计教程[M].机械工业出版社,2004,1.[5]清源科技.TMS320C54x硬件开发教程[M].机械工业出版社,2003,1.附录设计程序//头文件//#include"MMRegs.h"#include"DspRegDefine.h"//VC5402寄存器定义#include<math.h>#include<stdio.h>///*******************宏定义****************************************************************************/#defineUCHAR unsignedchar#defineUINT16 unsignedint#defineUINT32 unsignedlong#defineTRUE 1#defineFALSE 0#defineLEN128////LCD指令//基本指令集RE=0#defineCLEAR0x0001//清除显示#defineRESAC0x0002//位址歸位#defineSETPOINT0x0006//進入點設定,游標右移,DDRAM位址計數器(AC)加1#defineCURSOR0x000F//整體顯示,游標顯示,游標位置反白#defineMCURSOR0x0014//游標向右移動,AC=AC+1#defineFUCSET0x0030//功能設定,BITMPU控制界面,基本指令集,默认设置#defineCGRAMAC0x0040//設定CGRAM位址#defineDDRAMAC0x0080//設定DDRAM位址//第一行AC範圍為80H..8FH//第二行AC範圍為90H..9FH//第三行AC範圍為A0H..AFH//第四行AC範圍為B0H..BFH//#defineREADBFRS=0,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0//BFAC6AC5AC4AC3AC2AC1AC0//讀取忙碌旗標(BF)和位址//就是读取指令寄存器,PORT8006,BF=1,表示LCD忙碌//#defineWRITERAMRS=1,RW=0,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0//D7D6D5D4D3D2D1D0//寫入資料到RAM//就是写数据寄存器:PORT8005//#defineREADRAMRS=1,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0//D7D6D5D4D3D2D1D0//讀取RAM的值//就是从数据寄存器讀取資料,PORT8007//擴充指令集RE=1#defineIDLE0x01//待命模式#defineCGRAMSET0x02//捲動位址或RAM位址選擇#defineREVERSE0x04//反白選擇#defineSLEEP0x0c//脫離睡眠模式#defineEFUCSET0x66//擴充功能設定,8BITMPU控制界面,為擴充指令集動作,繪圖顯示ON#defineSISA0x40//設定IRAM位址或捲動位址#defineSETGDRAM0x80//設定繪圖RAM位址#defineLength128//FFT的点数/////*端口定义*///ioportUINT16port8002;ioportUINT16port8006;//串行时钟地址ioportUINT16port8007;//串行数据地址///*全局变量定义*///UINT16data_buff[LEN];UCHARdata_buffer[128];UCHARdata_picture[16*64];doublepr[128],pi[128],fr[128],fi[128],result[128];constdoublepp=3.1415926;UINT16iii=0;/**************************************************************************************所使用的函数原型****************************************************************************************/voidcpu_init(void);//初始化CPUvoidDelay(UINT16numbers);//延迟externvoiddelay_100us(void);//100us延迟--指令之间的延迟externvoiddelay_1us(void);//1us延迟--时钟之间的延迟voiddelay_50ms(void);//50ms延迟--复位延迟voiddelay_20ms(void);//20ms延迟--清屏延迟voidSendByte(UCHARdat);//串行发送一字节数据voidSendCMD(UCHARdat);//写指令寄存器voidSendDat(UCHARdat);//写显示数据或单字节字符voidDisplay(UCHARx_add,UCHARdat1,UCHARdat2);//写汉字到LCD指定的位置voidxint2_init(void);//外部中断2初始化子程序interruptvoidExtInt2();//中断2中断子程序voidInitlcd(void);//初始化LCdvoiddisplay_lcd();voidbuffer();voiddata_switch(unsignedchar*ptr);voidkfft(doublepr[128],doublepi[128],intn,intk,doublefr[128],doublefi[128],intl,intil);///************************************************************************* ***********************函数定义*******************************************************************************************/////函数名称:voidcpu_init(void)//函数说明:初始化CPU//输入参数:无//输出参数:无//voidxint2_init()//外部中断2初始化子程序{*(unsignedint*)IMR=0x0004;//使能int2中断/*bit151:XINT2flag--write"1"toclearbit14-30:reservedbit21:XINT2Polarity--"1"risingeagebit10:XINT2Priority--"0"Highprioritybit01:XINT2Enable--"1"Enableinterrupt*/asm("rsbxINTM");//开总中断}interruptvoidExtInt2()//中断2中断子程序{*(unsignedint*)IFR=0xFFFF;//清除所有中断标志,"写1清0",这个语句可以省略,响应中断自动清除中断标志//读AD7822的转换结果data_buff[iii]=port8002&0x00ff;iii++;if(iii==256)iii=0;//在此设断点return;}voidcpu_init(void){ asm("nop"); asm("nop"); asm("nop");// //CLKMDDEFINITIONS: //PLLMUL(bit15-12)-0000PLLmultiplier=0(multby1)//PLLDIV(bit11)-0PLLdivider=0(divby1)//PLLCOUNT(bit10-3)-11111111PLLcountersettomax//PLLONOFF(bit2)-1PLLon//PLLNDIV(bit1)-1SelectPLLmode//PLLSTATUS(bit1)-xPLLStatus(readonly)////0000011111111111=0x07ffCLKMD=1XCLKIN// *(unsignedint*)CLKMD=0x0;//switchtoDIVmodeclkout=1/2clkinwhile(((*(unsignedint*)CLKMD)&01)!=0);*(unsignedint*)CLKMD=0x07ff;//switchtoPLLX1mode////ST0DEFINITIONS://ARP(bit15-13)-000Auxiliaryregisterpointer//TC(bit12)-1Test/controlflag//C(bit11)-1Carryissetto1iftheresultofanadditiongeneratesacarry;itisclearedto0ifthe//resultofasubtractiongeneratesaborrow.//OVA(bit10)-0OverflowflagforaccumulatorA//OVB(bit9)-0OverflowflagforaccumulatorB//DP(bit8-0)-00000000Data-memorypagepointer////0001100000000000=0x1800Resetvalue////*(unsignedint*)ST0=0x1800;////ST1DEFINITIONS://BRAF(bit15)-0Block-repeatactiveflag//CPL(bit14)-1CompilermodeCPL=0DP;CPL=1SP//XF(bit13)-1XFstatus//HM(bit12)-0Holdmode//INTM(bit11)-1InterruptmodeINTM=0,Allunmaskedinterruptsareenabled//Reser(bit10)-0Alwaysreadas0//OVM(bit9)-0Overflowmode//SXM(bit8)-1Sign-extensionmode//C16(bit7)-0Dual16-Bit/double-precisionarithmeticmode//FRCT(bit6)-0Fractionalmode//CMPT(bit5)-0Compatibilitymode//ASM(bit4-0)-00000Accumulatorshiftmode////0110100100000000=0x2900Resetvalue////*(unsignedint*)ST1=0x6900;////IPTRDEFINITIONS?//IPTR(bit15-7)-001111111Run-timeInterruptvectorlocation=0x3f80(fornow)//MP/~MC(bit6)-1TurnoffinternalInstructionROM(useRAM)//OVLY(bit5)-1TurnoninternalRAM//AVIS(bit4)-1Addressvisibilityon//DROM(bit3)-0DataROMofFF00~FFFFisexternal//CLKOFF(bit2)-0Clockoutenabled,onlyforuseclkout=cpuclock//SMUL(bit1)-1SaturatebeforemultiplyonMAC//SST(bit0)-0Donotsaturatebeforestore////0011111111110010=0x3ff2/**/ *(unsignedint*)PMST=0x3FF2;// //SWWSRDEFINITIONS?//XPA(bit15)-0Extendedprogramaddresscontrolbit.XPAisusedinconjunctionwiththeprogramspacefields//(bits0through5)toselecttheaddressrangeforprogramspacewaitstates//I/O(bits14-12)-111settomaxwaitstatesforseven//Data1(bits11-9)-111SevenWaitstateforUpperdataspace(0x8000-0xFFFF)//Data2(bits8-6)-111SevenWaitstatesforLowerdataspace(0x0000-0x7FFF)//Prog1(bits5-3)-111SevenWaitstateforUpperprogramspace.(xx8000-xxFFFF)//Prog2(bits2-0)-111SevenWaitstatesforProgramspace.(xx0000-xx7FFF)////1111111111111111-0x7fff/**/ *(unsignedint*)SWWSR=0x7fff;////SWCRDEFINITIONS?//Reserved(bits15-1)//SWSM(bit0)-1wait-statebasevaluesaremulitpliedby2//foramaximumof14waitstates.////0000000000000001// *(unsignedint*)SWCR=0x0001;////BSCRDEFINITIONS?//BNKCMP(bit15-12)-1111Bankcompare.Determinestheexternalmemory-banksize.BNKCMPisusedtomaskthefourMSBsof//anaddress.//11114k//11108k//110016k//100032k//000064k//PS-DS(bit11)-1Oneextracycleisinsertedbetweenconsecutivedataandprogramreads.//Reserved(bits10-3)-00000000//HBH (bit2)-0Thehpibusholderisdisabled//BH(bit1)-0Thedatabusholderisdisabled//EXIO(bit0)-0Theexternalbusinterfacefunctionsasusual////1111100000000000//*(unsignedint*)BSCR=0xf800;// asm("ssbxintm");//Disableallmaskinterrupts////IMRDEFINITIONS //Writinga1toanyIMRbitpositionenablesthecorrespondinginterrupt(whenINTM=0)//Reserved(bits15-14)-xx//DMAC5(bit13)-0DMAchannel5interruptmaskbit//DMAC4(bit12)-0DMAchannel4interruptmaskbit//BXINT1/DMAC3(bit11)-0McBSP1transmitinterruptmaskbit,ortheDMAchannel3//BRINT1/DMAC2(bit10)-0McBSP1receiveinterruptmaskbit,ortheDMAchannel2//HPINT(bit9)-0Hostto’54xinterrup/mask//INT3(bit8)-0Externalinterrupt3mask//TINT1/DMAC1(bit7)-0timer1interruptmaskbit,ortheDMAchannel1interruptmaskbit//DMAC0(bit6)-0reserved,ortheDMAchannel0interruptmaskbit//BXINT0(bit5)-0McBSP0transmitinterruptmaskbit//BRINT0(bit4)-0McBSP0receiveinterruptmaskbit//TINT0(bit3)-0Timer0interruptmaskbit//INT2(bit2)-0Externalinterrupt2maskbit//INT1(bit1)-0Externalinterrupt1maskbit//INT0(bit0)-0Externalinterrupt0maskbit////0000000000000000// *(unsignedint*)IMR=0x0;////IFRDEFINITIONS //Writinga1toanyIFRbitpositionclearthecorrespondinginterruptmask,whencorrespondinginterruptoccurIFRcorrespondingbit=1//Reserved(bits15-14)-xx//DMAC5(bit13)-1DMAchannel5interruptflagbit//DMAC4(bit12)-1DMAchannel4interruptflagbit//BXINT1/DMAC3(bit11)-1McBSP1transmitinterruptflagbit,ortheDMAchannel3//BRINT1/DMAC2(bit10)-1McBSP1receiveinterruptflagbit,ortheDMAchannel2//HPINT(bit9)-1Hostto’54xinterrutpflak//INT3(bit8)-1Externalinterrupt3flag//TINT1/DMAC1(bit7)-1timer1interruptflagbit,ortheDMAchannel1interruptmaskbit//DMAC0(bit6)-1reserved,ortheDMAchannel0interruptflagbit//BXINT0(bit5)-1McBSP0transmitinterruptflagbit//BRINT0(bit4)-1McBSP0receiveinterruptflagbit//TINT0(bit3)-1Timer0interruptflagbit//INT2(bit2)-1Externalinterrupt2flagbit//INT1(bit1)-1Externalinterrupt1flagbit//INT0(bit0)-1Externalinterrupt0flagbit////1111111111111111/**/ *(unsignedint*)IFR=0xffff;//asm("nop"); asm("nop"); asm("nop"); }/************************************************************-函数名称:voidDelay(intnumbers)-函数说明:延时-输入参数:numbers-输出参数:无************************************************************/voidDelay(UINT16numbers){ UINT16i,j; for(i=0;i<4000;i++) for(j=0;j<numbers;j++); }////函数名称:voiddelay_50ms(void)//函数说明:50ms延迟//输入参数:无//输出参数:无//voiddelay_50ms(){UINT16i,j;for(i=0;i<=1000;i++);for(j=0;j<=2000;j++);//延迟250*1000*CLKOUT=500000*CLKOUT//1/CLKOUT=0.2us}////函数名称:voiddelay_20ms(void)//函数说明:20ms延迟//输入参数:无//输出参数:无//voiddelay_20ms(){UINT16i,j;for(i=0;i<=1000;i++);for(j=0;j<=400;j++);//延迟10*1000*CLKOUT=100000*CLKOUT//1/CLKOUT=0.2us}////函数名称:voidSendByte(UCHARdat)串行发送一字节数据//函数说明:串行发送一字节数据,在时钟的上升沿发送数据,在时钟为低电平时,数据变化//输入参数:发送的数据//输出参数:无//voidSendByte(UCHARdat){UCHARi;UINT16temp;for(i=0;i<8;i++){temp=port8007;//读IO8007SCLK="0";if(dat&0x0080)port8006=0;//写IO8006SID="1",发送数据"1"MSB先发送elsetemp=port8006;//读IO8006SID="0",发送数据"0"MSB先发送port8007=0;//写IO8007SCLK="1";dat=dat<<1;//数据左移,移位到dat.7}temp=port8007;//读IO8007SCLK="0";}////函数名称:voidSendCMD(UCHARdat)写指令寄存器//函数说明:写指令寄存器//输入参数:输入的命令字//输出参数:无//voidSendCMD(UCHARdat){SendByte(0x00F8);//11111,00,0RW=0,RS=0同步标志SendByte(dat&0x00F0);//高四位SendByte((dat&0x000F)<<4);//低四位}////函数名称:voidSendDat(UCHARdat)写显示数据或单字节字符//函数说明:写数据寄存器//输入参数:输入的数据//输出参数:无//voidSendDat(UCHARdat){SendByte(0x00FA);//11111,01,0RW=0,RS=1SendByte(dat&0x00F0);//高四位SendByte((dat&0x000F)<<4);//低四位}////函数名称:voiddisplay(UCHARx_add,UCHARdat1,UCHARdat2)写汉字到LCD指定的位置//函数说明:x_add显示RAM的地址,dat1/dat2显示汉字编码//输入参数:x_add,dat1/dat2//输出参数:无//voidDisplay(UCHARx_add,UCHARdat1,UCHARdat2){SendCMD(x_add);//1xxx,xxxx设定DDRAM7位地址xxx,xxxx到地址计数器ACSendDat(dat1);SendDat(dat2);}////函数名称:voidInitlcm(void)//函数说明:初始化LCM//输入参数:无//输出参数:无//voidInitlcd(){asm("nop");delay_50ms();SendCMD(0x30);//功能設定,8BIT并口,基本指令集delay_100us();SendCMD(0x02);//功能設定,8BIT并口,基本指令集delay_100us();SendCMD(0x0c);//整體顯示,游標顯示,游標位置反白delay_100us();SendCMD(0x06);//清除显示delay_20ms();SendCMD(0x80);//進入點設定,游標右移,DDRAM位址計數器(AC)加1delay_100us();}voiddisplay_lcd(unsignedchar*ptr){unsignedchari,j,k; SendCMD(0x34);//打开扩展指令集 i=0x80; for(j=0;j<32;j++) {SendCMD(i++);SendCMD(0x80); for(k=0;k<16;k++) { SendDat(*ptr++); } } i=0x80; for(j=0;j<32;j++) { SendCMD(i++);SendCMD(0x88); for(k=0;k<16;k++) { SendDat(*ptr++); } }SendCMD(0x36);//打开绘图显示 SendCMD(0x30);//回到基本指令集}/************************************************************* ******************主函数********************************************************************************/voidbuffer(){ inti;/* for(i=0;i<128;i++) { data_buffer[i]=32.0*(1-sin(pp*i/64));; }*/ for(i=0;i<16*64;i++) { data_picture[i]=0x00; }}voiddata_switch(unsignedchar*ptr){ inti,k; for(i=0;i<128;i++) { k=i%8; switch(k) { case0:data_picture[data_buffer[i]*16+i/8]=0x80|data_picture[data_buffer[i]*16+i/8];break; case1:data_picture[data_buffer[i]*16+i/8]=0x40|data_picture[data_buffer[i]*16+i/8];break; case2:data_picture[data_buffer[i]*16+i/8]=0x20|data_picture[data_buffer[i]*16+i/8];break; case3:data_picture[data_buffer[i]*16+i/8]=0x10|data_picture[data_buffer[i]*16+i/8];break; case4:data_picture[data_buffer[i]*16+i/8]=0x08|data_picture[data_buffer[i]*16+i/8];break; case5:data_picture[data_buffer[i]*16+i/8]=0x04|data_picture[data_buffer[i]*16+i/8];break; case6:data_picture[data_buffer[i]*16+i/8]=0x02|data_picture[data_buffer[i]*16+i/8];break; case7:data_picture[data_buffer[i]*16+i/8]=0x01|data_picture[data_buffer[i]*16+i/8];break; } }}voidkfft(doublepr[128],doublepi[128],intn,intk,doublefr[128],doublefi[128],intl,intil){ intit,m,is,i,j,nv,l0;doublep,q,s,vr,vi,poddr,poddi;for(it=0;it<=n-1;it++){m=it;is=0;for(i=0;i<=k-1;i++){j=m/2;is=2*is+(m-2*j);m=j;}fr[it]=pr[is];fi[it]=pi[is];}pr[0]=1.0;pi[0]=0.0;p=6.283185306/(1.0*n);pr[1]=cos(p);pi[1]=-sin(p);if(l!=0)pi[1]=-pi[1];for(i=2;i<=n-1;i++){p=pr[i-1]*pr[1];q=pi[i-1]*pi[1];s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);pr[i]=p-q;pi[i]=s-p-q;}for(it=0;it<=n-2;it=it+2){vr=fr[it];vi=fi[it];fr[it]=vr+fr[it+1];fi[it]=vi+fi[it+1];fr[it+1]=vr-fr[it+1];fi[it+1]=vi-fi[it+1];}m=n/2;nv=2;for(l0=k-2;l0>=0;l0--){m=m/2;nv=2*nv;for(it=0;it<=(m-1)*nv;it=it+nv)for(j=0;j<=(nv/2)-1;j++){p=pr[m*j]*fr[it+j+nv/2];q=pi[m*j]*fi[it+j+nv/2];s=pr[m*j]+pi[m*j];s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]);poddr=p-q;poddi=s-p-q;fr[it+j+nv/2]=fr[it+j]-poddr;fi[it+j+nv/2]=fi[it+j]-poddi;fr[it+j]=fr[it+j]+poddr;fi[it+j]=fi[it+j]+poddi;}}if(l!=0)for(i=0;i<=n-1;i++){fr[i]=fr[i]/(1.0*n);fi[i]=fi[i]/(1.0*n);}if(il!=0)for(i=0;i<=n-1;i++){pr[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]);if(fabs(fr[i])<0.000001*fabs(fi[i])){if((fi[i]*fr[i])>0)pi[i]=90.0;elsepi[i]=-90.0;}elsepi[i]=atan(fi[i]/fr[i])*360.0/6.283185306;}}voidmain(){ inti=0;doublemax=0; //系统初始化asm("nop");cpu_init();//初始化CPUasm("nop"); xint2_init();//外部中断2初始化asm("nop");//LCD初始化asm("nop");Initlcd();for(i=0;i<256;i++)//初始化数组data_buff[i]=0data_buff[i]=0;Delay(2);//while(1){for(i=0;i<128;i++)//待处理的数据{pr[i]=sin(2*pp*i)+2*sin(5*pp*i)+sin(7*pp*i);//pr[i]=data_buff[i];pi[i]=0;fr[i]=0;fi[i]=0;}kfft(pr,pi,128,7,fr,fi,0,1);for(i=0;i<128;i++){result[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]); if(result[i]>max) max=result[i];}for(i=0;i<128;i++){ result[i]=result[i]*64/max; } for(i=0;i<128;i++){ data_buffer[i]=result[i]; }buffer();data_switch(data_buffer);//LCD显示display_lcd(data_picture);}}课程设计任务书学院:机电工程学院专业:机械设计制造及其自动化班级:学号:题目:银行存取款管理一、课程设计时间20**年3月5日~9日(第1周),共计1周。二、课程设计内容以VB+Access组合,实现银行系统储户存取款管理。要求考虑存款类型:活期、定期,要按现有的实际利率计算,储户数据表至少应包括:编号、用户名称、身份证号、密码、存款日期、存款金额、取款日期、利息等,只有在取款时才计算利息。用户界面中的菜单至少应包括“建立新储户”、“存款”、“取款”、“退出”4项。三、课程设计要求程序质量:贯彻事件驱动的程序设计思想。用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课设结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。四、指导教师和学生签字指导教师:________学生签名:________五、成绩六、教师评语

目录需求分析 4设计分析 4关键技术 5总结 9完整的源程序 10参考文献 13

需求分析以VB+Access组合,实现银行系统储户存取款管理。要求:考虑存款类型:活期、定期。要按现有的实际利率计算。储户数据表至少应包括:编号、用户名称、身份证号、密码、存款日期、存款金额、取款日期、利息等,只有在取款时才计算利息。用户界面中的菜单至少应包括“建立新储户”、“存款”、“取款”、“退出”4项。设计分析基本原理:建立程序设计与数据库的连接,用SQL语句在数据库中查找,添加和更改数据。总体设计:SQL语言处理SQL语言处理数据库ADO技术连接(3)详细设计:开始连接数据库添加数据编辑数据新建储户存款取款开始连接数据库添加数据编辑数据新建储户存款取款查找数据1建立与数据库的连接代码如下PrivateSubForm_Load()Dimmpath$,mlink$'用代码设置ADO控件的Connectionstring属性和Commangtype属性mpath=App.Path'获取程序所在的路径IfRight(mpath,1)<>"\"Thenmpath=mpath+"\"'判断是否为子目录mlink="Provider=Microsoft.Jet.OLEDB.4.0;"'指定提供者mlink=mlink+"DataSource="+mpath+"储户信息.mdb"'在数据库文件名前插入路径Adodc1.ConnectionString=mlink'设置连接属性Adodc1.CommandType=adCmdUnknown'指定命令类型EndSub2新建储户是添加数据到数据库中代码如下PrivateSuba_Click()Adodc1.Recordset.AddNewEndSub界面如下图一建立新储户3刷新设置代码如下PrivateSubCommand1_Click()IfText2>""ThenAdodc1.RecordSource="Select*From储户信息Where身份证号='"&Text2&"'"ElseAdodc1.RecordSource="Select*From储户信息"EndIfAdodc1.RefreshEndS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论