版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、?嵌入式系统原理与应用?综合设计简易电子琴系统设计系 部:电子与信息工程系专业班级:电子信息工程09秋2班姓 名:学 号:小组成员:指导教师:完 成 日 期 2021年 6月目录1 前言1电子琴介绍1嵌入式电子琴开展趋势2实现目标22 总体设计3利用实验资源实现简易电子琴的功能。3主要技术指标33 硬件设计43.1 LM3S2110芯片43.1.1 LM3S2110特性概述43.1.2 LM3S2110中断功能概述53.1.3 LM3S2110的GPIO特性53.2 键盘模块63.2.1 矩阵键盘模块63.2.2 独立按键模块73.3 LCD显示模块73.3.1 1602介绍7编辑本段管脚功能
2、7蜂鸣器模块设计84 系统软件设计94.1 音乐控制104.4.1 音乐的相关知识104.4.2 如何用嵌入式实现音乐节拍104.4.3 如何用嵌入式产生音频脉冲104.2 软件初始化114.2.1 LCD初始化114.2.2 输入输出初始化124.2.3 按键、蜂鸣器、LED初始化134.2.4 定时器的初始化13总设计流程图145调试15音调调试15按键控制音乐停止调试155.3 LED显示音频效果调试156结束语157参考文献16附录一 LM3S2110原理电路图17附录二 程序清单171 程序清单172 程序18程序204主程序清单201 前言电子琴又称作电子键盘,属于电子乐器(区别于
3、电声乐器),发音音量可以自由调节。音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。采用半导体集成电路,对乐音信号进行放大,通过扬声器产生音响。现在的电子琴一般使用PCM或AWM采样音源。所谓采样就是录制乐器的声音,将其数字化后存入ROM里,然后按下键时CPU回放该音。甚至有一些高级编曲键盘可以使用外置采样比方Tyros 3的硬盘音色。图1-1电子琴原理框图电子琴使用二分频电路是音阶规律的需要。音乐中的根本音阶的频率是按照一定规律排列的,以C调为例,音阶中各音之间的频率单位为赫兹关系是:说明一个音的频率刚好是比它低八度音的频率的两倍。所以,只要把一个音的频率除以2就得到比它
4、低八度的一个音的频率。实现这一点就需要使用二分频电路。这样,只要振荡器产生一个标准音的频率信号,如高音“1的信号,通过二分频就产生中音“2的频率,再一次二分频就产生低音“1的频率了。如果按照键盘上最高音组的频率制作七个振荡器,并将得到的七个音阶信号分别二分频,便可得到低八度的一组音阶信号;再次二分频,就可得到再低八度的一组音阶信号。依此类推,最后,就能得到键盘上所有的音阶信号了。不过,实际上需要制作12个振荡器和更多的分频器,因为一组键盘中还有五支黑键。嵌入式技术在电子琴方面的设计应用是其开展的一个方向,同时也是一种必然趋势。嵌入式设备能够促使宿主设备更加智能、高效。设计的过程更加灵活,整个系
5、统的操作更加简单方便,嵌入式电子琴设计过程能够保证电子琴的开发本钱趋于合理性、功能更加完善,嵌入式电子琴具有功能全面、结构紧凑、可靠性强、实时性强等特点。嵌入式电子琴系统是技术过程的具体表达,具有核心处理程序设计功能,能够保证电子琴满足新时期的要求,从键盘设计、输入输出模块设计、音色音调控制、电路设计等方面发挥重要的作用。能够与现实环境进行有效的结合,保证交互式信息系统的实现,嵌入式电子琴设计可以把半导体技术、计算机技术与行业具体应用紧密结合起来,最终保证嵌入式电子琴处于资金密集、技术密集、高度分散、不断创新的环境下。随着EDI的推广、Dsp技术的开展,嵌入式电子琴技术作为核心技术应用越来越广
6、泛,在某一个芯片上实现一个核心技术的时代已经来临,用户设计过程中可以根据实际需要,按照嵌入式电路的要求,设计出功能各异的系统结构。仿真设计完成后可以通过半导体制作形成需要的产品,整个嵌入式系统可以很好的集中到一块或者几块芯片上,很好的解决了电子琴设计电路分散的状况。应用系统集中到某一个芯片上保证系统更加简洁,功能更加完善。本次制作电子琴除了可正常弹奏外,LCD液晶屏显示音阶,LED灯带展现音频效果。具有较强的感官体验,增加生活乐趣。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比拟高等,具有一定的实用和参考价值。2 总体设计2.1利用实验资源实现简易电子琴的功能。(1)
7、 用蜂鸣器发出不同声音;(2) 使用LCD显示器来显示音阶输入的相关信息;(3) 当按下键盘组相对按键,蜂鸣器会发出相对音阶单音,共有两个8度音阶;(4) 可以输入16个单音,可以一起演奏出来;(5) 演奏时可以按键中断;(6) 可以实时显示目前演奏的单音码;(7) 不同音阶对应不同灯亮,具有音频效果。(1) 充分利用自己设计的开发板的硬件的资源进行设计;(2) 通过调整PWM的周期,改变占空比生产不同频率的信号;(3) 实现按键发出相对音阶单音;(4) 外扩实现音频效果。图2-1 总设计框图3 硬件设计本次用到的硬件有:LM3S2110开发板中包含的一块LM3S2110微控制器和4个独立键盘
8、。另外可以外接的有1个4X4矩阵键盘模块、 1个LCD液晶显示屏、1个蜂鸣器和1个LED音频模块。 LM3S2110芯片 LM3S2110特性概述LM3S2110 微控制器是针对工业应用方案而设计的,包括远程监控、电子贩售机、测试和测量设备、网络设备和交换机、工厂自动化、HVAC和建筑控制、游戏设备、运动控制、医疗器械、以及火警安防。除此之外,该LM3S2110微控制器的优势还在于能够方便的运用多种ARM的开发工具和片上系统SoC的底层IP应用方案,以及广阔的用户群体。 另外,该微控制器使用了兼容ARM的Thumb指令集的Thumb2指令集来减少存储容量的需求,并以此到达降低本钱的目的。LM3
9、S2110微控制器与Stellaris系列的所有成员是代码兼容的,这为用户提供了灵活性,能够适应各种精确的需求5。与此同时,它还提供出色的计算性能和优越的系统中断响应能力。总的来说,其特性包括:1、具有十分紧凑的内部核心。2、从 ARM7 处理器系列中移植过来,以获得更好的性能和电源效率。3、存储器保护单元MPU为复杂的应用提供特权操作模式。4、中断处理能力优秀非常,通过执行存放器操作来实现,这些存放器操作在处理硬件中断时使用。5、通过Harvard结构执行快速的应用,以独立指令以及数据总线为其十分突出的特征。6、在通常与8位和16位设备相关的存储容量中的Thumb-2指令集,特别是在微控制器
10、级应用的几千字节存储量中,提供ARM内核所期望的高性能。7、调试的解决方案应有尽有:仪表跟踪宏单元ITM,用于支持printf 型调试;Flash 修补和断点FPB单元,用于实现断点操作;数据观察点和触发DWT单元,用于执行观察点、触发源和系统性能分析;串行线JTAG调试端口SWJ-DP;跟踪端口接口单元TPIU用作跟踪端口分析仪的桥接。 LM3S2110中断功能概述ARM Cortex-M3 处理器和嵌套向量中断控制器(NVIC)将区别所有问题的优先等级并对其进行相应的处理。所有存在的异常都会在处理器模式中被予以处理。当出现异常时,处理器的状态将被自动存储到堆栈中,并在中断效劳程序(ISR)
11、结束时自动从堆栈中恢复。取出向量和保存状态是同时进行的,这样可以提高进入中断的效率。处理器还支持末尾连锁tail-chaining,这使处理器无需保存和恢复状态便可执行连续的(back-to-back)中断。用户可设置的最高优先级0在内部看作是优先级4,仅次于复位、NMI以及硬件故障。值得注意的是:0是所有可调整优先级的默认优先级。如果你将两个或更多的中断指定为相同的优先级,那么它们的硬件优先级位置编号越高优先级越低就决定了处理器激活中断的顺序。例如,如果GPIO端口B和GPIO端口A都为优先级1,那么GPIO端口A的优先级更高6。系统通过NVIC系统处理程序优先级存放器来设置处理程序的优先级
12、。通过NVIC中断设置使能存放器来使能中断,并由NVIC中断优先级存放器来区分其中的优先等级。你还可以把优先级划分为占先优先级和次要优先级两组。3.1.3 LM3S2110的GPIO特性GPIO模块由 8个物理GPIO 模块组成,每个对应一个独立的GPIO端口端口A, 端口B, 端口C, 端口D, 端口E, 端口F, 端口G, 和端口H。GPIO模块遵循FiRM标准,并且支持11-40 个可编程的输入/输出管脚,具体取决于正在使用的外设7。GPIO模块具有以下的特性:1、可编程控制GPIO中断:屏蔽中断发生;边沿触发上升沿,下降沿,上升、下降沿;高或低电平触发。2、输入/输出可承受5V电压。3
13、、在读和写操作中通过地址线进行位屏蔽。4、可编程控制GPIO引脚配置。本次设计使用的开发板上的微控制器LM3S2110上可使用的引脚有PA2PA65个、PB0PB67个、PC4PC74个、PD0PD78个、PE0、PE1、PF0、PF1、PF2、PG0、PG1、PH0、PH1。其中PF0和PF1可以直接用来脉宽调制PMW,输出方波信号。3.2 键盘模块3.2.1 矩阵键盘模块采取4*4键盘结构构造可以保证电子琴键盘趋于合理性,多功能电子琴设计过程中需要设计多种模式的按键,一般情况下,因为要按键输入16个音阶,从低音区的SO到高音区的SI。键盘设计模块主要负责对输入设备进行扫描,扫描的方法采取并
14、列式法,具体定义过程中,每个按键的功能都可以看成其他模块的控制信号。电子琴键盘设计过程中,通过键盘控制LM3S2110芯片内部频率实现,从而产生不同类型的音符,按键设计过程中接法起到一定的作用。在矩阵式键盘设计过程中,垂直线和水平线交互出不能直接进行连通设计,具体通过一个按键设计较好,按照此模式一个端口可以产生一个4*4=16的按键。图3.2 矩阵键盘音频为分部3.2.2 独立按键模块开发板上具有4个独立按键,本次试验除了控制16个音阶外,外加了播放3首音乐与停止功能,设计更加合理化,使初学者可通过听音乐判断自己的程度。开发板从左到右KEY1为停止键,KEY2-KEY4各播放一首曲目。3.3
15、LCD显示模块3.3.1 1602介绍1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有假设干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块显示字符和数字。 编辑本段管脚功能1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VDD接5V电源正极 第3脚:V0为液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高比照度过高时会 产生“鬼影,使用时可以
16、通过一个10K的电位器调整比照度。 第4脚:RS为存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端。 第714脚:D0D7为8位双向数据端。 第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。本次试验为读模式,所以RW常置1,与vcc相连。图3.3 本次试验用到的LCD液晶显示屏在简易电子琴的设计过程中,音乐蜂鸣器电路模块设计显的非常重要。系统应用过程中,必须利用音乐蜂鸣器必须根据音频相应不同音阶,与音乐。具体工作中包括按键按下、工作结束、
17、开始工作等。本次试验采取的是试验箱上的功放模块。只要选择2110的GPIO中的一个I/O口与功放模块含功放模块、触发音乐发声、分立元件OTL功放电路、集成电路功放电路。中蜂鸣器输入的管脚相连并共地,给予蜂鸣器一个信号,不同音调的控制,其原理图如图3.4功放模块原理图所示。4 系统软件设计本软件设计关键是要实现一种由嵌入式控制的简单音乐发生器,它由16个音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。也可根据选择播放出喜爱的音乐来。4.1 音乐控制4.4.1 音乐的相关知识乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的上
18、下决定的,频率高声音就高,频率低声音就低,不同音商的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。4.4.2 如何用嵌入式实现音乐节拍除了音符以外,节拍也是音乐的关键组成局部。节拍实际上就是音持续时间的长短,在嵌入式系统中可以用延时来实现,如果1/4拍的延时是T/16秒,那么1拍的延时是T/4秒,只要
19、知道1/4拍的延时时间,其余的节拍延时时间就是它的陪数(T=3600ms)。如果芯片要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。4.4.3 如何用嵌入式产生音频脉冲了解音乐的一些根本知识后可知,产生不同频率的音频脉冲即能产生音乐,对于嵌入式而言,产生不同频率有脉冲非常方便,可以利用它的定时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,以及嵌入式定时计数的关系。在本实验中,芯片工作于6MHZ时钟频率, C调的各音符频率与计数值T的对照如下表:表3.1 C调的各音符频率
20、音调频率(HZ)音调频率(HZ)音调频率(HZ)L1262M1523H11047L2294M2587H21175L3330M3659H31319L4349M4698H41397L5392M5784H51568L6440M6880H61760L7494M7988H719764.2 软件初始化初始化对于软件或者系统来说是十分重要的。所谓初始化就是把其中的某些参数或者数值变为默认值,或者将控件调整为默认状态。系统进行将系统的所有状态和设置复原到最后备份时的样子就是初始化的过程,将软件的一些功能和设置复原到最原始的设置就是对其的初始化。因此只有将初始化做好,才能谈软件设计,本设计主要涉及的初始化除了根
21、本的初始化步骤之外,还有输入输出、定时器、按键、LCD液晶显示、和蜂鸣器的初始化。值得一提的是在软件开发的过程中也要不断完善初始化这个步骤。4.2.1 LCD初始化首先在LCD初始化的程序中要先通过数据写入和命令写入的方式以及相关的操作来初始化与其相互通讯的硬件。然后编写LCD清屏的程序和其余的子程序。最终在自己的设计中合理添加这些子程序。这样一来就完成了对于LCD液晶显示屏的初始化。初始化液晶屏时,先对存放器的高八位和低八位分别进行设置,再设置液晶屏的显示模式,包括:颜色、坐标、图形大小等。LCD液晶屏初始化流程图如图4.1所示。图4.1 LCD_Init()子程序流程首先在LCD初始化的开
22、始需要给RST引脚一个脉冲。 其次通过调用LCD_WRITE_CMD()函数,LCD_WRITE_DATA()函数初始化液晶屏的存放器,使其满足功能需求。 LCD_WRITE_CMD()函数的时序图所示,可以写出函数LCD_WRITE_CMD()的子程序。首先拉低CS和RS,通过GPIOD来传输数据位的高八位,WR经过一个上升沿,使数据的高八位写入LCD存放器;同样在下一个时序中写入数据位的低八位,最后拉高CS和RS,整个过程即为一个16位命令子程序的编写。图4.2 LCD_WRITE_CMD()函数的时序图驱动LCD是其初始化的第一个步骤。显示驱动程序是用来允许图形库和特点的显示连接用以处理
23、包括与显示控制器通讯和传输显示控制器所需的指令等的细节问题。显示驱动程序必须提供要设定的与显示相关的操作。显示相关的操作包括初始化程序、背光控制和比照度控制等内容。tDisplay结构体包含一些的函数指针以及屏幕的宽度和高度。这种结构体由显示驱动程序提供,并同时在一个显示驱动程序特定的头文件中提供结构体的原型。以上内容的具体程序清单详见附录中的LCDFunc.c的局部。4.2.2 输入输出初始化对于不同端口的输入输出引脚,都要分别进行初始化的设置。这里提供以下最根本的GPIO初始化步骤:首先使能端口,然后设置引脚的输入或输出状态,其次设置引脚的上升沿或下降沿触发的状态,再是设置引脚的中断使能,
24、最后是设置端口的中断使能。Stellaris(德州仪器公司提供)的外设驱动库中,详细地描述了LM3S2110的输入输出特性,并给出了其API函数的使用方式,这些API函数按其功能可以分成三个组别:处理中断的API函数,配置GPIO引脚功能的API函数和访问GPIO引脚值的API函数。4.2.3 按键、蜂鸣器、LED初始化要初始化按键、蜂鸣器,首先应该使能和配置其所对应的微控制器LM3S2110上的引脚,其中将两个按键所对应的引脚本次设计用PB4和PB5等设置为输入状态,将蜂鸣器所对应的引脚CCP2/PB1与LED所对应的脚PA4等设置为输出状态,使能和配置完成后将蜂鸣器CCP2/PB1赋初值,
25、因它们均为低电平时能,故将初值赋为全1。赋值也就是将值写入到该引脚,赋值所使用的函数是GPIOPinWrite(ulPort,ucPins,ucVal),如将全1赋值给PB3,其编写方法为:GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_3,0xff)。4.2.4 定时器的初始化定时器的使用是本次设计的重中之重,所以对于它的初始化显得尤为关键。在使用通用定时器时,外设时钟必须使能,该操作通过将RCGC1存放器中的TIMER0、TIMER1和TIMER2位置位来实现。LM3S2110对于16位单次触发/周期定时器,Timer可以被拆分为两个单独运行的16位定时/计数器
26、,都可以被配置成带8位预分频可选的16位递减计数器。如果使用8位预分频功能,那么相当于24位定时器。具体用法跟32位单次触发/周期定时器类似,只不过对TimerA和TimerB的操作是分别独立进行的。对于16位输入边沿计数捕获,在该模式中,TimerA或TimerB被配置为能够捕获外部输入脉冲边沿事件的递减计数器。共有3种边沿事件类型:正边沿、负边沿、双边沿。该模式的工作过程是:设置装载值,并预设一个匹配值应当小于装载值;计数使能后,在特定的CCP管脚每输入1个脉冲正边沿、负边沿或双边沿有效,计数值就减1;当计数值与匹配值相等时,停止运行,并触发中断如果中断已被使能。如果需要再次捕获外部脉冲,
27、那么要重新进行配置。根据我在本次设计中的感悟对于定时器的初始化,具体来说主要要进行以下几个步骤:首先使能定时器的GPIO端口SysCtlPeriEnable,然后配置定时器功能TimerConfigure,再然后是设置定时器的预分频值TimerPrescaleSet,再次是设置定时器的装载值TimerLoadSet,再是使能定时器捕获匹配中断TimerIntEnable,随后是使能定时器中断IntEnable,再次是使能处理器中断IntMasterEnable,最后便是使能定时器TimerEnable。具体的函数使用方式和程序编写方式可以参见附录一程序清单中的main.c局部。5调试翻开“音乐
28、播放化蝶的程序,烧入开发板中,连接好音乐蜂鸣器模块,测试。调节模块上音量旋钮可调节音乐声音大小。烧入矩阵键盘控制音频程序,刚开始矩阵键盘不按键时存在底音,之后调节模块上的电位器,可消除底音。问题:播放一段音乐一定要播放完毕才能跳出。不同文件中的程序无法调用。解决方法:将关于停止按键的任何定义程序都放入音乐播放文件中。音乐播放文件是通过扫描数组播放音乐的,在每次扫描数组前参加停止按键的扫描即可。5.3 LED显示音频效果调试不同的频率显示不懂的灯数,制造音频效果,8个LED灯显示16个音频在弹琴模块中将两个音频分为一组,我们采用按键控制灯数,16个键,每两个键控制一个灯。当播放音乐的时候,在每个
29、音乐子程序中,监测音频控制灯的亮度。从而到达LED灯随音乐跳动的效果。6结束语通过这个月的ARM课程设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。首先在课程设计刚开始的调研阶段,我学会了怎么通过各种方式查询相关的资料。通过对这些资料的学习,我大致了解了ARM的开展现状以及未来的开展趋势,认识到目前ARM方面的各种各样的开展,和它们之间的竞争。了解了ARM方面的先进技术,这些都为我的未来的学习指明了方向。我的课程设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。首先硬件方面,根本了解了电子产品的开发流程和所要做的工作。通
30、过开发板的设计和硬件搭建的过程,使我ARM2110实验板的接口有了更深层次的理解,熟悉了一些ARM常用的外围电路引脚和连接方法,如LED数码管,键盘等。在软件方面,通过调试工具的开发,使我加深了对累封装的理解,熟悉了ARM2110内部的存放器和编程规那么,以及如何控制外围电路。 最后,感谢上海师范大学天华学院徐振老师、王永明老师、陶亚雄老师的精心指导,使我能够完成这次课程设计。7参考文献1 周立功.ARM嵌入式系统根底教程(第2版)M.北京:北京航空航天大学出版社, 20212 姚文详.ARM Cortex-M3权威指南M.北京:北京航空航天大学出版社,20213 陈明荧.8051单片机课程设
31、计实训教材M.北京:清华大学出版社,20214 魏洪兴,周亦敏.嵌入式系统设计与实例开发实验教材IIM.北京:清华大学出版社,20075 江力.单片机原理与应用技术M.北京:清华大学出版社,20076 张义和,王敏男,许宏昌等.例说51单片机C语言版M北京:人民邮电出版社, 20217 Luminary Micro公司.LM3S1138微控制器数据手册M.2021/20218 王福瑞等.单片微机测控系统设计大全M.北京:北京航空航天大学出版社,20079 赵星寒.从51到ARM:32位嵌入式系统入门M.北京:北京航空航天大学出版社,202110 彭伟等.单片机典型系统设计实例精讲M.北京:清华
32、大学出版社,202111 百度百科LCD1602 12论文基于ARM2110的多功能可视化电子琴设计 孔佳作13论文单片机16音阶电子琴 周彪平作附录一 LM3S2110原理电路图附录二 程序清单#include buzzer.h#include #include #include #include #include #define PART_LM3S2110#include #define SysCtlPeriEnable SysCtlPeripheralEnable#define GPIOPinTypeOut GPIOPinTypeGPIOOutput/ 声明全局的系统时钟变量extern
33、 unsigned long TheSysClock;/ 蜂鸣器初始化void buzzerInit(void) SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1); / 使能TIMER1模块 SysCtlPeriEnable(CCP2_PERIPH); / 使能CCP3所在的GPIO端口 GPIOPinTypeTimer(CCP2_PORT, CCP2_PIN); / 设置相关管脚为Timer功能 TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | / 配置TimerB为16位PWM TIMER_CFG_A_PWM
34、);/ 蜂鸣器发出指定频率的声音/ usFreq是发声频率,取值 (系统时钟/65536)+1 20000,单位:Hzvoid buzzerSound(unsigned short usFreq) unsigned long ulVal; if (usFreq 20000) buzzerQuiet(); else GPIOPinTypeTimer(CCP2_PORT, CCP2_PIN); / 设置相关管脚为Timer功能 ulVal = TheSysClock / usFreq; TimerLoadSet(TIMER1_BASE, TIMER_A, ulVal); / 设置TimerB初值
35、TimerMatchSet(TIMER1_BASE, TIMER_A, ulVal / 2); / 设置TimerB匹配值 TimerEnable(TIMER1_BASE, TIMER_A); / 使能TimerB计数 / 蜂鸣器停止发声void buzzerQuiet(void)TimerDisable(TIMER1_BASE, TIMER_A); / 禁止TimerB计数 GPIOPinTypeOut(CCP2_PORT, CCP2_PIN); / 配置CCP3管脚为GPIO输出 GPIOPinWrite(CCP2_PORT, CCP2_PIN,0x00); / 使CCP3管脚输出低电平#
36、include music.h#include buzzer.h#include systemInit.h#define KEY_PERIPH1 SYSCTL_PERIPH_GPIOH#define KEY_PORT1 GPIO_PORTH_BASE#define KEY_PIN1 GPIO_PIN_1/ 定义LED#define LED1_PERIPH SYSCTL_PERIPH_GPIOA#define LED1_PORT GPIO_PORTA_BASE#define LED1_PIN GPIO_PIN_4#define LED2_PERIPH SYSCTL_PERIPH_GPIOA#de
37、fine LED2_PORT GPIO_PORTA_BASE#define LED2_PIN GPIO_PIN_5#define LED3_PERIPH SYSCTL_PERIPH_GPIOA#define LED3_PORT GPIO_PORTA_BASE#define LED3_PIN GPIO_PIN_6#define LED4_PERIPH SYSCTL_PERIPH_GPIOG#define LED4_PORT GPIO_PORTG_BASE#define LED4_PIN GPIO_PIN_0#define LED5_PERIPH SYSCTL_PERIPH_GPIOF#defin
38、e LED5_PORT GPIO_PORTF_BASE#define LED5_PIN GPIO_PIN_2#define LED6_PERIPH SYSCTL_PERIPH_GPIOG#define LED6_PORT GPIO_PORTG_BASE#define LED6_PIN GPIO_PIN_1#define LED7_PERIPH SYSCTL_PERIPH_GPIOE#define LED7_PORT GPIO_PORTE_BASE#define LED7_PIN GPIO_PIN_0#define LED8_PERIPH SYSCTL_PERIPH_GPIOE#define L
39、ED8_PORT GPIO_PORTE_BASE#define LED8_PIN GPIO_PIN_1const tNote MyScore = L5, T/10, L6, 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 tNot
40、e MyScore2 =M5,T/8,0,0;const tNote MyScore3 =M5,T/16,0,0;void musicPlay(int i) buzzerSound(MyScorei.mName); SysCtlDelay(MyScorei.mTime * (TheSysClock / 3000); SysCtlDelay(10 * (TheSysClock / 3000);void musicPlayy(void) SysCtlPeriEnable(KEY_PERIPH1); / 使能KEY所在的GPIO端口 GPIOPinTypeIn(KEY_PORT1, KEY_PIN1
41、); / 设置KEY所在管脚为输入 short i = 0; for (;) if ( GPIOPinRead(KEY_PORT1, KEY_PIN1) = 0x00) / 如果按下KEY1 break; else if (MyScore1i.mTime = 0) break; else if(MyScore2i.mName = M1) / 点亮1个LED GPIOPinWrite(LED1_PORT, LED1_PIN, 0x00); GPIOPinWrite(LED2_PORT, LED2_PIN, 0xFF); GPIOPinWrite(LED3_PORT, LED3_PIN, 0xFF
42、); 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, 0xFF); / 点亮7个LED GPIOPinWrite(LED1_PORT, LED1_PIN, 0x00); / 点亮LED GPIOPinWrite(LED2_PORT, LED2_PIN,
43、 0x00); / 点亮LED GPIOPinWrite(LED3_PORT, LED3_PIN, 0x00); / 点亮LED GPIOPinWrite(LED4_PORT, LED4_PIN, 0x00); / 点亮LED GPIOPinWrite(LED5_PORT, LED5_PIN, 0x00); / 点亮LED GPIOPinWrite(LED6_PORT, LED6_PIN, 0x00); / 点亮LED GPIOPinWrite(LED7_PORT, LED7_PIN, 0x00); / 点亮LED GPIOPinWrite(LED8_PORT, LED8_PIN, 0xFF)
44、; / 熄灭LED buzzerSound(MyScore1i.mName); SysCtlDelay(MyScore1i.mTime * (TheSysClock / 3000); i+; buzzerQuiet(); SysCtlDelay(10 * (TheSysClock / 3000); #include systemInit.h/ 定义全局的系统时钟变量unsigned long TheSysClock = 12000000UL;/ 系统时钟初始化void clockInit(void) SysCtlLDOSet(SYSCTL_LDO_2_50V); / 设置LDO输出电压 Sys
45、CtlClockSet(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 systemInit.h#define lcden GPIO_PIN_0 /PB0;#define lcdrs GPIO_PIN_2
46、/PB2;/ 定义LED#define LED1_PERIPH SYSCTL_PERIPH_GPIOA#define LED1_PORT GPIO_PORTA_BASE#define LED1_PIN GPIO_PIN_4#define LED2_PERIPH SYSCTL_PERIPH_GPIOA#define LED2_PORT GPIO_PORTA_BASE#define LED2_PIN GPIO_PIN_5#define LED3_PERIPH SYSCTL_PERIPH_GPIOA#define LED3_PORT GPIO_PORTA_BASE#define LED3_PIN G
47、PIO_PIN_6#define LED4_PERIPH SYSCTL_PERIPH_GPIOG#define LED4_PORT GPIO_PORTG_BASE#define LED4_PIN GPIO_PIN_0#define LED5_PERIPH SYSCTL_PERIPH_GPIOF#define LED5_PORT GPIO_PORTF_BASE#define LED5_PIN GPIO_PIN_2#define LED6_PERIPH SYSCTL_PERIPH_GPIOG#define LED6_PORT GPIO_PORTG_BASE#define LED6_PIN GPIO
48、_PIN_1#define LED7_PERIPH SYSCTL_PERIPH_GPIOE#define LED7_PORT GPIO_PORTE_BASE#define LED7_PIN GPIO_PIN_0#define LED8_PERIPH SYSCTL_PERIPH_GPIOE#define LED8_PORT GPIO_PORTE_BASE#define LED8_PIN GPIO_PIN_1/ 定义KEY#define KEY_PERIPH2 SYSCTL_PERIPH_GPIOB#define KEY_PORT2 GPIO_PORTB_BASE#define KEY_PIN2 GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4/连接方式 矩阵键盘的行线接PC47
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖北宜昌市伍家岗区“招才兴业”教育系统事业单位人才引进招聘42人(华中师范大学站)模拟笔试试题及答案解析
- 2026年景德镇陶瓷职业技术学院单招综合素质考试题库及参考答案详解1套
- 2026年广东农工商职业技术学院单招职业适应性测试题库带答案详解
- 2026年合肥财经职业学院单招综合素质考试题库及答案详解1套
- 2026年贵州航天职业技术学院单招职业技能考试题库及答案详解1套
- 2026年渤海船舶职业学院单招职业倾向性考试题库及答案详解1套
- 小学英语三年级上学期期末培优试卷测试题(答案)
- 小学英语五年级下册期末模拟综合试卷测试题(带答案)
- 小学英语单项选择的教案含解析
- 2026年江苏卫生健康职业学院单招职业适应性考试题库及答案详解一套
- 产业园区基础设施建设项目背景及必要性分析
- 房屋结构安全培训
- 购酒团购合同协议
- 喜人奇妙夜小品《越狱的夏天》剧本
- 医疗机构7项管理制度
- 2025-2030中国高压真空灭弧室行业市场发展趋势与前景展望战略研究报告
- 招标采购警示教育
- 中小学书记在党员教师会议上发言:廉洁从教党员教师不可逾越的红线
- 2025年健康促进宣传活动总结范文
- 2025年度建设银行个人住房贷款合同电子版
- 人口社会学(第二版) 习题答案
评论
0/150
提交评论