单片机C语言程序设计:按键控制定时器选播多段音乐
单片机控制定时器播放设计
单片机控制定时器播放设计简介本文档介绍了使用单片机控制定时器实现音乐播放的设计方法。
通过定时器的计时功能,可以精确控制音乐的播放时长和节奏,实现各种音乐效果。
设计步骤步骤一:选择合适的单片机及开发环境在开始设计之前,需要确定使用的单片机型号和相应的开发环境。
常见的单片机型号包括STC89C52、AT89C52等,开发环境常用的有Keil、IAR等。
根据自己的需求和熟悉程度选择合适的单片机和开发环境。
步骤二:连接音乐模块将音乐模块与单片机连接,通常使用串口通信进行控制。
连接时需要将音乐模块的TX引脚连接到单片机的RX引脚,同时接地,以实现数据的传输。
步骤三:编写音乐播放代码使用开发环境编写音乐播放的代码。
代码中需要使用定时器的计时功能来控制音乐的播放时长和节奏。
首先需要初始化定时器,设置合适的计时周期和中断触发方式。
在定时器中断函数中实现音乐播放的控制逻辑,根据需要发送相应的控制命令给音乐模块。
以下是一个简单的示例代码:#include <reg52.h>// 定时器中断函数void Timer0_ISR() interrupt 1{// 控制音乐播放// ...}// 主函数void main(){// 初始化定时器// ...// 设置定时器中断使能// ...// 主循环while (1){// ...}}步骤四:编译、烧录和调试将编写好的代码进行编译,生成可执行文件。
然后使用相应的烧录工具,将可执行文件烧录到单片机中。
完成烧录后,连接相应的硬件,通过调试工具进行调试。
通过调试可以验证代码的正确性和音乐播放效果。
优化设计在实际设计中,还可以对音乐播放模块进行优化设计,以提升音乐播放的效果和性能。
使用中断优化音乐播放可以使用外部中断来检测按键事件,当按下某个按键时,触发相应的中断处理函数。
通过中断函数来控制音乐的播放,实现更加灵活的交互方式。
使用编码器实现音乐控制可以使用旋转编码器来实现音乐的控制,例如调整音量、切换曲目等。
音乐播放器单片机课程设计
一.概述 (2)二.系统总体方案设计 (3)三.硬件设计 (6)3.1 89C51单片机 (6)图3-1和3-2 (7)3.2 I/O并行口直接驱动LED显示 (7)四.软件设计 (10)4.1.软件设计 (10)五.系统调试与仿真 (12)5.1软件仿真阶段 (12)5.2系统的仿真调试阶段 (12)5.3硬件安装调试 (12)六.总结 (14)参考文献 (15)附录A:音乐播放器电路设计图 (16)附录B:程序清单 (17)一.概述本课题要求以单片机为核心设计一个音乐播放器,完成多曲选择播放控制、停止控制、省电模式控制等功能。
音乐播放器利用单片机的定时器产生乐谱的各种频率方波,信号经过放大后由喇叭发出声音,选取某段音乐使单片机连续播放。
设计3个按键:播放/停止、下一曲、上一曲;4位LED显示器,用来显示所选曲目,该显示器在播放期间为了节省电源,设计为关闭状态,当一歌曲演奏结束,或选曲时显示器才显示曲目信息。
总体的设计思路是这样的。
二.系统总体方案设计本课题要求以单片机为核心设计一个简易音乐播放器,具有自动播放乐曲的功能。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,音阶对应频率关系图1-1:图2-1本设计用89C51单片机为核心,利用8段数码管显示器.采用动态显示输出,声音输出用蜂鸣器来实现。
采用8段数码管显示器进行动态显示需要占用4根I/O线,蜂鸣器占用1根I/O线,89C51单片机有足够的线,不用扩展I/O口。
用一片单片机即可满足本设计的输入输出。
系统框图如图1-2所示:图2-2通过对音乐播放器主体部分的电路进行模仿设计,达到播放器固有的基本功能,设定按钮K1、 K2和K3。
按钮K1打开并自动播放乐曲1;按钮K2打开并自动播放乐曲2;按钮K3为手动控制音乐停止的按键。
根据设计要求该播放器能实现音键的控制。
除此之外还实现了存储并读出几首音乐的功能。
单片机按键控制定时器选播多段音乐
郑州科技学院单片机课程设计题目按键控制定时器选播多段音乐学生姓名张三专业班级 15级物联网一班学号 201566666 院(系)信息工程学院指导教师王完成时间 2017年6月8日一、背景介绍如今,电子技术获得了飞速的发展,现代电子产品几乎渗透了社会的各个领域。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步想着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路装化等几个方面发展。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机内部也用和电脑功能类似的模块,比如CPU、内存、并行总线。
还有和硬件作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是很低的。
利用单片机实现音乐播放有很多要点,例如外部电路简单,控制方便等,因而备受广大单片机爱好者的喜爱。
通过音乐播放器的设计方案,掌握C语言的编写方法。
并熟练的运用80C51单片机定时器产生固定频率的方波信号,推动喇叭发出旋律,按下单键可以演奏预先设置的歌曲旋律,最重要的是自己还可以通过程序设计输入自己喜欢的歌曲来演奏,本设计采用简易音阶编码直觉式输入法方便设计音乐旋律。
本文将围绕基于单片机按键控制定时器选播多段音乐,介绍一些关于单片机的基础知识、音乐播放器的制作原理及方法(其中包括了音乐编程原理)、定时器的设定,以及仿真软件(Keil、Proteus)的使用方法。
二、设计方案1、方案设计对于C51单片机,它抗干扰性较强,且集成度高、功能强、指令丰富等,可以应用的地方较数字电路更多一些,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表及通讯设备。
基于单片机音乐提示定时器的设计与实现[毕业作品]
BI YE SHE JI(20 届)基于单片机的音乐提示定时器设计与实现基于单片机的音乐提示定时器设计与实现摘要:本设计是利用STC89C52单片机制作的一个音乐提示定时器。
它能够实现定时、音乐提示等功能。
系统由按键模块,显示模块,音乐提示模块,单片机模块和时钟模块构成。
在本设计中,定时时间可由按键开关控制。
完成时间设置后,系统进入倒计时状态,所有的时间数据都通过LCD1602显示器显示出来。
当达到定时时间时,蜂鸣器便会发出音乐提示音。
论文重点阐述了基于单片机对LCD显示器的控制,结构化设计方法和系统硬件的实现。
关键词:单片机 ,LCD1602,定时器,音乐提示,按键控制The design and implementation of a music-reminder timer based on MCUAbstract: This design uses the STC89C52 MCU to product a music-reminder timer. It can achieve timing, music-reminder and other functions.The system is formed by the key module, display module, music-reminder module, microcontroller module and the clock module. In this design, time can be set by the key-switch . After the time setting, the system enters the countdown state, and all the time-data can be displayed through LCD1602 monitor. When it reach the appointed time, the buzzer will play a musical tone. The paper focuses on the LCD monitor system controled by MCU,structural design method and the system hardware.Keywords: microcontroller, LCD1602, timers, music-reminder, button control第一章设计任务及系统方案1.1 设计任务设计要求以单片机为核心,设计一个音乐提示定时器。
按键控制蜂鸣器播放多段音乐的设计论文
《单片机原理及应用》课程设计基于按键控制蜂鸣器播放多段音乐的设计姓名: X X X任课教师: X X院系:X X X专业:电子信息工程提交日期: 2012年6月25日基于按键控制蜂鸣器播放多段音乐的设计引言这学期我们学习了单片机原理及接口技术这一门实用而又生动的课程,初次接触到它就被它丰富的内容所吸引。
单片机自20世纪70年代问世以来,已得到了十分广泛的应用。
随着单片机的集成度越来越高以及单片机系统的广泛应用,对软件编程的要求也越来越高,要求编程人员在短时间内编写出执行效率高、运行可靠的程序代码。
单片机具有一些突出的有点:体积小、重量轻、耗电少、电源单一、功能强、价格低、运行速度较快、抗干扰能力强、可行性高,所以在如今的绝大数的领域中都能够看到单片机的身影。
本次设计是基于AT89C51芯片的电路为基础,外加上三极管的放大、放音设备蜂鸣器,以此来实现音乐硬件控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其播放出优美的音乐。
此次设计共写进了三首歌曲程序,分别是《仙剑》、《月亮代表我的心》和《小星星》。
关键字:单片机蜂鸣器 AT89C51芯片音乐Based on the button control play more paragraphs music of the buzzer designInstructionThis term we have learnt the digital image processing which is a practical and vivid course, First contact to it, I was attractive by its rich content.Since the 1970 s, the single chip microcomputer appeared has been a wide range of applications. With the integration of single chip more and more high and the wide application of single—chip microcomputer system, the software programming requirement also more and more high, requesting programming staff in a short time, writing executive high efficiency and reliable operation program code。
单片机c语言程序设计
单片机c语言程序设计
单片机C语言程序设计主要包括以下几个方面的内容:
1. 硬件初始化:包括对单片机的引脚、端口、定时器、中断等进行初始化设置。
2. 输入输出操作:对外部设备的输入输出进行控制,如读取按键、控制LED灯、驱动液晶显示屏等。
3. 时钟和定时器操作:利用单片机内部的定时器来生成精确的时间延时,进行定时操作。
4. 中断处理:单片机的中断是实现异步事件响应的重要手段。
程序中需要设置中断的触发条件,并编写对应的中断服务函数。
5. 存储器操作:包括对寄存器、变量、数组等进行读写操作,以及对外部存储器的读写操作。
6. 节能和休眠模式:单片机在待机、休眠等低功耗模式下可以通过设置进行省电操作。
7. 通信协议和接口:可以通过UART、SPI、I2C等通信协议
与其他外部设备进行数据交换。
8. 程序控制流程:包括循环、条件分支、跳转等控制结构的使用,以实现程序的逻辑控制。
以上只是单片机C语言程序设计的一些常见内容,具体的程序设计还需要根据实际需求进行设计。
可以根据单片机的型号和数据手册,选择合适的编译器和开发工具,参考相关资料和示例代码进行学习和实践。
单片机C语言的程序设计
单片机(Microcontrollers)诞生于 1971 年,经历了 SCM、MCU、SoC 三大阶段,早期的 SCM 单片机都是 8 位或 4 位的。其中最成功的是 INTEL 的 8051,此后在 8051 上发展出了 MCS51 系列 MCU 系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了 16 位单片机,但因为性价比不理想并未得到很广泛的应用。90 年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着 INTEL i960 系列特别是后 来的 ARM 系列的广泛应用,32 位单片机迅速取代 16 位单片机的高端地位,并且进入主流市场。而传统的 8 位单片机的性能也得到了飞速提高,处理能力比 起 80 年代提高了数百倍。高端的 32 位 Soc 单片机主频已经超过 300MHz,性能直追 90 年代中期的专用处理器,而普通的型号出厂价格跌落至 1 美元,最高 端的型号也只有 10 美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上 电脑和手机核心处理的高端单片机甚至可以直接使用专用的 Windows 和 Linux 操作系统。
03 8 只 LED 左右来回点亮
/*
名称:8 只 LED 左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果
*/ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x)
01
闪烁的 LED
/*
单片机C语言程序设计实训100例
//恢复定时器 1 初值 //500ms 转换状态
名称:10s 的秒表 说明:首次按键计时开始,再次按键暂停,第三次按键清零。
*/ #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit K1=P3^7; uchar i,Second_Counts,Key_Flag_Idx; bit Key_State; uchar
34 上海师范大学信息与机电工程学院—倪继锋
《单片机 C 语言程序设计实训 100 例---基于 8051 和 PROTEUS 仿真》案例
34 /*
100 000s 以内的计时程序 名称:100 000s 以内的计时程序 说明:在 6 只数码管上完成 0~99 999.9s。
*/ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //段码 ucha 中断函数 void LED_Flash_and_Scroll() interrupt 1 { if(++k<35) return; //定时中断若干次后执行闪烁 k=0; switch(i) { case 0: B1=~B1;break; case 1: G1=~G1;break; case 2: R1=~R1;break; case 3: Y1=~Y1;break; default:i=0; } if(++j<300) return; //每次闪烁持续一段时间 j=0; P0=0xff; //关闭显示 i++; //切换到下一个 LED } 30 /* T0 控制 LED 实现二进制计数
单片机的音乐播放器设计(C程序及注释)[详解音调、节拍的确定]
基于单片机的音乐盒设计【摘要】本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。
该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。
使用两个按键控制音乐盒,一个用来切换歌曲,另一个用来切换8路LED的变化花样,本音乐盒共有两首歌曲,花样灯花样共计3种。
播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。
本设计利用KEIL 编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。
目录1.设计方案 (2)2 系统总体方案介绍 (2)2.1系统组成框图 (2)2.2音乐盒的功能结构图 (2)3硬件设计 (3)3.1总体设计框图 (3)3.2各部分硬件设计及其原理............................. 错误!未定义书签。
3.2.2 LED显示电路设计与原理 (3)3.2.3 时钟振荡电路................................... 错误!未定义书签。
3.3硬件电路图及功能 (3)4软件设计 (4)4.1音调、节拍以及编码的确定方法 (4)4.1.1 音调的确定 (5)4.1.2 节拍的确定 (6)4.1.3 编码 (7)4.2软件程序设计 (7)4.2.1 程序流程图及相应代码块 (7)5调试................................................... 错误!未定义书签。
5.1检查硬件连接....................................... 错误!未定义书签。
5.2检查软件系统....................................... 错误!未定义书签。
5.3测试结果 (12)5.3.1.总体运行图 (12)5.3.2.花样灯3种花样图 (13)附录程序源代码及注释 (13)1.设计方案设计一个基于AT89C51系列单片机的音乐盒,利用按键切换演奏出不同的乐曲。
按键选播电子音乐 课程设计
例说51单片机课程设计——课题:按键选播电子音乐第 1 章单片机系统功能简介本例单片机内置了三段电子音乐,按下连接P3.2的K1键时将触发INT0中断,中断例程控制切断播放另一段音乐。
第 2 章单片机系统硬件电路设计2-1 PROTEUS7.5原理图:2-2 元器件清单:第 3 章单片机系统软件设计3-1 流程图设计主程序流程图:3-2 程序设计:#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3^7;uint code Tone_Delay_Table[]={ 64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178};uchar code Song1_Tone[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0xFF}; uchar code Song1_Time[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xFF};uchar code Song2_Tone[]={3,5,5,3,2,1,2,3,5,3,2,3,5,5,3,2,1,2,3,2,1,1,0xFF};uchar code Song2_Time[]={2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0xFF};uchar code Song3_Tone[]={1,3,3,3,3,5,4,2,5,3,7,6,5,5,7,4,4,3,6,7,2,1,0xFF};uchar code Song3_Time[]={2,1,1,2,1,1,1,2,1,1,3,2,1,1,2,4,1,1,2,1,1,1,0xFF};uchar Song_Index=0,Tone_Index=0;uchar *Song_Tone_Pointer,*Song_Time_Pointer;uchar i=0;void DelayMS(uint ms){uchar t;while(ms--) for(t=0;t<120;t++);}void Key_Press() interrupt 0{TR0=0;Song_Index=(Song_Index+1)%3;switch (Song_Index){case 0: Song_Tone_Pointer=Song1_Tone;Song_Time_Pointer=Song1_Time;break;case 1: Song_Tone_Pointer=Song2_Tone;Song_Time_Pointer=Song2_Time;break;case 2: Song_Tone_Pointer=Song3_Tone;Song_Time_Pointer=Song3_Time;break;}i=0;TR0=1;}void Timer0_Play_music() interrupt 1{TH0=Tone_Delay_Table[Tone_Index]/256;TL0=Tone_Delay_Table[Tone_Index]%256; BEEP=~BEEP;}void main(){TMOD=0x01;IP=0x01;IE=0x83;TR0=0;Song_Tone_Pointer=Song1_Tone;Song_Time_Pointer=Song1_Time;while(1){Tone_Index=Song_Tone_Pointer[i];if(Tone_Index==0xFF){i=0;DelayMS(2000);continue;}TR0=1;DelayMS(Song_Time_Pointer[Tone_Index]*240);TR0=0;i++;}}第 4 章系统调试4-1 在PROTEUS7.5仿真步骤1、将程序在KEIL C中编译,直到达到要求;2、在PROTEUS中绘制硬件图;3、将KEIL C 中编译好的HEX文件加载到PROTEUS中;4、按下K1观察扬声器发出的音乐间隔一会儿再按下K1 看扬声器里的音乐是否切换再按下K1看是否播放第三首音乐;仿真效果:按下K1键发出一首音乐,间隔一会儿再按下K1键切换到第二首音乐,间隔一会儿再次按下K1键发出第三首音乐。
C语言实现音乐播放器
C语言实现音乐播放器音乐是人们生活中不可或缺的一部分,而音乐播放器则是让人们能够随时随地欣赏自己喜爱的音乐的工具。
本文将介绍如何使用C语言来实现一个简单的音乐播放器。
一、背景介绍在开始介绍之前,我们先了解一下C语言。
C语言是一种通用的高级计算机程序设计语言,它广泛应用于软件开发、嵌入式系统、操作系统等领域。
C语言具有简洁、高效、灵活等特点,非常适合用来实现音乐播放器这样的应用程序。
二、功能设计一个音乐播放器需要具备以下几个基本功能:1. 播放音乐:能够将音乐文件加载到内存中,并通过音频设备进行播放。
2. 暂停和继续播放:能够控制音乐的播放状态,实现暂停和继续播放功能。
3. 调节音量:能够通过控制音频设备的音量来调节音乐的播放音量。
4. 播放进度条:能够显示当前音乐的播放进度,并能够通过拖动进度条来控制播放进度。
5. 播放列表:能够显示已加载的音乐文件,并能够选择要播放的音乐。
6. 循环播放:能够实现单曲循环、列表循环和随机播放等不同播放模式。
三、技术实现1. 文件加载:使用C语言的文件操作函数,如fopen、fread等,将音乐文件加载到内存中,也可以使用第三方库来简化操作。
2. 音频播放:使用C语言的音频库,如ALSA、SDL等,通过调用相应的函数实现音频播放。
3. 用户界面:使用C语言的图形库,如GTK、SDL等,创建用户界面并实现各种交互操作。
4. 音频处理:使用C语言的音频处理库,如libao、libmad等,对音乐文件进行解码和处理。
5. 播放控制:使用C语言的多线程或事件驱动机制,实现播放控制功能,包括播放、暂停、继续、音量调节等。
6. 播放列表:使用C语言的链表或数组等数据结构,保存已加载的音乐文件,并能够根据用户选择进行切换和播放。
7. 进度条:使用C语言的图形库,绘制并更新进度条的显示,并通过鼠标或键盘事件实现拖动进度条来控制播放进度。
8. 播放模式:使用C语言的条件语句和控制流程,实现不同的播放模式,并能够根据用户选择切换不同的播放模式。
单片机播放音乐的编程方法网络整理版
我将阐述播放音乐的软件编程方法。
原理:1’要让单片机控制扬声器发出音调只要计算出某一音频的频率,进而计算出周期,然后将这一周期除以二,即为半周期的时间。
利用定时器计数这半个周期。
每当计数到这个时间就将输出I/O口取反,重复这个步骤就可以得到这个音调的脉冲。
2’利用80C51扥内部定时器使用其工作在计数器模式MODE1下,改变计数值TH0,及TL0易产生不同频率的方法。
例如长生频率为532HZ的脉冲,其周期为T=1/523=1912us。
因此只要计数器计数956/1us=956。
在每次计数956次后将I/O口取反,就可得到中音DO(523HZ)。
计数脉冲值与频率的关系公式如下:N=Fi÷2÷Fr N:计算值Fi:内部计数时一次计数为1us,故其频率为1MHZ.3’其计数值的求法如下;T=65536-N=65536-Fi÷2÷Fr 其计数值的求法如下例如:设K=65536,F=1000000=Fi=1MHZ,求低音DO(261HZ),中音DO(523HZ),高音DO(1046HZ)的计算值。
T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr。
低音DO的 T=65536-500000/262=63627中音DO的 T=65536-500000/523=64580高音DO的 T=65536-500000/1047=650594’ C调各音符频率与计数值T的对照表如下所示.在音乐中所谓音调其实就是我们所说的音高,在音乐中我们常把C 调上方的A作为标准音调,其频率等于440HZ。
当两个声音信号的频率相差一倍是也即f1=2f2,则称相差一个倍频程,在音乐中低音1和中音1,低和中2正好相差一个倍频程在音乐上称他们相差一个八度音,一个八音度有12个伴音,即为1-#1,#1-2,2-#2,#2-3,3-4,4-#4,#4-5,5-#5,#5-6,6-#6,#6-7,7-i.如果我们知道了这十二个基本音调的频率,我们就可以根据倍频程的关系得到其他调。
单片机课程设计报告按键控制定时器选播多段音乐精编版
单片机课程设计报告按键控制定时器选播多段音乐精编版MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】Proteus仿真大作业课题:按键控制定时器选播多段音乐系部:电子工程系班级:计算机控制技术1201班姓名:张坤指导老师:马磊娟前言Proteus技术是计算机控制技术的核心课程,经过一年的学习本人对于其也有了一定的理解此次大型作业的布置正好可以验证自己所学如何能否实际应用本次设计中的硬件设计涉及8051输入/输出(I/O)端口独立式键盘、TFT彩屏显示等应用,而软件设计采用C51语言编写。
因此我的课程设计基本涵盖了课程的重要内容,较好的检测我的学习效果。
Proteus课程设计是一个工程项目,在这一工程中包括选题、绘制电路图+编制程序、Proteus仿真、系统仿真与调试、系统正常运行等流程。
在老师的安排下,我严格按照这一流程开展项目,并最终完成本项目—基于单片机的推箱子游戏设计。
接下来我将具体介绍我们在开展项目中遇到的问题和解决方案的设计。
摘要本课程设计是按键控制定时器选择多段音乐,以AT89S52为系统的操作核心,以一个数码管显示播放音乐的序号,通过按键来选择音乐(本课程设计中含3首音乐)。
硬件设计方案1.单片机及晶振模块该设计选用的是Atmel公司生产的AT89S52型单片机,由石英晶体振荡器产生单片机工作时所需的时钟信号,振荡器采用的是12M的晶振,使其机器周期为1us,方便发音程序的计算和编译。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
51单片机入门例程之一个按键选择播放六首音乐
changedata(songdata,diaodata,jiedata); //解释音乐符号串
TR0=1;
for(i=0;diaodata[i]!=0;i++) //逐个符号演奏
{
tl0_f=freq[diaodata[i]*2]; //取出对应的定时值送给T0
0x4C,0xF6,//00370HZ ,6
0xD7,0xF6,//00392HZ ,6#
0x5A,0xF7,//00415HZ ,7
0xD8,0xF7,//00440HZ 1 //12
0x4D,0xF8,//00466HZ 1# //13
0xBD,0xF8,//00494HZ 2 //14
break;
case 2:
play(mamahao); //播放音乐
break;
case 3:
play(boluose 4:
play(xingxing); //播放音乐
break;
uchar th0_f; //在中断中装载的T0的值高8位
uchar tl0_f; //在中断中装载的T0的值低8位
//T0的值,及输出频率对照表
uchar code freq[36*2]={
0xA9,0xEF,//00220HZ ,1 //0
0x93,0xF0,//00233HZ ,1#
",7--,5_|1.3_5.1_|,7.3_5 5_|"
"6.7_`1.6_|6_5_5-3_2_|1.1_13_2_|"
单片机音乐播放c语言程序
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4
};
//生日歌
// 音阶频率表 高八位
code uchar FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
/* 函数声明 */
/*******************************************************/
uchar keyscan(void); //键盘扫描
void delay1(uint i); //演示程序
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 低八位
code uchar FREQL[]={
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
延时程序
------------------------------------------------*/
cord_l=P3&0xf0; //读入行线值
return(cord_h+cord_l);//键盘最后组合码值
单片机音乐播放C语言程序
单片机音乐播放C语言程序#include ;#define uchar unsigned char#define uint unsinged intsbit speaker = P1^7;uchar t0h,t0l,time;//--------------------------------------//单片机晶振采用11.0592MHz// 频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据uchar code FREQH[] = {0x01, //0的时候没有音符 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC,0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567//-----------------------------------------// 频率-半周期数据表低八位uchar code FREQL[] = {0x01, //0的时候没有音符 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567//--------------------------------------//一个音符有三个数字。
定时器实验(单片机控制蜂鸣器播放曲子——最炫民族风)
#include <REGX51.H>unsigned char h, l, time;sbit beep = P3^7;code unsigned char high[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, //1,2,3,4,5,6,7,0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音i2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音1234567code unsigned char low[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, //1,2,3,4,5,6,7,0x8F, 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音i2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音1234567code unsigned char music[] ={6,1,2, 6,1,1, 5,1,1, 6,1,2, 6,1,1, 1,2,1, 1,2,2, 2,2,1, 1,2,1, 6,1,4, 1,2,2, 1,2,1, 5,1,1, 1,2,1,2,2,1, 3,2,1, 5,2,1, 5,2,1, 3,2,1, 2,2,2, 3,2,4, 6,2,1, 6,2,1, 6,2,1, 5,2,1, 3,2,1, 3,2,2, 1,2,1, 6,1,1,6,1,1, 6,1,1, 3,2,1, 2,2,4, 3,2,1, 3,2,1, 5,2,1, 3,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 5,1,1, 6,1,4,3,2,1, 3,2,1, 5,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,1, 6,2,1, 1,3,1, 6,2,1, 5,2,2, 6,2,4, 6,1,2, 6,1,1, 5,1,1,6,1,2, 1,2,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 2,2,1, 3,2,4, 6,1,1, 6,2,1, 6,2,1, 5,2,1, 2,2,1, 3,2,1, 2,2,1, 0,0,0,};void nint() interrupt 1 //T0中断程序,控制发音的音调{TR0 = 0; //先关闭T0beep =~beep; //输出方波, 发音TH0 = h; //下次的中断时间, 这个时间, 控制音调高低TL0 = l;TR0 = 1; //启动T0}void delay(unsigned char t) //延时子函数,控制发音的时间长度{unsigned char t1;unsigned long t2;for(t1 = 0; t1 < t; t1++) //嵌套循环, 共延时t个半拍for(t2 = 0; t2 < 4000; t2++); //延时期间, 可进入T0中断去发音TR0 = 0; //关闭T0, 停止发音}void song() //演奏一个音符{TH0 = h; //控制音调TL0 = l;TR0 = 1; //启动T0, 由T0输出方波去发音beep =~beep;delay(time); //控制时间长度}void main() //j表示第n+1首曲{ unsigned char k, i;i = 0;TMOD = 1; //置T0定时工作方式1ET0 = 1; //开T0中断EA = 1;time = 1;while(time) {k = music[i] + 7 * music[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度h = high[k]; //从数据表中读出频率数值l = low[k]; //实际上, 是定时的时间长度time = music[i + 2]; //读出时间长度数值i += 3;song(); //发出一个音符}}。
单片机音乐播程序设计流程
单片机音乐播程序设计流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 确定音乐格式:首先需要确定要播放的音乐文件格式,常见的音乐格式如 MP3、WAV 等。
单片机C语言程序设计:按键控制定时器选播多段音乐
单片机C语言程序设计:按键控制定时器选播多段音乐/* 名称:按键控制定时器选播多段音乐说明:本例内置3 段音乐,K1 可启动停止音乐播放,K2 用于选择音乐段。
*/#includereg51.h#includeintrins.h#define uchar unsigned char#define uint unsigned intsbit K1=P1; //播放和停止键sbit SPK=P3;//蜂鸣器uchar Song_Index=0,Tone_Index=0; //当前音乐段索引,音符索引//数码管段码表uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//标准音符频率对应的延时表uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248}; uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};//三段音乐的音符uchar code Song[][50]={{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1},{3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1},{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1} };//三段音乐的节拍uchar code Len[][50]={{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1},{1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1} };//外部中断0void EX0_INT() interrupt 0{TR0=0;播放结束或者播放中途切换歌曲时停止播放Song_Index=(Song_Index+1)%3;跳到下一首的开头Tone_Index=0;P2=DSY_CODE[Song_Index]; //数码管显示当前音乐段号}//定时器0 中断函数void T0_INT() interrupt 1{TL0=LO_LIST[Song[Song_Index][Tone_Index]];TH0=HI_LIST[Song[Song_Index][Tone_Index]];SPK=~SPK;}//延时void DelayMS(uint ms){uchar t;while(ms--) for(t=0;t120;t++);}tips:感谢大家的阅读,本文由我司收集整编。
proteus-基于单片机的按键选播电子音乐
proteus-基于单片机的按键选播电子音乐成绩课程论文题目:基于单片机的按键选播电子音乐学生姓名:王啸学生学号: 1008050235 系别:电气信息工程学院专业:电子信息科学与技术年级: 10级任课教师:沈晓波电气信息工程学院制2012年10月前言目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
科技越发达,智能化的东西就越多,使用的单片机就越多。
看来学单片机是社会发展的需求。
这些“高科技”看上去是如此的神秘,它到底是怎样构成的,它是通过什么样的程序和什么样的方式来完成这一系列指令的呢?让我们取钱更方便、避免城市的交通混乱和交通阻塞……给我们生活带来了处处方便。
其实这也是用单片机来控制的,单片机在我们生活中触手可及,它是如此地贴近我们的生活,单片机给我们的生活带来的有如此多的便利。
由于单片机在工业控制领域的广泛应用,单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
这次我们就以“基于单片机的按键选播电子音乐”为例,介绍单片机在生活中的简单应用,制作可以可以播放音乐的单片机设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ TL0=LO_LIST[Song[Song_Index][Tone_Index]]; TH0=HI_LIST[Song[Song_Index][Tone_Index]]; SPK=~SPK; } //延时
voidDelayMS(uintms) { uchart; while(ms--)for(t=0;t } //主程序
voidEX0_INT()interrupt0 { TR0=0;播放结束或者播放中途切换歌曲时停止播放 Song_Index=(Song_Index+1)%3;跳到下一首的开头 Tone_Index=0; P2=DSY_CODE[Song_Index]; //数码管显示当前音乐段号 } //定时器 0 中断函数 voidT0_INT()interrupt1
ucharcodeLen[][50]= { {1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1}, {1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1}, {1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1} }; //外部中断 0
单片机 C 语言程序设计:按键控制定时器选播多段 音乐
/* 名称:按键控制定时器选播多段音乐 说明:本例内置 3 段音乐,K1 可启动 停止音乐播放,K2 用于选择音乐段。 */ #include #include
#defineucharunsignedchar #defineuintunsignedint sbitK1=P1; //播放和停止键 sbitSPK=P3; //蜂鸣器 ucharSong_Index=0,Tone_Index=0;//当前音乐段索引,音符索引 //数码管段码表
ucharcodeSong[][50]= { {1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1}, {3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1}, {3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1} }; //三段音乐的节拍
voidmain() { P2=0xc0; SPK=0; TMOD=0x00; IE=0x83; IT0=1; IP=0x02; while(1) { //T0 方式 0
while(K1==1);//未按键等待 while(K1==0);//等待释放 TR0=1; //开始播放 Tone_Index=0;//从第 0 个音符开始 //播放过程中按下 K1 可提前停止播放(K1=0) 。 //若切换音乐段会触发外部中断,导致 TR0=0,播放也会停止
while(Song[Song_Index][Tone_Index]!=1&&K1==1&&TR0==1) { DelayMS(300*Len[Song_Index][Tone_Index]); Tone_Index++; } TR0=0; //停止播放 //当前音乐段的下一音符索引 播放延时(节拍)
while(K1==0);//若提前停止播放,按键未释放时等待 } 推odeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ; //标准音符频率对应的延时表 ucharcodeHI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,2 48}; ucharcodeLO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3}; //三段音乐的音符