小刘该锻炼了 2023-04-07 16:10 采纳率: 0%
浏览 37

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

51单片机蜂鸣器实现唱歌二个老虎(不用定时器的代码),有无人可以我这个cn给解答一下

  • 写回答

3条回答 默认 最新

  • qllaoda 2023-04-07 17:00
    关注

    不用定时器就直接用空循环延时,也能达到这个效果,只是这样就不能干别的事情了,否则影响频率

    当然,上面那个代码是不能用的,可以改成下面这样,当然,和频率有关的延时,还有持续时间对应的延时,需要根据具体硬件调整一下,这个就自己搞吧。

     
    #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);   // 程序停止,防止复读
    }
     
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月7日

悬赏问题

  • ¥15 ecplise在连接数据库时显示加载驱动成功但是数据库连接失败
  • ¥15 visionmaster启动失败,提示为“机器不满足授权而被禁用”
  • ¥50 用logisim设计16位单时钟周期cpu
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据
  • ¥15 Multisim红外倒车雷达仿真中距离问题
  • ¥15 请上面代码做什么处理或什么混淆
  • ¥15 英雄联盟自定义房间置顶
  • ¥15 W5500网线插上无反应
  • ¥15 如何用字典的Key,显示在WPF的xaml中