请教如何得到按键的硬件扫描码 100publicsub

请教如何得到按键的硬件扫描码 100publicsub,第1张

扫描码 是键盘对应按键的编码 ,虚拟键码 是 *** 作系统对 对应按键的编码键盘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、关于单片机键盘扫描问题(行列转换)、求编写一个键盘数码块扫描实验的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10210351.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存