求助啊,为什么我的PWM程序,按键不管用啊,求解
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
void keyscan(); //按键
void t0_init(); // 定时器
void delay(uint8 t); // 延时
void fm(); // 蜂鸣器
sbit s1=P2^3;
sbit s2=P2^4;
sbit beep=P1^5;
uint8 pwm;
uint8 num;
void main()
{
pwm=0x7f;
P0=0xff;
t0_init();
while(1);
{
keyscan();
}
}
void delay(uint8 t)
{
uint8 x,y;
for(x=t;x>0;x--)
for(y=120;y>0;y--);
}
void fm()
{
beep=0;
delay(100);
beep=1;
delay(100);
}
void t0_init()
{
TMOD=0x01;
TH0=255;
TL0=256-pwm;
EA=1;
ET0=1;
TR0=1;
}
void t0() interrupt 1
{
TR0=0;
num++;
if(num%2==1)
{
P0=0x00;
TH0=255;
TL0=256-pwm;
TR0=1;
}
if(num%2==0)
{
P0=0xff;
TH0=255;
TL0=pwm;
TR0=1;
}
}
void keyscan()
{
while(s1==0)
{
if(pwm!=0xff)
{
pwm++;
delay(10);
}
else
fm();
}
while(s2==0)
{
if(pwm!=0x01)
{
pwm--;
delay(10);
}
else
fm();
}
}
typedef unsigned char uint8;
typedef unsigned int uint16;
void keyscan(); //按键
void t0_init(); // 定时器
void delay(uint8 t); // 延时
void fm(); // 蜂鸣器
sbit s1=P2^3;
sbit s2=P2^4;
sbit beep=P1^5;
uint8 pwm;
uint8 num;
void main()
{
pwm=0x7f;
P0=0xff;
t0_init();
while(1);
{
keyscan();
}
}
void delay(uint8 t)
{
uint8 x,y;
for(x=t;x>0;x--)
for(y=120;y>0;y--);
}
void fm()
{
beep=0;
delay(100);
beep=1;
delay(100);
}
void t0_init()
{
TMOD=0x01;
TH0=255;
TL0=256-pwm;
EA=1;
ET0=1;
TR0=1;
}
void t0() interrupt 1
{
TR0=0;
num++;
if(num%2==1)
{
P0=0x00;
TH0=255;
TL0=256-pwm;
TR0=1;
}
if(num%2==0)
{
P0=0xff;
TH0=255;
TL0=pwm;
TR0=1;
}
}
void keyscan()
{
while(s1==0)
{
if(pwm!=0xff)
{
pwm++;
delay(10);
}
else
fm();
}
while(s2==0)
{
if(pwm!=0x01)
{
pwm--;
delay(10);
}
else
fm();
}
}
看都看不懂
有没有人解答下
有没有人解答下
你确定是按键检测不到就先把按键检测做出来吧
错了一个地方:主程序中while(1)的后面多了一个分号。
这人分号很要命的,一旦有了这个分号,while(1);就成了死循环而执行不到按键扫描了。
用調好的按鍵掃描程序,再加入PWM,這樣比較不會錯
整个程序我已在实验台上实验过了,除了while(1)后面多了个分号外,程序是正常的,PWM可调,按键使用正常,但是蜂鸣器的延时时间太短,几乎没响。