标题: 单片机按键循环闪灯程序,按键不灵敏求大神改进! [打印本页]

作者: chinarenxx    时间: 2020-3-28 23:02
标题: 单片机按键循环闪灯程序,按键不灵敏求大神改进!
// 按键循环闪灯程序,可以实现每按一次按键变换不同的闪光频率,只是按键反应是不那么响应快。特别是三连闪的时候有时按键没反应,要长按住按键才会灭灯。
//不管是用if语句,还是switch语句都差不多效果,放在main()里面按键效果也是差不多,求大神改进。点按按键就能实现换灯功能,最好是可以在灭灯的时候可以休眠待机,再按一下又能恢复亮灯。
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit led    = P1^1;
sbit key1  =P3^2;   //STC15W408AS此脚为外部中断0,按一次led改变一次状态。
uint knum;              //key1按键按下次数计数变量
void keyscan();
void delay(uint xms);
void leds();

void delay(uint xms)                //@12.000MHz 大约定时1ms
{
        uint i,j;
for(i=xms;i>0;i--)
        for(j=460;j>0;j--);
}
void leds()
{              
        led=0;
  delay(300);
  led=1;
  delay(200);
  led=0;
  delay(300);
  led=1;
  delay(200);
  led=0;
  delay(300);
  led=1;
  delay(1200);
}

void keyscan()
{
          if(key1==0)
          {
                                         delay(5);
                                         if(key1==0)
                                         {
           while(!key1);
           knum++;
           if(knum==4)
           knum=0;
           }
                                  }

                switch(knum)
          {
             case 0: led=1;         break;  //灭灯
             case 1: led=0;         break;  //亮灯
             case 2: led=0;        delay(500); led=1;        delay(500); break;  //一闪一灭
             case 3: leds(); break;      //三闪一灭
          }
                                                                                                        
}
void main()
{
   while(1)
   {
                 keyscan();                 
   }                                               
}


作者: 罗程峰8200    时间: 2020-3-29 05:03
  switch(knum)的前三步没问题   第四部就会不灵敏了  因为你的LED程序里面的延时函数延时过长导致的,你这种情况最后用中断 或者定时器来处理
作者: liu5678    时间: 2020-3-29 11:39
case 2: led=0;        delay(500); led=1;        delay(500); break;
按键延时有些长,闪灯延时又有些短。
作者: tyrl800    时间: 2020-3-29 14:20
楼主难道不知道单片机有定时器这个东西吗?用定时器都会解决的
作者: 起风了~    时间: 2020-3-29 14:51
你可以试着改一下延时程序,就是定义的void delay那个函数中j数值再改小一点
作者: chinarenxx    时间: 2020-3-29 15:43
昨天用了,定时中断来控制按键,效果要好很多,可是睡眠模式的时候唤醒操作很迟顿,现在用低功耗模式待机也有4mA的电量消耗。还是达不到uA级别。PCON=0X02这个睡眠模式唤醒有没有大神出手指点一下。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1