


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统原理与应用综合设计简易电子琴系统设计系 部:电子与信息工程系专业班级:电子信息工程09秋2班姓 名:学 号:小组成员:指导教师:完成日期2012年6月目录目录前言1.1电子琴介绍1.2嵌入式电子琴发展趋势1.3实现目标总体设计2.1利用实验资源实现简易电子琴的功能。 2.2主要技术指标硬件设计 3.1 LM3S2110 芯片特性概述中断功能概述.的 GPIO 特性.33.1.1 LM3S21103.1.2 LM3S21103.2 键盘模块3.2.1 矩阵键盘模块独立按键模块3.3 LCD显示模块3.3.1 1602 介绍.管脚功能3.4蜂鸣器模块设计.系统软件设计 4.1454.2音
2、乐控制音乐的相关知识如何用嵌入式实现音乐节拍 如何用嵌入式产生音频脉冲 软件初始化4.2.1 LCD初始化.91010总设计流程图输入输出初始化 按键、蜂鸣器、LED初始化 定时器的初始化114.3调试.5.1音调调试5.2按键控制音乐停止调试5.3 LED显示音频效果调试 6结束语7参考文献附录一 LM3S2110 附录二程序清单1buzzer.c2 music.c1212程序清单程序13141414原理电路system Init.c 程序194主程序清单191前言1.1电子琴介绍电子琴又称作电子键盘,属于(区别于电声),发音音量可以自由调节。较宽,和声丰富,甚至可
3、以演奏出一个的效果,表现力极其丰富。 采用半导体集成电路,对乐音信号进行放大,通过扬声器产生音响。现在的电子琴一般使用 PCM或AWM采样音源。所谓采样就是录制乐 器的声音,将其数字化后存入 ROM里,然后按下键时CPU回放该音。甚至有一些高级编曲键盘可以使用外置采样(比如Tyros 3的硬盘音色)。图1-1电子琴原理框图电子琴使用二分频电路是音阶规律的需要。音乐中的基本音阶的频率是按照一定规律排列的,以C调为例,音阶中各音之间的频率 (单位为赫兹)关系是:f 12冗 J LC说明一个音的频率刚好是比它低八度音的频率的两倍。所以,只要把一个音的频率除以2就得到比它低八度的一个音的频率。实现这一
4、点就需要使用二分频电路。这样,只要振荡器产生一个标准音的频率信号,如高音 “ 1的信号,通过二分频就产生中音“ 2的频率,再一次二分频就产生低音“ 1的频率了。如果按照键盘上最高音组的频率制作七个振荡器,并将得到的七个音阶信号分别二分频,便可得到低八度的一组音阶信号;再次二分频,就可得到再低八度的一组音阶信号。依此类推,最后,就能得到键盘上所有的音阶信号了。不过,实际上需要制作 12个振荡器和更多的分频器,因为一组键 盘中还有五支黑键。1.2嵌入式电子琴发展趋势嵌入式技术在电子琴方面的设计应用是其发展的一个方向,同时也是 一种必然趋势。嵌入式设备能够促使宿主设备更加智能、高效。设计的过 程更加
5、灵活,整个系统的操作更加简单方便,嵌入式电子琴设计过程能够 保证电子琴的开发成本趋于合理性、功能更加完善,嵌入式电子琴具有功 能全面、结构紧凑、可靠性强、实时性强等特点。嵌入式电子琴系统是技 术过程的具体体现,具有核心处理程序设计功能,能够保证电子琴满足新 时期的要求,从键盘设计、输入输出模块设计、音色音调控制、电路设计 等方面发挥重要的作用。能够与现实环境进行有效的结合,保证交互式信 息系统的实现,嵌入式电子琴设计可以把半导体技术、计算机技术与行业 具体应用紧密结合起来,最终保证嵌入式电子琴处于资金密集、技术密集、 高度分散、不断创新的环境下。随着EDI的推广、Dsp技术的发展,嵌入式电子琴
6、技术作为核心技术应 用越来越广泛,在某一个芯片上实现一个核心技术的时代已经来临,用户 设计过程中可以根据实际需要,按照嵌入式电路的要求,设计出功能各异 的系统结构。仿真设计完成后可以通过半导体制作形成需要的产品,整个 嵌入式系统可以很好的集中到一块或者几块芯片上,很好的解决了电子琴 设计电路分散的状况。应用系统集中到某一个芯片上保证系统更加简洁, 功能更加完善。1.3实现目标本次制作电子琴除了可正常弹奏外,LCD液晶屏显示音阶,LED灯带展现音频效果。具有较强的感官体验,增加生活乐趣。本系统运行 稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较 高等,具有一定的实用和参考价值。
7、2总体设计2.1利用实验资源实现简易电子琴的功能。(1) 用蜂鸣器发出不同声音;(2) 使用LCD显示器来显示音阶输入的相关信息;(3) 当按下键盘组相对按键,蜂鸣器会发出相对音阶单音,共有 两个8度音阶;(4) 可以输入16个单音,可以一起演奏出来;(5) 演奏时可以按键中断;(6) 可以实时显示目前演奏的单音码;(7) 不同音阶对应不同灯亮,具有音频效果。2.2主要技术指标(1) 充分利用自己设计的开发板的硬件的资源进行设计;(2) 通过调整PWM的周期,改变占空比生产不同频率的信号;(3) 实现按键发出相对音阶单音;(4) 外扩实现音频效果。图2-1总设计框图3硬件设计本次用到的硬件有:
8、LM3S211C开发板中包含的一块LM3S2110微控制器 和4个独立键盘。另外可以外接的有 1个4X4矩阵键盘模块、1个LCD液 晶显示屏、1个蜂鸣器和1个LED音频模块。3.1 LM3S2110 芯片3.1.1 LM3S2110 特性概述LM3S2110微控制器是针对工业应用方案而设计的,包括远程监控、电 子贩售机、测试和测量设备、网络设备和交换机、工厂自动化、HVAC和建筑控制、游戏设备、运动控制、医疗器械、以及火警安防。除此之外,该LM3S2110微控制器的优势还在于能够方便的运用多种 ARM勺开发工具和片上系统(SoC的底层IP应用方案,以及广大的用户群 体。另外,该微控制器使用了兼
9、容 ARM的 Thumb指令集的Thumb2指令集 来减少存储容量的需求,并以此达到降低成本的目的。LM3S2110微控制器与Stellaris 系列的所有成员是代码兼容的,这为用户提供了灵活性,能 够适应各种精确的需求5。与此同时,它还提供出色的计算性能和优越的系 统中断响应能力。总的来说,其特性包括:1、具有十分紧凑的内部核心。2、从ARM7?处理器系列中移植过来,以获得更好的性能和电源效率。3、存储器保护单元(MPU为复杂的应用提供特权操作模式。4、中断处理能力优秀非常,通过执行寄存器操作来实现,这些寄存器 操作在处理硬件中断时使用。5、通过Harvard结构执行快速的应用,以独立指令以
10、及数据总线为其 十分突出的特征。6在通常与8位和16位设备相关的存储容量中的 Thumb-2指令集, 特别是在微控制器级应用的几千字节存储量中,提供 ARM内核所期望的高 性能。7、调试的解决方案应有尽有:仪表跟踪宏单元(ITM),用于支持printf 型调试;Flash修补和断点(FPB单元,用于实现断点操作;数据观察点 和触发(DWT单元,用于执行观察点、触发源和系统性能分析;串行线JTAG 调试端口( SWJ-DP;跟踪端口接口单元(TPIU)用作跟踪端口分析仪的桥 接。3.1.2 LM3S2110中断功能概述ARM Cortex-M3处理器和嵌套向量中断控制器(NVIC)将区别所有问题
11、 的优先等级并对其进行相应的处理。所有存在的异常都会在处理器模式中 被予以处理。当出现异常时,处理器的状态将被自动存储到堆栈中,并在 中断服务程序(ISR)结束时自动从堆栈中恢复。取出向量和保存状态是同时 进行的,这样可以提高进入中断的效率。处理器还支持末尾连锁(tail-cha ining),这使处理器无需保存和恢复状态便可执行连续的(back-to-back) 中断。用户可设置的最高优先级0在内部看作是优先级4,仅次于复位、NMI 以及硬件故障。值得注意的是:0是所有可调整优先级的默认优先级。 如果 你将两个或更多的中断指定为相同的优先级,那么它们的硬件优先级(位 置编号越高优先级越低)就
12、决定了处理器激活中断的顺序。例如,如果GPIO 端口 B和GPIO端口 A都为优先级1,那么GPIO端口 A的优先级更高。系统通过NVIC系统处理程序优先级寄存器来设置处理程序的优先级。 通过NVIC中断设置使能寄存器来使能中断,并由NVIC中断优先级寄存器来区分其中的优先等级。你还可以把优先级划分为占先优先级和次要优先 级两组。3.1.3 LM3S2110 的 GPIO 特性GPIO模块由8个物理GPIO模块组成,每个对应一个独立的GPIO端口 (端口 A,端口 B,端口 C,端口 D,端口 E,端口 F,端口 G,和端口 H)。GPIO模块遵循FiRM规范,并且支持11-40个可编程的输入
13、/输出管脚, 具体取决于正在使用的外设 。GPIO模块具有以下的特性:1、可编程控制GPIO中断:屏蔽中断发生;边沿触发(上升沿,下降 沿,上升、下降沿);(高或低)电平触发。2、输入/输出可承受5V电压。3、在读和写操作中通过地址线进行位屏蔽。4、可编程控制GPIO引脚配置。本次设计使用的开发板上的微控制器LM3S2110上可使用的引脚有PAA PA6(5 个)、PBLPB6( 7 个)、PC/PC7(4 个)、PDAPD7(8 个)、PE0 PE1 PF0 PF1、PF2、PG0 PG1 PH0 PHt 其中 PF0和 PF1 可以直 接用来脉宽调制(PMWV输出方波信号。3.2键盘模块3
14、.2.1矩阵键盘模块采取4*4键盘结构构造可以保证电子琴键盘趋于合理性,多功能电子琴设计过程中需要设计多种模式的按键,一般情况下,因为要按键输入16个音阶,从低音区的SO到高音区的SI。键盘设计模块主要负责对输入设备进行扫描,扫描的方法采取并列式法,具体定义过程中,每个按键的功能都可以看成其他模块的控制信号。K1 K2 K3SW-PBSW-PBK5gw-pBSW-PB4K6 W-PBK7W-PBK4W-PBPB3K8SW-PIPB4;W-PB_PB5SW-P4SW-PBPB6KEYSCAN0KETSCAN1KEYSCAN2KEYSCAN33.1矩阵键盘原理图电子琴键盘设计过程中,通过键盘控制L
15、M3S2110芯片内部频率实现, 从而产生不同类型的音符,按键设计过程中接法起到一定的作用。在矩阵 式键盘设计过程中,垂直线和水平线交互出不能直接进行连通设计,具体通过一个按键设计较好,按照此模式一个端口可以产生一个4*4=16的按键。M1/M2M3M4M5M6M7L5H1H2H3H4H5H6L6L7图3.2矩阵键盘音频为分部独立按键模块开发板上具有4个独立按键,本次试验除了控制16个音阶外,外加了 播放3首音乐与停止功能,设计更加合理化,使初学者可通过听音乐判断 自己的程度。开发板从左到右KEY1为停止键,KEY2-KEY4各播放一首曲目。3.3 LCD显示模块1602 介绍1602液晶也叫
16、1602字符型液晶它是一种专门用来显示字母、数字、符号等的型液晶模块它有若干个 5X7或者5X11等点阵字符位组成,每个点 阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有 间隔起到了字符间距和行间距的作用。1602LCD是指显示的内容为16X2, 即可以显示两行,每行16个字符液晶模块(显示字符和数字)。管脚功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接 地电源时对比度最高(对比度过高时会 产生 鬼影”使用时可以通过一个 10K的电位器调整对比度)。第4脚:RS为寄存器选
17、择,高电平1时选择数据寄存器、低电平0时 选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进 行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。本次试验为读模式,所以RW常置1,与vcc相连。图3.3本次试验用到的LCD液晶显示屏3.4蜂鸣器模块设计在简易电子琴的设计过程中,音乐蜂鸣器电路模块设计显的非常重要。 系统应用过程中,必须利用音乐蜂鸣器必须根据音频相应不同音阶,与音 乐。具体工作中包括按键按下、工作结束、开始工作等。本次试验采取的是试验箱上的功
18、放模块。只要选择 2110的GPIO中的一 个I/O 口与功放模块(含功放模块、触发音乐发声、分立元件OTL功放电路、 /集成电路功放电路。)中蜂鸣器输入的管脚相连(并共地),给予蜂鸣器一 个信号,不同音调的控制,其原理图如图 3.4功放模块原理图所示。图3.4试验箱功放模块原理图图3.4试验箱功放模块实物图4 系统软件设计本软件设计关键是要实现一种由嵌入式控制的简单音乐发生器,它由16个音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生 器会根据用户的弹奏,通过扬声器将音乐播放出来。也可根据选择播放出 喜爱的音乐来。4.1音乐控制音乐的相关知识乐音听起来有的高,有的低,这就叫音高,
19、音高是由发音物体振动频 率的高低决定的,频率高声音就高,频率低声音就低,不同音商的乐音是 用C、D E、F、G A、B表示的,这7个字母就是乐音的音名,它们一般 依次唱成DO RE Ml、FA SO LA、SI,这是唱曲时乐音的发音,所以叫 唱名。音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。如何用嵌入式实现音乐节拍除了音符以外,节拍也是音乐的关键组成部分。节拍实际上就是音持 续时间的长短,在嵌入式系统中可以用延时来实现,如果1/4拍的延时是T/16秒,贝U
20、 1拍的延时是T/4秒,只要知道1/4拍的延时时间,其余的节 拍延时时间就是它的陪数(T=3600ms)。如果芯片要自己播放音乐,那么必 须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户 通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。如何用嵌入式产生音频脉冲了解音乐的一些基本知识后可知,产生不同频率的音频脉冲即能产生 音乐,对于嵌入式而言,产生不同频率有脉冲非常方便,可以利用它的定 时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和 对应的频率,以及嵌入式定时计数的关系。在本实验中,芯片工作于6MHZ寸钟频率,C调的各音符频率与计数值 T的对照如下表
21、:表3.1 C调的各音符频率音调频率(HZ)音调频率(HZ)音调频率(HZ)L1262M1 /、523H11047L2294M2587H21175L3330M3659 H31319L4349M4698H41397L5/392M5784H51568L6 /440M6880H6 1760L7494M7988H719764.2 软件初始化初始化对于软件或者系统来说是十分重要的。所谓初始化就是把其中 的某些参数或者数值变为默认值,或者将控件调整为默认状态。系统进行将系统的所有状态和设置还原到最后备份时的样子就是初始 化的过程,将软件的一些功能和设置还原到最原始的设置就是对其的初始 化。因此只有将初始化
22、做好,才能谈软件设计,本设计主要涉及的初始化 除了基本的初始化步骤之外,还有输入输出、定时器、按键、LCD液晶显示、 和蜂鸣器的初始化。值得一提的是在软件开发的过程中也要不断完善初始 化这个步骤。初始化首先在LCD初始化的程序中要先通过数据写入和命令写入的方式以及 相关的操作来初始化与其相互通讯的硬件。然后编写LCD清屏的程序和其余的子程序。最终在自己的设计中合理添加这些子程序。这样一来就完成 了对于LCD液晶显示屏的初始化。初始化液晶屏时,先对寄存器的高八位和低八位分别进行设置,再设置液晶屏的显示模式,包括:颜色、坐标、图形大小等。LCD液晶屏初始化流程图如图4.1所示。图4.1 LCDni
23、t()子程序流程首先在LCD初始化的开始需要给RST引脚一个脉冲。其次通过调用 LCD_WRITE_CMD()函数,LCD_WRITE_DATA()函数 初始化液晶屏的寄存器,使其满足功能需求。如下图4.2 LCD_WRITE_CMD()函数的时序图所示,可以写出函数 LCD_WRITE_CMD()的子程序。首先拉低 CS和RS,通过GPIOD来传输 数据位的高八位,WR经过一个上升沿,使数据的高八位写入LCD寄存器; 同样在下一个时序中写入数据位的低八位,最后拉高CS和RS,整个过程即为一个16位命令子程序的编写。CSRDRS数据%么匕%DataHighDataLow图4.2 LCD_WRI
24、TE_CMD()函数的时序图驱动LCD是其初始化的第一个步骤。显示驱动程序是用来允许图形库 和特点的显示连接用以处理包括与显示控制器通讯和传输显示控制器所需 的指令等的细节问题。显示驱动程序必须提供要设定的与显示相关的操作。 显示相关的操作包括初始化程序、背光控制和对比度控制等内容。tDisplay 结构体包含一些的函数指针以及屏幕的宽度和高度。这种结构体由显示驱 动程序提供,并同时在一个显示驱动程序特定的头文件中提供结构体的原 型。以上内容的具体程序清单详见附录中的LCDFu nc.c的部分。输入输出初始化对于不同端口的输入输出引脚,都要分别进行初始化的设置。这里提 供以下最基本的GPIO初
25、始化步骤:首先使能端口,然后设置引脚的输入或输出状态,其次设置引脚的上 升沿或下降沿触发的状态,再是设置引脚的中断使能,最后是设置端口的 中断使能。Stellaris( 德州仪器公司提供)的外设驱动库中,详细 地描述了 LM3S2110勺输入输出特性,并给出了其 API函数的使用方式,这些 API函 数按其功能可以分成三个组别:处理中断的 API函数,配置GPI0引脚功能 的API函数和访问GPIO引脚值的API函数。按键、蜂鸣器、LED初始化要初始化按键、蜂鸣器,首先应该使能和配置其所对应的微控制器 LM3S2110t的引脚,其中将两个按键所对应的引脚(本次设计用PB4和PB5 等)设置为输
26、入状态,将蜂鸣器所对应的引脚(CCP2/PB1与LED所对应 的脚(PA4等)设置为输出状态,使能和配置完成后将蜂鸣器(CCP2/PB1赋初值,因它们均为低电平时能,故将初值赋为全1。赋值也就是将值写入到该引脚,赋值所使用的函数是GPIOP in Write(ulPort,ucPins,ucVal) ,如将全1赋值给 PB3,其 编写方 法为: GPIOPi nWrite(GPIO_PORTB_BASE,GPIO_PIN_3,Oxff)定时器的初始化定时器的使用是本次设计的重中之重,所以对于它的初始化显得尤为关键。在使用通用定时器时,外设时钟必须使能,该操作通过将RCGC寄存器中的TIMER0
27、 TIMER1和 TIMER2位置位来实现。LM3S211(对于16位单 次触发/周期定时器,Timer可以被拆分为两个单独运行的16位定时/计数 器,都可以被配置成带8位预分频(可选)的16位递减计数器。如果使用 8位预分频功能,则相当于24位定时器。具体用法跟32位单次触发/周期 定时器类似,只不过对 TimerA和TimerB的操作是分别独立进行的。对于 16位输入边沿计数捕获,在该模式中,TimerA或TimerB被配置为能够捕 获外部输入脉冲边沿事件的递减计数器。共有 3种边沿事件类型:正边沿、 负边沿、双边沿。该模式的工作过程是:设置装载值,并预设一个匹配值(应当小于装载值);计数
28、使能后,在特定的CCP管脚每输入1个脉冲(正 边沿、负边沿或双边沿有效),计数值就减1;当计数值与匹配值相等时, 停止运行,并触发中断(如果中断已被使能)。如果需要再次捕获外部脉冲, 则要重新进行配置。根据我在本次设计中的感悟对于定时器的初始化,具体来说主要要进行以下几个步骤:首先使能定时器的GPIO端口( SysCtIPeriEnable),然后配置定时器功能(TimerConfigure ),再然后是设置定时器的预分频值(TimerPrescaleSet ),再次是设置定时器的装载值(TimerLoadSet),再 是使能定时器捕获匹配中断(TimerIntEnable ),随后是使能定时
29、器中断(IntEnable ),再次是使能处理器中断(IntMasterEnable ),最后便是使 能定时器(TimerEnable)。具体的函数使用方式和程序编写方式可以参见附录一程序清单中的main.c 咅E分。4.3总设计流程图初始化case:0-15播放显示 对应音阶LED下排 名字显示播放显示 对应歌曲/case:16-18按键扫描.否停止键? Or是-歌曲结束? 4.3简易电子琴总流程图5调试5.1音调调试打开“音乐播放化蝶”的程序,烧入开发板中,连接好音乐蜂鸣器模 块,测试。调节模块上音量旋钮可调节音乐声音大小。烧入矩阵键盘控制 音频程序,刚开始矩阵键盘不按键时存在底音,之后调
30、节模块上的电位器, 可消除底音。5.2按键控制音乐停止调试问题:播放一段音乐一定要播放完毕才能跳出。不同文件中的程序无 法调用。解决方法:将关于停止按键的任何定义程序都放入音乐播放文件中。 音乐播放文件是通过扫描数组播放音乐的,在每次扫描数组前加入停止按 键的扫描即可。5.3 LED显示音频效果调试不同的频率显示不懂的灯数,制造音频效果,8个LED灯显示16个音 频(在弹琴模块中将两个音频分为一组,我们采用按键控制灯数,16个键, 每两个键控制一个灯)。当播放音乐的时候,在每个音乐子程序中,监测音 频控制灯的亮度。从而达到 LED灯随音乐跳动的效果。6结束语/通过这个月的ARM课程设计,我学到
31、了不少课本上没有的知识,也锻 炼了自己的动手能力,将以前学过的零散的知识串到一起。首先在课程设计刚开始的调研阶段,我学会了怎么通过各种方式查询 相关的资料。通过对这些资料的学习,我大致了解了ARM的发展现状以及未来的发展趋势,认识到目前 ARM方面的各种各样的发展,和它们之间的 竞争。了解了 ARM面的先进技术,这些都为我的未来的学习指明了方向。我的课程设计主要涉及硬件和软件两方面的内容,通过这些我的硬件 和软件开发能力都获得了提高。首先硬件方面,基本了解了电子产品的开 发流程和所要做的工作。通过开发板的设计和硬件搭建的过程,使我 ARM211实验板的接口有了更深层次的理解,熟悉了一些ARM常
32、用的外围电 路引脚和连接方法,如LED数码管,键盘等。在软件方面,通过调试工具的开发,使我加深了对累封装的理解,熟 悉了 ARM211C内部的寄存器和编程规则,以及如何控制外围电路。最后,感谢上海师范大学天华学院徐振老师、王永明老师、陶亚雄老 师的精心指导,使我能够完成这次课程设计。7参考文献1 周立功.ARM嵌入式系统基础教程(第2版)M.北京:北京航空航天大学出版社,20082 姚文详.ARM Cortex-M3 权威指南M.北京:北京航空航天大学出版社 ,20093 陈明荧.8051单片机课程设计实训教材M.北京:清华大学出版社,20084 魏洪兴,周亦敏.嵌入式系统设计与实例开发实验教
33、材IIM.北京:清华大学出版社,20075 江力单片机原理与应用技术M.北京:清华大学出版社,2007 张义和,王敏男,许宏昌等例说51单片机(C语言版)M北京:人民邮电出版社,20087 Luminary Micro 公司丄M3S1138 微控制器数据手册 M.2008/20108 王福瑞等单片微机测控系统设计大全 M.北京:北京航空航天大学出版社,20079 赵星寒从51至U ARM:32位嵌入式系统入门M.北京:北京航空航天大学出版社,200810 彭伟等单片机典型系统设计实例精讲M.北京:清华大学出版社,200911 百度百科LCD160212 论文基于ARM2110的多功能可视化电子
34、琴设计 孔佳(作)13 论文单片机16音阶电子琴 周彪平(作)附录一 LM3S2110原理电路图-一一兰=#|一 二-号二冷芒k r: I - 4;4J fl U-亠宀亠心亠用L.nr-1厉nr-l贬 一r:4:f;-LrT4-;口直L-IK3工r笙 H43 口皀二裕盂e忑墨圧总等豈豈豈豈樂豈負无二務J:B芫U*T:2.iiiirL_32JiHydti. rd亍匚乍蓼一竝H:lH:l0:I 勺jllk m 耳m一 Hf丑= JLr注 峠ci-dic.h n 収一出带-打囂亠題-IflrFIF 亠4-工tl蛊堆JJm L L - =J -Jh kii_7rlr*屋宅进朋磁T_Tr 目二Vmrn
35、yrrlH sis ss附录二程序清单Ibuzzer.c程序清单SysCtlPeriEnableGPIOPinTypeOut#include buzzer.h#include #include #include #include #include #define PART LM3S2110 #include #defineSysCtIPeripheralEnable#define/蜂鸣器停止发声void buzzerQuiet(void)TimerDisable(TIMER1_BASE,/ 禁止TimerB计数GPIOPinTypeOut(CCP2_PORT,/ 配置CCP3管脚为GPIO输出
36、GPIOPinWrite(CCP2_PORT,CCP2_PIN,0x00);/CCP3管脚输出低电平2 music.c 程序#include music.h#include buzzer.h#include systemInit.h#defineSYSCTL_PERIPH_GPIOH#defineGPIO_PORTH_BASE#defineGPIO_PIN_1/ 定义LED#defineSYSCTL_PERIPH_GPIOA#defineGPIO_PORTA_BASE#defineGPIO_PIN_4#defineSYSCTL_PERIPH_GPIOA#defineGPIO_PORTA_BAS
37、E#defineGPIO_PIN_5#defineSYSCTL_PERIPH_GPIOA#defineGPIO_PORTA_BASE#defineGPIO_PIN_6#defineSYSCTL_PERIPH_GPIOGTIMER_A);CCP2_PIN);使KEY_PERIPH1KEY_PORT1KEY_PIN1LED1_PERIPHLED1_PORTLED1_PINLED2_PERIPHLED2_PORTLED2_PINLED3_PERIPHLED3_PORTLED3_PINLED4_PERIPHGPIOPinTypeGPIOOutput/声明全局的系统时钟变量extern unsigned
38、 long TheSysClock;/蜂鸣器初始化void buzzerlnit(void)SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1);/ 使能TIMER1模块SysCtlPeriEnable(CCP2_PERIPH);/ 使能CCP3所在的GPI0端口GPIOPinTypeTimer(CCP2_PORT, CCP2_PIN);/设置相关管脚为Timer功能TimerConfigure (TIMER1_BASE, TIMER_CFG_16_BIT_PAIR |/ 配置TimerB 为 16 位 PWM TIMER_CFG_A_PWM);/蜂鸣器发岀指定频率的声
39、音/ usFreq是发声频率,取值(系统时钟/65536)+120000,单位:Hzvoid buzzerSound(unsigned short usFreq)unsigned long ulVal;if (usFreq 20000)buzzerQuiet();elseGPIOPinTypeTimer(CCP2_PORT, CCP2_PIN);/设置相关管脚为Timer功能ulVal = TheSysClock / usFreq;TimerLoadSet(TIMER1_BASE, TIMER_A, ulVal); /设置 TimerB 初值TimerMatchSet(TIMER1_BASE,
40、TIMER_A, ulVal / 2);/设置 TimerB匹配值TimerEnable (T IMER1_BASE,TIMER_A);/ 使能TimerB计数LED4_PORTLED4_PINLED5_PERIPHLED5_PORTLED5_PINLED6_PERIPHLED6_PORTLED6_PINLED7_PERIPHLED7_PORTLED7_PINLED8_PERIPHLED8_PORTLED8_PIN0,0;void musicPlay(int i)buzzerSound(MyScorei.mName);SysCtlDelay(MyScorei.mTime*(TlheSysClo
41、ck / 3000);SysCtlDelay(10* 仃 heSysClock/3000);void musicPlayy(void)SysCtlPeriEnable(KEY_PERIPH1);/ 使能KEY所在的GPIO端口GPIOPinTypeln(KEY_PORT1, KEY_PIN1);/ 设置KEY所在管脚为输入short i = 0;for (;)if ( GPIOPinRead(KEY_PORT1KEY_PIN1) =0x00)/如果按下 KEY1break;else if (MyScore1i.mTime = 0)#defineGPIO_PORTG_BASE#defineGPI
42、O_PIN_0#defineSYSCTL_PERIPH_GPIOF#defineGPIO_PORTF_BASE#defineGPIO_PIN_2#define SYSCTL_PERIPH_GPIOG #defineGPIO_PORTG_BASE#defineGPIO_PIN_1#defineSYSCTL_PERIPH_GPIOE#defineGPIO_PORTE_BASE#defineGPIO_PIN_0#defineSYSCTL_PERIPH_GPIOE#defineGPIO_PORTE_BASE#defineGPIO_PIN_1const tNote MyScore=L5, T/10,L6
43、, T/10,L7, T/10,M1, T/10,M2, T/10,M3, T/10,M4, T/10,M5, T/10,M6, T/10,M7, T/10,H1, T/10,H2, T/10,H3, T/10,H4, T/10,H5, T/10,H6, T/10,H7, T/10, 0, 0/结束;const tNote MyScore1=L3, T/4, 0, 0;const tNote MyScore2=M5,T/8,0,0;const tNote MyScore3=M5,T/16,break;elseif(MyScore2i.mName=M1)/ 点亮1个LEDGPI0PinWrite
44、(LED1_P0RT, LED1_PIN, 0x00);GPIOPinWrite(LED2_PORT, LED2_PIN, 0xFF);GPIOPinWrite(LED3_PORT, LED3_PIN, 0xFF);GPIOPinWrite(LED4_PORT, LED4_PIN, 0xFF);GPIOPinWrite(LED5_PORT, LED5_PIN, 0xFF);GPIOPinWrite(LED6_PORT, LED6_PIN, 0xFF);GPIOPinWrite(LED7_PORT, LED7_PIN, 0xFF);GPIOPinWrite(LED8_PORT, LED8_PIN
45、, 0xFF); / 点亮7个LEDGPIOPinWrite(LED1_PORT,LED1_PIN, 0x00);/点亮 LEDGPIOPinWrite(LED2_PORT,LED2_PIN, 0x00);/点亮 LEDGPIOPinWrite(LED3_PORT,LED3_PIN, 0x00);/点亮 LEDGPIOPinWrite(LED4_PORT,LED4_PIN, 0x00);/点亮 LEDGPIOPinWrite(LED5_PORT,LED5_PIN, 0x00);/点亮 LEDGPIOPinWrite(LED6_PORT,LED6_PIN, 0x00);/点亮 LEDGPIOPi
46、nWrite(LED7_PORT,LED7_PIN, 0x00);/点亮 LEDGPIOPinWrite(LED8_PORT,LED8_PIN, 0xFF);/熄灭 LEDbuzzerSound(MyScore1i.mName);SysCtlDelay(MyScore1i.mTime*(TlheSysClock / 3000);i+;buzzerQuiet();SysCtlDelay(10* 仃 heSysClock /3000);3 systemInit.c 程序#include systemInit.h/定义全局的系统时钟变量unsigned long TheSysClock = 1200
47、0000UL;/系统时钟初始化void clockInit(void)SysCtlLDOSet(SYSCTL_LDO_2_50V);/ 设置LDO输岀电压SysCtlClockSet(SYSCTL_USE_OSC|/系统时钟设置SYSCTL_OSC_MAIN|/采用主振荡器SYSCTL_XTAL_6MHZ |/ 外接6MHz晶振SYSCTL_SYSDIV_1);/ 不分频TheSysClock= SysCtlClockGet();/获取当前的系统时钟频率4主程序清单 #include systemInit.h#include buzzer.h#include music.h#include s
48、ystemInit.h#define lcden GPIO_PIN_0 /PB0;#define lcdrs GPIO_PIN_2 /PB2;/定义LED#defineLED1_PERIPHSYSCTL_PERIPH_GPIOA#defineLED1_PORTGPIO_PORTA_BASE#defineLED1_PINGPIO_PIN_4#defineLED2 PERIPHSYSCTL_PERIPH_GPIOA#defineLED2 PORTGPIO_PORTA_BASE#defineGPIO_PIN_5#defineSYSCTL_PERIPH_GPIOA#defineGPIO_PORTA_B
49、ASE#defineGPIO_PIN_6#defineSYSCTL_PERIPH_GPIOG#defineGPIO_PORTG_BASE#defineGPIO_PIN_0#defineSYSCTL_PERIPH_GPIOF#defineGPIO_PORTF_BASE#defineGPIO_PIN_2#defineSYSCTL_PERIPH_GPIOG#defineGPIO_PORTG_BASE#defineGPIO_PIN_1#defineSYSCTL_PERIPH_GPIOE#defineGPIO_PORTE_BASE#defineGPIO_PIN_0#defineSYSCTL_PERIPH
50、_GPIOE#defineGPIO_PORTE_BASE#defineGPIO_PIN_1/ 定义KEY#defineSYSCTL_PERIPH_GPIOB#defineLED2_PINLED3_PERIPHLED3_PORTLED3_PINLED4_PERIPHLED4_PORTLED4_PINLED5_PERIPHLED5_PORTLED5_PINLED6_PERIPHLED6_PORTLED6_PINLED7_PERIPHLED7_PORTLED7_PINLED8_PERIPHLED8_PORTLED8_PINKEY_PERIPH2KEY_PORT2GPIO_PORTB_BASE#def
51、ineKEY_PIN2GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4 /连接方式矩阵键盘的行线接 PC47列线接PA03unsigned char data;unsigned char num;/PD0-PD7;int guan;int jian;int numm;/lcd显示模块技术/lcd 模块void write_com(unsigned char com) /写命令GPI0PinWrite(GPI0_P0RTB_BASE,lcdrs,0x00);/ lcdrs=0;GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|G
52、PIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,com);/PD=com;SysCtlDelay(5 * (TheSysClock / 4000);/ 延时5msGPIOPinWrite(GPIO_PORTB_BASE,lcden,0xFF); / lcden=1;SysCtlDelay(5 *仃 heSysClock/4000);GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00); / lcden=0;void write_data(unsigned char date)GPIOPinWrite(GPIO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论