同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,
1k(hz)的方波。
我的代码是:
#include<reg52.h>
#define uint unsigned int
uint rate[] = {1000,100,20,10,5,2,1}; //对应的毫秒
int i = 0,x,t1=0,t2=0;
sbit FM = P2^3;
void inset(){
TMOD = 0x11;
EA = 0;
ET0 = 1;
ET1 = 1;
TR0 = 1;
TR1 = 1;
PT0 = 1;
TH0 = (65536 - 1000)/256;
TL0 = (65536 - 1000)%256;
TH1 = (65536 - 50000)/256;
TL1 = (65536 - 50000)%256;
x = rate[0];
}
void main(){
inset();
while(1);
}
void time1() interrupt 1{
if(x == t1){
t1=0;
FM = 0;
}
FM = 1;
TH0 = (65536 - 1000)/256;
TL0 = (65536 - 1000)%256;
t1++;
}
void time() interrupt 3{
TH1 = (65536 - 50000)/256;
TL1 = (65536 - 50000)%256;
if(t2 == 6 ){
t2 = 0;
if(i>6) i = 0;
x = rate[i++];
}
t2++;
}
我改过来啦,但是蜂鸣器还是不发声???
追答市场上的蜂鸣器分为两种,第一种是通电就发声,第二种是通入脉冲才发声的。所以看看你的蜂鸣器是那一种。可以先测试下,给蜂鸣器通5V电源,要串接个电阻限流,如果不发声则说明是第二种哦。
你的程序应该对应蜂鸣器的第二种形式的,即要通入脉冲才叫的。
希望对你有所帮助!
不是啊,就是单片机上面的,我开始也弄啦一下,我给他个低电平,蜂鸣器就响啦。谢谢你哦,能在帮我看下嘛、?我菜鸟,不是很懂
追答#include
sbit buzz = P3^5;
void T0_irq(void) interrupt 1 using 1
{
TH0 = -(300/256);
TL0 =- (300%256);
buzz = ~buzz;
}
main()
{
TMOD = 0x01;
TH0 = -(1000/256);
TL0 =- (1000%256);
EA = 1;
ET0 = 1;
TR0 = 1;
for(;;){
}
}
这是个最简单的程序,可以用的,你可以在这个上面修改。。。
恩,这个我也会,但是上面的程序为什么不行了?
我改过来啦,但是蜂鸣器还是不发声???
追答你写法不对 = =||
你把FM=1那个删了,然后把FM=0改成FM=~FM就可以了。
按照你这种写法,每次FM刚置0第二个指令周期就置1了,总体情况就是FM一直置1,没有发生有效的震动+延时,于是就不发声了。