1、 华南师范大学增城学院 课 程 论 文 题目: 基于 ARM9 的电子琴 设计 课 程 名 称 嵌入式系统原理与应用技术 考 查 学 期 2013-2014 学年 第 2 学期 考 查 方 式 课程论文 姓 名 学 号 专 业 成 绩 指 导 教 师 基于 ARM9 的电子琴 设计 2 目录 . 错误 !未定义书签。 一、设计目的和要求 . 3 1.1 程序设计目的 . 3 1.2 程序设计要求 . 3 二、硬件总体设计 . 3 2.1 S3C2440A 芯片 . 3 2.2 蜂鸣器设计 . 4 三、软件总体设计 . 5 3.1 软件流程图 . 5 3.2 程序设计 . 6 四、实验调试 .
2、14 五、心得与体会 . 15 六、参考文献 . 16 基于 ARM9 的电子琴 设计 3 一、设计 目的和 要求 1.1 程序 设计目的 大作业是嵌入式系统基础课程教学的一个实践环节,是对学生进行全面的系统的训练。进行大作业可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深入学习的热情,也能考查学生对此门课程掌握的程度。 1.2 程序 设计要求 对微控制器 S3C2440 进行 裸机程序开发, 利用 实验箱上的蜂鸣器和软件 上的设计 ,设计出来一个简易 的电子琴 , 在电子琴上具备简单的音符播放,分别按键盘上的 1到 8键,依次
3、播放音乐上的不同音节。所设计的电子琴上还有音乐播放的功能。 二、 硬件 总体设计 2.1 S3C2440A 芯片 S3C2440A是由三星公司生产的一种性价比很高的 CPU芯片 ,由于该芯片价格低、功耗低和体积小等显著的特点 ,主要用于手持设备和一般类型应用的设备。 S3C2440A是 Samsung公司设计的一款高性价比 16/32位 ARM9系列微处理器,内含一个由 ARM 公司设计的 16/32 位 ARM920T RISC 处理器核,采用五级流水线和哈佛体系结构,工作频率最高可达 533MHz;同时还具备体积小、成本低、功耗低、资源众多等诸多特点。内部集成的常用资源主要有:外部存储控制
4、器( SDRAM控制和片选逻辑); LCD 控制器(最大支持 4K 色 STN 和 256K 色 TFT 屏),提供1 通道 LCD 专用 DMA; 4 通道 DMA 并有外部请求引脚; 3 通道 UART(IrDA1.0, 64基于 ARM9 的电子琴 设计 4 字节 TxFIFO 和 64 字节 RxFIFO); 2 通道 SPI; 1 通道 IIC-BUS 接口(支持多主机);1通道 IIS-BUS 音频编码解码器接口 ; AC 97 解码器接口;兼容 SD 卡接口协议1.0 版和 MMC 卡 2.11 版; 2 端口 USB 主机和 1 端口 USB 设备; 4 通道 PWM 定时器和
5、 1 通道内部定时器,看门狗定时器; 8 通道 10 比特 ADC 和触摸屏接口;具有日历功能的 RTC;相机接口(最大支持 4096*4096 像素); 130 个通用 I/O 口和24 通道外部中断源等资源。这些资源大大的方便了应用系统的开发,同时节约开发成本,缩短开发周期,提高了系统的性价比。 图 2.1 s3c22440 芯片管脚图 2.2 蜂鸣器 设计 在程序设计方面我们用到 2440 BEEP 蜂鸣器 ,蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 PWM 输出口直接驱
6、动是利用 PWM 输出口本身可以输出一定的方波来直接驱动蜂鸣器。在单片机的软件设置 中有几个系统寄存器是用来设置 PWM 口的输出的,可以设置占空比、周期等等,通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后,只要打开 PWM 输出, PWM 输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。比如频率为 2000Hz 的蜂鸣器的驱动,可以知道周期为500 s,这样只需要把 PWM 的周期设置为 500 s,占空比电平设置为 250 s,基于 ARM9 的电子琴 设计 5 就能产生一个频率为 2000Hz 的方波,通过这个方波再利用三极管就可以去驱动这个蜂鸣器了。 图 2.
7、2 蜂鸣器原理图 三、软件总体设计 3.1 软件流程图 在软件设计方面,我们是具体流程图是这样的。首先我们要启动我们的实验箱,然后在进行串口的初始化,在串口方面,我们选择了“串口 1”,然后我们把程序加载到我们的实验箱上。 然后,我们需要在电脑键盘来进行键盘数据的输入。当我们按到“ 1”的时候,实验箱 的蜂鸣器就会发出“ do”音,当我按到“ 2”的时候,就会发出“ re”音,如此类推。当我们按到“ w”键的时候,蜂鸣器就会播放我们设计好的歌曲欢乐颂。软件设计流程图如下: 基于 ARM9 的电子琴 设计 6 图 3.1 软件设计流程图 3.2 程序设计 #include “2440addr.h
8、“ #include “2440lib.h“ #include “def.h“ void Buzzer_Freq_Set( U32 freq ); void Buzzer_Stop( void ); void BUZZER_PWM_Test( void ); void delay(int times); 基于 ARM9 的电子琴 设计 7 void xmain(void) ChangeClockDivider(3,1); ChangeMPllValue(127,2,1); /405MHZ Rtc_Init(); /实时时钟初始化 Uart_Init(0, 115200); Uart_Selec
9、t(0); BUZZER_PWM_Test(); while(1); void BUZZER_PWM_Test( void ) U16 freq ; while( 1 ) U8 key = Uart_Getch(); 基于 ARM9 的电子琴 设计 8 if( key = 1 ) freq = 2000; Buzzer_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); if( key = 2 ) freq= 2200; Buzzer_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); if(
10、key = 3 ) freq = 2400; Buzzer_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); 基于 ARM9 的电子琴 设计 9 if( key = 4 ) freq = 2600; Buzzer_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); if( key = 5 ) freq = 2800; Buzzer_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); if( key = 6 ) freq = 3100; Buzz
11、er_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); 基于 ARM9 的电子琴 设计 10 if( key = 7 ) freq = 3300; Buzzer_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); if( key = 8 ) freq = 3500; Buzzer_Freq_Set( freq ) ; delay(10000000); Buzzer_Stop(); if( key = w ) Buzzer_Freq_Set( 2400) ;delay(30000000); Buzzer_Freq_Set( 2400) ;delay(30000000); Buzzer_Freq_Set( 2600) ;delay(30000000); Buzzer_Freq_Set( 2800) ;delay(50000000); Buzzer_Freq_Set( 2800) ;delay(30000000);