main.c

来自「《Proteus在MCS-51&ARM7系统中的应用百例》逆向之 Chapter」· C语言 代码 · 共 138 行

C
138
字号
#include <reg51.h>

typedef unsigned char BYTE;
typedef unsigned short WORD;

BYTE LINE;
BYTE ROW ;
BYTE VAL ;

sbit P10=P1^0;
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;

BYTE code TABLE1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
					0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

WORD code TABLE2[]={64021,64103,64260,64400,
					4524, 64580,64684,64777,
					64820,64898,64968,65030,
					65058,65110,65157,65178};

void INT_T0() interrupt 1
{
	TH0=TABLE2[VAL]/0x100;
	TL0=TABLE2[VAL]%0x100;
	P10=~P10;	
}


void DELAY()
{
	BYTE i=10;
	do
	{
		BYTE j=250;
		do
		{}while(--j);
	}while(--i);
}



main()
{
	P0  =0x00;
	TMOD=0x01;
	
	while(1)
	{
		P3=0xF0;
	
		while(1)
		{
			if(P30)
			{
				DELAY();
		
				if(P30)
				{
					LINE=0x00;	break;
				}	
			}
			else if(P31)
			{
				DELAY();
		
				if(P31)
				{
					LINE=0x01;	break;
				}
			}	
			else if(P32)
			{
				DELAY();
		
				if(P32)
				{
					LINE=0x02;	break;
				}
			}		
			else if(P33)
			{
				DELAY();
		
				if(P33)
				{
					LINE=0x03;	break;
				}	
			}
		}
		
		P3=0x0F;
	
		while(1)
		{
			if(P34)
			{
				ROW=0x00;	break; 		
			}
			else if(P35)
			{
				ROW=0x01;	break;		
			}
			else if(P36)
			{
				ROW=0x02;	break;
			}
			else if(P37)
			{
				ROW=0x03;	break;
			}
		}
		/*CALCU*/
		VAL=ROW+LINE*0x04;
	
		TH0=TABLE2[VAL]/0x100;
		TL0=TABLE2[VAL]%0x100;
		IE=0x82;
		TR0=1;
		P0=TABLE1[VAL];
	
		while(1)
		{
			if(P3==0x0F||P3==0xF0)
				break;	
		}
	
		P0=0x00;
		TR0=0;
	}

}

⌨️ 快捷键说明

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