找回密码
 立即注册
查看: 286|回复: 6

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

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2025-04-26 08:37:49

2

主题

56

回帖

548

积分

高级会员

积分
548
发表于 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;

    }
}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-10-12 09:26:33 | 显示全部楼层
这个帖子有按键扫描的思路跟例子,使用例子验证功能正常后再进行修改或者移植。
按键识别
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5753
(出处: 国芯技术交流网站)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:375
  • 最近打卡:2025-04-26 15:51:33
已绑定手机

27

主题

301

回帖

822

积分

高级会员

积分
822
发表于 2024-10-12 09:40:55 | 显示全部楼层
贴下电路图
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2025-04-26 08:37:49

2

主题

56

回帖

548

积分

高级会员

积分
548
发表于 2024-10-12 10:24:25 | 显示全部楼层
电路图
微信截图_20241012102000.png
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-10-12 11:25:43 来自手机 | 显示全部楼层
都是独立按键,程序没问题,应该问题不大吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2025-04-26 08:37:49

2

主题

56

回帖

548

积分

高级会员

积分
548
发表于 2024-10-12 11:26:37 | 显示全部楼层
so*** 发表于 2024-10-12 11:25
都是独立按键,程序没问题,应该问题不大吧

可是,按钮就是不工作。不知道什么问题?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2025-04-26 08:37:49

2

主题

56

回帖

548

积分

高级会员

积分
548
发表于 2024-10-12 11:58:29 | 显示全部楼层
乘风*** 发表于 2024-10-12 09:26
这个帖子有按键扫描的思路跟例子,使用例子验证功能正常后再进行修改或者移植。
按键识别
https://www.stca ...

我的程序也是验证过的,只有两个功能。
一个是按钮,一个是输出。
分别验证,都可以,合并以后,输出可以,按钮不行。
就是想知道,是什么原因。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:07 , Processed in 0.127496 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表