标题:
想让蜂鸣器只响5秒,怎样改?
[打印本页]
作者:
杨风feeling
时间:
2016-6-3 17:25
标题:
想让蜂鸣器只响5秒,怎样改?
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit beep=P3^5;
bit flag;
uint x,y;
void init() //初始化,开定时器0
{
TMOD=0x01;
TCON=0x10;
TH0=(65536-x)/256;
TL0=(65536-y)%256;
IE=0x82;
}
void main()
{
init();
while(1)
{
while(flag);
flag=0;
if(x<50000)
{
y+=500;
// x+=50;
}
else x=y=100;
}
}
void timer0() interrupt 1 //定时器中断
{
flag=0;
beep=!beep;
TH0=(65536-x)/256;
TL0=(65536-y)%256;
}
作者:
yzwzfyz
时间:
2016-6-3 19:31
本帖最后由 yzwzfyz 于 2016-6-3 19:33 编辑
1、做一个时间中断并计时。
2、在时间中断程序中做一个蜂鸣计时器K。
3、设置一个标记BEEL,当BEEL=1时就起动蜂鸣器,=0时就关闭蜂鸣器。
4、当BEEL=1时(由你在需要蜂鸣的时候置1),时间中断程序进行一次K+1,并判断K是否>=5秒。是:则关闭蜂鸣器,并清BELL=0,K=0。不是:则不处理,即保持现状。
5、主程序MAIN中不需要做什么,只(由你在需要蜂鸣的时候置1)。
作者:
yzwzfyz
时间:
2016-6-3 19:33
你的程序问题是:中断程序中缺少一个计时器,对蜂鸣器进行计时。
作者:
杨风feeling
时间:
2016-6-3 20:26
yzwzfyz 发表于 2016-6-3 19:31
1、做一个时间中断并计时。
2、在时间中断程序中做一个蜂鸣计时器K。
3、设置一个标记BEEL,当BEEL=1时就 ...
可以帮忙修改一下吗?
作者:
yzwzfyz
时间:
2016-6-3 21:09
说到这个份上了,你应当自己做了。
作者:
jimslin
时间:
2016-6-3 21:47
最简单的方法,写个delay_ms的函数,放在while里,在增加个计数变量,计数5000次退出while,这样比你直接在while计数,定时准确度要高一点,就行了!
作者:
卢森
时间:
2016-6-4 10:34
做一个delay延迟函数
5秒就是5000ms
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;--);
}
定义蜂鸣器为fmq=
void fmq0()
{
fmq=0;
delay(5000);
fmq=1;
}
作者:
TIMEKILLER
时间:
2016-6-4 11:04
本帖最后由 TIMEKILLER 于 2016-6-4 11:20 编辑
因为定时器0的定时时间是不断变化的,所以就简单考虑,你需要再用一个定时器1,来对定时器0的中断开关进行控制。为了增强实时性,可以不用定时器1中断,在定时器0中断里对定时器1的TH1/TL1寄存器当前值进行判断。int i ;
if(((TH1<<8+TL1)>=50000)&&i<10)
{
i++;
TH1=0;
TL=0;
}
else
{
ET0=0;/*时间到,关掉定时器0中断,蜂鸣器停止*/
i=0;
TH1=0;
TL1=0;
}
作者:
letu
时间:
2016-6-4 19:03
延时5s
作者:
lisiyuvv
时间:
2016-6-4 20:34
用计时器计数时间5s后条件循环停止
作者:
xixixixixixi
时间:
2016-6-5 00:21
需要计时器
作者:
fangchunwei
时间:
2016-6-5 02:33
停timer0
作者:
liuyimao485812
时间:
2016-6-5 10:20
做个定时5S的定时器,启动定时器时,让蜂鸣器响,定时到时让蜂鸣器停,同时停定时器。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1