|
K 是 開(kāi)關(guān)機(jī)鍵。
k1,k2,k3,k4 是開(kāi)機(jī)后,是操作鍵。鍵不能正常操作。
#include"stc8h.h"
sbit LEDR = P1^0;
sbit LEDB = P1^4;
sbit LEDR0 = P1^5;
sbit LEDG0 = P1^6;
sbit LEDB0 = P1^7;
sbit KEY = P3^7;
sbit KEY1 = P3^6;
sbit KEY2 = P3^5;
sbit KEY3 = P3^4;
sbit KEY4 = P3^3;
unsigned char keyshort; //短按鍵標(biāo)志
unsigned char keylong; //長(zhǎng)按鍵標(biāo)志
unsigned char keyshort1; //短按鍵標(biāo)志
unsigned char keylong1; //長(zhǎng)按鍵標(biāo)志
unsigned char keyshort2; //短按鍵標(biāo)志
unsigned char keylong2; //長(zhǎng)按鍵標(biāo)志
unsigned char keyshort3; //短按鍵標(biāo)志
unsigned char keylong3; //長(zhǎng)按鍵標(biāo)志
unsigned char keyshort4; //短按鍵標(biāo)志
unsigned char keylong4; //長(zhǎng)按鍵標(biāo)志
unsigned char LEDON; //開(kāi)燈狀態(tài)
unsigned char flag1ms; //1ms標(biāo)志
unsigned char flag1ms1; //1ms標(biāo)志
unsigned char flag1ms2; //1ms標(biāo)志
unsigned char flag1ms3; //1ms標(biāo)志
unsigned char flag1ms4; //1ms標(biāo)志
void key_Proc(); //按鍵處理
void led_Proc(); //燈處理
void key_Proc1(); //按鍵處理
void led_Proc1(); //燈處理
void key_Proc2(); //按鍵處理
void led_Proc2(); //燈處理
void key_Proc3(); //按鍵處理
void led_Proc3(); //燈處理
void key_Proc4(); //按鍵處理
void led_Proc4(); //燈處理
void Timer0Init(); //中斷初始化
void main()
{
P0 = 0;
P1 = 0;
P2 = 0;
Timer0Init(); //中斷初始化
while(1)
{
key_Proc(); //按鍵處理
led_Proc(); //燈處理
key_Proc1(); //按鍵處理
led_Proc1(); //燈處理
key_Proc2(); //按鍵處理
led_Proc2(); //燈處理
key_Proc3(); //按鍵處理
led_Proc3(); //燈處理
key_Proc4(); //按鍵處理
led_Proc4(); //燈處理
}
}
void key_Proc() //按鍵處理
{
unsigned int keyTim; //按鍵時(shí)間
if(flag1ms) //1ms時(shí)間標(biāo)志
{
flag1ms = 0;
if(KEY)
{
if((keyTim>10)&&(keyTim<1000)) //按鍵時(shí)間大于10ms小于50ms,是短按鍵
{
keyshort = 1; //短按鍵標(biāo)志
}
keyTim = 0; //按鍵時(shí)間清零
}
else
{
if(keyTim<5000) //按鍵時(shí)間小于10S
keyTim++; //按鍵時(shí)間加
if(keyTim==1500) //按鍵時(shí)間為1S
{
keylong = 1; //長(zhǎng)按鍵標(biāo)志
}
}
}
}
void led_Proc() //燈處理
{
if((LEDON==0)&&(keyshort==1)) //關(guān)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就開(kāi)燈
{
keyshort = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //關(guān)燈時(shí)就開(kāi)燈
LEDR = 1; //RGB燈亮白光
}
if((LEDON==1)&&(keylong==1)) //開(kāi)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就關(guān)燈
{
keylong = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 0; //開(kāi)燈時(shí)就關(guān)燈
LEDR = 0; //RGB燈滅
}
}
void key_Proc1() //按鍵處理
{
unsigned int keyTim; //按鍵時(shí)間
if(flag1ms1) //1ms時(shí)間標(biāo)志
{
flag1ms1 = 0;
if(KEY1)
{
if((keyTim>10)&&(keyTim<1000)) //按鍵時(shí)間大于10ms小于50ms,是短按鍵
{
keyshort1 = 1; //短按鍵標(biāo)志
}
keyTim = 0; //按鍵時(shí)間清零
}
else
{
if(keyTim<5000) //按鍵時(shí)間小于10S
keyTim++; //按鍵時(shí)間加
if(keyTim==1500) //按鍵時(shí)間為1S
{
keylong1 = 1; //長(zhǎng)按鍵標(biāo)志
}
}
}
}
void led_Proc1() //燈處理
{
if((LEDON==1)&&(keyshort1==1)) //關(guān)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就開(kāi)燈
{
keyshort1 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //關(guān)燈時(shí)就開(kāi)燈
LEDR0 = 1; //RGB燈亮白光
LEDG0 = 0;
LEDB0 = 0;
}
if((LEDON==1)&&(keylong1==1)) //開(kāi)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就關(guān)燈
{
keylong1 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //開(kāi)燈時(shí)就關(guān)燈
LEDR0 = 0; //RGB燈滅
LEDG0 = 0;
LEDB0 = 0;
}
}
void key_Proc2() //按鍵處理
{
if(flag1ms2) //1ms時(shí)間標(biāo)志
{
unsigned int keyTim; //按鍵時(shí)間
flag1ms2 = 0;
if(KEY2)
{
if((keyTim>10)&&(keyTim<1000)) //按鍵時(shí)間大于10ms小于50ms,是短按鍵
{
keyshort2 = 1; //短按鍵標(biāo)志
}
keyTim = 0; //按鍵時(shí)間清零
}
else
{
if(keyTim<5000) //按鍵時(shí)間小于10S
keyTim++; //按鍵時(shí)間加
if(keyTim==1500) //按鍵時(shí)間為1S
{
keylong2 = 1; //長(zhǎng)按鍵標(biāo)志
}
}
}
}
void led_Proc2() //燈處理
{
if((LEDON==1)&&(keyshort2==1)) //關(guān)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就開(kāi)燈
{
keyshort2 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //關(guān)燈時(shí)就開(kāi)燈
LEDR0 = 0; //RGB燈亮白光
LEDG0 = 1;
LEDB0 = 0;
}
if((LEDON==1)&&(keylong2==1)) //開(kāi)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就關(guān)燈
{
keylong2 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //開(kāi)燈時(shí)就關(guān)燈
LEDR0 = 0; //RGB燈滅
LEDG0 = 0;
LEDB0 = 0;
}
}
void key_Proc3() //按鍵處理
{
unsigned int keyTim; //按鍵時(shí)間
if(flag1ms3) //1ms時(shí)間標(biāo)志
{
flag1ms3 = 0;
if(KEY3)
{
if((keyTim>10)&&(keyTim<1000)) //按鍵時(shí)間大于10ms小于50ms,是短按鍵
{
keyshort3 = 1; //短按鍵標(biāo)志
}
keyTim = 0; //按鍵時(shí)間清零
}
else
{
if(keyTim<5000) //按鍵時(shí)間小于10S
keyTim++; //按鍵時(shí)間加
if(keyTim==1500) //按鍵時(shí)間為1S
{
keylong3 = 1; //長(zhǎng)按鍵標(biāo)志
}
}
}
}
void led_Proc3() //燈處理
{
if((LEDON==1)&&(keyshort3==1)) //關(guān)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就開(kāi)燈
{
keyshort3 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //關(guān)燈時(shí)就開(kāi)燈
LEDR0 = 0; //RGB燈亮白光
LEDG0 = 0;
LEDB0 = 1;
}
if((LEDON==1)&&(keylong3==1)) //開(kāi)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就關(guān)燈
{
keylong3 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //開(kāi)燈時(shí)就關(guān)燈
LEDR0 = 0; //RGB燈滅
LEDG0 = 0;
LEDB0 = 0;
}
}
void key_Proc4() //按鍵處理
{
unsigned int keyTim; //按鍵時(shí)間
if(flag1ms4) //1ms時(shí)間標(biāo)志
{
flag1ms4 = 0;
if(KEY4)
{
if((keyTim>10)&&(keyTim<1000)) //按鍵時(shí)間大于10ms小于50ms,是短按鍵
{
keyshort4 = 1; //短按鍵標(biāo)志
}
keyTim = 0; //按鍵時(shí)間清零
}
else
{
if(keyTim<5000) //按鍵時(shí)間小于10S
keyTim++; //按鍵時(shí)間加
if(keyTim==1500) //按鍵時(shí)間為1S
{
keylong4 = 1; //長(zhǎng)按鍵標(biāo)志
}
}
}
}
void led_Proc4() //燈處理
{
if((LEDON==1)&&(keyshort4==1)) //關(guān)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就開(kāi)燈
{
keyshort4 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 1; //關(guān)燈時(shí)就開(kāi)燈
LEDR0 = 0; //RGB燈亮白光
LEDG0 = 0;
LEDB = 1;
}
if((LEDON==1)&&(keylong4==1)) //開(kāi)燈狀態(tài)同時(shí)長(zhǎng)按鍵按下就關(guān)燈
{
keylong4 = 0; //長(zhǎng)按鍵松開(kāi)
LEDON = 0; //開(kāi)燈時(shí)就關(guān)燈
LEDR0 = 0; //RGB燈滅
LEDG0 = 0;
LEDB = 0;
}
}
void Timer0Init() //中斷初始化
{
TMOD &= 0XF0; //中斷0模式1
TMOD |= 0X01;
TH0 = 0XFC; //初值1ms
TL0 = 0X66;
ET0 = 1; //允許T0中斷
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
EA = 1; //開(kāi)中斷
}
void interruptTimer0() interrupt 1
{
TH0 = 0XFC;
TL0 = 0X66;
flag1ms = 1; //1ms標(biāo)志
flag1ms1 = 1; //1ms標(biāo)志
flag1ms2 = 1; //1ms標(biāo)志
flag1ms3 = 1; //1ms標(biāo)志
flag1ms4 = 1; //1ms標(biāo)志
}
|
|