- 打卡等级:偶尔看看II
- 打卡总天数:29
- 最近打卡:2025-04-26 08:37:49
高级会员
- 积分
- 548
|
这个程序有什么问题?
帮忙看一下程序
#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;
}
}
|
|