定时器控制的音乐实验.docx

上传人:b****6 文档编号:6185586 上传时间:2023-01-04 格式:DOCX 页数:13 大小:20.69KB
下载 相关 举报
定时器控制的音乐实验.docx_第1页
第1页 / 共13页
定时器控制的音乐实验.docx_第2页
第2页 / 共13页
定时器控制的音乐实验.docx_第3页
第3页 / 共13页
定时器控制的音乐实验.docx_第4页
第4页 / 共13页
定时器控制的音乐实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

定时器控制的音乐实验.docx

《定时器控制的音乐实验.docx》由会员分享,可在线阅读,更多相关《定时器控制的音乐实验.docx(13页珍藏版)》请在冰豆网上搜索。

定时器控制的音乐实验.docx

定时器控制的音乐实验

实验六:

定时器控制的音乐实验

一、实现功能:

1、可以在学习版上运行,也可以用PROTEUS仿真出《好人一生平安》。

二、实验步骤:

1、用PROTEUS软件画出仿真电路图

此图与学习版原理图部分电路对应。

用到的原器件:

单片机:

AT89C51按键:

BUTTON电阻:

RES电容:

CAP

晶振:

CRYSTAL发光二极管:

LED_YELLOW扬声器:

SOUNDER

2、用编译软件分别对汇编语言和C51进行编译,生成目标文件,参考程序附后

3、对编译好的HEX文件调至电路图仿真,分析仿真结果,两种程序有何异同,可以单步执行进行联调。

4、分别用CH341软件(USB驱动)和STC_ISP软件(下载软件)把HEX文件配置到学习版并执行,分析结果。

5、在此程序的基础上改写程序,并能在按键的控制下播放10首曲子。

三.程序附件:

附件1:

用定时器T0的中断实现"渴望"主题曲的播放C语言程序

#include//包含51单片机寄存器定义的头文件

sbitsound=P3^4;//将sound位定义为P3.4

unsignedintC;//储存定时器的定时常数

//以下是C调低音的音频宏定义

#definel_dao262//将“l_dao”宏定义为低音“1”的频率262Hz

#definel_re286//将“l_re”宏定义为低音“2”的频率286Hz

#definel_mi311//将“l_mi”宏定义为低音“3”的频率311Hz

#definel_fa349//将“l_fa”宏定义为低音“4”的频率349Hz

#definel_sao392//将“l_sao”宏定义为低音“5”的频率392Hz

#definel_la440//将“l_a”宏定义为低音“6”的频率440Hz

#definel_xi494//将“l_xi”宏定义为低音“7”的频率494Hz

//以下是C调中音的音频宏定义

#definedao523//将“dao”宏定义为中音“1”的频率523Hz

#definere587//将“re”宏定义为中音“2”的频率587Hz

#definemi659//将“mi”宏定义为中音“3”的频率659Hz

#definefa698//将“fa”宏定义为中音“4”的频率698Hz

#definesao784//将“sao”宏定义为中音“5”的频率784Hz

#definela880//将“la”宏定义为中音“6”的频率880Hz

#definexi987//将“xi”宏定义为中音“7”的频率523H

//以下是C调高音的音频宏定义

#defineh_dao1046//将“h_dao”宏定义为高音“1”的频率1046Hz

#defineh_re1174//将“h_re”宏定义为高音“2”的频率1174Hz

#defineh_mi1318//将“h_mi”宏定义为高音“3”的频率1318Hz

#defineh_fa1396//将“h_fa”宏定义为高音“4”的频率1396Hz

#defineh_sao1567//将“h_sao”宏定义为高音“5”的频率1567Hz

#defineh_la1760//将“h_la”宏定义为高音“6”的频率1760Hz

#defineh_xi1975//将“h_xi”宏定义为高音“7”的频率1975Hz

/*******************************************

函数功能:

1个延时单位,延时200ms

******************************************/

voiddelay()

{unsignedchari,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++)

;

}

unsignedintcodef[]={re,mi,re,dao,l_la,dao,l_la,//每部分对应一小节音符l_sao,l_mi,l_sao,l_la,dao,l_la,dao,sao,la,mi,sao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,l_la,dao,l_la,l_sao,l_re,l_mi,l_sao,re,re,sao,la,sao,fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,re,l_la,dao,re,l_la,dao,re,mi,re,

0xff};//以0xff作为

//以下是简谱中每个音符的节拍

//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位

unsignedcharcodeJP[]={4,1,1,4,1,1,2,2,2,2,2,8,4,2,3,1,2,2,10,4,2,2,4,4,2,2,2,2,4,2,2,2,2,2,2,2,10,4,4,4,2,2,4,2,4,4,4,2,2,2,2,2,2,10,4,2,2,4,4,2,2,2,2,6,4,2,2,4,1,1,4,10,4,2,2,4,1,1,4,10

};

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

unsignedchari,j;

//以下是《渴望》片头曲的一段简谱

EA=1;//开总中断

ET0=1;//定时器T0中断允许

TMOD=0x00;//使用定时器T0的模式1(13位计数器)

while

(1)//无限循环

{

i=0;//从第1个音符f[0]开始播放

while(f[i]!

=0xff)//只要没有读到结束标志就继续播放

{

C=460830/f[i];

TH0=(8192-C)/32;//13位计数器TH0高8位的赋初值方法

TL0=(8192-C)%32;/13位计数器TL0低5位的赋初值方法

TR0=1;//启动定时器T0

for(j=0;j

delay();//延时1个节拍单位

TR0=0;//关闭定时器T0

i++;//播放下一个音符

}

}

}

/***********************************************

函数功能:

T0的中断服务子程序,使P3.7引脚输出音频的方波

*************************************************/

voidTime0(void)interrupt1using1

{

sound=!

sound;//将P3.4引脚输出电平取反,形成方波

TH0=(8192-C)/32;//13位计数器TH0高8位的赋初值方法

TL0=(8192-C)%32;//13位计数器TL0低5位的赋初值方法

}

附件2:

用定时器T0和外部0的中断实现十首曲的播放C语言程序

#include//包含51单片机寄存器定义的头文件

sbitsound=P3^4;//将sound位定义为P3.4

unsignedintC;//储存定时器的定时常数

unsignedchar*JP;//

unsignedint*f;//

unsignedchart0=0;//中断次数

unsignedcharww=255;//延时长度控制

unsignedchari=0;//播放时控制第几个音节

//以下是C调低音的音频宏定义

#definel_dao262//将“l_dao”宏定义为低音“1”的频率262Hz

#definel_re286//将“l_re”宏定义为低音“2”的频率286Hz

#definel_mi311//将“l_mi”宏定义为低音“3”的频率311Hz

#definel_fa349//将“l_fa”宏定义为低音“4”的频率349Hz

#definel_sao392//将“l_sao”宏定义为低音“5”的频率392Hz

#definel_la440//将“l_a”宏定义为低音“6”的频率440Hz

#definel_xi494//将“l_xi”宏定义为低音“7”的频率494Hz

//以下是C调中音的音频宏定义

#definedao523//将“dao”宏定义为中音“1”的频率523Hz

#definere587//将“re”宏定义为中音“2”的频率587Hz

#definemi659//将“mi”宏定义为中音“3”的频率659Hz

#definefa698//将“fa”宏定义为中音“4”的频率698Hz

#definesao784//将“sao”宏定义为中音“5”的频率784Hz

#definela880//将“la”宏定义为中音“6”的频率880Hz

#definexi987//将“xi”宏定义为中音“7”的频率523H

//以下是C调高音的音频宏定义

#defineh_dao1046//将“h_dao”宏定义为高音“1”的频率1046Hz

#defineh_re1174//将“h_re”宏定义为高音“2”的频率1174Hz

#defineh_mi1318//将“h_mi”宏定义为高音“3”的频率1318Hz

#defineh_fa1396//将“h_fa”宏定义为高音“4”的频率1396Hz

#defineh_sao1567//将“h_sao”宏定义为高音“5”的频率1567Hz

#defineh_la1760//将“h_la”宏定义为高音“6”的频率1760Hz

#defineh_xi1975//将“h_xi”宏定义为高音“7”的频率1975Hz

/*******************************************

函数功能:

1个延时单位,延时200ms

******************************************/

voiddelay(unsignedcharw0)

{

unsignedcharj,k;

for(k=0;k

for(j=0;j<250;j++)

;

}

//以下是《渴望》片头曲的一段简谱

unsignedintcodeSongJianPu0[]={re,mi,re,dao,l_la,dao,l_la,//每部分对应一小节音符

l_sao,l_mi,l_sao,l_la,dao,l_la,dao,sao,la,mi,sao,re,mi,re,mi,sao,mi,

l_sao,l_mi,l_sao,l_la,dao,l_la,l_la,dao,l_la,l_sao,l_re,l_mi,l_sao,

re,re,sao,la,sao,fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,

mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,

re,l_la,dao,re,l_la,dao,re,mi,re,

0xff};//以0xff作为

//以下是简谱中每个音符的节拍

//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位

unsignedcharcodeJiePai0[]={4,1,1,4,1,1,2,2,2,2,2,8,4,2,3,1,2,2,10,4,2,2,4,4,2,2,2,2,4,2,2,2,2,2,2,2,10,4,4,4,2,2,4,2,4,4,4,2,2,2,2,2,2,10,4,2,2,4,4,2,2,2,2,6,

4,2,2,4,1,1,4,10,4,2,2,4,1,1,4,10

};

//以下是《》的一段简谱

unsignedintcodeSongJianPu4[]={re,mi,re,dao,l_la,dao,l_la,//每部分对应一小节音符

l_sao,l_mi,l_sao,l_la,dao,l_la,dao,sao,la,mi,sao,re,mi,re,mi,sao,mi,

l_sao,l_mi,l_sao,l_la,dao,l_la,l_la,dao,l_la,l_sao,l_re,l_mi,l_sao,

re,re,sao,la,sao,fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,

mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,

re,l_la,dao,re,l_la,dao,re,mi,re,

0xff};

unsignedcharcodeJiePai4[]={4,1,1,4,1,1,2,2,2,2,2,8,4,2,3,1,2,2,10,4,2,2,4,4,2,2,2,2,4,2,2,2,2,2,2,2,10,4,4,4,2,2,4,2,4,4,4,2,2,2,2,2,2,10,4,2,2,4,4,2,2,2,2,6,

4,2,2,4,1,1,4,10,4,2,2,4,1,1,4,10

};

//以下是《老鼠爱大米》一段简谱

unsignedintcodeSongJianPu2[]={

dao,dao,re,mi,mi,re,dao,re,re,dao,re,mi,mi,re,dao,dao,l_sao,l_la,l_sao,l_sao,l_sao,l_la,dao,dao,

dao,dao,dao,dao,re,re,dao,re,mi,mi,mi,sao,la,re,re,mi,re,dao,dao,dao,re,mi,sao,sao,l_sao,l_sao,

l_la,dao,dao,dao,mi,re,dao,dao,re,dao,dao,mi,mi,sao,sao,sao,sao,sao,sao,la,la,mi,re,

dao,dao,dao,re,mi,mi,mi,sao,sao,sao,sao,la,dao,dao,la,sao,mi,re,dao,dao,l_la,re,mi,sao,

sao,sao,sao,la,sao,la,mi,re,dao,dao,dao,re,mi,mi,mi,sao,sao,sao,sao,la,h_dao,h_dao,la,sao,mi,re,

re,re,re,dao,mi,fa,sao,re,re,mi,re,dao,dao,mi,re,dao,dao,mi,re,

mi,dao,mi,la,sao,sao,mi,sao,la,la,sao,sao,la,sao,sao,mi,re,dao,

0xff};//

unsignedcharcodeJiePai2[]={2,1,1,2,2,2,1,1,6,1,1,2,2,2,2,6,1,1,3,1,1,1,1,5,4,

2,2,2,1,1,4,2,1,1,2,2,2,1,1,4,2,1,1,2,2,2,1,1,6,1,1,

2,1,1,1,3,2,2,2,1,1,10,2,1,1,2,1,1,2,1,1,4,2,2,

2,2,2,1,1,6,1,1,2,2,2,1,1,2,2,2,2,2,2,2,2,6,1,1,

2,2,1,2,1,4,2,2,2,2,2,1,11,6,1,1,2,2,2,1,1,2,2,2,1,1,

2,2,8,2,1,1,2,2,8,2,1,1,4,2,1,1,4,2,2,

2,2,2,1,1,6,1,1,2,1,1,2,1,1,4,1,2,1};

//以下是《迟来的爱》片头曲的一段简谱

unsignedintcodeSongJianPu3[]={mi,re,mi,sao,la,sao,mi,re,dao,re,

mi,re,mi,re,mi,re,dao,dao,l_la,

l_sao,l_sao,l_la,dao,dao,re,mi,sao,sao,mi,sao,

la,sao,mi,re,mi,re,dao,l_la,dao,sao,mi,

re,mi,re,mi,sao,la,sao,mi,re,dao,re,

mi,re,mi,re,mi,re,dao,dao,l_la,

l_sao,l_sao,l_la,dao,dao,re,mi,sao,sao,mi,sao,

la,sao,mi,re,mi,re,mi,la,sao,mi,re,

dao,mi,mi,sao,la,sao,la,sao,mi,dao,

0xff};

unsignedcharcodeJiePai3[]={2,2,6,2,2,2,1,1,1,1,10,2,2,6,2,2,2,2,2,

10,2,2,2,4,1,1,2,4,1,1,6,2,6,1,1,6,2,2,2,2,2,

10,2,2,6,2,2,2,1,1,1,1,10,2,2,6,2,2,2,2,2,

10,2,2,2,4,1,1,2,4,2,2,

6,2,6,1,1,6,2,2,2,2,2,10,2,2,2,10,2,2,2,2,10

};

//以下是《义勇军进行曲》片头曲的一段简谱

unsignedintcodeSongJianPu1[]={l_sao,dao,dao,dao,dao,l_sao,l_la,l_xi,dao,dao,

mi,dao,re,mi,sao,sao,mi,mi,dao,mi,sao,mi,re,re,la,sao,re,mi,sao,mi,sao,mi,re,mi,dao,mi,

l_sao,l_la,dao,dao,mi,mi,sao,sao,re,re,re,l_la,re,l_sao,dao,dao,mi,mi,sao,dao,mi,sao,sao,la,sao,mi,dao,

sao,sao,sao,mi,sao,l_sao,dao,mi,dao,sao,sao,sao,mi,dao,l_sao,dao,l_sao,dao,l_sao,dao,dao,

0xff};

unsignedcharcodeJiePai1[]={2,6,2,3,1,2,1,1,4,4,

2,2,1,1,4,4,3,1,3,1,3,1,4,8,4,4,4,4,2,4,2,2,1,1,4,8,

3,1,2,2,3,1,2,2,2,1,1,4,6,2,6,2,6,2,8,3,1,2,2,4,4,3,1,

1,2,1,4,4,4,4,3,1,1,2,1,4,4,4,4,4,4,4,4,8

};

//以下是《》的一段简谱

unsignedintcodeSongJianPu5[]={0xff};

unsignedcharcodeJiePai5[]={2,

};

//以下是《》的一段简谱

unsignedintcodeSongJianPu6[]={0xff};

unsignedcharcodeJiePai6[]={3,

};

//以下是《》的一段简谱

unsignedintcodeSongJianPu7[]={0xff};

unsignedcharcodeJiePai7[]={7,

};

//以下是《》的一段简谱

unsignedintcodeSongJianPu8[]={1,0xff};

unsignedcharcodeJiePai8[]={8,

};

//以下是《》的一段简谱

unsignedintcodeSongJianPu9[]={1,0xff};

unsignedcharcodeJiePai9[]={1,

};

 

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

unsignedchari,j;

TMOD=0X00;//设TIMER0在MODE1(13位计数器)

TCON=0X01;//外部中断INT0,下降沿触发

IE=0x83;//开中断(INT0,TIMER0)

IP=0x00;//设置中断优先级

f=SongJianPu0;

JP=JiePai0;

while

(1)//无限循环

{

i=0;//从第1个音符f[0]开始播放

while(f[i]!

=0xff)//只要没有读到结束标志就继续播放

{

C=460830/f[i];

TH0=(8192-C)/32;//可证明这是13位计数器TH0高8位的赋初值方法

TL0=(8192-C)%32;//可证明这是13位计数器TL0低5位的赋初值方法

TR0=1;//启动定时器T0

for(j=0;j

delay(ww);//延时1个节拍单位

TR0=0;//关闭定时器T0

i++;//播放下一个音符

}

}

}

/***********************************************************

函数功能:

定时器T0的中断服务子程序,使P3.7引脚输出音频的方波

************************************************************/

voidTime0(void)interrupt1using1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1