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

📄 main.c

📁 《Proteus在MCS-51&ARM7系统中的应用百例》逆向之 Chapter 8 《Proteus在MCS-51&ARM7系统中的应用百例》MCS-51例子的C语言版本。 最
💻 C
字号:
#include <reg51.h>
typedef unsigned char BYTE;

BYTE DBUF[5];
BYTE TEMP[5];
BYTE YJ;  		//结果存放
BYTE YJ1;		//中间结果存放	
BYTE GONG;		//功能键存放
BYTE get_key;	//GETKEY()函数是否成功返回

sbit DIN=P3^0;
sbit CLK=P3^1; 

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

BYTE code KEYTABLE[]={0x0DE,0x0ED,0x0DD,0x0BD,
					  0x0EB,0x0DB,0x0BB,0x0E7,
					  0x0D7,0x0B7,0x07E,0x07D,
					  0x07B,0x077,0x0BE,0x0EE};


enum keymode {num_key,fun_key,clear_key}key_mode;

/* 通过 */
void DELAY(BYTE i)
{
	BYTE j=80;

	do
	{
		do
		{}while(--j);
	}while(--i);
}


BYTE GETKEY()
{
	BYTE temp;
   	BYTE temp2;
	BYTE r1;
	BYTE offset;

	get_key=0;
	DELAY(10);

	P1=0x0F;
	temp=P1;

	if(temp==0x0F)
		return 0;		
	else
	{
		temp2=temp;

		P1=0xEF;
		if(P1==0xEF)
		{
			P1=0xDF;
			if(P1==0xDF)
			{
				P1=0xBF;
				if(P1==0xBF)
				{
					P1=0x7F;
					if(P1==0x7F)
					{
						return 0;		
					}		
				}		
			}		
		}
		// K13
		//检查ACC
		temp2=ACC&0xF0|temp2;

		r1=16;
		offset=0;

		do
		{
			if(temp2==KEYTABLE[offset])
			{
				P1=0x0F;
				while(P1!=0x0F);
				DELAY(10);
				get_key=1;
				return offset;
			}
			offset++;
		}while(--r1);
	}
}

/* 通过 */
BYTE TESTKEY()
{
	P1=0x0F;
	return ( (~P1)&0x0F );	
}

/* 通过 */
void DISP()
{
	BYTE data *point_1=DBUF;
	BYTE data *point_2=TEMP+4;
	BYTE num=5;
	BYTE num2;

	do
	{
		*point_2=SEGTAB[*point_1];
		point_1++;
		point_2--;		
	}while(--num);

	point_1=TEMP;
	num=5;
	
	do
	{	
		num2=8;
		//检查ACC
		ACC=*point_1;
		do
		{
			#pragma asm
				RLC A
			#pragma endasm

			DIN=CY;
			CLK=0;
			CLK=1;
		}while(--num2);
		point_1++;
	}while(--num);
}



main()
{
	BYTE num=0;
	BYTE key;
	BYTE _R0;
	BYTE input;		
	BYTE temp;

	GONG=0;
	
	DBUF[0]=0x10;
	DBUF[1]=0x10;
	DBUF[2]=0x10;
	DBUF[3]=0x10;
	DBUF[4]=0x10;

	
	while(1)
	{
		DISP();
	
		while(!TESTKEY());

		key=GETKEY();
		if(!get_key)
			continue;
						 
		num++;

		switch(key)
		{
			case 0:		key_mode=num_key;	break;
			case 1:		key_mode=num_key;	break;
			case 2:		key_mode=num_key;	break;
			case 3:		key_mode=num_key;	break;
			case 4:		key_mode=num_key;	break;
			case 5:		key_mode=num_key;	break;
			case 6:		key_mode=num_key;	break;
			case 7:		key_mode=num_key;	break;
			case 8:		key_mode=num_key;	break;
			case 9:		key_mode=num_key;	break;
	
			case 10:	key_mode=fun_key;	break;
			case 11:	key_mode=fun_key;	break;
			case 12:	key_mode=fun_key;	break;
			case 13:	key_mode=fun_key;	break;
			case 14:	key_mode=fun_key;	break;
			
			
			default:	key_mode=clear_key;	
		}
	
		if(key_mode==num_key)
		{
			if(num==1)
			{
				input=key;
				DBUF[4]=key;
				DBUF[3]=0x10;
				DBUF[2]=0x10;
					continue;
			}
			else if(num==2)
			{
				input=input*10+key;
				DBUF[2]=0x10;
				DBUF[3]=DBUF[4];
				DBUF[4]=key;
					continue;
			}
			else if(num==3)
			{
				OV=0;
				ACC=input*10;
				if(OV) goto E3;
				ACC+=key;
				if(CY) goto E3;	
				input=ACC;

				DBUF[2]=DBUF[3];
				DBUF[3]=DBUF[4];
				DBUF[4]=key;
					continue;					
			}
			else
			{
				goto E3;
			}
		}
		else if(key_mode==fun_key)
		{
			DBUF[4]=0x10;
			DBUF[3]=0x10;
			DBUF[2]=0x10;
			
			_R0=GONG;
			GONG=key;

			/* + */
			if(_R0==10)
			{	
				YJ=YJ+input;
				if(CY)	goto E3;
				num=0;
			}
			/* - */
			else if(_R0==11)
			{
				YJ=YJ-input;
				if(CY)	goto E3;
				num=0;
			}
			/* * */
			else if(_R0==12)
			{
					
				YJ=YJ*input;
				if(OV)	goto E3;				
			}
			/* / */
			else if(_R0==13)
			{
				YJ=YJ/input;
				num=0;
			}
			/* FIRST */
			else if(_R0==0)
			{
				YJ=input;
				num=0;
			}
			/* DEN */
			else
			{
				num=0;
			}
				
		}
		/*   清除  */
		else 
		{
E3:			num=0;
			input=0;
			YJ=0;
			GONG=0;

			DBUF[0]=0x10;
			DBUF[1]=0x10;
			DBUF[2]=0x10;
			DBUF[3]=0x10;
			DBUF[4]=0x10;
				continue;
		}

//DISP1:
		YJ1=YJ/10;
		DBUF[4]=YJ%10;

		if(YJ1==0)
			continue;
		else
		{
			temp=YJ1;
			YJ1=YJ1/10;
			DBUF[3]=temp%10;

			if(YJ1==0) continue;
			else DBUF[2]=YJ1;
		}	
	}//end while
}

⌨️ 快捷键说明

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