标题: 如何能用一个51单片机边刷新数码管边驱动无源蜂鸣器鸣叫呢 [打印本页]

作者: 濑某人    时间: 2020-6-20 19:39
标题: 如何能用一个51单片机边刷新数码管边驱动无源蜂鸣器鸣叫呢
如题,让两个循环交替执行的话效果又不太好,是不是必须得加些外部电路了,求大佬给点建议(>﹏<)
作者: OHHO    时间: 2020-6-20 22:45
顶一顶,同问
作者: xianfajushi    时间: 2020-6-21 05:26
添加锁存器可让IO口复用。
作者: wulin    时间: 2020-6-21 07:50
51单片机当然可以边刷新数码管边驱动无源蜂鸣器鸣叫。方案有很多,要根据硬件环境选择具体采用那种方案。
作者: 濑某人    时间: 2020-6-22 08:44
主要是我这没有什么数字芯片,那我再上网找找资料
作者: wulin    时间: 2020-6-22 10:47
濑某人 发表于 2020-6-22 08:44
主要是我这没有什么数字芯片,那我再上网找找资料

不需要外围数字芯片,给你一个数码管闹钟程序,你仔细看看就明白边刷新数码管边驱动无源蜂鸣器鸣叫的一种方法。 数码管闹钟 仿真.zip (141.65 KB, 下载次数: 61)



作者: 濑某人    时间: 2020-6-22 20:10
wulin 发表于 2020-6-22 10:47
不需要外围数字芯片,给你一个数码管闹钟程序,你仔细看看就明白边刷新数码管边驱动无源蜂鸣器鸣叫的一种 ...

好的,谢谢大佬
作者: Y_G_G    时间: 2020-6-23 08:27
1:定时器中断刷新数码管,在中断中驱动蜂鸣器
2:使用单片机自带的PWM输出控制蜂鸣器
3:在数码管延时程序中驱动蜂鸣器
4:如果单片机有ADC,可以使用ADC中断定时器,ADC的结果不需要理会就行了
作者: haokey    时间: 2020-6-23 11:42
个人使用的方法,如果不当望请指出

1.定时器中断中刷数码管
2.pwm管脚驱动蜂鸣器
或者:
一个定时器同时刷数码管和蜂鸣器也可以,我一直都是这么做的,但是前提是你要把定时器溢出时间等于蜂鸣器的频率。(比如125us或者250us)这样每次进定时器中断就翻转蜂鸣器io口,就不会影响声音。

写个伪代码:
#define    BUZ    蜂鸣器io口

void 定时器中断服务函数()//125us(等于无缘蜂鸣器频率)
{
      变量a(数码管计数),变量b(蜂鸣器响的时间计数)

      if(++a > 80)//125us*80=10ms,10ms刷新一次数码管
      {
            a = 0;
            //数码管代码
            //数码管代码
            //数码管代码
            //数码管代码等等
      }

      if(蜂鸣器使能标志位)
      {
            BUZ ^= 1;//翻转io口
            if(++b > 4000)//125us*4000=500ms   响500毫秒
            {
                  b = 0;
                  蜂鸣器使能标志位 = 0;
            }
      }
}


作者: 498988598    时间: 2020-10-24 13:54
wulin 发表于 2020-6-22 10:47
不需要外围数字芯片,给你一个数码管闹钟程序,你仔细看看就明白边刷新数码管边驱动无源蜂鸣器鸣叫的一种 ...

文件是空的

作者: amandv    时间: 2020-10-25 23:33
使用定时中断就可以,数码管在主程序循环刷,蜂鸣在中断响。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1