|
#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;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XfC;//給定時(shí)器賦初值,定時(shí)1ms
TL0=0X18;
ET0=1;//打開定時(shí)器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時(shí)器
}
void interruptTimer0() interrupt 1
{
TH0 = 0XFC;
TL0 = 0X66;
flag1ms = 1; //1ms標(biāo)志
flag1ms1 = 1; //1ms標(biāo)志
sess++; //毫秒
if(sess==1000) //1000毫秒 =1s
{
sess=0;//ms 等于0
ses++; //s 加1
}
}
void key_Proc() //按鍵處理
{
if(flag1ms) //1ms時(shí)間標(biāo)志
{
flag1ms = 0;
if(KEY0)
{
if((keyTim>10)&&(keyTim<2000)) //按鍵時(shí)間大于10ms小于50ms,是短按鍵
{
keyshort = 1; //短按鍵標(biāo)志
}
keyTim = 0; //按鍵時(shí)間清零
}
else
{
if(keyTim<2001) //按鍵時(shí)間小于10S
keyTim++; //按鍵時(shí)間加
if(keyTim==2000) //按鍵時(shí)間為1S
{
keylong = 1; //長按鍵標(biāo)志
}
}
}
}
void led_Proc() //燈處理
{
if((LEDON==0)&&(keyshort==1)) //關(guān)燈狀態(tài),同時(shí)長按鍵按下就開燈
{
keyshort = 0; //長按鍵松開
LEDON = 1; //關(guān)燈時(shí)就開燈
LEDR = 1; //RGB燈亮白光
LEDG = 1;
times = 1;
}
if((LEDON==1)&&(keylong==1)) //開燈狀態(tài),同時(shí)長按鍵按下就關(guān)燈
{
keylong = 0; //長按鍵松開
LEDON = 0; //開燈時(shí)就關(guān)燈
LEDR = 0; //RGB燈滅
LEDG = 0;
times = 0;
}
}
void key_Proc1() //按鍵處理
{
if(flag1ms1) //1ms時(shí)間標(biāo)志
{
flag1ms1 = 0;
if(KEY1)
{
if((keyTim1>10)&&(keyTim1<2000)) //按鍵時(shí)間大于10ms小于50ms,是短按鍵
{
keyshort1 = 1; //短按鍵標(biāo)志
}
keyTim1 = 0; //按鍵時(shí)間清零
}
else
{
if(keyTim1<2001) //按鍵時(shí)間小于10S
keyTim1++; //按鍵時(shí)間加
if(keyTim1==2000) //按鍵時(shí)間為1S
{
keylong1 = 1; //長按鍵標(biāo)志
}
}
}
}
void led_Proc1() //燈處理
{
if((LEDON==1)&&(keylong==0)) //關(guān)燈狀態(tài),同時(shí)長按鍵按下就開燈
{
keyshort1 = 0; //長按鍵松開
LEDB = 1;
LEDW = 1;
times1=1;
}
if((LEDON==1)&&(keylong1==1)) //開燈狀態(tài),同時(shí)長按鍵按下就關(guān)燈
{
keylong1 = 0; //長按鍵松開
LEDB = 0;
LEDW = 0;
times1=0;
}
}
這個(gè)程序有什么問題?
|
|