微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助啊,为什么我的PWM程序,按键不管用啊,求解

求助啊,为什么我的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();
}
}

看都看不懂            

有没有人解答下

有没有人解答下

你确定是按键检测不到就先把按键检测做出来吧

错了一个地方:主程序中while(1)的后面多了一个分号。
这人分号很要命的,一旦有了这个分号,while(1);就成了死循环而执行不到按键扫描了。

用調好的按鍵掃描程序,再加入PWM,這樣比較不會錯

整个程序我已在实验台上实验过了,除了while(1)后面多了个分号外,程序是正常的,PWM可调,按键使用正常,但是蜂鸣器的延时时间太短,几乎没响。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top