//---------------------------------------------------- //Copyright (C), 2004-2009, lst. //版权所有 (C), 2004-2009, lst. //所属模块:键盘 //作者:lst //版本:V1.0.0 //文件描述: 扫描硬件读按键函数,只需直接给出按键当前值,无须防抖。 //其他说明: //修订历史: //2. 日期: 2009-05-29 // 作者: lst // 新版本号: V1.1.0 // 修改说明: 增加key_hard_init函数 //1. 日期: 2009-03-10 // 作者: lst // 新版本号: V1.0.0 // 修改说明: 原始版本 //------------------------------------------------------ #include "inc_os.h" #include "key.h" #include "gpio.h" extern uint16_t u16g_key_table[]; //----初始化键盘硬件----------------------------------------------------------- //功能: 如题,初始化后才能扫描键盘 //参数: 无 //返回: 无 //---------------------------------------------------------------------------- bool_t key_hard_init(void) { pg_gpio_reg->GPGCON &= 0xff3f033c; return true; } //----键盘硬件扫描------------------------------------------------------------ //功能: 共4个键,可读入复合键,最多2个键复合,key0=gpf0, // key1=gpf2,key2=gpg3,key3=gpg11 //参数: key,键值数组指针,可存放2个单键值 //返回: 读到的键的个数0,1,2 //---------------------------------------------------------------------------- uint8_t key_scan_hard(uint16_t *key) { uint8_t i = 0; if( ! (pg_gpio_reg->GPGDAT & 1)) { key[i] = 1; i++; } if( ! (pg_gpio_reg->GPGDAT & 0x8)) { key[i] = 2; i++; if(i == 2) return i; } if( ! (pg_gpio_reg->GPGDAT & 0x20)) { key[i] = 3; i++; if(i == 2) return i; } if( ! (pg_gpio_reg->GPGDAT & 0x40)) { key[i] = 4; i++; if(i == 2) return i; } if( ! (pg_gpio_reg->GPGDAT & 0x80)) { key[i] = 5; i++; if(i == 2) return i; } if( ! (pg_gpio_reg->GPGDAT & 0x800)) { key[i] = 6; i++; } return(i); }