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

📄 main.c

📁 《Proteus在MCS-51&ARM7系统中的应用百例》逆向之 Chapter 4 《Proteus在MCS-51&ARM7系统中的应用百例》MCS-51例子的C语言版本。
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -