标题: 51单片机让蜂鸣器30s循环响一次的程序如何编写?循环报警,求思路 [打印本页]

作者: lcl0520    时间: 2021-1-28 17:38
标题: 51单片机让蜂鸣器30s循环响一次的程序如何编写?循环报警,求思路
如题,由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现
作者: 压着我头发啦    时间: 2021-1-28 20:44
定时器,变量计数满为30s当变量大于某数,蜂鸣器响,else不响。高低电平控制三极管
作者: zsw3721    时间: 2021-1-28 23:09
通常给程序设置一个工作节拍,比如一秒的节拍,主程序在这个节拍下运行。在主程序中可设置变量来计次数,在一秒节拍下比如计数为30次就置位一个标志位,则说明30秒到了,利用if语句判断这个标志位为1时去处理30秒一次的任务。至于怎样设置一秒的节拍,还是要用定时器,可以设置20ms的自动重装定时器,中断计数50次则为1秒并置位一个秒节拍标志位。进入相关标志位去处理任务时要记得复位该标志位。
作者: zwf33    时间: 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后再执行蜂鸣器响
作者: lcl0520    时间: 2021-1-29 00:49
zwf33 发表于 2021-1-29 00:15
用定时器,变量计数满30s后再执行蜂鸣器响

感谢感谢。
作者: wjcxy3166    时间: 2021-1-29 11:47
先把蜂鸣器的叫声频率定好,然后在启动计时,可以用定时中断计时,也可以用多进程计时,到了30S就运行一次蜂鸣器呗




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