51单片机蜂鸣器实现唱歌二个老虎(不用定时器的代码),有无人可以我这个cn给解答一下
不用定时器就直接用空循环延时,也能达到这个效果,只是这样就不能干别的事情了,否则影响频率
当然,上面那个代码是不能用的,可以改成下面这样,当然,和频率有关的延时,还有持续时间对应的延时,需要根据具体硬件调整一下,这个就自己搞吧。
#include <reg51.h>
// 定义蜂鸣器连接的IO口
#define BUZZER P1
// 定义延时函数
void delay(unsigned int ms)
{
unsigned int i;
for (i = 0; i < ms; i++)
}
code int tone_table[] = {1,2,4....};//各个频率对应的延时
}
// 发出一个声音tone,持续时间len
void beep(unsigned int len, unsigned char tone)
{
int i;
for(i = 0;i<len;i++){
BUZZER = 0x01; // 将蜂鸣器IO口置1
delay(tone_table[tone]); // 延时一定时间
BUZZER = 0x00; // 将蜂鸣器IO口置0
delay(tone_table[tone]);
}
void main()
{
// 唱歌二个老虎
beep(1000, 1);.........//谱子
while(1); // 程序停止,防止复读
}
参考一下
#include <reg51.h>
// 定义蜂鸣器连接的IO口
#define BUZZER P1
// 定义延时函数
void delay(unsigned int ms)
{
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 110; j++);
}
// 发出一个声音
void beep(unsigned int ms)
{
BUZZER = 0x01; // 将蜂鸣器IO口置1
delay(ms); // 延时一定时间
BUZZER = 0x00; // 将蜂鸣器IO口置0
}
void main()
{
// 唱歌二个老虎
beep(500); beep(500); beep(1000); beep(500); beep(500); beep(1000);
beep(500); beep(500); beep(1000); beep(500); beep(500); beep(1000);
beep(500); beep(500); beep(1000); beep(500); beep(500); beep(1000);
beep(500); beep(500); beep(1000); beep(500); beep(500); beep(1000);
while(1); // 程序停止,防止复读
}