代码本身没有错,但是按键好像没什么用,实现不了改变周期,刚接触,不知道哪里错了😭,该怎么修改呢
#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周期的代码中,您可以使用TH1
和TL1
寄存器设置PWM周期。具体来说,将PWM周期的高8位赋值给TH1
寄存器,将PWM周期的低8位赋值给TL1
寄存器。在本例中,使用的是定时器1来产生PWM波形,因此修改PWM周期的代码如下所示:
TH1 = (65536 - PWM) / 256;
TL1 = (65536 - PWM) % 256;
通过在按键检测部分加入修改PWM周期的代码,您就可以实现按键改变PWM周期的功能了。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢