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

📄 key.c

📁 一个键盘的源码的程序
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "f2812a.h"
#define SCANCODE_0 0x70
#define SCANCODE_1 0x69
#define SCANCODE_2 0x72
#define SCANCODE_3 0x7A
#define SCANCODE_4 0x6B
#define SCANCODE_5 0x73
#define SCANCODE_6 0x74
#define SCANCODE_7 0x6C
#define SCANCODE_8 0x75
#define SCANCODE_9 0x7D
#define SCANCODE_Del 0x49
#define SCANCODE_Enter 0x5A
#define SCANCODE_Plus 0x79
#define SCANCODE_Minus 0x7B
#define SCANCODE_Mult 0x7C
#define SCANCODE_Divid 0x4A
#define SCANCODE_Num 0x77

void Delay(unsigned int nTime);		// 延时子程序
void RefreshLEDArray();			// 刷新显示
void SetLEDArray(int nNumber);		// 修改显示内容
char ConvertScanToChar(unsigned char cScanCode);	// 将键盘扫描码转换为字符

unsigned int nScreenBuffer[1024];
unsigned char ledbuf[8],ledx[8];
unsigned char ledkey[10][8]=
{
	{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},
	{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},	//1
	{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},	//2
	{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},
	{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},
	{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},
	{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},
	{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},
	{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},
	{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}
};
#define LEDS *(int *)0xc0000
#define CTRGR *(int *)0x108000
#define CTRLCDCMDR *(int *)0x108001
#define CTRKEY *(int *)0x108001
#define CTRLCDCR *(int *)0x108002
#define CTRCLKEY *(int *)0x108002
#define CTRLCDLCR  *(int *)0x108003
#define CTRLCDRCR *(int *)0x108004
#define CTRLA *(int *)0x108005
#define CTRLR *(int *)0x108007

unsigned int uPort8000;
unsigned int uWork,nCount=0,uN,uN1,nCount1,nDir;
void main(void)
{
    int nCount,nCursorCount;
	unsigned int nScanCode,nKeyCode;
	unsigned char cKey,cOldKey;
	unsigned int nSpeed;
    InitSysCtrl();

	CTRGR=0x80;		// 初始化ICETEK-CTR
	CTRGR=0x0;
	CTRGR=0x80;
	CTRLR=0;			// 关闭东西方向的交通灯
	CTRLR=0x40;	// 关闭南北方向的交通灯
	CTRLR=0xc1;
	uPort8000=CTRLCDCR;		// 清键盘缓冲区
	for ( nCount=0;nCount<8;nCount++ )
	{
		ledbuf[nCount]=0x0ff;		// 显示为空白
		ledx[nCount]=(nCount<<4);	// 生成显示列控制字
	}
	RefreshLEDArray();
	nCount=nCursorCount=0;
	
	for (;;)
	{
		nScanCode=CTRLCDCMDR;
		nScanCode&=0x0ff;
		uPort8000=CTRLCDCR;
		if ( nScanCode!=0 && nScanCode!=0x0ff )
		{
			if ( nScanCode==SCANCODE_Enter )	break;
			else
			{
				cKey=ConvertScanToChar(nScanCode);
				if ( cKey!=0 && cKey>='0' && cKey<='9' )
				{
					nKeyCode=cKey-'0';
					SetLEDArray(nKeyCode);
				}
			}
		}
		Delay(25);
		nCursorCount++; nCursorCount%=4;
		if ( nCursorCount==0 )	ledbuf[7]^=0x80;
	}	
} 	

void Delay(unsigned int nDelay)
{
	int ii,jj,kk=0;
	for ( ii=0;ii<nDelay;ii++ )
	{
		for ( jj=0;jj<64;jj++ )
		{
			RefreshLEDArray();
			kk++;
		}
	}
}

void RefreshLEDArray()
{
	int i;
	for ( i=0;i<8;i++ )
	{
		CTRGR=ledx[i];
		CTRLA=ledbuf[i];
	}
}

void SetLEDArray(int nNumber)
{
	int i;
	for ( i=0;i<8;i++ )
		ledbuf[i]=~ledkey[nNumber][7-i];
}

char ConvertScanToChar(unsigned char cScanCode)
{
	char cReturn;
	
	cReturn=0;
	switch ( cScanCode )
	{
		case SCANCODE_0: cReturn='0'; break;
		case SCANCODE_1: cReturn='1'; break;
		case SCANCODE_2: cReturn='2'; break;
		case SCANCODE_3: cReturn='3'; break;
		case SCANCODE_4: cReturn='4'; break;
		case SCANCODE_5: cReturn='5'; break;
		case SCANCODE_6: cReturn='6'; break;
		case SCANCODE_7: cReturn='7'; break;
		case SCANCODE_8: cReturn='8'; break;
		case SCANCODE_9: cReturn='9'; break;
	}
	 
	return cReturn;
}


⌨️ 快捷键说明

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