单片机与键盘的连接课件.ppt

上传人:小飞机 文档编号:2155496 上传时间:2023-01-20 格式:PPT 页数:34 大小:1.18MB
返回 下载 相关 举报
单片机与键盘的连接课件.ppt_第1页
第1页 / 共34页
单片机与键盘的连接课件.ppt_第2页
第2页 / 共34页
单片机与键盘的连接课件.ppt_第3页
第3页 / 共34页
单片机与键盘的连接课件.ppt_第4页
第4页 / 共34页
单片机与键盘的连接课件.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《单片机与键盘的连接课件.ppt》由会员分享,可在线阅读,更多相关《单片机与键盘的连接课件.ppt(34页珍藏版)》请在三一办公上搜索。

1、模块七 系统扩展与接口技术,7.2 单片机与键盘的连接,7.2.1 键盘及其抖动问题,键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。一般单片机系统中采用非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。,7.2.1 键盘及其抖动问题,组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。当开关S断开时,P1.0输入为高电平,S闭合时,P1.0输入为低电平。由于按键是机械触点,当机械触点断开、闭合时,会有抖动。,消除抖动的方法,硬件方法:一般不常用。

2、软件方法:单片机设计中常用软件法,软件去除抖动其实很简单,就是在单片机获得P1.0口为低的信息后,不是立即认定S已被按下,而是延时10毫秒或更长一段时间后再次检测P1.0口,如果仍为低,说明S的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P1.0为高),再延时510个毫秒,消除后沿的抖动,然后再对键值处理。,7.2.2 单片机与键盘的连接,将每个按键的一端接到单片机的I/O口,另一端接地。,1、通过I/O口连接:,一、独立式按键接口技术,实例,如下图所示,采用不断查询的方法,即检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。假设两个键定义如下:

3、P3.0:开始执行某种操作(假设让8只发光二极管闪烁)。P3.1:停止执行。,void delay(unsigned char);bit key();void lsd(unsigned char);unsigned char vkey;bit start_end=0;void main()unsigned char ldata;while(1),if(key()if(vkey=1)start_end=1;else start_end=0;if(start_end)ldata=ldata;delay(250);else ldata=0 xff;P0=ldata;,源程序,源程序(延时函数dela

4、y()),void delay(unsigned char t)unsigned char i,j;for(i=t;i0;i-)for(j=200;j0;j-);,bit key()unsigned char temp;bit flag=0;temp=P3;temp=temp|0 xfc;temp=temp0 xff;if(temp=0)return flag;else,delay(25);temp=P3|0 xfc;temp=temp0 xff;if(temp=0)return flag;else vkey=temp;flag=1;while(temp)temp=P3|0 xfc;temp=

5、temp0 xff;return flag;,源程序(判断是否有键按下函数),2、采用中断方式,各个按键都接到一个与非门上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,单片机再去做相应的处理。,实例 试编程实现由3个按键控制发光二极管的全亮、闪烁或全灭。,#includevoid delay(unsigned char);unsigned char flag;void main()IT0=1;EA=1;EX0=1;while(1)switch(flag)case 1:P0=0 x00;break;case 2:P0

6、=P0;delay(250);break;case 3:P0=0 xff;break;,void delay(unsigned char t)unsigned char i,j;for(i=t;i0;i-)for(j=200;j0;j-);,中断服务函数,void isr_int0()interrupt 0 unsigned char kdata;kdata=P1;kdata=kdata0 xff;kdata=1;if(kdata!=0)kdata=1;if(kdata!=0)flag=3;else flag=2;else flag=1;,二、矩阵式键盘接口技术,在键盘中按键数量较多时,为了减

7、少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,在需要的键数比较多时,采用矩阵法来做键盘是合理的。,1、矩阵式键盘的结构,当按键没有按下时,所有的输入端都是高电平,代表无键按下。一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可判断是否有键按下了。,1、矩阵式键盘的结构,2、矩阵式键盘的按键识别方法行扫描法,1)判断键盘中有无键按下。将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行

8、线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。2)判断闭合键所在的位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。,2、矩阵式键盘的按键识别方法行扫描法,行扫描法,行扫描法识别按键的方法就象在二维平面上找确定的点,要在二维平面上找到确定的点。确定这点的横坐标:行线位置确定它的纵坐标:列线位置公式:键值=行号列数+列号,实例 89S51单片机的P1口用作键盘I/O口,P0口用作

9、输出口,用于输出所按键的键号(0F)。,89S51单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0P1.3设置为输入线,行线P1.4P1.7设置为输出线。4根行线和4根列线形成16个相交点。,行扫描识别步骤,(1)检测当前是否有键被按下:检测的方法是P1.4P1.7输出全“0”,读取P1.0P1.3的状态,若P1.0P1.3为全“1”,则无键闭合,否则有键闭合。(2)去除键抖动:当检测到有键按下后,延时一段时间再做下一步的检测判断。(3)若有键被按下,应识别出是哪一个键闭合。,识

10、别键闭合的方法,对键盘的行线进行扫描。P1.4P1.7按下述4种组合依次输出:P1.7 1 1 1 0P1.6 1 1 0 1P1.5 1 0 1 1P1.4 0 1 1 1在每组行输出时读取P1.0P1.3,若全为“1”,则表示为这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。,流程图,键盘扫描程序,#includeunsigned char seg16=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa

11、1,0 x86,0 x8e;void delay(unsigned char);unsigned char key_scan();void main()unsigned char val_key;while(1)val_key=key_scan();if(val_key!=0 xff)P0=segval_key;,void delay(unsigned char t)unsigned char i,j;for(i=0;it;i+)for(j=0;j200;j+);,键盘扫描程序,键盘扫描函数,unsigned char key_scan()unsigned char kdata,vkey,ke

12、yNo;bit iskey=0;/标志,在确定具体哪一个键按下时,如果检测到有一个键按下则该标志置1 P1=0 x0f;/行线送“0”kdata=P1;/读取列线值 kdata/无键按下,建立无效标志(0 xff为无键按下的无效标志),键盘扫描函数,else/若列线均为“1”则无键按下,否则有键按下 delay(25);/有键按下,去除抖动 kdata=0 xef;while(!iskey)/扫描键盘 vkey=P1=kdata;/送扫描码至P1口行线,并将扫描码保存到vkey中 kdata=P1;/读取列线值 kdata,键盘扫描函数,else/若有键按下则键处理 kdata=0 x0f;/

13、为计算列值的方便,将列线P1.3P1.0分别与1异或即按位取反 switch(kdata)/计算列值 case 1:keyNo=0;break;case 2:keyNo=1;break;case 4:keyNo=2;break;case 8:keyNo=3;break;iskey=1;,键盘扫描函数,vkey=vkey4;/取行扫描码 vkey=0 x0f;/将行扫描码取反 switch(vkey)case 1:keyNo+=0;break;/把行值加到列值中 case 2:keyNo+=4;break;case 4:keyNo+=8;break;case 8:keyNo+=12;break;

14、do kdata=P1;kdata,案例 空调制冷控制系统预置温度控制,如下图所示,“UP”是“升温”按钮,接INT0,“DOWN”是“降温”按钮,接INT1。显然,该案例中,提高或降低调节温度均采用中断方式实现,按“UP”则产生外部中断0,按“DOWN”产生外部中断1。,源程序(主函数),调节温度的设置可分别在外部中断0和外部中断1的中断服务程序中实现,在中断服务程序中,调节温度放在变量temp(采用BCD码)中,每发生一次中断,temp中的数据加1或减1,并再分别由8051的P1、P2控制的两个数码管显示其温度值。,#includeunsigned char temp=30;main()u

15、nsigned char t10,t;IT0=IT1=1;t10=temp/10;t=temp%10;P1=(t104)|(t,/按升温按钮的中断服务程序void isr_int0()interrupt 0 unsigned char t10,t;if(temp30)temp+;t10=temp/10;t=temp%10;P1=(t104)|(t,温度设定中断子程序:,/按降温按钮的中断服务程序void isr_int1()interrupt 2 unsigned char t10,t;if(temp20)temp-;t10=temp/10;t=temp%10;P1=(t104)|(t,温度设定中断子程序:,提示:,本案例还解决了一个处理十进制温度(BCD码)的问题,请留意。本案例只是提供一个思路,仅供参考,不要把思维局限在本案例上。本案例只用了两个按钮,可以直接采用中断法,但本任务却要四个按钮,能直接用吗?显然不行?,知识梳理与总结,本任务通过温度报警器预置温度的实现,让读者掌握键盘工作原理及其与单片机接口的相关知识,学会应用。本任务重点内容如下:(1)键盘工作原理、按键抖动问题及其消除方法;(2)独立式按键与单片机连接的电路及其编程;(3)矩阵式键盘的结构及其按键识别方法行列扫描法的程序设计。,任务作业,P281P282 T8-4T8-6,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号