getkey.c

来自「用单片机C语言编的通过键盘扫描得到键值的键盘扫描C程序的源代码」· C语言 代码 · 共 61 行

C
61
字号
#include<absacc.h>
#include<reg51.h>
#define BYTE unsigned char
#define WORD unsigned int
#define COM8155 XBYTE[0xA100]
#define PA8155 XBYTE[0xA101]
#define PB8155 XBYTE[0xA102]
#define PC8155 XBYTE[0xA103]
sbit bBusy=P3^2;

void Delay()
{
	WORD i;
	for ( i=1000;i>0;i-- ) ;
}

BYTE GetKey( void )
{
	BYTE i,scode;//scode为中间变量
	//row = 0xFF;
	COM8155 = 0x02;
	PB8155 = 0x00;
	while ( 1 ) 
	{
		if( bBusy == 0 )
		{
			Delay();//延时去抖动
			if ( bBusy == 0 )
			{
				scode=0xFE;//逐列扫描
				for ( i=0;i<8;i++ )
				{
					PB8155=scode;
					if(bBusy==0)
                    {
                    	if ( PC8155 & 0x10 == 0 )
                        return i;//	row=(PB8155&0x30)|0xcf;//"0"代表键值所在位
                        else
                        return ( i + 8 );
                        break;
                    }
                    else
                        scode=(scode<<1)|0x01;//列扫描码左移
                }
			}
		}
    }
	Delay();
	return 1;
}

void main ( void )
{
	while (1)
	{
    	XBYTE[0xE000] = GetKey();		
	}
	return;
}

⌨️ 快捷键说明

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