
扫描码 是键盘对应按键的编码 ,虚拟键码 是 *** 作系统对 对应按键的编码键盘ASCII码 是 *** 作系统对对应 虚拟键码的编码(ASCII编码)
当用户按下某个键时,1键盘会检测到这个动作,并通过 键盘控制器 把 扫描码(scan code) 传送到计算机;
键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同。
2计算机接收到 扫描码 后,将其交给 键盘 驱动程序 ;
3 键盘驱动程序 把这个 扫描码 转换为 键盘虚拟码 ;
虚拟码与具体硬件无关,不同厂商的键盘,同一个键 的 虚拟码 总是相同的。
4然后,键盘驱动程序 把该键盘 *** 作的 扫描码 和 虚拟码 以及 其它信息 传递给 *** 作系统;
5 *** 作 系统将获得 的信息封装在一个 键盘消息 中,并把该 键盘消息 插入到 消息列队。
5通过Windows的 消息系统,该 键盘消息 被送到 某个窗口 中;
6窗口所在的应用程序 接收到消息后,可以了解到有关 键盘 *** 作的信息,然后决定作出一定的响应
keyscan()
{
unsigned int i;
unsigned char key_h, key_l; //定义行列值
P3 = 0xf0; //将行全部置为0
key_l = P3 & 0xf0; //将P3口读入列
if(key_l != 0xf0) { //判断如果有键按下
for(i = 0; i < 25; i++); //延时消抖
key_l = P3 & 0xf0; //将P3口读入列
if(key_l != 0xf0) { //第二次判断
P3 = key_l | 0x0f; //重置P3口使其显示出按键后的状态
key_h = P3 & 0x0f; //读入行
//---------------------------------------------
key_h = key_l + key_h; //保存到key_h
//------------
P3 = 0xf0; //将行全部置为0
while(key_l != 0xf0) //只有处于按下状态
key_l = P3 & 0xf0; //就再次读入
//------------
return(key_h); //释放后返回
//---------------------------------------------
}
}
return 0; //没有按键时返回0
}
代码很好写,但是关键是你的数码管属于硬件
也就是说,至少要知道 *** 作你数码管的API才行啊。
或者说要怎样传送数据给你的数码管,你的数码管需要接受怎样的数据。
键盘扫描很简单,给你个代码。
要求引用头文件
#include <iostream>
using namespace std;
#include <conioh>//kbhit API头文件
#include <timeh>
#include <windowsh>
#define ESC 0x1b
void loop()
{
int i;
if( kbhit() ) //判断是否有键盘按键按下。
{
char ch;
ch = getch(); //获取按下的键值
if( ESC == ch )//判断是否是你要的键,我以ESC为例
{
cout<<"ESC"<<endl;
system("pause");
}
}
while( !kbhit() )//没有按键是的 *** 作
{
balabalabala
}
}
int main()
{
loop();
}
键盘扫描就是记录电脑键盘按下和放开的数值表。
键盘上的每一个键都有两个唯一的数值进行标志。为什么要用两个数值而不是一个数值。这是因为一个键可以被按下,也可以被释放。当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。这些数值在系统中被称为键盘扫描码。
下面是一个我机子上调试好的8255程序、希望对你有所帮助。、 祝你好运~~~ 8255扫描键盘、显示程序 利用8255可编程并行口做一个扫描键盘实验, 把按键输入的键码,显示在由8279控制的七段数码管上。 8255PA口做键盘输入线,PB口作扫描线
淘bao 旺铺: 广州华电 单片机学习板 单片机外围学习模块/传感器模块
//44键盘检测程序,按下键后相应的代码显示在数码管上
#include<reg51h>
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char i=100;
unsigned char j,k,temp,key;
void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
display(unsigned char num)
{
P0=table[num];
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
}
void main()
{
dula=0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xfe;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
}
}
无法同时。
键盘扫描C程序,每次只能扫到一个按键,如果要两个按键同时按,先按下去的按键是会进入中断的。
键盘是用于 *** 作设备运行的一种指令和数据输入装置,也指经过系统安排 *** 作一台机器或设备的一组功能键。
以上就是关于请教如何得到按键的硬件扫描码 100publicsub全部的内容,包括:请教如何得到按键的硬件扫描码 100publicsub、关于单片机键盘扫描问题(行列转换)、求编写一个键盘数码块扫描实验的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)