《任务十键盘》PPT课件.ppt
任务十任务十 键盘接口扩展键盘接口扩展u 任务分析:实现任务分析:实现键盘接口键盘接口扩展扩展u 硬件硬件独立式独立式键盘键盘的的结构和原理结构和原理矩阵式键盘矩阵式键盘的的结构和原理结构和原理 u 软件软件键盘键盘驱动驱动程序编写程序编写u 编译、下载、调试编译、下载、调试按键及键盘按键及键盘u键盘:由若干个键盘:由若干个按键按键组成的组成的开关矩阵开关矩阵,是实现人机,是实现人机对话或人机通信的常用工具。对话或人机通信的常用工具。u 根据按键的识别方式分:根据按键的识别方式分:编码键盘编码键盘 键的识别由专用的硬件译码器实现,并产生键编号或键键的识别由专用的硬件译码器实现,并产生键编号或键值,如值,如BCD码键盘、码键盘、ASCII码键盘,码键盘,非编码键盘非编码键盘 只提供按键开关的行列矩阵,按键的识别、键码的确定只提供按键开关的行列矩阵,按键的识别、键码的确定以及去抖动等功能由软件完成以及去抖动等功能由软件完成u按键开关:机械弹性开关,机械开关在闭合及断按键开关:机械弹性开关,机械开关在闭合及断开瞬间均伴随有一连串的开瞬间均伴随有一连串的抖动抖动,时间一般为,时间一般为 510ms。按键及键盘按键及键盘键按下闭合稳定前沿抖动后沿抖动释放稳定键释放按键时的抖动按键时的抖动u 消除键抖动可用消除键抖动可用硬件硬件和和软件软件两种方法两种方法硬件硬件消抖:消抖:RS触发器触发器软件软件消抖:消抖:延时延时10ms左右再左右再检测检测Vcc(+5V)Vcc(+5V)AB输出RS触发器消抖电路触发器消抖电路键盘扫描控制方式键盘扫描控制方式u 程序控制方式程序控制方式:键盘处理程序固定在主程序的某个程序:键盘处理程序固定在主程序的某个程序段。段。特点:对特点:对CPU工作影响小工作影响小应考虑键盘处理程序运行间隔周期不能太长,否则影响对键盘输应考虑键盘处理程序运行间隔周期不能太长,否则影响对键盘输入响应的及时性。入响应的及时性。u 定时控制扫描方式定时控制扫描方式:利用定时:利用定时/计数器每隔一段时间产生计数器每隔一段时间产生定时中断,定时中断,CPU响应中断后对键盘进行扫描。响应中断后对键盘进行扫描。特点:采用定时特点:采用定时/计数器定时控制扫描间隔。计数器定时控制扫描间隔。定时时间不能太长,否则影响对键盘输入响应的及时性。定时时间不能太长,否则影响对键盘输入响应的及时性。u 中断控制方式中断控制方式:利用外部中断源,响应键盘输入信号。:利用外部中断源,响应键盘输入信号。特点:能及时处理键盘输入,又能提高特点:能及时处理键盘输入,又能提高CPU运行效率运行效率要占用一个中断资源。要占用一个中断资源。独立式未编码键盘接口独立式未编码键盘接口u 独立式独立式键盘:各按键键盘:各按键相互独立相互独立地接通一条地接通一条输入输入数据线数据线。u 图中采用中断响应、图中采用中断响应、软件查询软件查询方式:方式:输入线平时为输入线平时为高电平高电平;若有任意若有任意键按下键按下时,输时,输入线为入线为低电平低电平。u 优点:电路、编程优点:电路、编程简单简单 u 缺点:按键较多时,占缺点:按键较多时,占用用较多较多I/OI/O口线。口线。K0K1K2例、用查询方式编写独立式按键程序例、用查询方式编写独立式按键程序#include unsigned char key_value;void main(void)while(1)key_value=P1&0 x07;switch(key_value)case 0 x06:;break;/K0按下按下case 0 x05:;break;/K1按下按下case 0 x03:;break;/K2按下按下 default:;break;矩阵式键盘44的行、列结构可构成的行、列结构可构成16个按键的键盘,占用个按键的键盘,占用8位的位的I/O口线。口线。列线为输出口,行线为输入口,行线通过上拉电阻接到列线为输出口,行线为输入口,行线通过上拉电阻接到5V上。上。按键识别按键的识别:采用扫描法(1)第一步,判断有无键按下?)第一步,判断有无键按下?从列线输出口输出全扫描字从列线输出口输出全扫描字0000,读入行线输入口的状态。,读入行线输入口的状态。没键按下,行线全为没键按下,行线全为1有键按下,行线必有一根为有键按下,行线必有一根为0若有键按下,进行列扫描,判断是那一列发生,输出列扫描字。若有键按下,进行列扫描,判断是那一列发生,输出列扫描字。列扫描是对要扫描的列送列扫描是对要扫描的列送0,其它列送,其它列送1,依次为,依次为0111、1011、1101、1110。每扫描一列读入行线状态,全。每扫描一列读入行线状态,全1则不在该列,有则不在该列,有0则必在该列。则必在该列。(2)第二步,判断哪列键按下?)第二步,判断哪列键按下?(3)逐行检查是哪根行线为逐行检查是哪根行线为0,即可查出是哪个键按下,即可查出是哪个键按下,按键出现在哪行哪列。按键出现在哪行哪列。(4)按键编码)按键编码 每个按键要给一个编号,例如每个按键要给一个编号,例如44键盘的键盘的16个键编号为个键编号为015,对按键进行的编码称为键值。,对按键进行的编码称为键值。有许多按键编码方法,如高有许多按键编码方法,如高4位为行号,低位为行号,低4位为列号,合成为一个字位为列号,合成为一个字节。例如:第节。例如:第2行第行第0列的键,编码为列的键,编码为20H(0010 0000B)-我们不用。我们不用。也可以采用顺序编号的方法,使键值与键号一致,也可以采用顺序编号的方法,使键值与键号一致,其计算公式:其计算公式:键值行首值列号键值行首值列号(5)判断按键释放)判断按键释放 得到键值后应判断按键是否释放,否则有可能识别为两次按得到键值后应判断按键是否释放,否则有可能识别为两次按键,引起误操作。键,引起误操作。如右图如右图44键盘:键盘:行首值为行首值为0、4、8、12 列号为列号为0,1,2,3即:即:第第0行行首值为行行首值为0第第1行行首值为行行首值为4第第2行行首值为行行首值为8第第3行行首值为行行首值为12例:若第例:若第2行第行第1列发生按键列发生按键则键值为:则键值为:8+1=9键盘扫描流程LAB6000实验箱怎样呢?注意:该图注意:该图4条行线实际对应条行线实际对应D3D0,图示为,图示为 D5D2观察上面电路,观察上面电路,LAB6000也是矩阵键盘,也是矩阵键盘,4X6结构,结构,行读入地址为行读入地址为KEY_IN(0 x001h)列输出地址与列输出地址与LED数码管公用,为数码管公用,为OUTBIT(0 x002h)所以仿照上面原理所以仿照上面原理,可以对其进行键盘扫描。可以对其进行键盘扫描。#include#define LEDLen 6unsigned char xdata OUTBIT _at_ 0 x8002;/显示的位码地址;键盘的列线地显示的位码地址;键盘的列线地址;址;unsigned char xdata OUTSEG _at_ 0 x8004;/显示的段码地址;显示的段码地址;unsigned char xdata IN _at_ 0 x8001;/键盘读入口键盘读入口unsigned char dis_bufLEDLen;/显示缓冲显示缓冲unsigned char const dis_tab=/八段管显示码八段管显示码0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void mDelay(unsigned int Delay)unsigned int i;for(;Delay0;Delay-)for(i=0;i114;i+);void DisplayLED()unsigned char data i;unsigned char data Pos;unsigned char data LED;Pos=0 x20;/从左边开始显示从左边开始显示for(i=0;i=1;/显示下一位显示下一位unsigned char const KeyTable=/键码定义键码定义0 x16,0 x15,0 x14,0 xff,0 x13,0 x12,0 x11,0 x10,0 x0d,0 x0c,0 x0b,0 x0a,0 x0e,0 x03,0 x06,0 x09,0 x0f,0 x02,0 x05,0 x08,0 x00,0 x01,0 x04,0 x07;unsigned char TestKey()OUTBIT=0;/输出线置为输出线置为0return(IN&0 x0f);/读入键状态读入键状态(高四位不用高四位不用)unsigned char GetKey()unsigned char Pos;unsigned char data i;unsigned char data k;i=6;Pos=0 x20;/找出键所在列找出键所在列do OUTBIT=Pos;Pos=1;k=IN&0 x0f;while(-i!=0)&(k=0);/键值键值=列列 X 4+行行if(k!=0)i*=4;if(k&2)i+=1;else if(k&4)i+=2;else if(k&8)i+=3;OUTBIT=0;do mDelay(1);while(TestKey();/等键释放等键释放return(KeyTablei);/取出键码取出键码 else return(0 xff);void main()char key_val;while(1)DisplayLED();if(TestKey()key_val=GetKey()&0 x0f;dis_buf5=key_val;dis_buf3=key_val;课堂练习:课堂练习:1、键盘扫描和、键盘扫描和LED显示程序不变,改写主程序实现:显示程序不变,改写主程序实现:每次按键,最新值显示在屏幕最右端,旧的内容左移;每次按键,最新值显示在屏幕最右端,旧的内容左移;进一步实现最新值显示在屏幕最左端,旧的内容右移;进一步实现最新值显示在屏幕最左端,旧的内容右移;2、P1口接口接4根线到根线到LED灯,实现:灯,实现:a、按、按0键,键,LED灯循环左移灯循环左移b、按、按1键,键,LED灯循环右移灯循环右移c、按、按2键,键,LED灯灯1s钟闪烁一次钟闪烁一次d、按、按3键,键,LED灯灯500ms闪烁一次闪烁一次e、按、按4键,键,LED灯停止闪烁,再按一次继续闪烁灯停止闪烁,再按一次继续闪烁3、可以继续添加其他功能、可以继续添加其他功能4+学分内容要求1、做出实际硬件,实现相应功能,并通过答辩,成绩优、良 要求复杂度适中,报告完善2、PRTUES仿真,并通过答辩,成绩良、中 要求复杂度适中,报告完善3、写一篇科技论文,付合一般论文要求,成绩中、及格第15周上交并答辩、检查