|
你的程序,我研究了,修改了一下,可以通過外部中斷按鍵讓蜂鳴器發(fā)聲音了。
由于不明白你的a變量是干什么用的,就沒有動(dòng)這個(gè)部分。目前的現(xiàn)象是:
先按鍵,按下第二次,蜂鳴器就開始響了,關(guān)不了。不知道你是不是這樣設(shè)置的。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z);
sbit k0=P3^2;
sbit spk=P0^0;
uchar a=0;
void int0() interrupt 0
{
if(k0==0)
{
a++;
if(a>3)
{
a=0;
}
}
}
void timer0() interrupt 1
{
spk=!spk;
TH0=0xFC;
TL0=0x18;
}
void delay(uint z)
{
uint x,y;
for(x=z;z>0;x--)
for(y=245;y>0;y--);
}
void main()
{
TMOD=0X11;
//IE=0x83;
EA=1;
EX0=1;
IT0=1;
ET0=1;
PT0=1;
PX0=0;
TH0=0xFC;
TL0=0x18;
while(1)
{
if(a>2) //就是這里,keil里調(diào)試發(fā)現(xiàn)a>2的時(shí)候還是無(wú)法進(jìn)入定時(shí)。
{
TR0=1;
delay(50000);
delay(50000);
delay(50000);
delay(50000);
TR0=0;
}
else TR0=0;
}
}
這是另外一個(gè)修改的程序,可以通過按鍵,按若干次,可以讓蜂鳴器一會(huì)兒響,一會(huì)兒不響,不知道能你有沒有用。也給你吧:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z);
sbit k0=P3^2;
sbit spk=P0^0;
uchar a=0;
void Delay10ms(unsigned char c)
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
void main()
{
TMOD = 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x30; //設(shè)置定時(shí)初值
TH0 = 0xF8; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 0; //定時(shí)器0開始計(jì)時(shí)
ET0=1;
EA=1;
EX0=1;
IT0=1;
PT0=0;
PX0=1;
while(1)
{
if(a>2) //就是這里,keil里調(diào)試發(fā)現(xiàn)a>2的時(shí)候還是無(wú)法進(jìn)入定時(shí)。
{
TR0=1;
Delay10ms(100);
TR0=0;
}
else TR0=0;
}
}
void int0() interrupt 0
{
Delay10ms(5);
a++;
if(a>3)
{
a=0;
}
IE0=0;
}
void timer0() interrupt 1
{
spk=!spk;
TL0 = 0x30; //設(shè)置定時(shí)初值
TH0 = 0xF8; //設(shè)置定時(shí)初值
}
|
評(píng)分
-
查看全部評(píng)分
|