51单片机c语言PWM用按键怎么实现周期改变呢?

代码本身没有错,但是按键好像没什么用,实现不了改变周期,刚接触,不知道哪里错了😭,该怎么修改呢

#include
#include
sbit P0_0=P0^0;//定义输出波形引脚
sbit K1=P1^0;//增加键
sbit K2=P1^1;//减少键
unsigned char i=0;
unsigned char PWM=123;
void time0() interrupt 1 //内部定时器中断周期5ms
{
 TH0=(65536-2500)/256;
 TL0=(65536-2500)%256;
 P0_0=~P0_0;
}


void main()
{
 TR0=1;
 TMOD=0x21;
 ET0=1;//定时器0中断
 EA=1; //开启总中断
 while(1){ 
 if(K1==0){
 while(K1==0);
 if(PWM!=(65536-2500)/256)
 PWM=PWM+10;
 }
 if(K2==0){
 while(K2==0);
 if(PWM!=(65536-2500)%256)
 PWM=PWM-10;
 } 
 }
}

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的代码,按键检测部分是没有问题的,但是您并没有在按键检测部分修改PWM周期的代码,导致按键无法改变周期。

要实现按键改变PWM周期,您可以在按键检测部分加入修改PWM周期的代码。具体来说,当检测到按下增加按键时,可以将PWM周期加上一个固定的值;当检测到按下减少按键时,可以将PWM周期减去一个固定的值。修改后的代码如下所示:

#include <reg52.h>

sbit P0_0 = P0^0;  //定义输出波形引脚
sbit K1 = P1^0;    //增加键
sbit K2 = P1^1;    //减少键

unsigned char PWM = 123;

void time0() interrupt 1 //内部定时器中断周期5ms
{
  TH0 = (65536-2500) / 256;
  TL0 = (65536-2500) % 256;
  P0_0 = ~P0_0;
}

void main()
{
  TR0 = 1;
  TMOD = 0x21;
  ET0 = 1;  //定时器0中断
  EA = 1;   //开启总中断

  while (1) { 
    if (K1 == 0) {
      while (K1 == 0);
      if (PWM < 245) {
        PWM += 10;
      }
    }
    if (K2 == 0) {
      while (K2 == 0);
      if (PWM > 10) {
        PWM -= 10;
      }
    } 
    TH1 = (65536 - PWM) / 256;
    TL1 = (65536 - PWM) % 256;
  }
}

在修改PWM周期的代码中,您可以使用TH1TL1寄存器设置PWM周期。具体来说,将PWM周期的高8位赋值给TH1寄存器,将PWM周期的低8位赋值给TL1寄存器。在本例中,使用的是定时器1来产生PWM波形,因此修改PWM周期的代码如下所示:

TH1 = (65536 - PWM) / 256;
TL1 = (65536 - PWM) % 256;

通过在按键检测部分加入修改PWM周期的代码,您就可以实现按键改变PWM周期的功能了。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢