2024年3月20日发(作者:奉家欣)
实验名称:生日快乐歌程序
组员名单:A706
指导教室:### 日期:2009年11月10日
#include
#define uint unsigned int //宏定义,定义uint 为无符号整形变量
#define uchar unsigned char//宏定义,定义uchar为无符号字符形变量
sbit BUZZER= P3^6; //定义p3.6为蜂鸣器输出口
uchar code
tab_1[16]={0xFF,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0x
FE,0xFE,0xFE}; //定义音调,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长
的时间。
uchar code
tab_2[16]={0xF1,0x4,0x90,0xC,0x44,0xAC,0x9,0x34,0x82,0xC8,0x06,0x22,0x56,0x85,
0x9A,0xC1}; //定义音调
uchar code
music[32]={8,0,8,9,8,0xB,0xA,0,8,0,8,9,8,0xC,0xB,0,8,0,8,0xF,0xD,0xB,0xA,9,0xE,0,0xE
,0xD,0xB,0xC,0xB,0x0};//定义调用音符数组
uchar code
music_L[32]={2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4};//定义节拍
uchar a,b; //定义a,b 无符号字符型变量。
void delay(uint v) //延时涵数
{
while(v!=0) v--;
}
void delay1(uint j)//延时涵数
{
while(j!=0){j--;delay(180);}
}
void delay2(uint j)//延时涵数
{
while(j!=0){j--;delay1(70);}
}
/*主涵数*/
main()
{
uchar k,n,m; //定义无符号字符型变量k,n,m
TMOD=0x11; //计数器以方式一工作,16位计数器
EA=1;//开启所有中断
ET1=1;//允许定时计数器T1中断
TR1=1;//开启定时计数器T1
while(1)主程序循环
{
for(k=0;k<32;k++)//内循环,程序执行32次《输出32个音符》。
{
n=music[k];//把music[] 的数据读到n
m=music_L[k];//把music_L[]《节拍》 的数据读到m
a=tab_1[n];//把tab_1[]《音调》数据读到a
b=tab_2[n];//把tab_2[]《音调》数据读到b
delay2(m);//调用延时涵数delay2(),节拍
}
}
/*定时计数器1溢出中断服务程序*/
time1 () interrupt 3 using 3
{
TH1=a;//把a的数据读到TH1,定时器1高八位置位
TL1=b;//把b的数据读到TL1,定时器1低八位置位
BUZZER=!BUZZER; //蜂呜器取反输出
}
2024年3月20日发(作者:奉家欣)
实验名称:生日快乐歌程序
组员名单:A706
指导教室:### 日期:2009年11月10日
#include
#define uint unsigned int //宏定义,定义uint 为无符号整形变量
#define uchar unsigned char//宏定义,定义uchar为无符号字符形变量
sbit BUZZER= P3^6; //定义p3.6为蜂鸣器输出口
uchar code
tab_1[16]={0xFF,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0x
FE,0xFE,0xFE}; //定义音调,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长
的时间。
uchar code
tab_2[16]={0xF1,0x4,0x90,0xC,0x44,0xAC,0x9,0x34,0x82,0xC8,0x06,0x22,0x56,0x85,
0x9A,0xC1}; //定义音调
uchar code
music[32]={8,0,8,9,8,0xB,0xA,0,8,0,8,9,8,0xC,0xB,0,8,0,8,0xF,0xD,0xB,0xA,9,0xE,0,0xE
,0xD,0xB,0xC,0xB,0x0};//定义调用音符数组
uchar code
music_L[32]={2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4};//定义节拍
uchar a,b; //定义a,b 无符号字符型变量。
void delay(uint v) //延时涵数
{
while(v!=0) v--;
}
void delay1(uint j)//延时涵数
{
while(j!=0){j--;delay(180);}
}
void delay2(uint j)//延时涵数
{
while(j!=0){j--;delay1(70);}
}
/*主涵数*/
main()
{
uchar k,n,m; //定义无符号字符型变量k,n,m
TMOD=0x11; //计数器以方式一工作,16位计数器
EA=1;//开启所有中断
ET1=1;//允许定时计数器T1中断
TR1=1;//开启定时计数器T1
while(1)主程序循环
{
for(k=0;k<32;k++)//内循环,程序执行32次《输出32个音符》。
{
n=music[k];//把music[] 的数据读到n
m=music_L[k];//把music_L[]《节拍》 的数据读到m
a=tab_1[n];//把tab_1[]《音调》数据读到a
b=tab_2[n];//把tab_2[]《音调》数据读到b
delay2(m);//调用延时涵数delay2(),节拍
}
}
/*定时计数器1溢出中断服务程序*/
time1 () interrupt 3 using 3
{
TH1=a;//把a的数据读到TH1,定时器1高八位置位
TL1=b;//把b的数据读到TL1,定时器1低八位置位
BUZZER=!BUZZER; //蜂呜器取反输出
}