按钮怎么不动作?请帮忙看看程序有什么问题?
这个程序有什么问题?帮忙看一下程序
#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;
}
}
这个帖子有按键扫描的思路跟例子,使用例子验证功能正常后再进行修改或者移植。
按键识别
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5753
(出处: 国芯技术交流网站)
贴下电路图 电路图 都是独立按键,程序没问题,应该问题不大吧 soma 发表于 2024-10-12 11:25
都是独立按键,程序没问题,应该问题不大吧
可是,按钮就是不工作。不知道什么问题? 乘风飞扬 发表于 2024-10-12 09:26
这个帖子有按键扫描的思路跟例子,使用例子验证功能正常后再进行修改或者移植。
按键识别
https://www.stca ...
我的程序也是验证过的,只有两个功能。
一个是按钮,一个是输出。
分别验证,都可以,合并以后,输出可以,按钮不行。
就是想知道,是什么原因。
页:
[1]