按键程式设计,能够处理加速键、一键多功能等情…
2008-02-23 05:27:48来源:互联网 阅读 ()
2、任何键盘程式基本上都是个模式,能够处理加速键、一键多功能等情况;
3、对外接口只有2个,换用不同硬件的键盘只需把该键盘程式加入工程编译即可,其他无需作任何改变,很方便。
基本上都是个模式:
有键?--YES——和上次相同?--No--Keyold=0;退出
| |
| YES--Keyold ;
| |
| Keyold==首键延时KEYDELAY?--No--退出
| |
| YES--Keyok=1; //按下不放一定时间发首键,后面发加速键
| 保存键值到Keydata;(必要时译码)
| Keyold=KEYDELAY-KEYLOOP(按住不放的延时);--退出
|
No--Keyold==0?--YES--退出
|
N0--Keyok=1; //不为0说明按了键再放开,当然作按键有效处理
保存键值到Keydata;(必要时译码)
Keyold=0;--退出
任何键盘程式对外接口:
unsigned char KeyGetcode(void) //返回按键码
{
key_ok=0;
return(key_data);
}
bit KeyTest(void) //检查有无按键
{
KeyScan(); //键扫描
return(key_ok);
}
//--------------------------------------------------------------------------//
// 源程式大公开 //
// (c) Copyright 2001-2005 xuwenjun //
// All Rights Reserved //
// V1.00 //
//--------------------------------------------------------------------------//
//标 题: P1口行列式键盘程式 //
//文档名: xwj_hlkey.c //
//版 本: V1.00 //
//修改人: 徐文军 E-mail:xuwenjun@21cn.com //
//日 期: 05-05-13 //
//描 述: P1口行列式键盘程式 //
//声 明: //
// 以下代码仅免费提供给学习用途,但引用或修改后必须在文档中声明出处. //
// 如用于商业用途请和作者联系. E-mail:xuwenjun@21cn.com //
// 有问题请mailto xuwenjun@21cn.com 欢迎和我交流! //
//--------------------------------------------------------------------------//
//老版本: 无 老版本文档名: //
//创建人: 徐文军 E-mail:xuwenjun@21cn.com //
//日 期: 05-05-13 //
//--------------------------------------------------------------------------//
#include <reg52.h>
#include "xwj_hlkey.h" // P1口行列式键盘 //
//#include "xwj_bp.h" //峰鸣器
#define KEYDELAY 25 /*首键延迟次数*/
#define KEYLOOP 10 /*连续键间隔次数,需小于KEYDELAY*/
unsigned char key_bak;
unsigned char key_temp;
unsigned char key_old;
unsigned char key_data;
bit key_ok;
// P1口行列式键盘 //
#define KEYPIN_L P1 // 定义键扫描列端口为 P1低四位输入 //
#define KEYPIN_H P1 // 定义键扫描行端口为 P1高四位扫描输出 //
//内部私有函数 //
unsigned char fnKeycode(unsigned char key); // 根据键盘映射表输出顺序键值 //
// P1口行列式键盘 //
//---------------------------------------------------------------------------//
void KeyScan(void) //键扫描
{
unsigned char sccode,recode;
KEYPIN_L = KEYPIN_L|0x0f; // P1低四位为列线输入 //
KEYPIN_H = KEYPIN_H&0x0f; // P1高四位为行线发全零扫描码 //
if ((KEYPIN_L&0x0f) != 0x0f) //有键按下
{
key_temp = 键值; //键扫描,获得键值
if (key_temp == key_bak)
{
key_old ;
if (key_old==KEYDELAY) //连续键,不要则把此if屏蔽
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 单片机IO口播放乐曲
下一篇: 用C语言实现常见的三种中文内码转换
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash