📄 nedu_drive_key.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 + -