任务十 键盘 (2)课件_第1页
任务十 键盘 (2)课件_第2页
任务十 键盘 (2)课件_第3页
任务十 键盘 (2)课件_第4页
任务十 键盘 (2)课件_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务十键盘接口扩展任务分析:实现键盘接口扩展硬件独立式键盘的结构和原理矩阵式键盘的结构和原理

软件键盘驱动编译、下载、调试按键及键盘键盘:由若干个按键组成的开关矩阵,是实现人机对话或人机通信的常用工具。根据按键的识别方式分:编码键盘

键的识别由专用的硬件译码器实现,并产生键编号或键值,如BCD码键盘、ASCII码键盘,非编码键盘只提供按键开关的行列矩阵,按键的识别、键码的确定以及去抖动等功能由软件完成按键开关:机械弹性开关,机械开关在闭合及断开瞬间均伴随有一连串的抖动

,时间一般为

5~10ms。键盘扫描控制方式

程序控制方式:键盘处理程序固定在主程序的某个程序段。特点:对CPU工作影响小应考虑键盘处理程序运行间隔周期不能太长,否则影响对键盘输入响应的及时性。

定时控制扫描方式:利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。特点:采用定时/计数器定时控制扫描间隔。定时时间不能太长,否则影响对键盘输入响应的及时性。

中断控制方式:利用外部中断源,响应键盘输入信号。特点:能及时处理键盘输入,又能提高CPU运行效率要占用一个中断资源。独立式未编码键盘接口

独立式键盘:各按键相互独立地接通一条输入数据线。

图中采用中断响应、软件查询方式:输入线平时为高电平;若有任意键按下时,输入线为低电平。优点:电路、编程简单

缺点:按键较多时,占用较多I/O口线。K0K1K2例、用查询方式编写独立式按键程序#include<reg51.h>unsignedcharkey_value;voidmain(void){while(1){

key_value=P1&0x07; //读P1.0-P1.2的状态 switch(key_value) {

case0x06:…;break; //K0按下

case0x05:…;break; //K1按下

case0x03:…;break; //K2按下

default:;break; }}}按键识别按键的识别:采用扫描法(1)第一步,判断有无键按下?从列线输出口输出全扫描字0000,读入行线输入口的状态。没键按下,行线全为1有键按下,行线必有一根为0若有键按下,进行列扫描,判断是那一列发生,输出列扫描字。列扫描是对要扫描的列送0,其它列送1,依次为0111、1011、1101、1110。每扫描一列读入行线状态,全1则不在该列,有0则必在该列。(2)第二步,判断哪列键按下?(3)逐行检查是哪根行线为0,即可查出是哪个键按下,按键出现在哪行哪列。(4)按键编码每个按键要给一个编号,例如4×4键盘的16个键编号为0~15,对按键进行的编码称为键值。

有许多按键编码方法,如高4位为行号,低4位为列号,合成为一个字节。例如:第2行第0列的键,编码为20H(00100000B)--我们不用。

也可以采用顺序编号的方法,使键值与键号一致,其计算公式:

键值=行首值+列号(5)判断按键释放得到键值后应判断按键是否释放,否则有可能识别为两次按键,引起误操作。如右图4×4键盘:行首值为0、4、8、12

列号为0,1,2,3即:第0行行首值为0第1行行首值为4第2行行首值为8第3行行首值为12例:若第2行第1列发生按键则键值为:8+1=9LAB6000实验箱怎样呢?注意:该图4条行线实际对应D3~D0,图示为D5~D2观察上面电路,LAB6000也是矩阵键盘,4X6结构,行读入地址为KEY_IN(0x001h)列输出地址与LED数码管公用,为OUTBIT(0x002h)

所以仿照上面原理,可以对其进行键盘扫描。#include<reg51.h>#defineLEDLen6unsignedcharxdataOUTBIT_at_0x8002;//显示的位码地址;键盘的列线地址;unsignedcharxdataOUTSEG_at_0x8004;//显示的段码地址;unsignedcharxdataIN_at_0x8001;//键盘读入口unsignedchardis_buf[LEDLen];//显示缓冲unsignedcharconstdis_tab[]={//八段管显示码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voidmDelay(unsignedintDelay){unsignedinti;for(;Delay>0;Delay--){for(i=0;i<114;i++){;}}}voidDisplayLED(){unsignedchardatai;unsignedchardataPos;unsignedchardataLED;Pos=0x20;//从左边开始显示for(i=0;i<LEDLen;i++){OUTBIT=0;//关所有八段管LED=dis_tab[dis_buf[i]];OUTSEG=LED;OUTBIT=Pos;//显示一位八段管mDelay(1);Pos>>=1;//显示下一位}}unsignedcharconstKeyTable[]={//键码定义0x16,0x15,0x14,0xff,0x13,0x12,0x11,0x10,0x0d,0x0c,0x0b,0x0a,0x0e,0x03,0x06,0x09,0x0f,0x02,0x05,0x08,0x00,0x01,0x04,0x07};unsignedcharTestKey(){OUTBIT=0;//输出线置为0return(~IN&0x0f);//读入键状态(高四位不用)}unsignedcharGetKey(){unsignedcharPos;unsignedchardatai;unsignedchardatak;i=6;Pos=0x20;//找出键所在列do{OUTBIT=~Pos;Pos>>=1;k=~IN&0x0f;}while((--i!=0)&&(k==0));//键值=列X4+行if(k!=0){i*=4;if(k&2)i+=1;elseif(k&4)i+=2;elseif(k&8)i+=3;OUTBIT=0;domDelay(1);while(TestKey());//等键释放return(KeyTable[i]);//取出键码}elsereturn(0xff);}voidmain(){charkey_val;

while(1){DisplayLED();if(TestKey()){key_val=GetKey()&0x0f;dis_buf[5]=key_val;dis_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论