main.c

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

C
106
字号
#include <reg51.h>
#include <intrins.h>
 
typedef unsigned char BYTE;

BYTE DBUF _at_ 0x30;
BYTE TEMP _at_ 0x40;

sbit P30=P3^0;
sbit P31=P3^1;

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

BYTE code K1TAB[]={  0x81,0x41,0x21,0x11,	
     	       		 0x82,0x42,0x22,0x12,
			  		 0x84,0x44,0x24,0x14,
			  		 0x88,0x48,0x28,0x18};
	

void display(BYTE in)
{
	BYTE num;
	DBUF=in;
	TEMP=SEGTAB[DBUF];
	
	num=8;
	ACC=TEMP;

	do
	{
		#pragma asm
			RLC A	
		#pragma endasm

		P30=CY;
		P31=0;
		P31=1;
	}while(--num);		
}



void delay()
{
	BYTE i=0x01;
	
	do
	{	
		BYTE j=0x88;
		do
		{
			_nop_();
		}while(--j);
	}while(--i);
} 



BYTE key1()
{
	BYTE temp;
	BYTE num;
	BYTE key;

	while(1)
	{
		P1=0xF0;
		if(P1==0xF0)
			continue;

		delay();		
		P1=0xF0;
		temp=P1;
		if(temp==0xF0)
			continue;
		
		P1=0x0F;
		temp=P1&temp;

		num=0x10;
		key=0;

		do
		{
			if(temp==K1TAB[key])
			{
				P1=0x0F;
				while(P1!=0x0F);
				return key;
			}
			key++;
		}while(--num);
	}			   
}


main()
{
	while(1)
	{
		display(key1());
	}
	
}

⌨️ 快捷键说明

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