C51音乐播放器_第1页
C51音乐播放器_第2页
C51音乐播放器_第3页
C51音乐播放器_第4页
C51音乐播放器_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、课课程程设设计计姓名:学号:班级:组员: 目目 录录1 设计题目 2 概述 .1 单片机数字音乐盒有关介绍.2 本设计任务 .3 总体方案论证与设计.3.1 单片机的选取 .3.2 LED 显示方式.3.3 系统总体结构框图 .4 系统硬件设计 .4.1 AT89C51 芯片功能和硬件连接.4.2 LED 显示器.4.3 键盘 .4.4 音频输出部分 .4.5 整体硬件电路 . 4.6 原理说明5 系统软件设计 .5.1 主模块的设计 .5.2 外部中断源系统设计 .5.3 基本显示模块设计 .5.4 系统初始化程序 .5.5 音调、节拍以及编码的确定方法.6 调试结果 .6.1 系统总电路图

2、 .总 结 .参考文献 .附件1.1.设计题目设计题目基于 C51 的音乐发生器设计1.1. 概述概述2.1单片机数字音乐盒有关介绍单片机数字音乐盒有关介绍电子音乐已广泛地应用于社会生活的各个领域。其类型从音乐卡片到CD、MP3 等多种多样,制作原理也各不相同。声音是通过振动产生的。单片机对某一 I/O 引脚以一定的频率循环置 1 和清 0,这一引脚便产生一定频率的方波,该方波通过放大后作用于扬声器便产生一定频率的声音。若改变输出方波的频率,产生的声音也就改变了。通过控制输出方波的时间长短,声音的长短也就得到控制。因此,根据乐谱,单片机就可产生电子音乐。音乐中最关键的两个要素是音符和节拍。单片

3、机控制的音乐发生器系统由硬件电路和软件两部分构成。利用单片机控制的电子音乐发生器软硬件上具有独特的优点,系统的开发周期短,成本低,电路制作容易。更换歌曲时,硬件电路无需作任何修改,只需修改软件即可实现。软件编程时,可用 51 系列单片机的汇编语言或 C51 语言实现。同时还可根据个人的习好通过软件改变节拍的延时时间,增加电子音乐的趣味性。2.1.1发音原理介绍发音原理介绍发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降

4、,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解。 音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式 1,定时中断,然后控制 P0.3 引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以 2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的 I/O 反相,然后重复计时此半周期时间再对 I/O 反相,就可在 I/O 脚上得到此频率的脉冲。2.1.2 音符频率的产生音符频率的产生音符及定时器初始值:例如:中音 1(do)的音频=523HZ,周期 T=1/52

5、3s=1912s定时器/计数器 0 的定时时间为:T/2=1912/2s=956s定时器 956s的计数值=定时时间/机器周期=956s/1s=956(时钟频率=12MHZ)装入 T0 计数器初值为 65536-956=64580将 64580 装入 T0 寄存器中,启动 T0 工作后,每计数 956 次时将产生溢出中断,进入中断服务时,每次对 P0.3 引脚的输出值进行取反,就可得到中音 DO(523HZ)的音符音频。将 51 单片机内部定时器工作在计数器模式 0 下,改变计数初值 TH0,TL0 以产生不同的频率。下表 1.1 是 C 调各音符频率与计数初值 T 的对照表: 表 1.1 C

6、 调各音符频率与计数初值 T 的对照表音符频率(Hz)/初值(s)音符频率(Hz)/初值(s)低 1DO262/63627中 1DO 523/64580低 2RE 294/63835中 2RE589/64687低 3M330/64021中 3M 661/64780低 4FA 350/64107中 4FA700/64822低 5SO393/64264中 5SO 786/64900低 6LA 441/64402中 6LA 882/64969低 7SI 495/64526中 7SI 990/65031高 1DO1042/65056高 5SO1568/65217高 2RE 1245/65134高 6L

7、A 1760/65252高 3M1318/65157高 7SI 1967/65282高 4FA 1397/651782.1.3 节拍频率的产生节拍频率的产生节拍的产生与编码:音乐中的节拍用延时时间产生。例如,1 拍=0.4s,1/4 拍=0.1s,以此类推。假设 1/4 拍执行一次延时程序,则 1/2 拍就执行两次延时程序,所以只要求出 1/4 拍的延时时间,其余节拍就是它的倍数。为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表 1.3 和表 1.4 所示。表 1.3 节拍数编码表按 1/4 拍为一个延时时间的节拍编码与节拍对应的表按 1/8 拍为一个延时时间的节拍编码

8、与节拍对应的表节拍编码节拍节拍编码节拍节拍编码节拍节拍编码节拍11/466/411/866/822/488/422/888/833/4A10/433/8A10/844/4C12/444/8C12/855/4F15/455/8表 1.4 乐谱节拍编程时的时间延时表乐谱节拍1/4 拍的延时时间乐谱节拍1/8 拍的延时时间4/4125 ms4/462 ms3/4187 ms3/494 ms2/4250 ms2/4125 ms2.2 本设计任务本设计任务随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统的音乐盒多是机械

9、型的,体积笨重,发音单调,不能实现批量生产。本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。本设计是基于单片机控制的数字音乐盒的设计,由单片机 AT89C51 芯片和 LED 数码管为核心,辅以必要的电路,构成的一个单片机数字音乐盒。若该设计使用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,

10、所以在该设计中采用单片机利用 AT89C51,它是低功耗、高性能的 CMOS 型 8 位单片机。片内带有 4KB 的 Flash 存储器,且允许在系统内改写或用编程器编程。另外, AT89C51 的指令系统和引脚与 8051 完全兼容,片内有 128B 的 RAM、32 条 I/O 口线、2 个 16 位定时计数器、5 个中断源、一个全双工串行口等。在该设计中利用单片机 I/O 口产生一定频率的方波,驱动蜂鸣器,发出各种不同的音调,从而演奏乐曲,并能够由 LCD 显示信息。键盘在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。本设计采用 4*4 键盘,16*

11、2 LCD,七段显示数码管 LED。在开机按钮按下时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。在演奏过程中可通过功能键选择乐曲,暂停,播放。3 总体方案论证与设计总体方案论证与设计本设计是基于单片机的数字音乐盒设计,由单片机 AT89C51 芯片和 LED数码管为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。要求利用 I/O 口产生一定频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD 显示信息,从而演奏乐曲,开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。本设计采用 4*4键盘,16*2 LCD,七段显示数码管 LED。下面对各模块的

12、设计逐一进行论证比较。3.1 单片机的选取单片机的选取首先选择单片机中最为普遍的 MCS51 系列。其中 AT89C2051 是美国ATMEL 公司生产的低电压、高性能 CMOS 8 位单片机,片内含 2k bytes 的可反复擦写的只读程序存储器(PEROM)和 128bytes 的随机数据存储器(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储单元,功能强大的 AT89C2051 单片机可应用于许多高性价比的应用场合。主要性能: 和 MCS-51 产品兼容; 2KB 可重编程 FLASH

13、存储器(1000 次); 2.7-6V 电压范围; 全静态工作:0Hz-24KHz 2 级程序存储器保密锁定 128*8 位内部 RAM 15 条可编程 I/O 线 两个 16 位定时器/计数器 6 个中断源 可编程串行通道 高精度电压比较器(P1.0,P1.1,P3.6) 直接驱动 LED 的输出端口由于完成核心功能音频输出只需一个 I/O 口,并且额外功能 LED移位显示可根据所选单片机的剩余 I/O 口进行设计,因此 AT89C2051 足以满足基本要求。其 20 个引脚体积小巧,内部 2k 字节的程序存储器容量适中,低压低频工作条件,并且价格低廉容易购得。综上,本次设计选择 AT89C

14、2051 单片机。3.2 LEDLED 显示方显示方选取七段数码管,当播放数字音符 i(i=1,27)的时候则第i 个数码管显示 i,显示时间与该音的节拍时间相同。故选用动态显示。3.3 系统总体结构框图系统总体结构框图 4 系统硬件设计本设计中用到了 AT89C51 单片机,七段数码管,蜂鸣器,等硬件电路常用元器件。4.1 AT89C51AT89C51 芯片功能和硬件连接芯片功能和硬件连接AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器的低电压,高性能 CMOS8 位微处理器,俗称单片机。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集

15、和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。4.1.1 主要特性:主要特性:与 MCS-51 兼容 4K 字节可编程闪烁存储器寿命:1000 写/擦循环数据保留时间:10 年全静态工作:0Hz-24Hz三级程序存储器锁定128*8 位内部 RAM32 可编程 I/O 线两个 16 位定时器/计数器5 个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 4.1.2 管脚说明(如图管脚说明(如图 3.13.1):): 图 3.1VCC:供电电压。

16、 GND:接地。 P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P1 口的管脚第一次写 1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。 P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出 4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编

17、程和校验时,P1 口作为第八位地址接收。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口:P3 口管脚

18、是 8 个带内部上拉电阻的双向 I/O 口,可接收输出4 个 TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。P3 口也可作为 AT89C51 的一些特殊功能口,如下表所示:管口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断 0)P3.3 /INT1(外部中断 1)P3.4 T0(记时器 0 外部输入)P3.5 T1(记时器 1 外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3 口同

19、时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在SFR8EH 地址上置 0。此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉

20、高。如果微处理器在外部执行状态 ALE 禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。 /EA/VPP:/EA 保持低电平时,在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加 12V 编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的

21、输出。 4.24.2.1.1 LED 显示器的结构显示器的结构 常用的 LED 显示器为 8 段。每一个段对应 1 个发光二极管,这种显示器有共阳极和共阴极两种:共阴极 LED 显示器的发光二极管的阴极连接在一起,通常此公共阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极 LED 显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。为了使 LED 显示器显示不同的符号或数字,就要把不同段的发光二极管点亮,这样就要为 LED 提供代码,因为这些代码可使 LED 相应的段发光,从而显

22、示不同字型,因此该代码称为段码。7 段发光二极管,再加上 1 个小数点位,共计 8 位。因此提供给 LED 显示器的段码正好是 1B。各段与字节中各位对应关系如下表 3.1: 表 3.1 8 段 LED 结构及外形位码位D1D2D3D4D5D6D7D80 xfe0 xfd0 xfb0 xf70 xef0 xdf0 xbf0 x7f段码012345670 x3f0 x060 x5b0 x4f0 x660 x6d0 x7d0 x07 4.24.2.2.2 LED 显示器工作原理显示器工作原理由 N 个 LED 显示块可以拼接成 N 位的 LED 显示器。如图是 LED 显示器的结构原理图 3.2。

23、N 个 LED 显示器有 N 个位选线和 8*N 位 根段码线。段码线控制显示字符的字型,而位选线为各个 LED 显示块中各段的公共端,它控制该 LED 显示位的亮或暗。LED 显示器 有静态显示和动态显示两种。 4.3 键盘键盘 键盘设置为选歌,按一个按键进行一次中断,故采用优先级解码芯片如 74LS148,把多个中断源信号作为一个中断。 4.4 音频输出部分音频输出部分整个输出部分由一个 100uF 电容、两个 S9013 NPN 三极管和一个蜂鸣器/喇叭组成,原理图如右图所示:100uF 电容是用来滤波的,两个 NPN 三极管起到放大信号的作用,最后由蜂鸣器/喇叭表现出信号。用 P3.7

24、 口控制蜂鸣器。输出显示电路如图 3.4所示:图 3.4 输出显示电路4.5 整体硬件电路整体硬件电路4.6 原理说明:原理说明:当键盘有键按下时,判断键值,并触发外部 0 中断,选择对应播放的曲目。同时 8 段数码管动态显示所播放的数字音符。按 sw1 可以暂停播放,按快进快退触发外部 1 中断,可以时曲子循环前进活快退 5 个音符。 5 系统软件设计系统软件设计5.1 主模块的设计主模块的设计主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图如下

25、图 6 所示:图 65.2 外部中断源系统设计外部中断源系统设计在本设计中中断源是采用外部中断 0 和外部中断 1 方式,均为负跳变有效。(1)定时器/计数器工作方式寄存器 TMOD 用于选择定时器/计数器的工作方式和工作模式。其格式如下表 4.1:D7D6D5D4D3D2D1D0GATEM1M0GATEM1M0TMODT1 方式字段T0 方式字段 表 4.1下面表 4.2 对 TMOD 各位进行说明:门控位GATE工作方式选择位M1、M0M1M0工作方式00方式 0,为 13 位定时器/计数器01方式 1,为 16 位定时器/计数器10方式 2,8 位的常数自动重新装载的定时器/计数器11方

26、式 3,仅适用于 T0 表 4.2其中,在本设计中采用方式 1 的 16 位定时器/计数器。计数器模式和定时器模式选择位=0,为定时器模式。=1,为计数模式。定时器/计数器控制寄存器 TCON,其格式如下表 4.3:TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0ITO 表 4.3其各位的功能如下:TF1、TF0计数溢出标志位当计数器溢出时,该位置 1。TR1、TR0计数运行控制位5.2.15.2.1 外部中断外部中断 1 1 实现快进快退实现快进快退按下快进快退键,进入外部 1 中断,通过读取 P34 和 P35 的电平来判断m 的值。 void int1(

27、) interrupt 2 /外部 1 中断,快进快退 TR0=0; if(p34=0&p35=1) m=1; /快进 if(p34=1&p35=0) m=0; /快退主程序中会通过 m 的值来判断是快进还是快退if(m=1) c=(c+5*3)%159;/一次前进活着后退 5 个音符;取余,使之不会超过普子长度m=3;else if(m=0) c=(c-5*3)%159; m=3; 5.2.25.2.2 外部中断外部中断 0 0 实现歌曲的选择实现歌曲的选择选择所听歌曲的按键,就会进入外部 0 中断,通过读取 P0 口的状态来确定status 的值。void int0() i

28、nterrupt 0 /外部 0 中断,选择歌曲 c=0;/换曲子时从头播放 status=0X07&P0; 主程序中通过判断 status 的值来选择播放的曲子 switch(status)case 1:case 2:5.3 基本显示模块设计基本显示模块设计 P1=counttablec;P2=bitcodetablec-1;动态显示播放音符所对应的数字谱5.4 系统初始化程序系统初始化程序unsigned char k; p00=0; TMOD=0X01; EA=1;EX0=1;EX1=1;/开外部 0,1 中断和定时器 0 中断 ET0=1;ET1=1;/外部中断 0,1 为脉冲

29、触发方式,负跳变有效 IT0=1; c=0;5.5 音调、节拍以及编码的确定方法音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。4.5.14.5.1 曲子的编码曲子的编码以一小段编码为例table=/乐谱 6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 0,0,0 ;编码为 3 个一组,每组对应一个音符。以 6,1,1,为例:第一个数代表音符,6 代表数字谱 6 即 La;第二个数

30、代表音调,1 表示低音,同理 2 表示中音,3 表示高音;第三个数代表节拍,1 表示最小节拍,此处为半拍,同理 2 就表示 1 拍,3为 1 个半拍,4 为 2 拍;k=tablec+7*tablec-1-1; /找音调 BTH0=th0k; BTL0=tl0k; time=tablec+2; /找节拍低中高音为 7 个一循环,k 代表音符的位置,比如 6,1,1,则k=6+7*0-1,故低音 6 的频率就可以在 th0k(频率的高八位)和 tl0k(频率的低八位)中寻得th0= /音调频率的高八位0 xf2,0 xf3,0 xf5,0 xf5,0 xf6,0 xf7,0 xf8,/低音 0

31、xf9,0 xf9,0 xfa,0 xfa,0 xfb,0 xfb,0 xfc, /中音0 xfc,0 xfc,0 xfd,0 xfd,0 xfd,0 xfd,0 xfe, /高音 0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xff; /超高音tl0= /音调频率的低八位0 x42,0 xc1,0 x17,0 xb6,0 xd0,0 xd1,0 xb6,/低音 0 x21,0 xe1,0 x8c,0 xd8,0 x68,0 xe9,0 x5b, /中音0 x8f,0 xee,0 x44,0 x6b,0 xb4,0 xf4,0 x2d, /高音0 x47,0 x7

32、7,0 xa2,0 xb6,0 xda,0 xfa,0 xe6; /超高音定时器 0 中断产生方波,放出音调void time0() interrupt 1 using 0/定时中断,产生音调 TR0=0; p00=p00; TH0=BTH0; TL0=BTL0; TR0=1;6 调试结果调试结果6.1 系统总电路图系统总电路图总总 结结 首先要感谢老师的教学才可以让我对 C51 熟悉起来。我本身很喜欢音乐,所以准备课程设计我马上就想道要做个音乐播放器出来,自己编写喜欢的曲子。在图书馆里找了几本书,看到了一个容易理解的程序。原程序是循环播放一个音乐,我在次基础上进行了改变。先是加入了外部 0

33、中断,联合 switch 语句可以实现随时选择曲子的功能;后来又插进了可以暂停的功能;然后加入了 8 段数码管动态显示曲子的程序;最后加入了外部 1 中断的快进快退语句。 过程中因为没有设置外部 0 中断的负跳变有效,一时没发现,让我困恼了一下午,后来自己都不知怎么就突然想到了没有设置负跳变有效。其余的也没多大的障碍,就是有些细节需要反复调试修改就是了。 制作过程还是很愉快的。参考文献参考文献 姜志海.单片机的 C 语言程序设计与应用基于 Proteus 仿真(第 2版).电子工业出版社,2011附件附件 总程序总程序#includesbit p00=P03;sbit p20=P30;sbit

34、 p34=P34;sbit p35=P35;unsigned int t,c,m=3;unsigned char time;unsigned char keytmp,status=0;unsigned char BTH0,BTL0;unsigned char code count=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07, /段码 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x40,0 x00;unsigned char code bitcode=0 xfe,0 xfd,0 xfb,0

35、 xf7,0 xef,0 xdf,0 xbf,0 x7f; /位码code unsigned char th0=0 xf2,0 xf3,0 xf5,0 xf5,0 xf6,0 xf7,0 xf8,/音调频率的高八位 0 xf9,0 xf9,0 xfa,0 xfa,0 xfb,0 xfb,0 xfc, 0 xfc,0 xfc,0 xfd,0 xfd,0 xfd,0 xfd,0 xfe, 0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xff;code unsigned char tl0=0 x42,0 xc1,0 x17,0 xb6,0 xd0,0 xd1,0 xb6

36、,/音调频率的低八位 0 x21,0 xe1,0 x8c,0 xd8,0 x68,0 xe9,0 x5b, 0 x8f,0 xee,0 x44,0 x6b,0 xb4,0 xf4,0 x2d, 0 x47,0 x77,0 xa2,0 xb6,0 xda,0 xfa,0 xe6;code unsigned char table=/羽根6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 2,2,1, 1,2,1, 5,1,1, 6,1,3, 6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 2,2,1,

37、1,2,1, 2,2,1, 3,2,1, 3,2,3, 5,2,1, 6,2,1, 5,2,3, 6,2,1, 5,2,1, 3,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 5,1,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 3,2,1, 6,1,2, 6,1,1, 3,2,1, 6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 5,1,1, 6,1,3, 0,0,0 ;code unsigned char table1= /奏之曲3,3,1, 2,3,1, 3,3,1, 6,3,1, 3,3

38、,1, 2,3,1, 3,3,1, 6,3,1, 3,3,1, 2,3,1, 3,3,1, 6,3,1, 3,3,1, 2,3,1, 7,2,1, 5,2,1, 3,3,1, 2,3,1, 3,3,1, 6,3,1, 3,3,1, 2,3,1, 3,3,1, 6,3,1, 5,3,2, 6,1,1, 7,1,1, 1,2,2, 3,2,2, 2,2,2, 1,2,1, 7,1,1, 6,1,1, 7,1,1, 1,2,1, 7,1,1, 6,1,1, 5,1,1, 6,1,2, 3,2,1, 3,2,1, 3,2,1, 3,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 2,

39、2,1, 3,2,1, 5,2,1, 4,2,1, 3,2,1, 3,2,2, 1,2,1, 3,2,1, 2,2,2, 6,1,2, 1,2,1, 3,2,1, 2,2,2, 5,2,2, 7,1,1, 5,1,1, 1,2,1, 1,2,1, 1,2,1, 1,2,1, 6,2,1, 7,2,1, 1,3,2, 7,2,1, 1,3,1, 7,2,1, 6,2,1, 5,2,1, 2,2,1, 1,3,1, 1,3,1, 1,3,1, 1,3,1, 6,2,1, 7,2,1, 1,3,2, 7,2,1, 1,3,1, 7,2,1, 6,2,1, 5,2,1, 6,2,1, 7,2,1, 0

40、,0,0;code unsigned char table2= /夏日星3,2,1, 3,2,1, 3,2,1, 2,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 2,2,4, 1,2,1, 1,2,1, 1,2,1, 1,2,1, 6,1,1, 1,2,3, 2,2,1, 2,2,1, 2,2,1, 3,2,1, 2,2,4, 3,2,3, 3,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 1,2,4, 7,1,3, 7,1,1, 7,1,2, 6,1,1, 5,1,1, 6,1,6, 3,2,1, 3,2,1, 3,2,1

41、, 2,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 2,2,4, 1,2,1, 1,2,1, 1,2,1, 1,2,1, 6,1,1, 1,2,3, 2,2,1, 2,2,1, 2,2,1, 3,2,1, 2,2,4, 3,2,3, 3,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 1,2,4, 7,1,3, 7,1,1, 7,1,2, 6,1,1, 5,1,1, 6,1,6, 0,0,0;code unsigned char table3=6,2,1, 7,2,1, 1,3,3, 7,2,1, 1,3,2, 3,3,2,

42、7,2,4, 3,2,1, 3,2,1, 6,2,3, 5,2,1, 6,2,2, 1,3,2, 5,2,4, 3,2,1, 3,2,1, 4,2,3, 3,2,1, 4,2,1, 1,3,3,/天空之城 3,2,3, 1,3,1, 1,3,1, 1,3,1, 7,2,3, 4,2,1, 4,2,2, 7,2,2, 7,2,4, 6,2,1, 7,2,1, 1,3,3, 7,2,1, 1,3,2, 3,3,2, 7,2,4, 3,2,1, 3,2,1, 6,2,3, 5,2,1, 6,2,2, 1,3,2, 5,2,4, 3,2,1, 4,2,2, 1,3,1, 7,2,1, 7,2,2, 1

43、,3,1, 2,3,1, 2,3,1, 3,3,1, 1,3,2, 1,3,2, 7,2,1, 6,2,1, 6,2,1, 7,2,2, 5,2,2, 6,2,3, 1,3,1, 2,3,1, 3,3,3, 2,3,1, 3,3,3, 5,3,2, 2,3,4, 5,2,1, 5,2,1, 1,3,1, 7,2,1, 1,3,2, 3,3,2, 3,3,4, 6,2,1, 7,2,1, 1,3,2, 7,2,2, 2,3,1, 2,3,1, 1,3,3, 5,2,1, 5,2,2, 4,3,2, 3,3,2, 2,3,2, 1,3,2, 3,3,5, 3,3,2, 6,3,4, 5,3,2,

44、5,3,2, 3,3,1, 2,3,1, 1,3,2, 1,3,1, 2,3,2, 1,3,1, 2,3,1, 2,3,1, 5,3,2, 3,3,4, 3,3,2, 6,3,4, 5,3,4, 3,3,1, 2,3,1, 1,3,4, 1,3,1, 2,3,2, 1,3,1, 2,3,1, 2,3,1, 7,2,2, 6,2,4, 0,0,0; void int0() interrupt 0 /外部 0 中断,选择歌曲 c=0;/换曲子时从头播放 status=0X07&P0; void int1() interrupt 2 /外部 1 中断,快进快退 TR0=0; if(p34=0

45、&p35=1) m=1; /快进 if(p34=1&p35=0) m=0; /快退void delay(unsigned char t) /延迟函数 unsigned char t1; unsigned long t2; for(t1=0;t1t;t1+) for(t2=0;t28000;t2+) void time0() interrupt 1 using 0/定时中断,产生音调 TR0=0; p00=p00; TH0=BTH0; TL0=BTL0; TR0=1;void sing() /唱歌 if(tablec-3=8) TR0=0; /遇到休止符则暂停 else TH0=BTH0; TL0=BTL0; TR0=1; delay(

温馨提示

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

评论

0/150

提交评论