
一:字母和数字按键的建码值
二:数字键盘上的按键的建码值
三:功能按键建码值
四:控制按键的建码值
五:多媒体按键建码值
:在Windows注册表中有个"Scancode Map"(即扫描码映射)的键,我们可以通过修改这个键的值来实现键位映射的更改。
"Scancode Map"的值的格式是"hex:00,00,00,00,00,00,00,00,xx,00,00,00,[yy,yy,yy,yy,,yy,yy,yy,yy,]00,00,00,00"
前8个16进制的值(即前8组00)表示版本号和头部字节,后4个16进制的值(即最后的4组00)表示结束标志,中间xx表示映射数目,最小值为01(考虑到结束标志的4组00),中括号内为可写项,也是我们修改键位比较关键的部分,每四个代表一组映射。
第一,直接使用硬件来复位,将原本要接到P33的电平接到硬件复位上,当然需要一定的设计
第二,还是硬件,直接将此电平接到看门狗电路上
第三,软件,前提是你的单片机支持软件复位(包括直接复位和内置的看门狗)
keyflag应该是判断某个按键按了几次,不安的时候为0
if(KeyFlag == 0)
{
}
按一次时执行
else if(KeyFlag == 1)
{
if(BUTTON_add == 0 && KeyLock ==0)
{
}
if(BUTTON_reduce == 0 && KeyLock ==0)
{
}
按二次时执行
else if(KeyFlag == 2){
if(BUTTON_add == 0 && KeyLock ==0)
{
}
if(BUTTON_reduce == 0 && KeyLock ==0)
{
}
一楼正解,主要按键扩展标志是用来节省资源的,用最少的按键实现最多的功能!
可以用getch来取得键值,
以下是用TC写下的。
供参考:
#include <stdioh>
#include<conioh>
void main()
{
char ch;
while(1)
{
ch =getch();
printf("\n%d",ch);
if(ch == 27)
break;
}
printf("\nend");
}
设置过程中会出现黑色框架,第一个输入f1然后按回车键第二个输入f2然后按回车键,第三个输入x然后回车,最后输入end 回车,保存,就行了,希望你能用,话说开连发很爽,我为了开连发还换成XP了,VISTA不好用连发。
不是所有键盘都能调节音量的,一般笔记本键盘或者带有音量调节功能的台式机键盘可以调节音量。
键盘上调节音量的方法:
按住FN键,点击对应的按键即可。以戴尔外星人笔记本键盘为例,按住FN,点击F7或者F8,即可调整音量大小。
有键--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 //
// V100 //
//--------------------------------------------------------------------------//
//标 题: P1口行列式键盘程序 //
//文件名: xwj_hlkeyc //
//版 本: V100 //
//修改人: 徐文军 E-mail:xuwenjun@21cncom //
//日 期: 05-05-13 //
//描 述: P1口行列式键盘程序 //
//声 明: //
// 以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处 //
// 如用于商业用途请与作者联系 E-mail:xuwenjun@21cncom //
// 有问题请mailto xuwenjun@21cncom 欢迎与我交流! //
//--------------------------------------------------------------------------//
//老版本: 无 老版本文件名: //
//创建人: 徐文军 E-mail:xuwenjun@21cncom //
//日 期: 05-05-13 //
//--------------------------------------------------------------------------//
#i nclude <reg52h>
#i nclude "xwj_hlkeyh" // P1口行列式键盘 //
//#i nclude "xwj_bph" //峰鸣器#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屏蔽
{
key_ok=1;
key_data=fnKeycode(key_temp); //键
key_old=KEYDELAY-KEYLOOP;
}
}
else
{
key_old=0;
key_bak=key_temp;
}
}
else //键抬起
{
if (key_old)
{
key_ok=1;
key_data=fnKeycode(key_temp); //键
/ if (key_old==100) //加上时间,不同时间不同功能,与连续键冲突
{
bp(1);
key_data += 0x10;
}
if (key_old==200)
{
bp(2);
key_data += 0x20;
}
/
}
key_old=0;
}
KEYPIN_H = KEYPIN_H|0xf0;
}//---------------------------------------------------------------------------//unsigned char KeyGetcode(void) //返回按键码
{
key_ok=0;
return(key_data);
}bit KeyTest(void) //检查有无按键
{
KeyScan(); //键扫描
return(key_ok);
(1);P33小键盘按下P13亮再按05秒灭。
org 0000h
ajmp main0
org 0080h
MAIN0:
CLR 21H ;清标志
main:
mov c,p33 ;检测按键
jc main
MOV R6,#200 ;设定延时
MOV R7,#200
TT0:
JNB 21H,TT2 ;检测灯状态
tt:
mov c,p33 ;检测按键
jnc tt1
JNB 20H,MAIN ;检测时间标志
CLR 20H
AJMP TT3
TT2:
mov c,p33 ;检测按键
jnc tt2
TT3:
CPL 21H ;改变灯状态
cpl p13
ajmp main
TT1: NOP ;延时但不是子程序
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TT
MOV R6,#200
DJNZ R7,TT
MOV R7,#200
SETB 20H
AJMP TT
end
(2)数码管数据 p0,数码管控制p2 独立按键p1口 ,;对独立键进行按键次数计数,三位数码管显示。
;K1按下后,进行加1计数
;K2按下后,进行减1计数。
;K3按下后,进行加5计数。
;K4按下后,清计数单元,数码管显示0。
;按住键可以快速计数。
K1 BIT P14
K2 BIT P15
K3 BIT P16
K4 BIT P17
K_OLD EQU 30H
K_NEW EQU 31H
K_COUNT EQU 32H
DISSTART EQU 40H ;显示单元首地址
LED_DATA EQU P0 ;数码管数据口定义
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0080H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV K_COUNT,#00H
MAIN1:
CALL CONVT
CALL PLAY
CALL KEY_PROG
JMP MAIN1
KEY_PROG:
CALL K_SCAN ;键扫描
MOV A,K_NEW
CJNE A,K_OLD,KEY_P1
JMP KEY_P_END
KEY_P1:
MOV R4,#20
KEY_P2:
CALL CONVT ;用显示程序来进行键延时
CALL PLAY
DJNZ R4,KEY_P2
CALL K_SCAN ;再判断键是否按下
MOV A,K_NEW
CJNE A,K_OLD,KEY_P3
JMP KEY_P_END
KEY_P3:
JB ACC0,LOOP1 ;K1按下
JB ACC1,LOOP2 ;K2按下
JB ACC2,LOOP3 ;K3按下
JB ACC3,LOOP4 ;K4按下
JMP KEY_P_END
LOOP1:
INC K_COUNT ;键计数加1
JMP KEY_P_END
LOOP2:
DEC K_COUNT ;键计数减1
JMP KEY_P_END
LOOP3:
INC K_COUNT ;键计数加5
INC K_COUNT
INC K_COUNT
INC K_COUNT
INC K_COUNT
JMP KEY_P_END
LOOP4:
MOV K_COUNT,#00H ;键计数单元清零
KEY_P_END:
RET
;---------------------------------------------------------
;代码变换 (HEX TO BCD)
;---------------------------------------------------------
CONVT:
MOV A,K_COUNT
MOV B,#100
DIV AB
MOV DISSTART+2,A ;百位存放在DISSTART+2
MOV A,#10
XCH A,B
DIV AB
MOV DISSTART+1,A ;十位存放在DISSTART+1
MOV DISSTART,B ;个位存放在DISSTART
RET
;---------------------------------------------------------
; 键扫描子程序
;---------------------------------------------------------
K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,P1
CPL A
ANL A,#0F0H
SWAP A
MOV K_NEW,A
RET
;---------------------------------------------------------
;延时子程序
;---------------------------------------------------------
DELAY:
MOV R6,#200
DEL:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL
RET
;---------------------------------------------------------
PLAY:
MOV R0,#DISSTART ;获得显示单元首地址
MOV R1,#07FH ;从第一个数码管开始
MOV R2,#03H ;共显示3位数码管
DISP1:
MOV A,@R0 ;获得当前位地址
MOV DPTR,#TAB_NU ;获得表头
MOVC A,@A+DPTR ;查表获得显示数据
MOV LED_DATA,A ;显示数据
MOV P2,R1 ;开始显示当前位
MOV A,R1 ;准备显示下一位
RR A
MOV R1,A ;下一位
INC R0 ;取下一个单元地址
LCALL DELAY2MS ;延时 2 MS
DJNZ R2,DISP1 ;重复显示下一个
MOV P2,#0FFH ;关闭显示
RET ;显示完成,返回
;---------------------------------------------------------
;延时子程序
;---------------------------------------------------------
DELAY2MS:
MOV R6,#10
DEL1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
TAB_NU:
db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代码表
;
END
两个例子我想够你明白的了。详细的解释,代表性的例子,可慢慢学习
以上就是关于谁知道电脑键盘按键代码表全部的内容,包括:谁知道电脑键盘按键代码表、c语言独立按键控制程序复位、关于单片机温度控制系统C语言程序中的按键设置程序,请求详细的介绍下按键的输入过程。while(1) { if(KeyFl等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)