当前位置:文档之家› PC键盘输入及显示过程

PC键盘输入及显示过程

PC键盘输入及显示过程
PC键盘输入及显示过程

PC键盘输入及显示过程原理

摘要:键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、数字、标点

符号等输入到计算机中,从而向计算机发出命令、输入数据等。而显示器也可以将通过键盘输入的字符、数据等显示出来。在此报告中我们将讨论计算机识别键盘输入的信息并通过显示器来显示信息的过程。

关键词:键盘;输入;显示

从计算机识别键盘输入的原理来说,键盘分为全编码键盘和非编码键盘两类。全编码键盘是由硬件完成键盘识别功能的,它通过识别键是否按下以及所按下键的位置,由全编码电路产生一个唯一对应的编码信息(如ASCII码)。由于其线路和编码的唯一性,这种键盘是不存在键位冲突的问题的,但是编码键盘结构复杂,成本非常之高现在基本上已经被淘汰了,现在多用非编码键盘。

一、非编码键盘的输入原理

非编码键盘是由软件完成键盘识别功能的,它利用简单的硬件和一套专用键盘编码程序来识别按键的位置,然后由CPU将位置码通过查表程序转换成相应的编码信息。

PC键盘主要由单片机、译码器和键开关矩阵三大部分组成。由于键盘排列成矩阵格式,被按键的识别和行列位置扫描码的产生,是由键盘内部的单片机通过译码器来实现的。单片机在周期性扫描行、列的同时,读回扫描信号线结果,判断是否有键按下,并计算按键的位置以获得扫描码。当有键按下时,键盘分两次将位置扫描码发送到键盘接口;按下一次,叫接通扫描码;释放时再发一次,叫断开扫描码。因此可以用硬件或软件的方法对键盘的行、列分别进行扫视,去查找按下的键,输出扫描位置码,通过查表转换为ASCII码返回。

现在常用的薄膜接触式键盘就是非编码键盘,它任何一个按键都有上下两层薄膜的触点,在任何一层薄膜上的导线数都少于按键数,每一条导线都同时连通多个按键的触点,上层和下层的任何两条导线都最多只在一个按键上重合。也就

是说,上层的1号导线可能会同时经过1、2、3、4、5……等按键,而下层的1号导线可能同时经过1、Q、A、Z……等按键,且两条导线只在1键上重合。

根据上层薄膜和下层薄膜所经过的按键,就可以排出一个类似下面的表格:薄膜接触式键盘的接口控制电路中,就存储着这样一张表格,当按下某个按键,例如“Q”时,那么在这一点上,上下两个触点就会连通,反映到接口电路中,就会检测到上层导线1与下层导线2被连通了。相对应在表中一查,就会知道,被按下的是字母“Q”,然后通过接口输出其ASCII码。

二、键盘设备发送数据到主机的过程

数据和时钟线都是集电极开路的。在+5V 和每根线之间连接着一个电阻,所以总线的空闲状态是高电平。当键盘或者鼠标想发送数据时,它首先必须检查时钟线,确认它处于高电平。如果不是,主机禁止通信,设备必须缓冲任何要发送

的数据,直到主机释放时钟。在设备开始传输数据之前,时钟线必须持续为高电平的时间必须至50ms。当时钟为高电平时,键盘/鼠标写一个bit到数据线上;当时钟为低电平时,主机从数据线上读取这个bit 。当时钟位高时,数据线改变状态;当时钟位低时,数据线上的数据是有效的。时钟频率是10-16.7KHz。从时钟脉冲的上升沿到数据跳变的时间必须至少5ms。从数据跳变到时钟脉冲的

下降沿必须至5ms,且不超过25ms。主机可在任何时间禁止通信,只需要将时钟线下拉位低电平超过100ms即可。如果在第11个脉冲时禁止传输,设备必须中止当前的传输,准备重新传输当前的数据"chunk(块)"当主机释放时钟时。一个数据块可能是通码,断码,设备ID,鼠标移动包等等。举个例子,如果当发送一个两字节断码的第2个字节时,键盘被中断,它将需要重新发送此断码的两个字节,而不仅仅时被中断掉的那个字节。如果在第一个高->低时钟跳变时,(或者在最后一个时钟脉冲的下降沿之后)主机将时钟拉低,键盘/鼠标不必重新传输任何数据。但是,如果新产生的数据需要传输,它必须将数据缓冲,知道主机释放时钟。键盘有一个16字节的缓冲区。如果有超过16个字节的击键存在,更多的击键将被忽略,直到缓冲区有空地。鼠标只能缓冲最近的一个要传输的(移

动)数据包。

辅助设备(指键盘) 检查时钟线,如果时低电平,禁止发送数据。设备检查数据线,如果是低电平,那么控制器从系统接收数据。

设备在传输过程中检查时钟线间隔不超过100us。如果设备发现主机系统将电平拉低,就终止传输。在传输过程的前10个时钟周期的任何时候,主机系统可以中止传输。终止传输的最后一个检查要持续至少5us。系统拉低时钟线,将禁止下一次传输。系统如果有一个字节要传输给设备,可以拉低数据线。当开始位(总是0)放置到数据线时,数据线被拉低。系统拉高时钟将允许下一次传输。首先,PS/2设备总是产生时钟信号。如果主机想发送数据,它必须先将时钟线和数据线设置成"Request-to-send"状态:1)拉低时钟线至少100us来禁止

通信;2)拉低数据线,请求 "Request-to-send", 然后释放时钟。设备应该在不超过10ms的间隔内就要检查一次这个状态。当设备检测到这个状态,它将开始产生时钟信号,只有当时钟线为低的时候,主机才可以改变数据线(也就是将数据写入到数据线)。数据将在时钟为高电平的时候被设备读取。在收到停止位之后,设备将通过拉低数据线,生成最后一个时钟脉冲来应答收到的字节。在第11个时钟脉冲之后,如果主机并没有释放数据线,设备将继续产生时钟脉冲,直到数据线被释放(然后设备将产生一个错误)。在第11个脉冲之前(回应位),主机可以随时中止传输,只要拉低时钟持续100us即可。

三、输入字符显示过程

键盘被按下后,产生了硬件中断信号。键盘发送脉冲给主机,主机里面运行的操作系统会接收到,这一步是操作系统发现信号有变化。计算机高级中断控制器(IOAPIC)选择CPU处理核心以及软件中断编号,并发送给中断描述符表(IDT)处理,即操作系统接收后根据信号分析按了什么键,这个是操作系统内部有信号和按键对应的映射。计算机根据IDT选择中断处理函数。处理函数处理并通知端口驱动获取按键的信息。端口驱动将数据封装,以IRP(I/O request package)形式传递给上层处理程序。等待输入的进程获得数据,处理并交给目标进程。最后目标进程显示输入。

C语言程序设计中键盘输入数据的方法分析

Computer Science and Application 计算机科学与应用, 2019, 9(2), 323-327 Published Online February 2019 in Hans. https://www.doczj.com/doc/6b10106619.html,/journal/csa https://https://www.doczj.com/doc/6b10106619.html,/10.12677/csa.2019.92037 Method Analysis of Keyboard Input Data in C Language Programming Kui Gao, Xiaocui Fu, Weiyan Li Information Science and Engineering, Shandong Agricultural University, Tai’an Shandong Received: Jan. 28th, 2019; accepted: Feb. 6th, 2019; published: Feb. 13th, 2019 Abstract In C language programming, it is often necessary to input the required data from the keyboard, which can be achieved by different input functions. In this paper, some examples and analysis are given for the use of these input functions; through comparison, usage and considerations of each function have been analyzed, to achieve the purpose of correct use. Keywords Scanf, Getchar, Gets, Separator, Keyboard C语言程序设计中键盘输入数据的方法分析 高葵,付晓翠,李蔚妍 山东农业大学信息科学与工程学院,山东泰安 收稿日期:2019年1月28日;录用日期:2019年2月6日;发布日期:2019年2月13日 摘要 在C语言程序设计中经常需要从键盘输入所需要的数据,可以通过不同的输入函数来实现。本文对这几个输入函数的使用举例并进行分析说明,通过比较,分析出每种函数的使用方法和注意事项,达到正确使用的目的。 关键词 Scanf,Getchar,Gets,分隔符,键盘

LED显示屏控制软件操纵使用说明(灵信V3.3)

第一章概述 1.1 功能特点 《LED Player V3.3》是本公司新推出的一套专为LED显示屏设计的功能强大,使用方便,简单易学的节目制作、播放软件,支持多种文件格式:文本文件,WORD文件,图片文件(BMP/JPG/GIF/JPEG...),动画文件(SWF /Gif)。 2.2 运行环境 操作系统 中英文Windows/7/NT/XP 硬件配置 CPU: 奔腾600MHz以上 内存:128M 相关软件 OFFICE2000--如需WORD文件必须安装

第二章安装与卸载 2.1 安装 《LED Player》软件安装很简单,操作如下:将LED Player播放软件的安装光盘插入电脑光驱,即可显示LED Player播放软件的安装文件,双击LED Player,即可实现轻松安装。 《LED Player》软件安装成功后,在【开始】/【程序】里将出现“LED软件”程序组,然后进入该程序组下的“LED Player”,单击即可运行,如图所示, opyright ? 2005-2007 Listen tech. All Rights Reserved 灵感设计诚信 同时,桌面上也出现“LED Player”快捷方式:如右图所示,双击它同样可以启动程序。

2.2 卸载 《LED Player》软件提供了自动卸载功能,使您可以方便地删除《LED Player》的所有文件、程序组和快捷方式,用户可以在“LED软件”组中选择“卸载LED Player”,也可在【控制面板】中选择【添加/删除程序】快速卸载. 第三章使用详解 3.1 节目组成 每块显示屏由一个或多个节目页组成。节目页是用来显示用户所要播放的文本、图片、动画等内容。区域窗口有十一种:图文窗、文本窗、单行文本窗、静止文本窗、时间窗、正计时窗、倒计时窗、模拟时钟窗、表格窗、动画窗、温度窗。 文件窗:可以播放各种文字、图片、动画、表格等几十种文件。 文本窗:用于快速输入简短文字,例如通知等文字。 单行文本窗:用于播放单行文本,例如通知、广告等文字。 静止文本窗:用于播放静止文本,例如公司名称、标题等文字。 时间窗:用于显示数字时间。 计时窗:用于计时,支持正/倒计时显示。

51单片机数码管显示矩阵键盘键入值

51单片机实现数码管显示矩阵键盘键入值 #include #define uchar unsigned char uchar code decode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; void delay(uchar); uchar temp,b,c,d,num; void display(uchar); void main() { while(1) { P0=0xfe; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp)

case 0xe0:num=0;break; case 0xd0:num=1;break; case 0xb0:num=2;break; case 0x70:num=3;break; } } } P0=0xfd; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp) { case 0xe0:num=4;break; case 0xd0:num=5;break; case 0xb0:num=6;break; case 0x70:num=7;break;

} } P0=0xfb; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp) { case 0xe0:num=8;break; case 0xd0:num=9;break; case 0xb0:num=10;break; case 0x70:num=11;break; } } } P0=0xf7; temp=P0;

通过键盘输入一组数字

一、通过键盘输入一组数字,并用单链表形式存储,输入完成后分别按顺序和逆序输出所输 入的数字。(作者:缪海涛) 解: #include #include #include typedef struct node { int c; struct node *link; }Node; Node *head; Node *first() { Node *h2; h2=(Node *)malloc(sizeof(Node)); h2->c='\0'; h2->link=NULL; return h2; } Node *create(Node *h2) { Node *p,*h,*s,*r; int x; char y; h=(Node *)malloc(sizeof(Node)); h->link=NULL; p=h; printf("请输入一组数字,以空格间隔:\n"); scanf("%d",&x); for(;;) { if(y!='\n') { s=(Node *)malloc(sizeof(Node)); p->link=s; s->c=x; s->link=NULL; p=s; r=(Node *)malloc(sizeof(Node)); r->c=x; r->link=h2->link; h2->link=r; scanf("%d",&x);

scanf("%c",&y); } else { s=(Node *)malloc(sizeof(Node)); p->link=s; s->c=x; s->link=NULL; p=s; r=(Node *)malloc(sizeof(Node)); r->c=x; r->link=h2->link; h2->link=r; break; } } return h; } void main() { Node *h=NULL,*h2; h2=first(); head=create(h2); h=head; printf("您输入的数字组正序为:\n"); while(h->link!=NULL) { printf("%d",h->link->c); h=h->link; if(h->link!=NULL) { printf("->"); } } printf("\n\n"); printf("您输入数字组的倒序为:\n"); while(h2->link!=NULL) { printf("%d",h2->link->c); h2=h2->link; if(h2->link!=NULL) { printf("->"); }

从键盘输入一串字符,分别统计其中的字母(不区分大小写)、数字字符和其他

; 题目名称:分类统计字符 ; 题目来源:https://www.doczj.com/doc/6b10106619.html,/question/131013276.html ; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。 Code Segment Assume CS:Code,DS:Code ; -------------------------------------; 功能:显示指定地址(Str_Addr)的字符串 ; 入口: ; Str_Addr=字符串地址(要求在数据段) ; 用法: Output Str_Addr ; 用法举例:Output PromptStr Output MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM ; -------------------------------------; 功能:在当前光标位置显示一个字符 ; 入口:dl=要显示的字符 Output_Chr proc Near push ax mov ah,02h int 21h pop ax ret Output_Chr Endp ; -------------------------------------; 功能:显示、输出一个回车、换行 Output_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax ret Output_CTLF Endp ; -------------------------------------; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示

关于汇编实验 屏幕窗口程序

实验五 屏幕窗口程序 一、 实验的目的与要求 (一)实验目的:掌握显示器IO 程序设计的方法,掌握宏的相关概念,以及运用方法。 (二)实验要求:在屏幕上开出三个窗口,它们的行列坐标如下页图所示,光标首先定位在右窗口最下面一行的行首(15, 50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗口的内容。当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动后消失。编写屏幕窗口程序时,要求将一些功能程序段定义成宏指令,如向上卷动、清屏、 接受字符并判断、在屏幕上显示字符、光标定位。 二、实验正文 实验分析:实验思路比较简单,主要是运用BIOS 调用,这些查表可得,实验要求要用宏来定义一些基本功能,宏调用比较简单,把一些基本功能编写成宏,能高效率的执行程序,但是宏也存在着一些缺点,在宏调用时,要宏展开,这样会占用一定的空间,所以宏是一种以空间换时间的策略,像一些复杂的操作不宜编写成宏。BIOS 10号调用提供了大量的屏幕、光标显示格式,要注意参数的意义,以便正确的显示结果。 三、流程图如下: (5,10) (15,30) (5,50) (15,70) (18,15) (22,65)

四、实验结果 附录:程序源代码如下: ;**************************************************************** datas segment cury db 15 ;光标初始位置 curx db 50

键盘输入显示程序

#include #define uchar unsigned char #define uint unsigned int uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00};//0-f-最后一个空uchar j=1; sbit p37=P3^7; void delay(uint z) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(ucharshu) { P1=table[shu]; delay(5); } ucharkeyscan() {

uchartemp,num; P2=0xfe; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { p37=0; delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xee:num=1;break; case 0xde:num=2;break; case 0xbe:num=3;break; default:break; } while(temp!=0xf0)//**********松手检测松手后显示{ j=0;

temp=P2; temp=temp&0xf0; } } }p37=1; P2=0xfd; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { p37=0; delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xed:num=4;break; case 0xdd:num=5;break; case 0xbd:num=6;break; }

键盘输入原理

基础知识 1. 键盘的基本原理 键盘是一组按键的组合,它是最常用的输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机对话。 键盘是一种常开型的开关,通常键的两个触点处于断开状态,按下键时它们才闭合。键盘的识别有两种方案:一是采用现有的一些芯片实现键盘扫描;再就是用软件实现键盘扫描。目前有很多芯片可以用来实现键盘扫描,如有Intel8279、CH451、ICM7218、PCF8574等。但是键盘扫描的软件实现方法有助于缩减系统的重复开发成本,且只需要很少的CPU 开销。嵌入式控制器的功能很强,可以充分利用这一资源,这里就介绍一下用软件实现键盘扫描的方案。 键盘从结构上分为独立式键盘与矩阵式键盘。一般按键较少时采用独立式键盘,按键较多时采用矩阵式键盘。 (1)独立式键盘。在由单片机组成的测控系统及智能化仪器中,用的最多的是独立式键盘。这种键盘具有硬件与软件相对简单的 特点,其缺点是按键数量较多时,要占用大量口线。当按键没 按下时,CPU对应的I/O接口由于内部有上拉电阻,其输入为

高电平;当某键被按下后,对应的I/O接口变为低电平。只要 在程序中判断I/O接口的状态,即可知道哪个键处于闭合状态。 (2) 矩阵式键盘。矩阵式键盘使用于按键数量较多的场合,它由行线与列线组成,按键位于行、列的交叉点上。一个3*3的行列结构可以构成一个有9个按键的键盘。同理,一个4*4的行列可以构成一个16按键的键盘。很明显,在按键数量较多的场合,与独立式键盘相比,矩阵式键盘要节省很多I/0接口。

2、键盘按键识别方法 (1)扫描法。扫描法有行扫描和列扫描两种,无论采用哪种,其效果是一样的,只是在程序中的处理方法有所区别。下面以行扫描法为例来介绍扫描法识别按键的方法。先向键盘4根行线输出其中某一行为低电平,其它行为高电平,然后读取列值,若某一列值为低电平,则表明同时为低电平的行和列的交叉处按键被按下,如果没有某列为低电平,则继续扫描下一行。因为输入低电平的行是从第一行开始逐行遍历的,故称为行扫描法。行与列是相对的,可以将行按列对待,同时将列按行对待,所实现的扫描法效果是一样的。

运行窗口打开程序

开始菜单中的“运行”是通向程序的快捷途径,输入特定的命令后,即可快速的打开Windows的大部分程序,熟练的运用它,将给我们的操作带来诸多便捷。winver 检查Windows版本 wmimgmt.msc 打开Windows管理体系结构(wmi) wupdmgr Windows更新程序 wscript Windows脚本宿主设置 write 写字板 winmsd 系统信息 wiaacmgr 扫描仪和照相机向导 winchat xp自带局域网聊天 mem.exe 显示内存使用情况 msconfig.exe 系统配置实用程序 mplayer2 简易widnows media player mspaint 画图板 mstsc 远程桌面连接 mplayer2 媒体播放机 magnify 放大镜实用程序 mmc 打开控制台 mobsync 同步命令 dxdiag 检查directx信息 drwtsn32 系统医生 devmgmt.msc 设备管理器 dfrg.msc 磁盘碎片整理程序 diskmgmt.msc 磁盘管理实用程序 dcomcnfg 打开系统组件服务 ddeshare 打开dde共享设置 dvdplay dvd播放器 net stop messenger 停止信使服务 net start messenger 开始信使服务 notepad 打开记事本 nslookup 网络管理的工具向导 ntbackup 系统备份和还原 narrator 屏幕“讲述人” ntmsmgr.msc 移动存储管理器

ntmsoprq.msc 移动存储管理员操作请求 netstat -an (tc)命令检查接口 syncapp 创建一个公文包 sysedit 系统配置编辑器 sigverif 文件签名验证程序 sndrec32 录音机 shrpubw 创建共享文件夹 secpol.msc 本地安全策略 syskey 系统加密,一旦加密就不能解开,保护Windows xp系统的双重密码services.msc 本地服务设置 sndvol32 音量控制程序 sfc.exe 系统文件检查器 sfc /scannow windows文件保护tsshutdn 60秒倒计时关机命令 tourstart xp简介(安装完成后出现的漫游xp程序) taskmgr 任务管理器 eventvwr 事件查看器 eudcedit 造字程序 explorer 打开资源管理器 packager 对象包装程序 perfmon.msc 计算机性能监测程序 progman 程序管理器 regedit.exe 注册表 rsop.msc 组策略结果集 regedt32 注册表编辑器 rononce -p 15秒关机 regsvr32 /u *.dll 停止dll文件运行 regsvr32 /u zipfldr.dll 取消zip支持 cmd.exe cmd命令提示符 chkdsk.exe chkdsk磁盘检查 certmgr.msc 证书管理实用程序 calc 启动计算器 charmap 启动字符映射表 cliconfg sql server 客户端网络实用程序 clipbrd 剪贴板查看器

从键盘输入数据并显示实验

实验四从键盘输入数据并显示实验 【实验目的】 1.掌握键盘输入字符的方法和十六进制数字字符的ASCII码转换为二进制数的原理。 2.掌握子程序定义和调用的方法。 3.掌握循环移位指令的用法和无符号数比较大小的方法。 【实验性质】 验证性实验(学时数:2H) 【实验内容】 从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。要求输入的数字字符串以回车键结束。如果输入的数字超过4个,则以最后输入的4个为准。若按下的键不是十六进制数字字符,则显示出错信息。 参考程序: 【实验提示】 从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要找出ASCII码与该数字对应的二进制数之间的关系。关系如下: 十六进制数字字符字符对应的ASCII码数字对应的二进制数 0 ~930H ~39H ASCII码- 30H A ~F41H ~46H ASCII码- 37H a ~f61H ~66H ASCII码- 57H 【报告要求】 1.给出该问题的程序设计流程图。 2.给出该程序的全部代码,并加上注释。 3.总结实验体会。 CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT

MARK DB MESS DB '输入四位十六进制数,按回车键转化为二进制数,空格键结束!',0DH,0AH,'输入:$' ERROR DB 0DH,0AH, '输入错误!',0DH,0AH,'$' DATA ENDS STACK SEGMENT STA DW 32 DUP() TOP DW STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOP HEAD: CRLF MOV MARK,0 MOV AH,09H LEA DX,MESS INT 21H ;显示提示输入的信息 CALL GETNUM ;接收键入数值送DX CMP MARK,01H JE HEAD MOV CX,0010H ;16位 MOV BX,DX TTT: ROL BX,1 ;循环左移1位 MOV DL,BL AND DL,01H ;屏蔽掉高7位 ADD DL,30H MOV AH,02H INT 21H ;显示二进制位对应的ASCII字符 LOOP TTT JMP HEAD FINI: MOV AX,4C00H INT 21H ;返回DOS GETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CX XOR DX,DX GGG: MOV AH,01H INT 21H CMP AL,0DH ;输入为回车,则进行转换 JE PPP CMP AL,20H ;输入为空格,则退回DOS JE FINI CMP AL,30H JB KKK SUB AL,30H

键盘输入

4.2 键盘 4.2.1键盘概念 键盘是最常用也是最主要的输入设备,通过键盘,可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。 4.2.2键盘的分类 按照键盘的工作原理和按键方式的不同,可以划分为四种: (1)机械式键盘(Mechanical) 采用类似金属接触式开关,工作原理是使触点导通或断开,具有工艺简单、噪音大、易维护的特点。 (2)塑料薄膜式键盘(Membrane)键盘内部共分四层,实现了无机械磨损。其特点是低价格、低噪音和低成本,已占领市场绝大部分份额。 (3)导电橡胶式键盘(Conductive Rubber)触点的结构是通过导电橡胶相连。键盘内部有一层凸起带电的导电橡胶,每个按键都对应一个凸起,按下时把下面的触点接通。这种类型键盘是市场由机械键盘向薄膜键盘的过渡产品。(4)无接点静电电容式键盘(Capacitives)使用类似电容式开关的原理,通过按键时改变电极间的距离引起电容容量改变从而驱动编码器。特点是无磨损且密封性较好。 按其结构形式可分为以下两种: (1)编码键盘 编码键盘采用硬件方法产生键码。每按下一个键,键盘能自动生成键盘代码,键数较多,且具有去抖动功能。这种键盘使用方便,但硬件较复杂,PC机所用键盘即为编码键盘。 (2)非编码键盘 非编码键盘仅提供按键开关工作状态,其键码由软件确定,这种键盘键数较少,硬件简单,广泛应用于各种单片机应用系统,本次设计使用非编码键盘。 按照键盘与单片机的连接方式可分为一下两种: (1)独立式键盘 独立式键盘,顾名思义,即各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他按键的工作状态。这种按键软件程序简单,但占用I/O口线较多(一根口线只能接一个键),适用于键盘应用数量较少的系统中。 (2)矩阵式键盘 矩阵式键盘又称行列式键盘,在其行、列交汇点接有若干个按键。当需要较多按键时,与独立式键盘相比,单片机口线资源利用率大幅提高了。但若需要更多的键盘,需采用接口扩展技术,如8155等。 综上所述,结合实际情况,本次设计选用非编码矩阵式键盘。 4.2.3非编码矩阵式键盘工作原理 非编码矩阵式键盘,作为单片外围电路,应具有如下功能:

如何控制其他程序窗体上的窗口控件

如何控制其他程序窗体上的窗口控件 回调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows 操作系统,比如其他的程序等等之类的。但是什么时候被调用却不知道了。回调函数一般是按照调用者的要求定义好参数和返回值的类型,你向调用者提供你的回调函数的入口地址,然后调用者有什么事件发生的时候就可以随时按照你提供的地址调用这个函数通知你,并按照预先规定好的形式传递参数。所以很多人打比方,说回调函数还真有点像您随身带的BP 机:告诉别人号码,在它有事情时Call您! 所以一个回调函数写出来之后,一定有个注册的动作,就是告诉调用者,你怎么样找到我写的函数。某些Windows API 函数会要求以回调函数地址作为其参数之一,例如SetTimer 、LineDDA 、EnumObjects,以及我们下面要用到的EnumWindows。 在Delphi里声明一个回调函数的格式很简单,例如: function EnumWindowsProc(AhWnd:LongInt;lParam:LongInt):boolean;stdcall; 首先是函数名称可以随便乱取,但函数参数的类型一般不得乱来,其顺序,数据类型等都有规定的,因为这些都是让其他程序调用的,他们已经规定好了的,但参数名称可以随便乱叫。注意后面一定要带上“stdcall”, stdcall是标准调用,也就是说采用标准windows参数传递方式来调用函数。 编写函数体就很简单了,利用传递过来的参数就可以了,只要记住,这些参数是别人送给你的,你只要知道这些参数代表了什么意思。 再看个向调用者注册回调函数入口地址的函数。 function EnumWindows(lpEnumFunc: TFNWndEnumProc; lParam: LPARAM): BOOL; stdcall; TFNWndEnumProc其实就是指针类型。其中的lpEnumFunc就是回调函数的入口地址了。 下面是调用EnumWindows的格式: EnumWindows(@EnumWindowsProc,0); 通过向系统注册回调函数的入口地址,系统就能在需要的时候,调用回调函数,传递参数给它,也许这些参数就是我们想要的。 EnumWindows函数的功能是:枚举屏幕上所有程序中的顶层窗口,将窗口句柄以参数的形式传递给回调函数。找到一个窗口,就调用一次回调函数。枚举结束的条件是:要么枚举完所有的窗口,要么回调函数返回False。 lParam: LPARAM参数是程序定义的值,这个值被传递到回调函数。 回过头来再看一下EnumWindowsProc: function EnumWindowsProc(AhWnd:LongInt;lParam:LongInt):boolean;stdcall; 当系统找到了一个窗口后,就开始调用这个回调函数,将窗口的句柄作为第一个参数传递过来,将在EnumWindows中lParam: LPARAM这个程序定义的值作为第二个参数传递过来。 所以我们可以在EnumWindowsProc函数中利用传递过来的两个参数来做某些处理了。 下面我们新建一个程序列举系统中所有程序的顶层窗口,我们要得到窗口的标题,要得到窗口类名称。 得到窗口标题用: function GetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: Integer): Integer; stdcall; 该函数功能是将窗口句柄为hWnd的窗口的标题拷入到一个缓冲区lpString。nMaxCount

通过scanf函数从键盘输入数据

通过scanf函数从键盘输入数据 1)当调用scanf函数从键盘输入数据时,最后一定要按下回车键,scanf函数才能接受键盘输入的数据。 2)输入数据值 当键盘输入数据时,输入的数值数据之间用间隔符隔开。列<间隔符>10<间隔符>20 <间隔符> 此处间隔符可以是空格符、制表符(Tab)、回车符。 3)跳过输入数据的方法 可以在格式字符和%之间加上一个*,它的作用是跳过对应的输入数据。列 Int a1,a2, a3; Scanf("%d%d*%d%d%d",&a1,&a2,&a3); 当输入如下数据时:10 20 30 40 将把10赋给a1,跳过20,把30赋给a2,把10赋给a3 4)在格式字符串中插入其他字符 如果想在屏幕上输入字符串来提示,应该使用printf函数,如果在scanf的格式控制字符串中插入其他字符,则在输入时要求按一对一的位置原样输入这些字符 列1 Int a1,a2,a3; Scanf(“inpat a1,a2,a3:%d%d%d”,&a1,&a2,&a3); 要求按以下形式进行输入 Input a1,a2,a3:102030 列1 以下程序由终端出入两个整数给变量x和y,在交换x和y的值后,在输出x和y,验证两个变量中的数是否正确的进行了交换。 #inclube "stdio.h" Main() {int x,y,t; Printf("enter x&y:\n"); Scanf("%d %d",&x,&y); Printf9("x=%d y=%d\n",x,y); T=x;x=y;y=t; Printf("x=%d y=%d\n",x,y); } 列2 输入一个doulbe类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入后处理,然后输出此数,以便验证处理是否正确。

键盘使用说明书完整版

一、键盘简介键盘是计算机使用者向计算机输入数据或命令的最基本的设备。常用的键盘上有101个键或103个键,分别排列在四个主要部分:打字键区、功能键区、编辑键区、小键盘区。 现将键盘的分区以及一些常用键的操作说明如下: (一)打字键区 它是键盘的主要组成部分,它的键位排列与标准英文打字机的键位排列一样。该键区包括了数字键、字母键、常用运算符以及标点符号键,除此之外还有几个必要的控制键。 下面对几个特殊的键及用法作简单介绍。 键的名称 主要功能说明 空格键 键盘上最长的条形键。每按一次该键,将在当前光标的位置上空出一个字符的位置。 [Enter↙] 回车键 (1)每按一次该键,将换到下一行的行首输入。就是说,按下该键后,表示输入的当前行结束,以后的输入将另起一行。 (2)或在输入完命令后,按下该键,则表示确认命令并执行。[CapsLock]大写字母锁定键 在打字键区右边。该键是一个开关键,用来转换字母大小写状态。每按一次该键,键盘右上角标有CapsLock的指示灯会由不亮变成发亮,或由发亮变成不亮。这时: (1)如果CapsLock指示灯发亮,则

键盘处于大写字母锁定状态:1)这时直接按下字母键,则输入为大写字母;2)如果按住[Shif]键的同时,再按字母键,输入的反而是小写字母。 (2)如果这时CapsLock指示灯不亮,则大写字母锁定状态被取消。 [Shift]换档键 换档键在打字键区共有两个,它们分别在主键盘区(从上往下数,下同)第四排左右两边对称的位置上。 (1)对于符号键(键面上标有两个符号的键,例如:等,这些键也称为上下档键或双字符键)来说,直接按下这些键时,所输入的是该键键面下半部所标的那个符号(称为下档键); 如果按住[Shift]键同时再按下双字符键,则输入为键面上半部所标的那个符号(称为上档键)。如: [Shift] +=% (2)对于字母键而言:当键盘右上角标有CapsLock的指示灯不亮时,按住[Shift]键的同时再按字母键,输入的是大写字母。例如:CapsLock指示灯不亮时,按[Shift] +S键会显示大写字母S [←BackSpace]退格删除键 在打字键区的右上角。每按一次该键,将删除当前光标位置的前一个字符。 [Ctrl]控制键 在打字键区第五行,左右两边各一个。该键必须和其它键配合才能实现各种功能,这些功能是在操作系统或其他应用软件中进行设定的。例如:

用单片机实现PC键盘输入

用单片机实现PC键盘输入.txt跌倒了,爬起来再哭~~~低调!才是最牛B的炫耀!!不吃饱哪有力气减肥啊?真不好意思,让您贱笑了。我能抵抗一切,除了诱惑……老子不但有车,还是自行的……串行口和键盘口通讯接口的单片机实现 摘要:在某些特殊控制场合,需要通过主控机的串行口和受控机的PS/2键盘口,实现主控机对受控机的模拟键盘输入。本文介绍了串行口和键盘口的通讯接口的软、硬件设计方法。 关键词:串行口 PS/2键盘口通讯单片机 键盘作为微机的基本输入设备,是微机不可缺的一部分。但在某些特殊的场合,我们要对受控机进行程序设计的特殊输入控制,则需要一接口实现串行口和PS/2键盘口通讯,这样在主控机上通过对串行口的编程就能实现对受控机的模拟键盘输入。笔者开发的该接口以MCS-51单片机为核心,原理图如图1所示,利用MCS-51的全双工异步串行I/O口实现与主控机的异步串行通讯,而和受控机PS/2键盘口的同步串行通讯则通过双向数据I/O口控制同步时钟和数据位。 .1.和主控机的异步串行通讯 异步通讯按帧传送数据,它利用每一帧的起、止信号来建立发送与接受之间的同步,每帧内部各位均采用固定的时间间隔,但帧与帧之间的时间间隔是随机的。其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个发送和接收的。 1.1硬件接口设计 与主控机的异步串行通讯基于RS-232总线标准。为了使接口具有更好的兼容性和工作稳定性,我们用MAX232E作为数据传送器。MAX232E是专为RS-232通讯而设计,低功耗,外接电容小,抗干扰能力强,管脚有ESD保护并且能支持到120k波特率的数据传输,能很好地解决PC机和单片机电平不匹配问题。同时它增强了数据驱动能力,能支持12米的串行线。 1.2软件接口设计 异步通讯必须在字符格式中设置起始位和结束位,以使收发双方取得同步。其数据格式为1位起始位+8位数据位+奇偶校验位+1位或2位的停止位。其中起始位为低电平,数据位传送时先低后高,停止位为高电平。笔者在电路板上设计了异步串行通讯跳线,可设置通讯的波特率、奇偶校验位和停止位,在单片机软件的开始读取跳线设置值而后初始化串行口,从而支持多种通讯数据格式。 PC机启动时将向串行口发送两个字节的00H以检测串行口,同时防止主控机上的串行口其他的干扰信息,通讯时笔者设计的报文以A0H,CDH作为联络信息开头,第三字节为数据长度,之后为我们要传送的数据,这样有效地过滤掉干扰信息。单片机按串行口中断方式接收主控机的数据,收到有效格式的数据后,解析报文,提取出真实的数据,传送给受控机的PS/2口。

在java中如何用键盘输入一个数

在java中如何用键盘输入一个数 一、java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象。常用的类有BufferedReader,Scanner。 实例程序: 一,利用Scanner 实现从键盘读入integer或float 型数据 import java.util.*; //import java.io.*; class Abc { public static void main(String args[]) { Scanner in=new Scanner(System.in); //使用Scanner类定义对象 System.out.println("please input a float number"); float a=in.nextFloat(); //接收float型数据 System.out.println(a); System.out.println("please input a integer number"); int b=in.nextInt(); //接收整形数据 System.out.println(b); } } 二,利用BufferedReader实现从键盘读入字符串并写进文件abc.txt中 import java.io.*; public class Test1 { public static void main(String[] args) throws IOException { BufferedReaderbuf = new BufferedReader (new InputStreamReader(System.in)); BufferedWriter buff = new BufferedWriter(new FileWriter("abc.txt")); String str = buf.readLine(); while(!str.equals("exit")) { buff.write(str); buff.newLine(); str = buf.readLine(); } buf.close(); buff.close(); } } 关于JDK1.5 Scanner类的说明 Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象. Scanner reader=new Scanner(System.in);

LED显示屏-软件操作说明(精)

第一章前言 感谢您选择使用我公司研制生产的显示屏控制系统, 我们竭诚为广大用户服务。 为了使本系统屏能完美地为您服务, 请您在使用前仔细查阅本说明书, 以便于正确操作,并请您在使用后妥善保存它。 我公司开发研制的 LED 显示屏控制系统, 支持单色或双色 LED 显示屏。本系统具有如下功能: 1、系统支持 TXT 、 BMP 等文件, 可显示 16×16至 72×72点阵的宋、隶、草、行、楷等汉字,及英文、数字、符号等,也可显示简单的平面图画。 2、本系统具备脱机运行功能,即在显示内容编辑制作完成并发送至显示屏之后,即可关闭控制机。下次打开显示屏前,如果显示内容不更改,可不打开控制机,直接打开屏体电源即可。 3、有三十九种显示方式。 立即显示:信息整体立即出现于显示屏。 从右向左移入← :信息整体从右向左逐列移动进入显示屏。 从左向右移入→:信息整体从左向右逐列移动进入显示屏。 从下向上卷入↑:信息从下向上逐行进入显示屏。 从上向下卷入↓:信息从上向下逐行进入显示屏。 从左向右展开→:信息从左向右逐列显示于显示屏。 从右向左展开←:信息从右向左逐列显示于显示屏。 从下向上展开↑:信息从下向上逐行显示于显示屏。

从上向下展开↓:信息从上向下逐行显示于显示屏。 等等 4、显示内容停留时间可在 0-255秒之间任意调节。 5、可自动循环显示用户所要显示的不同内容。 第二章软件运行环境 ◆操作系统 中英文 Windows98/me/2000/NT/XP ◆硬件配置 CPU: 奔腾 300MHz 以上 内存 :64M 串口 :有一空闲的串口 相关软件 OFFICE 办公软件 --如需播放 WORD 、 EXCEL 文件必须安装 第三章安装与卸载 本软件是绿色软件,只需将 Project.exe 文件夹拷贝到硬盘就可以运行, 运行前将文件只读属性去掉 第四章 Project 使用说明 操作界面如下图所示:

键盘及LED显示实验

实验三键盘及LED显示实验 一、实验内容 利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED 显示器显示出来。 二、实验目的及要求 (一)实验目的 通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。 (二)实验要求 1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。 2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。 三、实验条件及要求 计算机,C51语言编辑、调试仿真软件及实验箱50台套。 四、实验相关知识点 1.C51编程、调试。 2.扩展8255芯片的原理及应用。 3.键盘扫描原理及应用。 4.LED显示器原理及应用。 5.外部中断的应用。 五、实验说明 本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要按地址输出相应的数据,就可以显示所需数码。 六、实验原理图

P1口桥接。 八、实验参考流程图 1.主程序流程图

2.外中断服务程序流程图 外部中断0 外部中断1 定时器0中断程序,用于消抖动:

3.LED显示程序流程图 九、C51语言参考源程序 #include "reg52.h" unsigned char KeyResult; //存放键值 unsigned char buffer[8]; //显示缓冲区 bit bKey; //是否有键按下 xdata unsigned char P_8255 _at_ 0xf003; //8255的控制口 xdata unsigned char PA_8255 _at_ 0xf000; //8255的PA口 xdata unsigned char PB_8255 _at_ 0xf001; //8255的PB口 xdata unsigned char PC_8255 _at_ 0xf002; //8255的PC口 code unsigned char SEG_TAB[] = { //段码 0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0}; sbit bLine0 = P3^2; sbit bLine1 = P3^3; //延时1ms void Delay1ms() { unsigned char i;

相关主题
文本预览
相关文档 最新文档