资讯详情

用stc15w101单片机写的按键单击双击长按程序,怎么加上休眠功能?

#include

#include"intrins.h"

sbit key=P3^5;

sbit LED=P3^4;

unsigned char L,value,time,num;

bit S,flag;

voiddelay_ms(unsigned char z)

{

unsigned int x,y;

for(x=z; x>0; x--)

for(y=848; y>0; y--);

}

void HY()

{ if(!S)

{

switch(L)

{

case 0: LED=1;break;

case 1: LED=0;delay_ms(2);LED=1;delay_ms(8);break;

case 2: LED=0;delay_ms(4);LED=1;delay_ms(6);break;

case 3: LED=0;delay_ms(6);LED=1;delay_ms(4);break;

case 4: LED=0;break;

}

}

if(S)

{

switch(L)

{

case 0: LED=1;break;

case 1: LED=0;delay_ms(45);LED=1;delay_ms(255);break;

case 2: LED=0;delay_ms(80);LED=1;delay_ms(220);break;

case 3: LED=0;delay_ms(150);LED=1;delay_ms(150);break;

case 4: LED=0;delay_ms(10);LED=1;delay_ms(90);break;

}

}

}

void Timer0Init(void) //12.000MHz

{

AUXR &= 0x7F;

TMOD &= 0xF0;

TL0 = 0x00;

TH0 = 0xEE;

TF0 = 0;

TR0 = 1;

EA = 1;

ET0 = 1;

}

unsigned char getkey()

{

static unsigned char lp=0;

switch(lp)

{

case 0:

if(!key)lp ;

else if(flag)

{

if( time>50)

{

value=1;

time=0,

flag=0;

}

}

break;

case 1:if(!key)lp ;else lp=0;break;

case 2:

if(key)

{

lp ;

if(flag)

{

value=2;

flag=0;

}

else flag=1;

}

else if( num>250)

{

flag=0;

value=3;

lp ;

}

break;

case 3:if(key){lp=0;num=0;time=0;}break;

}

return value;

}

main()

{

LED=1;

L=0;S=0;flag=0;value=0;

Timer0Init();

while(1)

{

HY();

}

}

void timer()interrupt 1

{

switch(getkey())

{

case 1:

L ;

value=0;

if(L>4) L=1;

break;

case 2: S=~S;L=1;value=0;break;

case 3: L=0;value=0; break;

}

}

标签: 二极管tv02w101b

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司