微机键盘与显示器_键盘上自带小显示屏[通俗易懂]

微机键盘与显示器_键盘上自带小显示屏[通俗易懂]键盘分类键盘输入设备及接口

 

键盘分类

键盘输入设备及接口。键盘有编码键盘(ASCII码)及非编码键盘之分。

键盘要解决的问题有:

判断有无键按下(查询,中断);

识别按下的键(行扫描法,列扫描法,行列反转法);

去抖动(硬件法,软件法);

重键处理(软件第一次,键释放)。

 

1.去抖动

微机键盘与显示器_键盘上自带小显示屏[通俗易懂]

不稳定状态大约20ms。

硬件去抖动

R-S触发器

软件去抖动

延时20ms.

1.重键处理

重键:两个或两个以上键同时按下;或者一个键按下时,另一个键又按下。

处理方式:

l 扫描键盘,当有多个闭合键时,只识别最后一个按下的键。

l 确认一个闭合键之后,保持状态,只有当该键释放后再去处理,并开始识别其它键。

2.键盘结构

种类:线性键盘、矩阵键盘。

线性键盘

微机键盘与显示器_键盘上自带小显示屏[通俗易懂]

微机键盘与显示器_键盘上自带小显示屏[通俗易懂]

 

矩阵键盘

 

微机键盘与显示器_键盘上自带小显示屏[通俗易懂]

 

1.查询方式、行扫描法

判断有无键按下:行输出全0,读入列值,是不是全1,若是全1,无键按下,否则有键按下。

延时20ms去抖动。

l 键识别:行扫描法识别到底是哪个键按下。

重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待。

 

1.中断方式、行扫描法

l 初始化时行输出全0.

判断有无键按下: 有中断,表示有键按下。

延时20ms去抖动(中断服务程序中)。

l 键识别:行扫描法识别到底是哪个键按下(中断服务程序中)

l 重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待(中断服务程序中)

1.查询方式、行列反转扫描法

判断有无键按下:行输出全0,读入列值,是不是全1,若是全1,无键按下,否则有键按下。

延时20ms去抖动。

l 键识别:行列反转,在列中输出读入的列值,读行值,识别到底是哪个键按下。

l 重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待。

 

2.中断方式、行列反转扫描法

l 初始化时行输出全0.

判断有无键按下: 有中断,表示有键按下。

延时20ms去抖动(中断服务程序中)。

l 键识别:行列反转,在列中输出读入的列值,读行值,识别到底是哪个键按下(中断服务程序中)

l 重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待(中断服务程序中)

20.1. 键盘中断

键盘中断处理程序有中断类型码09H,16H, 21H三种方式。

微机键盘与显示器_键盘上自带小显示屏[通俗易懂]

 

 

中断09H的处理过程:

 (1)从键盘接口的输出缓冲寄存器(60H)读取系统扫描码。
(2)判断该键是单独按下或是与组合键(SHIFT、CTEL或ALT)一起使用。若字符键是单独按下,将扫描码转换为相应的ASCII码或扩展码(命令键、组合功能键等的编码,称为扩展码)写入键盘缓冲区。例如,系统扫描码为1EH,若无SHIFT一起使用,将其转换为a的ASCII码61H。若有SHIFT配合使用,则将其转换为A的ASCII码41H。
(3)如果是换挡键(如CapsLock,Ins等),将其状态存入BIOS数据区中的键盘标志单元。
(4)如果是组合键(如Ctrl+Alt+Del),则直接执行,完成其相应的功能。
(5)对于中止组合键(如Ctrl+C或Ctfl+Break),强行中止应用程序的执行,返回DOS。
(6)将转换的ASCII码作为低字节,以原来的系统扫描码作为高字节存入键盘缓冲区,供系统调用。键盘缓冲区建立在系统主存的BIOS数据区中,占用32个字节,可存放16次击键产生的ASCII码和扫描码。它以先进先出的方式工作,输入的键盘代码在其中形成循环队列。中断09H输入的地址指针总指向队尾,从那里写入数据。

(7)在完成上述任务之后,结束中断调用,中断返回。至此,1次按键输入的信息才真正送入微机之中。 

 

中断16H的处理过程:

应用程序需要使用存入键盘缓冲区的字符,例如需要根据输入的字符作为程序的转移条件时,可使用INT 16H的软件中断,它以先进先出的方式工作,INT 16H的输出指针总指向队列首,从那里取出字符。 
INT 16H有3种子功能,由AH=(0、1、2)识别。 
第一,从键盘缓冲区读取ASCII码(包括扫描码)。 
第二,判断缓冲区是否为空。若缓冲区循环队列的首指针与尾指针相同,意味着缓冲区的键码已经取完,等待输入新的键码。否则,还有未被取走的键码。 
第三,判断当前键盘的特殊键(如CTRL、Caps Lock)的状态。用户可以使用中断指令INT 16H获取相应的键盘状态信息。

中断21H的处理过程:

 

在DOS功能调用中,也有多个功能调用号用于获得所需要的键盘信息。常用的键盘操作功能如下:
(1)AH=1
功能:从键盘输入一个字符并回显在屏幕上。
入口参数:AH=1
出口参数:AL=字符
(2)AH=6
功能:读键盘字符(直接控制台I/O)。
入口参数:AH=6,DL=0FFH(表示输入)
出口参数:若有字符可取,AL=字符,ZF=0。若无字符可取,AL=0,ZF=1
(3)AH=7
功能:从键盘输入一个字符,不回显。
入口参数:AH=7

 

出口参数:AL=字符

(4)AH=8
功能:从键盘输入一个字符,不回显。检测Ctrl_Break。
入口参数:AH=8
出口参数:AL=字符
(5)AH=0AH
功能:输入字符到缓冲区。
入口参数:AH=0AH,DS:DX=缓冲区首址
出口参数:无
(6)AH=0BH
功能:读键盘状态。
入口参数:AH=0BH
出口参数:AL=0FFH,有键输入。AL=0,无键输入
(7)AH=0CH
功能:清除键盘缓冲区,并调用一种键盘功能。
入口参数:AH=0CH,AL=键盘功能号(1、6、7、8、A)

出口参数:与调用的功能有关 

LED显示器通常由若干个LED七段显示器组成,有静态显示与动态显示两种方式。

1.LED显示器静态显示方式

每一显示位可独立显示,只要在该位的段选线上保持段选码电平,该位就能保持相应的显示字符。由于每一显示位都由一个相应的8位输出口锁存段选码,故在同一时刻不同的显示位可以显示不同的字符。

LED显示器动态显示方式

就是一位一位地轮流点亮各位显示器(扫描)。对于某一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。

#define rGPFCON (*(volatile unsigned *)0x56000050) 	//定义GPFCON地址
#define rGPFDAT (*(volatile unsigned *)0x56000054) 	//定义GPFDAT地址
#define rGPFUP (*(volatile unsigned *)0x56000058) 	//定义GPFUP地址

char ReadKeyVal(void)
{	unsigned char  i, j, H_val, L_val;
	char keyval = -1;	//设置键值返回值变量keyval初值为-1
	 rGPFCON = 0x55;	//配置IO线功能
	 rGPFUP = 0xFF;		//禁止上拉电阻
      rGPFDAT = 0xf0;	//行输出为全0
	if((L_val =(rGPFDAT & 0xf0))!= 0xf0) //如果列输入不全为1
	{	H_val = 0xfe; 	//行输出变量H_val置为0xfe,从GPF0开始扫描
		for(i = 0; i<4; i++) //共扫描4行,0-3
		{	rGPFDAT = H_val; 	//输出行扫描值
			for(j = 0; j<100; j++);	//延时消抖
			if ( ( L_val = ( rGPFDAT & 0xf0 )) != 0xf0) //如果列输入不全为1
			{	L_val =(L_val>>4)| 0xf0;      //列值右移4位,高4位置1
				Keyval = get_val(H_val)× 4 + get_val(L_val);
				return keyval; 	//返回键值 
			}
			else
				H_val = (H_val <<1)| 0x01;  // 左移1位,低位补1,
							      // 扫描下一行
		}
	}
	return keyval; 		//返回键值 
}
// 功能:计算按键的行号、列号
// 输入:val = 行扫描值,或读取的列值
// 输出:get_val()= 按键行号,或列号
//例: val = 1111 1011,将val右移2次,变成1111 1110,对应的,x = 2,就是返回值
char get_val(unsigned char val)
{
	unsigned char i, x;
	x = 0;
	for(i = 0; i<4; i++)
	{
		if((~val)= = 1)  return x; 	
		val  =(val >> 1)| 0x80; 		// val右移1位,最高位置1
		x = x+1;
	}
} 

 

今天的文章微机键盘与显示器_键盘上自带小显示屏[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84711.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注