900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 51单片机蜂鸣器演奏《小苹果》C语言程序 C利用51单片机蜂鸣器演奏音乐

51单片机蜂鸣器演奏《小苹果》C语言程序 C利用51单片机蜂鸣器演奏音乐

时间:2019-12-12 21:28:37

相关推荐

51单片机蜂鸣器演奏《小苹果》C语言程序 C利用51单片机蜂鸣器演奏音乐

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

程序功能:51单片机演奏单音乐曲

硬件接法:P36控制交流蜂鸣器,发声频率等于P36的方波振荡频率

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

#include "REG52.H" //包含所选单片机的定义头文件

sbit SPEAKER = P3^6; //定义音乐输出口

typedef struct //定义音符结构

{unsigned int mFreq;//发声频率(对应的定时器初值)

unsigned int mDelay; //发声时值

}CNote;

unsigned char ReloadH; //定义定时器T1重装值

unsigned char ReloadL;

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

函数:T1_ISR()

功能:定时器T1中断服务函数,产生音乐振荡频率

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

void T1_ISR() interrupt 3

{TR1 = 0;

TH1 = ReloadH;

TL1 = ReloadL;

TR1 = 1;

SPEAKER = !SPEAKER; //音乐声频的半个波

}

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

函数:Delay()

功能:延时0.001~65.536s

参数:t>0时,延时(t*0.001)s

t=0时,延时65.536s

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

void Delay(unsigned int t)

{do

{TH0 = 0xFC;//定时器赋初值,定时1ms

TL0 = 0x66+17;

TR0 = 1;//启动定时器

while ( !TF0 );//等待定时器溢出

TR0 = 0;//关闭定时器

TF0 = 0;//清除溢出标志

} while ( --t != 0 );//循环t次

}

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

函数:Sound()

功能:演奏一个音符

参数:*note,音符指针,指向要演奏的音符

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

void Sound(CNote *note)

{ //利用定时器T1发出音符的频率

if ( note->mFreq != 0 )

{ReloadH = (unsigned char)(note->mFreq >> 8);

ReloadL = (unsigned char)(note->mFreq);

TH1 = 0xFF;

TL1 = 0xF0;

TR1 = 1;

}

Delay(note->mDelay); //发声延时

TR1 = 0; //停止发声

TF1 = 0;

SPEAKER = 1;

Delay(5);

}

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

函数:Play()

功能:演奏一段乐曲

参数:music[],要演奏的乐曲

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

void Play(CNote music[])

{unsigned int n = 0;

for (;;)

{if ( music[n].mDelay == 0 ) break;

Sound(&(music[n]));

n++;

}

}

#include "MusicTab.h"//包含乐曲头文件

void main() //主程序

{

TMOD = 0x11; //设定时器

ET1 = 1;

EA = 1;

for (;;)

{

Play(MusicTab);//演奏第一首乐曲

Delay(500); //等待数秒

Play(MusicTab1);//演奏第二首乐曲

Delay(500); //等待数秒,再循环播放

}

}



更多源码 | 好库简介 | 网站地图 | 帮助中心 | 版权说明

Copyright© - All Rights Reserved 好库网 版权所有

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。