?? 123.c
字號:
/*12Mhz晶振工作*/
#include <at89x51.h>
#define uint unsigned int
#define uchar unsigned char
sbit BUZZER=P2^4;
uint m,i,rti,l;
//在12M頻率下的高低音音頻率表,toneh為高字節,toneh1為低字節
uchar code toneh[15]={0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
uchar code toneh1[15]={0x22,0x56,0x85,0x9a,0xc1,0xe3,0x03,0x10,0x2b,0x42,0x4c,0x60,0x71,0x81,0xff};
/*******************************************************************************************
以下為用戶自定義
song[]為音樂的音譜。1~7為高音。8為停音節,a~g為低音。
length[]為每個音譜的音第。如1/4節拍。1/2節拍 以下為一首名曲“茉莉花”
*****************************************************************555**************************/
uchar code song[]="335676556558335676556558555356655832353211211321322356755235231feef1223121fee8"; //音譜,把你喜歡的樂譜加入就可
uchar code length[]="422422442241422422442241444224444142242242244222244242244422222244444422222442"; //音長 ;
void timer0(void)interrupt 1
{
if(rti!=14)
{
BUZZER=!BUZZER; //輸出
TH0=toneh[rti]; //裝入音譜
TL0=toneh1[rti];
}
}
void timerl(void)interrupt 3
{
TH1=0x0c;
TL1=0xdc; //音長定時值。125毫秒
m++; //音長計數器
}
playc(char ch)
{
int ti;
switch(ch)
{
case'a': ti=0;break;
case'b': ti=1;break;
case'c': ti=2;break;
case'd': ti=3;break;
case'e': ti=4;break;
case'f': ti=5;break;
case'g': ti=6;break;
case'1': ti=7;break;
case'2': ti=8;break;
case'3': ti=9;break;
case'4': ti=10;break;
case'5': ti=11;break;
case'6': ti=12;break;
case'7': ti=13;break;
case'8': ti=14;break;
default:ti=50;break;
}
return(ti);
}
void main()
{
m=0;
TMOD=0X11;
P1_0=0;
TH0=toneh[0];
TL0=toneh1[0];
TH1=0x0c; //定時器1為125毫秒中斷
TL1=0xdc;
IP=0x08; //定時器1優先級高。
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
i=0;
while(1)
{
if(song[i]=='\0') //是否播放完畢。
i=0;
rti=playc(song[i]); //把音譜加入寄存器
l=length[i]-0x30; //把音長力入寄存器
while(m<l); //等待音長結束
m=0; //音長清歸零
i++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -