找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4090|回复: 5
打印 上一主题 下一主题
收起左侧

51单片机让蜂鸣器30s循环响一次的程序如何编写?循环报警,求思路

[复制链接]
跳转到指定楼层
楼主
ID:854524 发表于 2021-1-28 17:38 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:716656 发表于 2021-1-28 20:44 来自手机 | 只看该作者
定时器,变量计数满为30s当变量大于某数,蜂鸣器响,else不响。高低电平控制三极管
回复

使用道具 举报

板凳
ID:702386 发表于 2021-1-28 23:09 | 只看该作者
通常给程序设置一个工作节拍,比如一秒的节拍,主程序在这个节拍下运行。在主程序中可设置变量来计次数,在一秒节拍下比如计数为30次就置位一个标志位,则说明30秒到了,利用if语句判断这个标志位为1时去处理30秒一次的任务。至于怎样设置一秒的节拍,还是要用定时器,可以设置20ms的自动重装定时器,中断计数50次则为1秒并置位一个秒节拍标志位。进入相关标志位去处理任务时要记得复位该标志位。
回复

使用道具 举报

地板
ID:798201 发表于 2021-1-29 00:15 | 只看该作者
本帖最后由 zwf33 于 2021-1-29 00:20 编辑
  1. #include <REGX52.H>
  2. typedef unsigned int  uint;
  3. sbit fmq=P2^3;   //定义I/O
  4. uint cnt=0;

  5. void main()
  6. {
  7.     TMOD=0x01;
  8.     TH0=(65536-46082)/256;        //   50ms    11.0592MHz
  9.     TL0=(65536-46082)%256;
  10.     TR0=1;
  11.     led=0;

  12.     while(1)
  13.     {

  14.         if(TF0==1)
  15.         {
  16.             TF0=0;
  17.             TH0=(65536-46082)/256;
  18.             TL0=(65536-46082)%256;
  19.             cnt++;
  20.             if(cnt>=600)               //  30s  
  21.             {
  22.                 cnt=0;
  23.                 fmq=~fmq;
  24.             }
  25.         }
  26.     }
  27. }
复制代码

用定时器,变量计数满30s后再执行蜂鸣器响
回复

使用道具 举报

5#
ID:854524 发表于 2021-1-29 00:49 来自手机 | 只看该作者
zwf33 发表于 2021-1-29 00:15
用定时器,变量计数满30s后再执行蜂鸣器响

感谢感谢。
回复

使用道具 举报

6#
ID:288629 发表于 2021-1-29 11:47 | 只看该作者
先把蜂鸣器的叫声频率定好,然后在启动计时,可以用定时中断计时,也可以用多进程计时,到了30S就运行一次蜂鸣器呗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表