标题:
51单片机初学,定时器程序问题求助 让蜂鸣器件实现发出2种不同声响
[打印本页]
作者:
12358a
时间:
2022-6-1 11:35
标题:
51单片机初学,定时器程序问题求助 让蜂鸣器件实现发出2种不同声响
我想实现的是用定时器去让蜂鸣器件实现发出2种不同声响,每种响声持续0.4s,定时器控制0.5秒切换一次响声。我在软件上仿真是能响,可是时间老是对不上。请大神帮我看看是仿真本来时间就不是那么准确,还是我写的有问题..
这是实现这部分功能的单片机代码
蜂鸣器函数
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
void fb500()
{
unsigned char i;
for(i=0;i<200;i++)
{
P14=1;
delay(1);
P14=0;
delay(1);
}
}
void fb250()
{
unsigned char i;
for(i=0;i<100;i++)
{
P14=1;
delay(2);
P14=0;
delay(2);
}
}
主函数
void main{ TMOD=0x01;
TL0=(65536-50000)/256;
TH0=(65536-50000)%256;
ET0=1;
EA=1;
TR0=1;
while(1);
}
中断
void time1_serv(void) interrupt 1
{
TL0=(65536-50000)/256;
TH0=(65536-50000)%256;
j++; //j是我设置的全局变量,初值为0
if(j==10)
{j=0;
if(n==1)
{
n=~n;
fb500();
}
else
{
n=~n;
fb250();
}
}
}
我的想法是设置中断50毫秒,10次定时器中断便运行一次蜂鸣器的函数。然后蜂鸣器是周期乘循环次数等于响的时间,不知道对不对,望各位指点。
作者:
12358a
时间:
2022-6-1 11:57
求大佬点拨,时间算法是否有问题,仿真软件上时间对不上
作者:
人工置顶员
时间:
2022-6-1 17:31
顶一下
作者:
yzwzfyz
时间:
2022-6-1 17:36
帮你构思一下:
按你的设计,时间中断每50ms一次。
做一个变量BETIME,用于计时蜂鸣时间,如下操作:
例:蜂鸣0.8秒:
起动蜂鸣,同时让BETIME=0.8s/50ms=16
时间中断程序如下写法:
1、如果BETIME=0(无蜂鸣操作),什么也不做,退出。
2、如果BETIME<>0(蜂鸣已起鸣),BETIME=BETIME-1,再测:
如果,BETIME<>0(时间未到),什么也不做,退出。
如果,BETIME=0(时间到了),关蜂鸣。
简单吧。
作者:
wulin
时间:
2022-6-1 18:19
模拟警笛声 滴---嘟---
#include <reg51.h>
sbit buzzer=P1^0; //无源蜂鸣器
unsigned int count;
void main ()
{
TMOD= 0x01; //设置定时器模式
TL0 = 0x38; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TR0 = 1; //定时器0开始计时
EA = 1; //开总中断
ET0 = 1; //开T0中断
while(1);
}
void Timer0Interrupt(void) interrupt 1
{
buzzer=~buzzer;
if(++count>=3000)
count=0;
if(count<2000)
{
TL0 = 0x38; //200微秒
TH0 = 0xFF;
}
else
{
TL0 = 0x70; //400微秒
TH0 = 0xFE;
}
}
复制代码
作者:
17337161031
时间:
2022-6-8 19:59
对蜂鸣器的频率做出不同变化即可完成
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1