jovewang 发表于 2024-10-12 08:57:28

按钮怎么不动作?请帮忙看看程序有什么问题?

这个程序有什么问题?
帮忙看一下程序


#include "plc.h"

/*******************************************************************************
    * 函 数 名         : Timer0Init
    * 函数功能            : 定时器0初始化
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/

void Timer0Init()   //中断初始化
{
    AUXR &= 0x7F;   //定时器时钟12T(12分频)模式
    EA = 1;       //开中断
    TMOD &= 0XF0; //中断0模式1
    TMOD |= 0X01;
    TH0 = 0XFC;   //初值1ms
    TL0 = 0X66;
    ET0 = 1;   //允许T0中断
    TR0 = 1;    //定时器0开始计时
}

    /*******************************************************************************
    * 函 数 名         : void Timer0() interrupt 1
    * 函数功能         : 定时器0中断函数
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
void Timer0() interrupt 1
{
    sess++; //毫秒
      flag1ms = 1; //1ms标志
      flag1ms1 = 1; //1ms标志
   
    if(sess==1000) //1000毫秒 =1s
    {
    sess=0;//ms 等于0
    ses++; //s 加1
      }
}

/*******************************************************************************
    * 函 数 名         :main
    * 函数功能         : 主函数
    *******************************************************************************/
void main()
{      
times = 1;      
Timer0Init();//定时器初始化
   
while(1)
{
plc();
   
key_Proc();   //按键处理
led_Proc();//灯处理
   
key_Proc1();   //按键处理
led_Proc1();//灯处理            
}
}

void plc()
{   
switch(times) //一开始times=1
{
case 1:   
RED_1   =1;
YELLOW_1=0;
GREEN_1 =0;

if(ses==2){times=2;ses=0;}//s 等于0   而且回答 跳到1语句
break;

case 2:
RED_1   =0;
YELLOW_1=1;
GREEN_1 =0;

if(ses==1){times=1;ses=0;}//s 等于0   而且回答 跳到1语句                        
break;

case 0:
RED_1   =0;
YELLOW_1=0;
GREEN_1 =0;

if(ses==0){times=0;ses=0;}//s 等于0   而且回答 跳到1语句
break;                        
}
}

void key_Proc()    //按键处理
{
    if(flag1ms)//1ms时间标志
    {
      flag1ms = 0;
      if(KEY0)
      {
            if((keyTim>10)&&(keyTim<2000))//按键时间大于10ms小于50ms,是短按键
            {
                keyshort = 1;   //短按键标志
            }
            keyTim = 0;      //按键时间清零
      }
      else
      {
            if(keyTim<2001)    //按键时间小于10S
            keyTim++;         //按键时间加
            if(keyTim==2000)    //按键时间为1S
            {
                keylong = 1;    //长按键标志
            }
      }      
    }
}

void led_Proc()   //灯处理
{
    if((LEDON==0)&&(keyshort==1))//关灯状态,同时长按键按下就开灯
    {   
      keyshort = 0;//长按键松开
      LEDON = 1;    //关灯时就开灯
      LEDR = 1;   //RGB灯亮白光
      LEDG = 1;
      LEDB = 1;
            times=1;
    }      
    if((LEDON==1)&&(keylong==1)) //开灯状态,同时长按键按下就关灯
    {   
      keylong = 0;//长按键松开
      LEDON = 0;    //开灯时就关灯
      LEDR = 0;   //RGB灯灭
      LEDG = 0;
      LEDB = 0;
            times=0;
    }

}

void key_Proc1()    //按键处理
{
    if(flag1ms1)//1ms时间标志
    {
      flag1ms1 = 0;
      if(KEY1)
      {
            if((keyTim1>10)&&(keyTim1<2000))//按键时间大于10ms小于50ms,是短按键
            {
                keyshort1 = 1;   //短按键标志
            }
            keyTim1 = 0;      //按键时间清零
      }
      else
      {
            if(keyTim1<2001)    //按键时间小于10S
            keyTim1++;         //按键时间加
            if(keyTim1==2000)    //按键时间为1S
            {
                keylong1 = 1;    //长按键标志
            }
      }      
    }
}

void led_Proc1()   //灯处理
{
    if((LEDON1==1)&&(keylong1==1)) //开灯状态,同时长按键按下就关灯
    {   
      keylong1 = 0;//长按键松开
      LEDON = 0;    //开灯时就关灯
      LEDR = 0;   //RGB灯灭
      LEDG = 0;
      LEDB = 1;

    }
}


乘风飞扬 发表于 2024-10-12 09:26:33

这个帖子有按键扫描的思路跟例子,使用例子验证功能正常后再进行修改或者移植。
按键识别
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5753
(出处: 国芯技术交流网站)

小坤 发表于 2024-10-12 09:40:55

贴下电路图

jovewang 发表于 2024-10-12 10:24:25

电路图

soma 发表于 2024-10-12 11:25:43

都是独立按键,程序没问题,应该问题不大吧

jovewang 发表于 2024-10-12 11:26:37

soma 发表于 2024-10-12 11:25
都是独立按键,程序没问题,应该问题不大吧

可是,按钮就是不工作。不知道什么问题?

jovewang 发表于 2024-10-12 11:58:29

乘风飞扬 发表于 2024-10-12 09:26
这个帖子有按键扫描的思路跟例子,使用例子验证功能正常后再进行修改或者移植。
按键识别
https://www.stca ...

我的程序也是验证过的,只有两个功能。
一个是按钮,一个是输出。
分别验证,都可以,合并以后,输出可以,按钮不行。
就是想知道,是什么原因。
页: [1]
查看完整版本: 按钮怎么不动作?请帮忙看看程序有什么问题?