标题: 为什么这个单片机蜂鸣器才响十秒呢?我哪里出错了呢?求帮忙 [打印本页]

作者: 2523472815    时间: 2020-3-19 11:30
标题: 为什么这个单片机蜂鸣器才响十秒呢?我哪里出错了呢?求帮忙
#include "reg52.h"
#include"intrins.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit beep=P1^5;
u8 flag=0;

void delay(u16 i)
{
   while(i--);
}

void timer1()
{
   TMOD|=0x10;
   TH0=0XFC;
   TL0=0X18;
   ET0=1;
   EA=1;
   TR0=1;
}

void main()
{
     timer1();
           while(1)
           {
           if(flag==0)
           {
            beep=~beep;
            delay(10);
           }
          }
}

void timer2() interrupt 1
{
   static u16 a;
   TH0=0XFC;
   TL0=0X18;
   a++;
   if(a==60000)
   {
      flag=1;
          a=0;
   }
}


作者: 飞翔的草尼玛    时间: 2020-3-19 16:36
试试改成a>=60000
作者: aide51    时间: 2020-3-20 09:04
这个要改延时循环吧
作者: 王天星    时间: 2020-3-20 11:12
flag=1;使用后没有置0

作者: cjjdemon    时间: 2020-3-20 13:55
static u16 a; 把中断里声明静态变量的这句去掉,直接在前面定义全局变量。
这个程序本意就是蜂鸣器间歇地响一段时间就停的吧?本意是响50s左右?现在只响10s?
作者: huangzongwu    时间: 2020-3-20 13:57
if(a==60000)
   {
      flag=1;
          a=0;
   }
else
{
flag=0;
}
作者: 190987824    时间: 2020-3-20 14:16
   flag= ! flag;
作者: 2523472815    时间: 2020-3-23 12:12
飞翔的草尼玛 发表于 2020-3-19 16:36
试试改成a>=60000

成功了,多谢多谢




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