各位朋友,大家好!
我最近在学习51
单片机,下面写了一段程序想控制蜂鸣器发出
哆雷咪发梭拉西多 的声音,但是就是无法得到预期的效果;
不知道哪里有问,求高手帮忙,指导一下!
先谢谢了!
#include <REGX51.H>
#define uint unsigned int
#define uchar unsigned char
sbit music=P1^2; //P1.2脚与蜂鸣器连接
uint i;
void delay();
/*****************************************
1、2、3、4、5、6、7低中高音音调初值TL0的值
******************************************/
uchar code Ftl[]={0x8B,0x5B,0x14,0x66,0x03,0x8F,0x0B,
0x43,0xAB,0x08,0x33,0x81,0xC7,0x05,
0x21,0x55,0x84,0x99,0xC0,0xE3,0x02,0xAA};
/*****************************************
1、2、3、4、5、6、7低中高音音调初值TL0的值
******************************************/
uchar code Fth[]={0xF8,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,
0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFB,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xAA};
/***********************
节拍数,一拍时间为200ms
************************/
uchar code pai[]={4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4};
/**********************************************************
函数名称:程序主函数
函数功能:有低音到高音播放1、2、3、4、5、6、7
***********************************************************/
void main()
{
uchar i,j;
EA=1;
ET0=1;
TMOD=0x01;
while(1)
{
i=0;
while(Ftl
!=0xAA&&Fth!=0xAA) //当Ftl和Fth等于0xAA,播放完成,然后重新开始
{
TH0=Fth;
TL0=Ftl;
TR0=1;
for(j=0;j<pai;j++)
delay();
TR0=0;
i++;
}
music=0;
}
}
/***********************************************************
函数名称:中断函数
函数描述:定时器T0,方式1
************************************************************/
void T_timer() interrupt 1 using 1
{
music=!music;
TH0=Fth;
TL0=Ftl;
}
/***********************************************************
函数名称:延时函数
函数功能:1个延时单位,延时200ms
************************************************************/
void delay()
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<250;j++);
}
- #include <REGX51.H>
- #define uint unsigned int
- #define uchar unsigned char
- sbit music=P1^2; //P1.2脚与蜂鸣器连接
- uint n;
- void delay();
- /*****************************************
- 1、2、3、4、5、6、7低中高音音调初值TL0的值
- ******************************************/
- uchar code Ftl[]={0x8B,0x5B,0x14,0x66,0x03,0x8F,0x0B,
- 0x43,0xAB,0x08,0x33,0x81,0xC7,0x05,
- 0x21,0x55,0x84,0x99,0xC0,0xE3,0x02,0xAA};
- /*****************************************
- 1、2、3、4、5、6、7低中高音音调初值TL0的值
- ******************************************/
- uchar code Fth[]={0xF8,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,
- 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
- 0xFB,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xAA};
- /***********************
- 节拍数,一拍时间为200ms
- ************************/
- uchar code pai[]={4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4};
- /**********************************************************
- 函数名称:程序主函数
- 函数功能:有低音到高音播放1、2、3、4、5、6、7
- ***********************************************************/
- void main()
- {
- uchar j;
- EA=1;
- ET0=1;
- TMOD=0x01;
- while(1)
- {
- n=0;
- while(Ftl[n]!=0xAA&&Fth[n]!=0xAA) //当Ftl和Fth等于0xAA,播放完成,然后重新开始
- {
- TH0=Fth[n];
- TL0=Ftl[n];
- TR0=1;
- for(j=0;j < sizeof(pai);j++)
- delay();
- TR0=0;
- n++;
- }
- music=0;
- }
- }
- /***********************************************************
- 函数名称:中断函数
- 函数描述:定时器T0,方式1
- ************************************************************/
- void T_timer() interrupt 1 using 1
- {
- music=!music;
- TH0=Fth[n];
- TL0=Ftl[n];
- }
- /***********************************************************
- 函数名称:延时函数
- 函数功能:1个延时单位,延时200ms
- ************************************************************/
- void delay()
- {
- unsigned char i,j;
- for(i=0;i<100;i++)
- for(j=0;j<250;j++);
- }
复制代码一周热门 更多>