新手51单片机程序求助大神!
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep = P2^3; //蜂鸣器
sbit key = P3^4; //按键
uchar num3 = 0, num4 = 0, num2000 = 0;
void init() //T0方式1计时初始化
{
TMOD = 0x01;
TH0 = (65536 - 65305) / 256;
TL0 = (65536 - 65305) % 256;
EA = 1;
ET0 = 1;
// TR0 = 1;
}
void delay(uint z) //延时z毫秒
{
uint x, y;
for(x=z; x>0; x--)
for(y=110; y>0; y--);
}
void main()
{
init();
while(1)
{
if (0 == key)
{
delay(10);
if(0 == key)
{
TR0 = 1; //T0开始计时
}
while(!key); //松手检测
}
if (num2000 < 2000) //头0.5秒
{
if (3 == num3) //700HZ
{
num3 = 0;
beep = ~beep;
}
}
else if (num2000>2000 && num2000<4000) //后0.5秒
{
if (4 == num4) //500HZ
{
num4 = 0;
beep = ~beep;
}
}
else if (num2000 > 4000) //归零,并停止计时
{
num2000 = 0;
TR0 = 0;
}
}
}
void T0_time() interrupt 1
{
TH0 = (65536 - 65305) / 256;
TL0 = (65536 - 65305) % 256;
++ num3;
++ num4;
++ num2000;
}
声音频率实现不出来,求助大神!(PS:我用的天翔的51单片机。)
要实现的内容!
原来是这样
// TR0 = 1;
你的定时器没有启动,为什么要把这句注释掉呢?
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep = P2^3; //蜂鸣器
sbit key = P3^4; //按键
uchar num3 = 0, num4 = 0,num2000 = 0;
void init() //T0方式1计时初始化
{
TMOD = 0x01;
TH0 = (65536 - 65305) / 256;
TL0 = (65536 - 65305) % 256;
EA = 1;
ET0 = 1;
// TR0 = 1;
}
void delay(uint z) //延时z毫秒
{
uint x, y;
for(x=z; x>0; x--)
for(y=110; y>0; y--);
}
void main()
{
init();
while(1)
{
if (0 == key)
{
delay(10);
if(0 == key)
{
TR0 = 1; //T0开始计时
}
while(!key); //松手检测
}
if (num2000 < 40) //头0.5秒
{
if (2 == num3) //700HZ
{
num3=0;
num4=0;
beep = ~beep;
}
}
else if (num2000>40 && num2000<80) //后0.5秒
{
if (4 == num4) //500HZ
{
num4 = 0;
beep = ~beep;
}
}
if (num2000 > 80) //归零,并停止计时
{
num2000 = 0;
num3=0;
TR0 = 0;
}
}
}
void T0_time() interrupt 1
{
TH0 = (65536 - 65305) / 256;
TL0 = (65536 - 65305) % 256;
++num3;
++num4;
++num2000;
}
这个程序可以实现不同频率,你自己对照下,你错在哪里了。
还有就是,num2000的类型限制它不能大于256,你居然还取到4000.要注意这点。希望可以帮到你。
我是key按键按先后TR0 = 1了。
我下载下去,还是么有反应、、、