找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么这个单片机蜂鸣器才响十秒呢?我哪里出错了呢?求帮忙

[复制链接]
跳转到指定楼层
楼主
ID:685171 发表于 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;
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:406120 发表于 2020-3-19 16:36 | 只看该作者
试试改成a>=60000
回复

使用道具 举报

板凳
ID:372579 发表于 2020-3-20 09:04 | 只看该作者
这个要改延时循环吧
回复

使用道具 举报

地板
ID:531524 发表于 2020-3-20 11:12 | 只看该作者
flag=1;使用后没有置0
回复

使用道具 举报

5#
ID:612392 发表于 2020-3-20 13:55 | 只看该作者
static u16 a; 把中断里声明静态变量的这句去掉,直接在前面定义全局变量。
这个程序本意就是蜂鸣器间歇地响一段时间就停的吧?本意是响50s左右?现在只响10s?
回复

使用道具 举报

6#
ID:496117 发表于 2020-3-20 13:57 | 只看该作者
if(a==60000)
   {
      flag=1;
          a=0;
   }
else
{
flag=0;
}
回复

使用道具 举报

7#
ID:712139 发表于 2020-3-20 14:16 | 只看该作者
   flag= ! flag;
回复

使用道具 举报

8#
ID:685171 发表于 2020-3-23 12:12 | 只看该作者

成功了,多谢多谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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