51单片机蜂鸣器实现唱歌二个老虎不用定时器的代码怎么写

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);   // 程序停止,防止复读
}