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

📄 nedu_drive_key.c

📁 三星44b0平台开发的PDA系统
💻 C
字号:
/*
*********************************************************************************************************************
*                 东软培训中心教学项目:基于ARM和uc/os-II的PDA系统
*
*                      (c) Copyright 2005, 东软培训中心
*                             All Rights Reserved
*
* 模块名称:驱动程序模块
* 文件名:NEDU_DRIVE_KEY.C
* 作者:朱成果
* 时间:2005年9月20日
* 版本:V0.01
**********************************************************************************************************************
*/

#include "44b.h"
#include "def.h"
#include "Zlg7289.h"
#include "uhal.h"
#include "ucos_ii.h"
///////////////ZLG7289的信号线/////////////////////
#define ZLG7289_CS				(0x20)	//GPB5
#define ZLG7289_KEY				(0x10)	//GPG4

#define ZLG7289_ENABLE()		do{Zlg7289SIOBand=rSBRDR;	Zlg7289SIOCtrl=rSIOCON;	\
						rSIOCON=0x31;	rSBRDR=0xff;	rPDATB&=(~ZLG7289_CS);}while(0)
#define ZLG7289_DISABLE()		do{rPDATB|=ZLG7289_CS; rSBRDR=Zlg7289SIOBand; rSIOCON=Zlg7289SIOCtrl;}while(0)

///////////////ZLG7289的命令字/////////////////////
#define ZLG7289_CMD_RST		0xA4	//复位
#define ZLG7289_CMD_TEST		0xBF	//测试模式
#define ZLG7289_CMD_LSHIFT		0xA1	//左移
#define ZLG7289_CMD_RSHIFT		0xA0	//右移
#define ZLG7289_CMD_CLSHIFT	0xA3	//循环左移
#define ZLG7289_CMD_CRSHIFT	0xA2	//循环右移

#define ZLG7289_CMD_DATA0		0x80	//下载数据且按方式0 译码
#define ZLG7289_CMD_DATA1		0xC8	//下载数据且按方式1 译码
#define ZLG7289_CMD_DATA3		0x90	//下载数据但不译码

#define ZLG7289_CMD_FLASH		0x88	//闪烁控制
#define ZLG7289_CMD_HIDE		0x98	//消隐控制
#define ZLG7289_CMD_LDOT		0xE0	//段点亮指令
#define ZLG7289_CMD_HDOT		0xC0	//段关闭指令
#define ZLG7289_CMD_RDKEY		0x15	//读键盘数据指令
/*
**********************************************************************************************************************
*              键值映射表
*
* 说明: 由于ZLG7289可以管理64键键盘,因此扫描码为0 ~ 63,通过映射表进行扫描码到键值的转换
*
**********************************************************************************************************************
*/
unsigned char KeyBoard_Map[]={7,4,1,0,11,0,0,0,8,5,
				2,0,12,0,0,0,9,6,3,17,
				13,14,0,0,15,0,16,0,0,0,
				0,0,0,0,0,0,0,0,0,0,
				0,0,0,0,0,0,0,0,0,0,
				0,0,0,0,0,0,0,0,0,0,
				0,0,0,0
				}; //64,键值映射表

int Zlg7289SIOBand;
int Zlg7289SIOCtrl;


/*
**********************************************************************************************************************
*                       GETKEY
*
* 作者:北京博创兴业科技有限公司,朱成果部分修改
*
* 时间:2005年9月20日
*
* 描述:函数自动判断是否有键按下,当查询到有键按下后将扫描码打印到串口0,并返回键值。
*
* 参数:无
*
* 返回值:返回32位键值。
* 
***********************************************************************************************************************
*/
U32 GetKey()
{
	U16 kl;
	while(1)
	{
		while((rPDATG&ZLG7289_KEY))
		OSTimeDly(10);						//朱成果修改,无键按下,挂起10个Tick
		kl=Zlg7289_ReadKey();				//得到按键扫描码
		if(kl < 64)
		{									//扫描码有效
			Uart_Printf("\n%d",kl);		//朱成果修改,不打印扫描码到串口
			kl = KeyBoard_Map[kl];			//通过键盘映射表得到按键值
			OSTimeDly(5);  				//朱成果修改,延时5Tick
			break;
		}
	}
	return kl;
}
/**********************************************************************************************************************
*                       ZLG7289_READKEY
*
* 作者:北京博创兴业科技有限公司
*
* 时间:2005年9月20日
*
* 描述:函数自动连接键盘模块,并获得扫描码。
*
* 参数:无
*
* 返回值:无符号整数
* 
***********************************************************************************************************************
*/
unsigned int Zlg7289_ReadKey()
{
	unsigned int key;

	ZLG7289_ENABLE();

	WriteSDIO(ZLG7289_CMD_RDKEY);
	key=ReadSDIO();
	
	ZLG7289_DISABLE();

	return key;
}
/*
**********************************************************************************************************************
*                       ZLG7289_RESET
*
* 作者:北京博创兴业科技有限公司
*
* 时间:2005年9月20日
*
* 描述:复位键盘模块。
*
* 参数:无
*
* 返回值:无
* 
***********************************************************************************************************************
*/
void Zlg7289_Reset()
{
	ZLG7289_ENABLE();
	WriteSDIO(ZLG7289_CMD_RST);
	ZLG7289_DISABLE();
	Delay(20);
}
//end of key module

⌨️ 快捷键说明

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