⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 AT89C51单个按键接收处理_状态机方式
💻 BAK
字号:
// KeyControl application
// 2007.8.17 by Ericosn

#include <REG51.h>
#define uchar unsigned char
#define uint  unsigned int

sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P00 = P0^0;
sbit P06 = P0^6;
sbit P07 = P0^7;

uchar Flag1 = 0,Flag2 = 0,Flag3 = 0,Flag4 = 0,Flag5 = 0;
uchar FlagTimer1 = 0,FlagTimer2 = 0,FlagTimer3 = 0,FlagTimer4 = 0,FlagTimer5 = 0;

uchar idata Buffer1[10] = {0x80,0x00,0xFA,0xF1,0xF1,0xF1,0xF1,0xF1,0xF1,0xF1};
uchar idata Buffer2[10] = {0x80,0x00,0xFA,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2};
uchar idata Buffer3[10] = {0x80,0x00,0xFA,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3};

void init(void);
void SCI_Tx(char Buf[],uchar n);

void main(void)
{
	init();
	while(1){
		//按键处理
		if (Flag1==1)
		{
			Flag1=2;
			SCI_Tx(Buffer1,10);
		}

		if (Flag2==1)
		{
			Flag2=2;
			SCI_Tx(Buffer2,10);
		}

		if (Flag3==1)
		{
			Flag3=2;
			SCI_Tx(Buffer2,10);
		}

		if (Flag4==1)
		{
			Flag4=2;
			SCI_Tx(Buffer3,10);
		}

		if (Flag5==1)
		{
			Flag5=2;
			SCI_Tx(Buffer1,10);
		}
		
	}
}

///////////////////////////////////////////////////////////////
void init(void)
{
	TMOD = 0x21;
	TH1 = 0xFD;
	TL1 = 0xFD;
	TH0 = 0x4C;
	TL0 = 0x00;
	SCON = 0x50;
	IE |= 0x82;
//	IP |= 0x02;
	TR0 = 1;
	TR1 = 1;
}

///////////////////////////////////////////////////////////////
//
void SCI_Tx(char Buf[],uchar n)
{
	while(n){
		SBUF = Buf[10-n];
		while(TI==0);
		TI = 0;
		n--;
	}
}

///////////////////////////////////////////////////////////////
//

///////////////////////////////////////////////////////////////
//Timer0 50ms interrupt 
void timer0(void) interrupt 1 using 1
{
	bit Sample;

	TH0 = 0x4C;
	TL0 = 0x00;
	if(Flag1==0)
	{
		Sample = P20;
		if(Sample==0)
		{
			FlagTimer1++;
			if(FlagTimer1>2)
			{
				Flag1=1;
				FlagTimer1=0;
				P00 = 0;
			}		
		}
		else	FlagTimer1=0;
	}

	if(Flag1==2)
	{
		Sample = P20;
		if(Sample==1)	
		{
			FlagTimer1++;
			if(FlagTimer1>2)
			{
				Flag1=0;
				FlagTimer1=0;
				P00 = 1;
			}
		}
		else	FlagTimer1=0;
	}

	if(Flag2==0)
	{
		Sample = P21;
		if(Sample==0)
		{
			FlagTimer2++;
			if(FlagTimer2>2)
			{
				Flag2=1;
				FlagTimer2=0;
				P00 = 0;
			}		
		}
		else	FlagTimer2=0;
	}

	if(Flag2==2)
	{
		Sample=P21;
		if(Sample==1)	
		{
			FlagTimer2++;
			if(FlagTimer2>2)
			{
				Flag2=0;
				FlagTimer2=0;
				P00 = 1;
			}
		}
		else	FlagTimer2=0;
	}

	if(Flag3==0)
	{
		Sample = P22;
		if(Sample==0)
		{
			FlagTimer3++;
			if(FlagTimer3>2)
			{
				Flag3=1;
				FlagTimer3=0;
				P00 = 0;
			}		
		}
		else	FlagTimer3=0;
	}

	if(Flag3==2)
	{
		Sample= P22;
		if(Sample==1)	
		{
			FlagTimer3++;
			if(FlagTimer3>2)
			{
				Flag3=0;
				FlagTimer3=0;
				P00 = 1;
			}
		}
		else	FlagTimer3=0;
	}
	
	if(Flag4==0)
	{
		Sample = P23;
		if(Sample==0)
		{
			FlagTimer4++;
			if(FlagTimer4>2)
			{
				Flag4=1;
				FlagTimer4=0;
				P00 = 0;
			}		
		}
		else	FlagTimer4=0;
	}

	if(Flag4==2)
	{
		Sample = P23;
		if(Sample==1)	
		{
			FlagTimer4++;
			if(FlagTimer4>2)
			{
				Flag4=0;
				FlagTimer4=0;
				P00 = 1;
			}
		}
		else	FlagTimer4=0;
	}

	if(Flag5==0)
	{
		Sample = P24;
		if(Sample==0)
		{
			FlagTimer5++;
			if(FlagTimer5>2)
			{
				Flag5=1;
				FlagTimer5=0;
				P00 = 0;
			}		
		}
		else	FlagTimer5=0;
	}

	if(Flag5==2)
	{
		Sample = P24;
		if(Sample==1)	
		{
			FlagTimer5++;
			if(FlagTimer5>2)
			{
				Flag5=0;
				FlagTimer5=0;
				P00 = 1;
			}
		}
		else	FlagTimer5=0;
	}

}

/*
///////////////////////////////////////////////////////////////
//Serial port transceive interrupt
void serial(void) interrupt 4 using 2
{
	uchar temp;
	if(RI&(!RcvFlag)){
		RI = 0;
	}
    if(TI){
		TI=0;
		//the Tx interrupt processing code
	}
}
*/

//END
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -