微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助:单片机一键长按与短按按键实现的c程序有问题

求助:单片机一键长按与短按按键实现的c程序有问题

时间:10-02 整理:3721RD 点击:
单片机一键长按与短按按键实现的c程序有问题,实在不知道是哪里有问题,请帮助修改一下,谢谢!
功能如下:长按2秒灯全亮(我用的开发板),短按实现流水灯。
程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint num,flag,gb,ga;
uchar aa=0xfe;
sbit key1=P3^7;
void delayms(uint);
void delayms(uint x)                     //延时函数
{
       uint i,j;
       for(i=x;i>0;i--)
           for(j=110;j>0;j--);
}
void init()                                  //初始化函数
{        
  TMOD=0x01;                          //设置定时器0为工作方式1
  TH0=(65536-1000)/256;            //装初值1ms一次中断
  TL0=(65536-1000)%256;
  EA=1;
  ET0=1;
}
void keyscan()
{
      if (key1==0)                                   //按键去抖
     delayms(10);
     if (key1==0)                                   //有按键按下则启动定时器
         {
           TR0=1;
           gb=1;}
     if((!key1==0)&&(gb==1))                                                  
       {TR0=0;                                       //按键弹起则关闭定时器
       ga=1;}                          //ga,gb分别表示按键按下和弹起过程有效标志位
     if(num>2000)                                    //长按有效
      { flag=1;num=0;}
       while(flag==1)
        {   P1=0;                                       //灯全亮
            if(key1==0)                               //有按键按下则退出长按程序
             flag=3;
        }
      if((num<2000)&&(ga==1))                  //短按有效
       {flag=2;num=0;}
        while(flag==2)                                //流水灯循环亮
        { P1=aa;
           delayms(500);
           aa=_crol_(aa,1);
          if(key1==0)                                  //有按键按下则退出短按程序
             flag=3;}
  }  
    void main()
{  
     init();
     while(1)
   {   
      keyscan();
   }
}
  void T0_time() interrupt 1
{
      TH0=(65535-1000)/256;
      TL0=(65535-1000)%256;
        num++;
}

兄弟,问题解决了没有?
我有个问题请教下,本人正在做一个移动插卡音箱并带收音功能的产品开发。一个键短按实现播放/暂停,较长按实现进入下一个台,超长按实现自动搜台。

程序中缺少一个TR0=0;TH0=(65536-1000)/256;            //装初值1ms一次中断
  TL0=(65536-1000)%256;就是说短按了后没有关闭中断并重装

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

网站地图

Top