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

📄 key.c

📁 【液晶显示器的C语言程序设计 Freescale 8位微控制器】一书的光盘
💻 C
字号:
// 本例程中采用4*4键盘    
//  0xEE,"F1",0xDE,"1",    0xBE,"2",0x7E,"3",
//  0xED,"F2",0xDD,"4",    0xBD,"5",0x7D,"6",
//  0xEB,"F3",0xDB,"7",    0xBB,"8",0x7B,"9",
//  0xE7,"F4",0xD7,"Clear",0xB7,"0",0x77,"Enter"
// 由于GP32的PTA口兼有键盘中断功能,因此将键盘的行、列共8条线连接到PTA口上,
// 其中行1-4连接到PTA0-3上,列1-4连接到PTA4-7上。
// 这里提供一个键盘编程实例,涉及如何扫描键盘获得键值,中断获取键值,键盘编码等问题。
// 在编程时将PTA0-3定义为输出,将PTA4-7定义为输入并具有内部上拉电阻,
// 那么"F1"键对应于PTA7~PTA0=11101110,即0xEE;
// "1"键对应于PTA7~PTA0=11011110,即0xDE;
// "Enter"键对应于PTA7~PTA0=01110111,即0x77。
#include "gp32.h"
typedef unsigned int Uint;
typedef unsigned char Uchar;

extern void DisplayEnglish(void); 	//F1显示英文字符
extern void DisplayChinese(void); 	//F2显示汉字字符
extern void ComCurScroll(void);		//F3光标滚动
extern void ComScrScroll(void);          //F4屏幕滚动
extern void LCDInit(void);      //LCD初始化函数

const Uchar KeyValue[]={0xfe,0xfd,0xfb,0xf7};  /*逐行扫描的PTA口值*/
const Uchar KeyTable[16]={0xEE,0xDE,0xBE,0x7E, //4X4键盘的键值
  			  0xED,0xDD,0xBD,0x7D,
  			  0xEB,0xDB,0xBB,0x7B,
  			  0xE7,0xD7,0xB7,0x77};  

/*键盘初始化*/
void KeyInit(void){
	PTA=0x00;
	DDRA=0x0f;     //定义PTA的高4位输入,低4位输出
	PTAPUE=0xf0;
	INTKBIER=0xf0; //定义PTA的高4位具有内部上拉电阻
}
/*读按键值*/
Uchar ReadKey(void){
	Uchar temp,tempdata,key;
	Uint k;
	for(k=0;k<4;k++){			//依次扫描四行
		temp=KeyValue[k];		//使第k根行扫描线为低电平
		tempdata=PTA;			//
		tempdata|=0x0F;			//PTA4-7保留原态,令PTA0-3为1
		tempdata&=temp;
		PTA=tempdata;
		tempdata=PTA;
		tempdata&=0xF0;
		if (tempdata!=0xf0) {
			key=PTA;
			goto readkey1;
		}
	}
readkey1: return key;
}		
/*键盘中断*/
@interrupt void KeyISR(void){
	Uchar KeyValue;
	Uint OutValue;
	Uchar k;
		
	INTKBSCR|=0x02;
	KeyValue=ReadKey();
	for(k=0;k<16;k++){
		if(KeyValue==KeyTable[k]){
			OutValue=k;			
		}
	}
	switch(OutValue){
	case 0:					//F1显示英文字符
		DisplayEnglish();
		break;
	case 4: 				//F2显示汉字字符
		DisplayChinese();
		break;
	case 8:					//F3光标滚动	
		ComCurScroll();
		break;
	case 12:				//F4屏幕滚动	
		ComScrScroll();
		break; 	
	case 13:				//"Clear"
		WRCommand(0x01);		//清屏	
	}
	KeyInit();	
	INTKBSCR|=0x04;	 //将键盘状态和控制寄存器设置为清键盘中断请求
	INTKBSCR&=~0x02; //将键盘状态和控制寄存器设置为开键盘中断	
}
	

⌨️ 快捷键说明

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