#include "stc8h.h"
#include "key.h"
void main()
{
Timer0Init(); //中断初始化
while(1)
{
key_Proc(); //按键处理
led_Proc(); //灯处理
key_Proc1(); //按键处理
led_Proc1(); //灯处理
plc();
}
}
void plc()
{
//times = 1;
while(1)
{
switch(times) //一开始times=1
{
case 0:
RED_1 =0;
YELLOW_1=0;
GREEN_1 =0;
RED_2 =0;
YELLOW_2=0;
GREEN_2 =0;//位定义
GREEN_3 =0;//位定义
GREEN_4 =0;//位定义
if(ses==2){times=0;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 1:
RED_1 =1;
YELLOW_1=0;
GREEN_1 =0;
RED_2 =0;
YELLOW_2=0;
GREEN_2 =0;//位定义
GREEN_3 =0;//位定义
GREEN_4 =0;//位定义
if(ses==2){times=2;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 2:
RED_1 =1;
YELLOW_1=1;
GREEN_1 =0;
RED_2 =0;
YELLOW_2=0;
GREEN_2 =0;//位定义
GREEN_3 =0;//位定义
GREEN_4 =0;//位定义
if(ses==1){times=3;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 3:
RED_1 =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2 =0;
YELLOW_2=0;
GREEN_2 =0;//位定义
GREEN_3 =0;//位定义
GREEN_4 =0;//位定义
if(ses==1){times=4;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 4:
RED_1 =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2 =1;
YELLOW_2=0;
GREEN_2 =0;//位定义
GREEN_3 =0;//位定义
GREEN_4 =0;//位定义
if(ses==1){times=5;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 5:
RED_1 =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2 =1;
YELLOW_2=1;
GREEN_2 =0;//位定义
GREEN_3 =0;//位定义
GREEN_4 =0;//位定义
if(ses==1){times=6;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 6:
RED_1 =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2 =1;
YELLOW_2=1;
GREEN_2 =1;//位定义
GREEN_3 =0;//位定义
GREEN_4 =0;//位定义
if(ses==2){times=7;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 7:
RED_1 =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2 =1;
YELLOW_2=1;
GREEN_2 =1;//位定义
GREEN_3 =1;//位定义
GREEN_4 =0;//位定义
if(ses==2){times=8;ses=0;}//s 等于0 而且回答 跳到1语句
break;
case 8:
RED_1 =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2 =1;
YELLOW_2=1;
GREEN_2 =1;//位定义
GREEN_3 =1;//位定义
GREEN_4 =1;//位定义
if(ses==2){times=1;ses=0;}//s 等于0 而且回答 跳到1语句
break;
}
}
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XfC;//给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void interruptTimer0() interrupt 1
{
TH0 = 0XFC;
TL0 = 0X66;
flag1ms = 1; //1ms标志
flag1ms1 = 1; //1ms标志
sess++; //毫秒
if(sess==1000) //1000毫秒 =1s
{
sess=0;//ms 等于0
ses++; //s 加1
}
}
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;
times = 1;
}
if((LEDON==1)&&(keylong==1)) //开灯状态,同时长按键按下就关灯
{
keylong = 0; //长按键松开
LEDON = 0; //开灯时就关灯
LEDR = 0; //RGB灯灭
LEDG = 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((LEDON==1)&&(keylong==0)) //关灯状态,同时长按键按下就开灯
{
keyshort1 = 0; //长按键松开
LEDB = 1;
LEDW = 1;
times1=1;
}
if((LEDON==1)&&(keylong1==1)) //开灯状态,同时长按键按下就关灯
{
keylong1 = 0; //长按键松开
LEDB = 0;
LEDW = 0;
times1=0;
}
}
这个程序有什么问题?
|