单片机音频驱动实验C语言,单片机实验:音乐改编

这篇博客介绍了如何使用单片机进行音乐播放,从修改《两只老虎》的程序到改编成《祝你生日快乐》的乐谱。通过设置定时器和I/O口,利用C语言编程实现音频频率的控制,调整延时函数以改变播放速度,并提供了硬件电路设计和仿真运行的步骤。

《单片机实验:音乐改编》由会员分享,可在线阅读,更多相关《单片机实验:音乐改编(7页珍藏版)》请在人人文库网上搜索。

1、实验1将歌曲播放程序两只老虎改变为另一首歌曲(如Happy new year to yoi)、编程指导:产生任意音频f/*文网络及个人整理,勿用作商业用途音频播放:单片机用一根10 口线,向喇叭送出各种音符的频率-交替变化 的高、低电平,即可让喇叭获得音频方波-播放音乐。欲产生某音符的频率f,只需在f的半周期C对I0 口线取反一次即可!如,喇叭接在I/O 口线P3.7 上:sbit sound=P3八7;/位定义:将 sound为 P3.7sound=!sound; /将P3.7引脚输出电平取反,形成方波一个“沿”【定时常数C】即定时器的“纯”定时时间=计数次数*机器周期【12*( 1/CLK。

2、 )】 定时常数C计算:【定时常数C=音符频率f的半周期C=(1/2f)s=(1000000/2f)us】 以定时/计数器的输入脉冲(机器周期)为单位时:【C=(1000000/2f)us/机器周期 us】【机器周期=12个主频时钟周期】单片机晶振主频时钟常为11.0592MHZ【机器周期=12*( 1/11.0592)us=1.085us以机器周期为单位的定时常数 C=(1000000/2f)us/1.085us=460830/f 即:产生任意频率定时常数C计算公式:【定时常数C=460830/f】f为某音符频率【定时初值N计算】定时初值写入定时计数器,即会产生期望的定时常数C,即定时宽度或。

3、输出频率f。【定时初值”=模M -定时常数C】模M=最大计数值=2A位数,即2的二进 制位数次方例:【若T0为工作方式0,13位计数,其模=最大计数值=2八13=8佃2】【方式0,13位计数 定时初值计算式】【N=8192-C】【定时初值N设置编程】TL0=(8192-C)%32;/TL0 每计数32次向TH0进位1次【13位计数器的低 5位=TL0的低5位,TL0高3位未用】 文档来源网络及个人整理,勿用作商业用途TH0=(8192-C)/32;/TH0 右移5位(2八5=32)【13位计数器的高8位】*/文档来源网络及个人整理,勿用作商业用途二、如下为歌曲两只老虎的不完整C语言程序,请补充。

4、完整。/1、将头文件改为reg51.h #include / 包含头文件:【文件包含】51单片机寄存器定义/2、将驱动喇叭的I/O 口改为P1.0【数据定义】sbit sound=P3A7;位定义:将sound定义为P3.7【驱动喇叭】unsigned int C;/ 变量定义:储存定时器的定时常数3、C调的简谱-频率表:【低音L,中音Z,高音H】 /简谱 频率 说明#define L1 262/ L仁低音1=262Hz【周期=1/262=3826us取半周期】 文档来源网络及个人整理 ,勿用作商业用途L2286/ L2-低音2=286HzL3311/ L3-低音3=311HzL4349/ L。

5、4=低音4=349HzL5392/ L5=低音5=392HzL6440/ L6-低音6=440HzL7494/ L7-低音7=494HzZ1523/ Z1=中音1=523Hz/CZ2587/ Z2=中音2=587HzZ3659/ Z3=中音3=659HzZ4698/ Z4=中音4=698HzZ5784/ Z5=中音5=784HzZ6880/ Z6=中音6=880HzZ7987/ Z7=中音7=523HH11046/ H仁高音1=1046HzH21174/ H2=高音2=1174HzH31318/ H3=高音3=1318HzH41396/ H4=高音4=1396HzH51567/ H5=高音5=。

6、1567HzH61760/ H6=高音6=仃60HzH71975/ H7=高音7=佃75Hz/用宏替换,将各频率替换为音符名称,如:#define L1262/ L1 =低音1=262H文档来源网络及个人整理 ,勿用作商业用途调中音宏定义调高音宏定义【周期=1/262=3826us取半周期】/4、改错 【子函数】 /* 延时函数:延时 200ms【 1/4 拍时间】 */ void delay()unsigned char m,n; for(i=0;i100;i+)/ms级延时,2 重循环for(j=0;j250;j+);/*函数功能:主函数*/void main(void)【主函数】unsi。

7、gned char i,j;5改编程序,播放另一首歌曲【暂不做,下题再做(四、)】。/两只老虎频率【frequency】/ unsigned int code f=Z1,Z2,Z3,Z1,Z1,Z2,Z3,Z1,文档来源网络及个人整理,勿用作商 业用途unsigned int code f=L5,L5,L6,L5,Z1,L7,此句已改为祝你生日快乐文档来源网络及个人整理,勿用作商业用途Z3,Z4,Z5,Z3,Z4,Z5, Z5,Z6,Z5,Z4,Z3,Z1,Z5,Z6,Z5,Z4,Z3,Z1, Z2,L5,Z1,Z2,L5,Z1,0xff;/0xff为结束标志/两只老虎节拍【4=1拍,2=1/。

8、2拍,8=2拍】歌曲时间节拍【time/ unsigned char code JP =4,4,4,4,4,4,4,4, unsigned char code JP =2,2,4,4,4,4,4,/此句已改为祝你生日快乐文档来源网络及个人整理,勿用作商业用途4,4,8,4,4,8,2,2,2,2,4,4,2,2,2,2,4,4,4,4,8,4,4,8 ;6、填空改错=1;开总中断【5个中断】=1;定时器T0开中断(允许)=0x00;方式字:高 4 位 T1 : GATE C/-TM1M0=0000= /软启 定时 方式0(13位计数=8位TH1+低5位TH0)/ 【低4位T0 (同)】whil。

9、e(1)无限循环(唱不停:加电即工作)i=0;/从第1个音符f0开始播放while(fi!=.)若未读到结束标志,则继续 /定时常数C公式:晶振主频时钟常为11.0592MHZ=460830/fi;/【定时常数C=46083/f f为某音符频率/首次装入初值:=(8佃2-C)%32; /整除32取余:TL0每计数32次向TH0进位1次 /【TL0=13位计数器的低5位=TL0的低5位,TL0高3位未用】II【TL0高3位未用】【2八5=整除32,每计数32次向TH0进位1次】文档来源网络及个人整理,勿用作商业用途=(8192-C)/32; IITH0右移5位:2八5=32【TH0=13位计数器。

10、的高 8 位】=1;II启动定时器T0【到定时常数C时,溢出中断发生】for(j=0;jv;j+)II控制节拍数【循环延时i次:节拍】delay(); 延时函数【1I4拍时间】=0;II关闭定时器T0【不响了】;播放下一个音符sound=0;可略I*文档来源网络及个人整理,勿用作商业用途函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波*I文档来源网络及个人整理,勿用作商业用途*中断服务函数编程指导*中断服务函数格式:程序名()interrupt x using y interrupt x中断号 using y所用工作寄存器组 0外部中断01定时器02外部中断13定时器14串行。

11、中断c在编译时把函数入口地址放到对应中断的跳转地址。using y中断函数使用4个寄存器组的哪一个*/void TimeO(void) interrupt using 1【中断 1=T0,工作寄存器 1 组】 文档来源网络及个人整理,勿用作商业用途sound=; II【响了!】将P3.7引脚输出电平取反,形成方波一个“沿”II再次装入初值:【首次之后】TH0=(8佃2-C); II TH0右移5位:2八5=32【13位计数器的高8位】TL0=(8192-C); II整除32取余:TL0每计数32次向TH0进位1次、设计播放该歌曲的硬件电路图,并仿真运行,调试成功四、改编程序,播放另一首歌曲。五。

12、、将delay()函数的外循环的循环变量终值 100改为250,仿真运行,体验播 放速度有何变化?附:几个歌谱a:歌谱祝你生日快乐7 / 6祝你生日快乐HAPPY birthday TO YOU(圾乐谱网站制谓)ity to生 日 快 岛祝怵 生 日 快55651-55H&p -V1birthsdtyto艸1恤V祝你生Bft祝你b:歌谱三个和尚陈小奇词曲甘苹唱X 嘿嘿嘿 X嘿嚥嘿 53-喝多多5水6-挑越ft5么5呀來得5一挑越挑1 - C一 个呀和 为 什么和 大和尚说挑15* 找1尚尚水的 尚尚来5 5 5 6 5 3 5 X X |5556535 -355635LL一 4一 I T -V r = I 1 卅 L,挑呀么挑 水喝,柬咦 挑吋么桃水喝. 二 个呀和 越来越 多,咦咦越来越为什么那和挑得最 多,咦咦戢 多,二和尚说新么 呀来该 抬越应SK-嘤嘿MrUT EK関妙 喝惰活 水懒干 抬越多 么呀来该 抬越应拾 水喝魂昭 抬呀么抬 水喝” 越懒tii咦咦越来越懒惰. 多干活咦咦应该多干活*6 1 235535 63 3 5 3 2 1 2 1 6a S 个和尚没水 为 什么那长 小和尚说年一呀来体 没不身 -呀也P喝老幼没水喝说一说太单薄呀“呀.3呀来体没不身生没说太呀来体没不身瞩说薄 水一单 k投说太 5 =e-呀呀呀。

模块是一个提供串口的 MP3 芯片,完美的集成了 MP3、WMV 的硬解码。同时软 件支持 TF 卡驱动,支持电脑直接更新 spi flash 的内容,支持 FAT16、FAT32 文件系统。 通过简单的串口指令即可完成播放指定的音乐,以及如何播放音乐等功能,无需繁琐的底层 操作,使用方便,稳定可靠是此款产品的最大特点。另外该芯片也是深度定制的产品,专为 固定语音播放领域开发的低成本解决方案。 1.2 功能 1、支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1/48; 2、24 位 DAC 输出,动态范围支持 90dB,信噪比支持 85dB; 3、完全支持 FAT16、FAT32 文件系统,最大支持 32G 的 TF 卡,支持 32G 的 U 盘、64M 字节 的 NORFLASH; 4、多种控制模式,并口控制模式、串口模式、AD 按键控制模式; 5、广播语插播功能,可以暂停正在播放的背景音乐; 6、音频数据按文件夹排序,最多支持 100 个文件夹,每隔文件夹可以分配 1000 首歌曲; 7、30 级音量可调,10 级 EQ 可调; 8、可以外挂 spiflash,连接电脑可以显示 spiflash 的盘符进行更新内容; 9、可以通过单片机串口进行控制播放指定的音乐; 10、在按键模式下,可以进行播放模式选择:可打断,不可打断,单曲循环,大循环; 可打断:就是在播放的过程中,按了按键会打断当前的状态去执行新的; 不可打断:就是在播放的过程中,按任何按键都无效,直到播放完当前曲目才有效;
第一章:AVR单片机C语言程序设计概述 1.1 AVR单片机简介 1.2 AVR Studio+WinAVR开发环境安装及应用 1.3 AVR-GCC程序设计基础 1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:PROTEUS操作基础 2.1 PROTEUS操作界面简介 2.2 仿真电路原理图设计 2.3 元件选择 2.4 仿真运行 2.5 PROTEUS与AVR Studio的联合调试 2.6 PROTEUS在AVR单片机应用系统开发中的优势 第三章:基础程序设计 3.1 闪烁的LED 3.2 左右来回的流水灯 3.3 花样流水灯 3.4 LED模拟交通灯 3.5 单只数码管循环显示0~9 3.6 8只数码管滚动显示单个数字 3.7 8只数码管显示多个不同字符 3.8 K1~K4控制LED移位 3.9 数码管显示4×4键盘矩阵按键 3.10 数码管显示拨码开关编码 3.11 继电器控制照明设备 3.12 开关控制报警器 3.13 按键发音 3.14 INT0中断计数 3.15 INT0及INT1中断计数 3.16 TIMER0控制单只LED闪烁 3.17 TIMER0控制的流水灯 3.18 TIMER0控制数码管扫描显示 3.19 TIMER1控制交通指示灯 3.20 TIMER1与TIMER2控制十字路口秒计时显示屏 3.21 用工作于计数方式的T/C0实现100以内的按键计数 3.22 用定时器设计的门铃 3.23 报警器与旋转灯 3.24 100000秒以内的计时程序 3.25 用TIMER1输入捕获功能设计的频率计 3.26 用工作于异步模式的T/C2控制的可调式数码管电子钟 3.27 TIMER1定时器比较匹配中断控制音阶播放 3.28 用TIMER1输出比较功能调节频率输出 3.29 TIMER1控制的PWM脉宽调制器 3.30 数码管显示两路A/D转换结果 3.31 模拟比较器测试 3.32 EEPROM读写与数码管显示 3.33 Flash程序空间中的数据访问 3.34 单片机与PC机双向串口通讯仿真 3.35 看门狗应用 第四章:硬件应用 4.1 74HC138与74HC154译码器应用 4.2 74HC595串入并出芯片应用 4.3 用74LS148与74LS21扩展中断 4.4 62256扩展内存 4.5 用8255实现接口扩展 4.6 可编程接口芯片8155应用 4.7 可编程外围定时计数器8253应用 4.8 数码管BCD解码驱动器7447与4511应用 4.9 8×8LED点阵屏显示数字 4.10 8位数码管段位复用串行驱动芯片MAX6951应用 4.11串行共阴显示驱动器MAX7219与7221应用 4.12 16段数码管演示 4.13 16键解码芯片74C922应用 4.14 1602字符液晶测试程序 4.15 1602液晶显示DS1302实时时钟 4.16 1602液晶工作于四位模式实时显示当前时间 4.17 2×20串行字符液晶演示 4.18 LGM12864液晶显示程序 4.19 PG160128A液晶图文演示 4.21 TG126410液晶串行模式演示 4.21 用带SPI接口的MCP23S17扩展16位通用IO端口 4.22 用TWI接口控制MAX6953驱动4片5×7点阵显示器 4.23 用TWI接口控制MAX6955驱动16段数码管显示 4.24 用DAC0832生成多种波形 4.25 用带SPI接口的数模转换芯片MAX515调节LED亮度 4.26 正反转可控的直流电机 4.27正反转可控的步进电机 4.28 DS18B20温度传感器测试 4.29 SPI接口温度传感器TC72应用测试 4.30 SHT75温湿度传感器应用 4.31 用SPI接口读写AT25F1024 4.32 用TWI接口读写24C04 4.33 MPX4250压力传感器测试 4.34 MMC存储卡测试 4.35 红外遥控发射与解码仿真 第五章:综合设计 5.1 多首电子音乐的选播 5.2 电子琴仿真 5.3 普通电话机拨号键盘应用 5.4 手机键盘仿真 5.5 数码管模拟显示乘法口诀 5.6 用DS1302与数码管设计的可调电子钟 5.7 用DS1302与LGM12864设计的可调式中文电子日历 5.8 用PG12864LCD设计的指针式电子钟 5.9 高仿真数码管电子钟 5.10 1602LCD显示的秒表 5.11 用DS18B20与MAX6951驱动数码管设计的温度报警器 5.12 用1602LCD与DS18B20设计的温度报警器 5.13 温控电机在L298驱动下改变速度与方向运行 5.14 PG160128中文显示日期时间及带刻度显示当前温度 5.15 液晶屏曲线显示两路模数转换结果 5.16 用74LS595与74LS154设计的16×16点阵屏 5.17 用8255与74LS154设计的16×16点阵屏 5.18 8×8LED点阵屏仿电梯数字滚动显示 5.19 用内置EEPROM与1602液晶设计的MD5加密电子密码锁 5.20 12864LCD显示24C08保存的开机画面 5.21 12864LCD显示EPROM27C256保存的开机画面 5.22 IIC-AT24C1024×2硬字库应用 5.23 SPI-AT25F2048硬件字库应用 5.24 带液晶显示的红外遥控调速仿真 5.25 能接收串口信息的带中英文硬字库的80×16点阵显示屏 5.26 用AVR与1601LCD设计的计算器 5.27 电子秤仿真设计 5.28 模拟射击训练游戏 5.29 PC机通过485远程控制单片机 5.30 用IE访问AVR+RTL8019设计的以太网应用系统
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值