新型键盘程序编程课件

PPT
  • 阅读 186 次
  • 下载 0 次
  • 页数 14 页
  • 大小 243.003 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档10.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
新型键盘程序编程课件
可在后台配置第一页与第二页中间广告代码
新型键盘程序编程课件
可在后台配置第二页与第三页中间广告代码
新型键盘程序编程课件
可在后台配置第三页与第四页中间广告代码
新型键盘程序编程课件
新型键盘程序编程课件
还剩5页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 14
  • 收藏
  • 违规举报
  • © 版权认领
下载文档10.00 元 加入VIP免费下载
文本内容

【文档说明】新型键盘程序编程课件.ppt,共(14)页,243.003 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45667.html

以下为本文档部分文字说明:

1TM1《单片机C语言编程基础》成都理工大学工程技术学院石坚独立键盘电路基本编程方法要求:通过按下一次按键INT0,使小灯D1亮灭交替变换。实验原理:只要判断P3.2的电平就可以知道按键是否被按下;而在按键按下的过程中,由于机械抖动,将产生干扰,电平高低变化。可以采用软件滤波的

方法去除这些干扰信号,在程序设计时,一旦发现P3.2为低电平,进入按键判断状态,软件延时10-20ms,从而避开了干扰信号区域,再重新检测P3.2状态,看按键是否真的已经按下。2TM2《单片机C语言编程基础》成都理工大学工程技术学院石坚参考程序(传统的延时

消抖按键程序)include<AT89X52.H>sbitINT_0=P3^2;//定义按键的输入端sbitD1=P3^0;//D1小灯定义voiddelay10ms(void)//延时程序{unsignedchari,j

;for(i=20;i>0;i--)for(j=248;j>0;j--);}key()//按键判断程序{if(INT_0==0)//判断是否按下键盘{delay10ms();//延时,软件去干扰if(INT_0==

0)//确认按键按下{D1=!D1;//D1亮灭交替变化}while(INT_0==0);//按键锁定,每按一次D1只变化一次}3TM3《单片机C语言编程基础》成都理工大学工程技术学院石坚续前页:}main(){while(1)//永远循环,扫描判断按键是否按下{key();//对于此处CPU只按

键判断一直扫描;}}课后请实践:1.用两个按键来控制D1的亮灭;2.使用一个按键,控制小灯亮的顺序D1→D2→D3→D4→┅→D8→D7→→┅D0亮重复循环;4TM4《单片机C语言编程基础》成都理工大学工程技术学院石坚4X4矩阵键盘基本编程方法要求:用AT89S5

1的并行口P2接4×4矩阵键盘,以P3.0-P3.3作输入线,以P3.4-P3.7作输出线;在每一个数码管上显示每个按键的“0-F”序号。[实验原理]每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩

阵的行线和列线分别通过两并行接口和CPU通信。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按

键,通过软件查表,查出该键的功能。5TM5《单片机C语言编程基础》成都理工大学工程技术学院石坚键盘识别的两种方法逐行扫描法:(1)首先判断有无键按下:令矩阵行线输出全0信号,检测列线状态,若有一列电平为低,则有键按下。(2)确定闭合键位置:依次将各行线置为低电平,逐行检测各列线的

电平状态,若某列为低,则该行线和列线交叉处按键就是闭合键。线反转法:(1)令矩阵键盘列线输出全0信号,行线作为输入接口接收信号,可判断按键处于哪一行。(2)令矩阵键盘行线输出全0信号,列线作为输入接口接收信号,可判断按键处于哪一

列。(3)将输入信号相或后形成键盘的唯一键码。6TM6《单片机C语言编程基础》成都理工大学工程技术学院石坚程序:(线反转法)#include<reg52.h>unsignedcharcodeseg7code[]={0

x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsignedchark;voiddelay10ms(void)//延时程序{unsignedch

ari,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}voidGetch(){unsignedcharX,Y,Z;P2=0xff;P2=0x0f;//先对P2置数行扫描if(P2!=0x0f

)//判断是否有键按下{delay10ms();//延时,软件去干扰if(P2!=0x0f)//确认按键按下X=P2;{7TM7《单片机C语言编程基础》成都理工大学工程技术学院石坚续前页:X=P2;//保存行扫描时有键按下时状态P2=0xf0;//列扫描Y=P2

;//保存列扫描时有键按下时状态Z=X|Y;//取出键值switch(Z)//判断键值(那一个键按下){case0x77:k=0;break;//对键值赋值case0x7b:k=1;break;case0x7d:k=2;

break;case0x7e:k=3;break;case0xb7:k=4;break;case0xbb:k=5;break;case0xbd:k=6;break;case0xbe:k=7;break;case0xd7:

k=8;break;case0xdb:k=9;break;case0xdd:k=10;break;case0xde:k=11;break;case0xe7:k=12;break;case0xeb:k=1

3;break;8TM8《单片机C语言编程基础》成都理工大学工程技术学院石坚续前页:case0xed:k=14;break;case0xee:k=15;break;}}}}voidmain(void){while(1){P

2=0xff;Getch();P0=seg7code[k];//查表LED输出P1=0xf0;//输出相同的四位数据。}}9TM9《单片机C语言编程基础》成都理工大学工程技术学院石坚该程序的缺陷:1、虽然线反

转法识别键盘的思路正确,但本程序按键扫描中消除按键抖动采用了传统的延时方法,这种办法会使CPU陷入无谓的等待,在延时的过程中CPU无法并行处理其它事件。采用定时扫描法(比如采用定时中断每隔100ms扫描1次键盘),可以解决这一问题;2、如果要求实现“短促”按

键和“长按”按键的区分,使程序能应用在功能要求更为复杂的场合,继续编制该程序则有繁琐和可读性变差的缺点。因此有必要采用更为便捷和高效的键值识别算法以实现本程序的功能。10TM10《单片机C语言编程基础》成都理工大学工程技术学院石坚新型键盘识别程序基本思想:uns

ignedcharTrg;unsignedcharCont;voidKeyRead(void){unsignedcharReadData=P3^0xff;//1Trg=ReadData&(ReadData^C

ont);//2Cont=ReadData;//3}分析:(1)没有按键的时候ReadData=0x00;Trg=0x00;Cont=0x00;(2)第一次按下按键的情况(假设按键接在P3.0上面)ReadData=0x01;Trg=0x01;Cont=0x01;(3)按

键按着不松(长按键)的情况ReadData=0x01;Trg=0x00;Cont=0x01;(4)按键松开的情况ReadData=0x00;Trg=0x00;Cont=0x00;Trg表示的就是触发的意思,也就是跳变,只要有按键按下,Trg在对应按键的位上面会置1;最关键的地方,Trg的值每次

按下只会出现一次,然后立刻被清除,完全不需要人工去干预。所以按键功能处理程序不会重复执行,省下了一大堆的条件判断,所谓精粹即此!!Cont代表的是长按键,如果按键按着不放,那么Cont的值就为0x01。11TM11《单片机C语言编程基础》成都理工大学工程技术学院石坚应用一:一次触发的按键处理——假

设为蜂鸣器按键,按一下,蜂鸣器beep的响一声#defineKEY_BEEP0x01voidKeyProc(void){if(Trg&KEY_BEEP)//如果按下的是KEY_BEEP{Beep();//执行蜂鸣器处理函数}}12T

M12《单片机C语言编程基础》成都理工大学工程技术学院石坚应用二:长按键的处理#defineKEY_MODE0x01//此模式按键也#defineKEY_PLUS0x02//此加键也voidKeyProc(voi

d){if(Trg&KEY_MODE)//若KEY_MODE键按之,虽常按亦无益{//无执行再,必先松再按可矣Mode++;//模式寄存器加1}if(Cont&KEY_PLUS)//若“加”键按之不放{cn

t_plus++;//则计时if(cnt_plus>100)//20ms*100=2S若计时到{Func();//则执行所需执行之功能程序也}}}13TM13《单片机C语言编程基础》成都理工大学工程技术学院石坚延时消抖问题?真正的单片机入门,是从学会处理多任务开始的。加

入延时消抖程序的架构如下:volatileunsignedcharIntrcnt;voidInterruptHandle()//中断服务程序{Intrcnt++;}//1ms中断1次,可变voidmain(void){SysInit();while(1

)//每20ms执行一次大循环{KeyRead();//将每个子程序都扫描一遍KeyProc();Func1();Funt2();……while(1){if(Intrcnt>20)//一直在等,直到20ms

时间到{Intrcnt="0";break;}//返回主循环}}}14TM14《单片机C语言编程基础》成都理工大学工程技术学院石坚怎么判断按键释放?再增加一个按键释放检测功能,程序如下:volatileunsignedcharTrg;volatileunsig

nedcharCont;volatileunsignedcharRelease;//再增加新功能!voidKeyRead(void){unsignedcharReadData=PINB^0xff;//1读键值Trg=ReadData&(R

eadData^Cont);//2得到按下触发值Release=(ReadData^Trg^Cont);//3得到释放触发值Cont=ReadData;//4得到所有未释放的键值}

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?