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

📄 keyboard.c

📁 44box的bootloader原代码及其分析。
💻 C
字号:
#include <string.h>
#include <stdio.h>

#include "..\Target\44b.h"
#include "..\Target\44blib.h"
#include "keyboard.h"

const char Keyboard[4][4] = {
	                          	{'7','8','9','/'},
	                          	{'4','5','6','*'},
	                          	{'1','2','3','-'},
	                          	{'0','.','+','\n'}};

char ReadKeybd(void)
{

    unsigned int PCONFback=0;
	unsigned int PUPFback=0;
	unsigned char  scanvalue[4] ={0xfe,0xfd,0xfb,0xf7};
	unsigned char  i,j,x,temp;
	char keyvalue=0;
	
	PCONFback = rPCONF;
	rPCONF = 0x55;//pf0-pf3:output, pf4-pf7:input
	PUPFback=rPUPG;
	rPUPF=0xff;//disable pull-up

	rPDATF=0xf0;//pf0-pf3:0
	if((temp=(rPDATF&0xf0))!=0xf0){
		for(i=0;i<4;i++){
			rPDATF=scanvalue[i];
			for(x=0;x<100;x++);
			if((temp=(rPDATF&0xf0))!=0xf0){
				temp=(~(temp>>4))&0x0f;
				for(j=0;j<4;j++){
					if(temp==0x01){
						keyvalue=Keyboard[j][i];
						return keyvalue;
						}
					else
						temp=temp>>1;
					}
				}
			}
		}
	rPCONF=PCONFback;
	rPUPF=PUPFback;
	return keyvalue;
}

void Keyboard_test(void)
{
	char aa,ch1=0,ch2=0;
	unsigned char keyflg=0,i=0;

	  while(1)
	  {	
			ch1=ReadKeybd();
			if(ch1!=0)
			{
				if((keyflg==1)&&(ch1==ch2))//Co
				{
					Uart_SendByte(ch1);
					while((rPDATF&0xf0)!=0xf0);//等待按键释放
					i++;
					if(i>16)
					   break;
				}
				else
				{
					keyflg=1;
					ch2=ch1;
				}
			}
			else
			{
				keyflg=0;
				ch2=0;
			}
			
			Delay(1000);
	 }
 }

⌨️ 快捷键说明

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