阅读背景:

高级流水灯(按键检测+中断定时)

来源:互联网 
//******************************
//time:2014/3/5
//user:jeslie
//use:if you tap key1,the next led_light will be on,and the current one will go out.
//	  if you tap key2,the function is opposite to the key1.
//	  if you tap key3,the 4led_light will be a water_light,tap it again,all of the 4 led will go out.
//******************************
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
uchar num=1,numt=0;

void init()
{
	TMOD=0x01;
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	EA=1;
	ET0=1;
}

void delayms(uint xms)
{
	uint i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}

void display()
{
	switch(num)
	{
		case 1:
			led1=1;led2=0;led3=0;led4=0;break;
		case 2:
			led1=0;led2=1;led3=0;led4=0;break;
		case 3:
			led1=0;led2=0;led3=1;led4=0;break;
		case 4:
			led1=0;led2=0;led3=0;led4=1;break;
	}
}

void keyscan()
{
	if(key1==0)
	{
		delayms(10);
		if(key1==0)
		{
			num++;
			if(num==5)
				num=1;
			while(!key1);
		}
	}
	if(key2==0)
	{
		delayms(10);
		if(key2==0)
		{
			num--;
			if(num==0)
				num=4;
			while(!key2);
		}
	}
	if(key3==0)
	{
		delayms(10);
		if(key3==0)
		{
			P1=0xf0;
			while(!key3);
			TR0=~TR0;
		}
	}
}
void main()
{
	init();
	while(1)
	{
		keyscan();
		display();
	}
}
void T0_time()interrupt 1
{
	

	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	numt++;
	
	if(numt==20)
	{
		numt=0;
		num++;
		if(num==5)
			num=0;
	}
}//******************************
//time:2014/3/



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: