EIHH 2021-06-02 21:39 采纳率: 0%
浏览 466

如何让51单片机蜂鸣器实现门铃叮咚声循环响5次

#include <reg52.h>

#include "delay.h"

unsigned char ding;

unsigned char dong;

unsigned int start;//定义变量

 

bit stop;

bit flag; //定义变量,值为1或0.

 

sbit key=P3^4;//按键

sbit speaker=P2^3; //蜂鸣器

 

void delayms(unsigned char x)//按键消抖毫秒级延时

{

 int i,j;

 for(i=x;i>0;i--)

  for(j=0;j<120;j++);

}

/***************主函数 **************/

 

void main(void)

{

  TMOD=0x02; //开定时器

  TH0=0x06; //定时器/计数器 0高8位寄存器 

  TL0=0x06; //定时器/计数器 0低8位寄存器 

  ET0=1; //允许/禁止T0溢出中断

  EA=1; //开总中断

while(1){

  if(key==0) //按键按下

   

  if(key==0) //确认按键是否真的被按下

{

  ding=0;

  dong=0;

  start=0;

  flag=0;

  stop=0;

  TR0=1;

while(stop==0); //

}

}

}

}

 

/**************中断函数******************/

void Timer0(void) interrupt 1 using 0 

{

 

  start++;

 if(start==2000)//切换叮咚。

{

  start=0;

 if(flag==0)

{

  flag=~flag;//取反

}

else

{

  stop=1;

  TR0=0; //定时器0运行控制位,关闭定时器,等待下次按铃。

}

}

 

 

if(flag==0) //通过改变定时计数时间可以改变门铃的声音

{

   ding++;

if(ding==3)

{

  ding=0;

  speaker=~speaker;

}

}

 

else

{

   dong++;

if(dong==4)

{

  dong=0;

  speaker=~speaker;

}

}

}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 15:55
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境