新型键盘程序编程课件

上传人:仙*** 文档编号:244526887 上传时间:2024-10-04 格式:PPT 页数:14 大小:243KB
返回 下载 相关 举报
新型键盘程序编程课件_第1页
第1页 / 共14页
新型键盘程序编程课件_第2页
第2页 / 共14页
新型键盘程序编程课件_第3页
第3页 / 共14页
点击查看更多>>
资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,TM,Click to Edit Master Title Style,*,单片机,C,语言编程基础,成都理工大学工程技术学院 石坚,独立键盘电路基本编程方法,要求:,通过按下一次按键,INT0,,使小灯,D1,亮灭交替变换。,实验原理:,只要判断,P3.2,的电平就可以知道按键是否被按下;,而在按键按下的过程中,由于机械抖动,将产生干扰,电平高低变化,。,可以采用软件滤波的方法去除这些干扰信号,在程序设计时,一旦发现,P3.2,为低电平,进入按键判断状态,软件延时,10-20ms,,从而避开了干扰信号区域,再重新检测,P3.2,状态,看按键是否真的已经按下。,参考程序,(传统的延时消抖按键程序),include,sbit,INT_0=P32;/,定义按键的输入端,sbit,D1=P30;,/D1小灯定义,void delay10ms(void)/,延时程序,unsigned char,i,j,;,for(i,=20;i0;i-),for(j,=248;j0;j-);,key(,),/,按键判断程序,if(INT_0=0)/,判断是否按下键盘,delay10ms(,);/,延时,软件去干扰,if(INT_0=0)/,确认按键按下,D1=!D1;/D1亮灭交替变化,while(INT_0=0);/按键锁定,每按一次D1只变化一次,续前页:,main(),while(1),/,永远循环,扫描判断按键是否按下,key();,/对于此处CPU只按键判断,一直扫描,;,课后请实践:,1.,用两个按键来控制,D1,的亮灭;,2.,使用一个按键,控制小灯亮的顺序,D1D2D3D4D8D7,D0,亮重复循环;,4X4,矩阵键盘基本编程方法,要求:,用,AT89S51,的并行口,P2,接,44,矩阵键盘,以,P3.0,P3.3,作输入线,以,P3.4,P3.7,作输出线;在每一个数码管上显示每个按键的“,0,F”,序号。,实验原理,每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和,CPU,通信。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。,键盘识别的两种方法,逐行扫描法,:,(,1,)首先判断有无键按下:令矩阵行线输出全,0,信号,检测列线状态,若有一列电平为低,则有键按下。,(,2,)确定闭合键位置:依次将各行线置为低电平,逐行检测各列线的电平状态,若某列为低,则该行线和列线交叉处按键就是闭合键。,线反转法,:,(,1,)令矩阵键盘列线输出全,0,信号,行线作为输入接口接收信号,可判断按键处于哪一行。,(,2,)令矩阵键盘行线输出全,0,信号,列线作为输入接口接收信号,可判断按键处于哪一列。,(,3,)将输入信号相或后形成键盘的唯一键码。,程序,:(线反转法),#include,unsigned char code seg7code=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;,unsigned char k;,void delay10ms(void)/,延时程序,unsigned char,i,j,;,for(i,=20;i0;i-),for(j,=248;j0;j-);,void,Getch,(),unsigned char X,Y,Z;,P2=0 xff;,P2=0 x0f;,/先对P,2,置数,行扫描,if(P2!=0 x0f)/,判断是否有键按下,delay10ms();/,延时,软件去干扰,if(P2!=0 x0f),/确认按键按下X=P,2,;,续前页:,X=P2;/,保存行扫描时有键按下时状态,P2=0 xf0;/,列扫描,Y=P2;/,保存列扫描时有键按下时状态,Z=X|Y;/,取出键值,switch(Z)/,判断键值(那一个键按下,),case 0 x77:k=0;break;/,对键值赋值,case 0 x7b:k=1;break;,case 0 x7d:k=2;break;,case 0 x7e:k=3;break;,case 0 xb7:k=4;break;,case 0 xbb:k=5;break;,case 0 xbd:k=6;break;,case 0 xbe:k=7;break;,case 0 xd7:k=8;break;,case 0 xdb:k=9;break;,case 0 xdd:k=10;break;,case 0 xde:k=11;break;,case 0 xe7:k=12;break;,case 0 xeb:k=13;break;,续前页:,case 0 xed:k=14;break;,case 0 xee:,k=15;break;,void,main(void,),while(1),P2=0 xff;,Getch,(,);,P0=seg7codek;/查表LED输出,P1=0 xf0;/,输出相同的四位数据,。,该程序的缺陷:,1,、虽然线反转法识别键盘的思路正确,但本程序按键扫描中消除按键抖动采用了传统的延时方法,这种办法会使,CPU,陷入无谓的等待,在延时的过程中,CPU,无法并行处理其它事件。采用定时扫描法(比如采用定时中断每隔,100ms,扫描,1,次键盘),可以解决这一问题;,2,、如果要求实现“短促”按键和“长按”按键的区分,使程序能应用在功能要求更为复杂的场合,继续编制,该,程序则有繁琐和可读性变差的缺点。因此有必要采用更为便捷和高效的键值识别算法以实现本程序的功能。,新型键盘识别程序,基本思想,:,unsigned char,Trg,;,unsigned char Cont;,void,KeyRead,(void),unsigned char,ReadData,=P30 xff;,/1,Trg,=,ReadData,&(,ReadData,Cont);,/2,Cont=,ReadData,;,/3,分析,:,(1),没有按键的时候,ReadData,0 x00,;,Trg,0 x00,;,Cont,0 x00,;,(2),第一次按下按键的情况,(假设按键接在,P3.0,上面),ReadData,0 x01,;,Trg,0 x01,;,Cont,0 x01,;,(3),按键按着不松,(,长按键,),的情况,ReadData,0 x01,;,Trg,0 x00,;,Cont,0 x01,;,(4),按键松开的情况,ReadData,0 x00,;,Trg,0 x00,;,Cont,0 x00,;,Trg,表示的就是触发的意思,也就是跳变,只要有按键按下,,Trg,在对应按键的位上面会置,1,;,最关键的地方,,Trg,的值每次按下只会出现一次,然后立刻被清除,完全不需要人工去干预。所以按键功能处理程序不会重复执行,省下了一大堆的条件判断,,所谓精粹即此!,Cont,代表的是长按键,如果按键按着不放,那么,Cont,的值就为,0 x01,。,应用一,:,一次触发的按键处理,假设为蜂鸣器按键,按一下,蜂鸣器,beep,的响一声,#define KEY_BEEP 0 x01,void,KeyProc(void,),if(,Trg,&KEY_BEEP),/,如果按下的是,KEY_BEEP,Beep();,/,执行蜂鸣器处理函数,应用二,:,长按键的处理,#define KEY_MODE 0 x01,/,此模式按键也,#define KEY_PLUS 0 x02,/,此加键也,void,KeyProc(void,),if(,Trg,&KEY_MODE),/,若,KEY_MODE,键按之,虽常按亦无益,/,无执行再,必先松再按可矣,Mode+;,/,模式寄存器加,1,if(Cont&KEY_PLUS),/,若“加”键按之不放,cnt_plus,+;,/,则计时,if(,cnt_plus,100),/20ms*100=2S,若计时到,Func,();,/,则执行所需执行之功能程序也,延时消抖问题?,真正的单片机入门,是从学会处理多任务开始的。,加入延时消抖程序的架构如下:,volatile unsigned char,Intrcnt,;,void,InterruptHandle,(),/,中断服务程序,Intrcnt,+;,/1ms,中断,1,次,可变,void,main(void,),SysInit,();,while(1),/,每,20ms,执行一次大循环,KeyRead,();,/,将每个子程序都扫描一遍,KeyProc,();,Func1();,Funt2();,while(1),if(,Intrcnt,20),/,一直在等,直到,20ms,时间到,Intrcnt,=0;break;,/,返回主循环,怎么判断按键释放?,再增加一个按键释放检测功能,程序如下:,volatile unsigned char,Trg,;,volatile unsigned char Cont;,volatile unsigned char Release;,/,再增加新功能!,void,KeyRead,(void),unsigned char,ReadData,=PINB0 xff;,/1,读键值,Trg,=,ReadData,&(,ReadData,Cont);,/2,得到按下触发值,Release=(,ReadData,Trg,Cont);,/3,得到释放触发值,Cont=,ReadData,;,/4,得到所有未释放的键值,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!