1、在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。因此,键信息输入是与软件构造密切相关的过程。对于一组键或一个键盘,通过接口电路与单片机相连。单片机可以采用查询或中断式了解有无按键输入并检查是哪一个按键按下,假设有键按下则跳至相应的键盘处理程序处去执行,假设无键按下则继续执行其他程序。 3、按键的特
2、点与去抖机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图1a所示,抖动时间的长短与开关的机械特性有关,一般为5 -10 ms。从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是屡次操作,这种情况是不允出现的。为了抑制按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两面予以考虑。一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。本学习板采用软件去抖式。按键抖动状态图硬件电容去抖按键去抖流程图从按键的去抖流程图我们可以知道,检测到有键按
3、下时,应延时等待一段时间可调用一个5ms10ms的延迟子程序,然后再次判断按键是否被按下,假设此时判断按键仍被按下,则认为按键有效,假设此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。键盘真正被按下才可进展相应的处理程序,此时根本就算实现了按键输入,进一步的话可以判断按键是否释放。四、实验步骤上面的图的意思是P3.1P3.3 跟P3.4P3.7不一样的,他们是相互连接当按下键时,组成4*4=16个键的。如果给P3一个扫描初值的话:如0*0F ,则没有键按下时为:P3.1P3.3为1P3.4P3.7为0如果有键按下,则情况发生变化:高电平接入低电平:如P3.3与P3.7连接的键按下
4、,则P3.3与P3.7为0,即接地了。则P3此时为:0000 0111,这时如果用P3&0*0F,则高四位为0低四位保存,可以得到低四位的容了。通过去抖操作,即一个delay,可以得到低四位容。这里设为:h=P3&0*0F; 如果再得到高四位容,则可以组成一个数,来定位哪个键了。程序框图:P3=FFH,P3.0=0有键按下吗.延时10ms真得有键按下吗.根据当前状态识别按键P3=FFH,P3.1=0P3=FFH,P3.2=0P3=FFH,P3.3=0C语言源程序:*includesbit beep=P23;sbit dula=P26;sbit wela=P27; unsigned char i
5、=100;unsigned char j,k,temp,key;void delay(unsigned char i) for(j=i;j0;j-) for(k=125;kk-);Unsigned char code table=0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d, 0*07,0*7f,0*6f,0*77,0*7c,0*39,0*5e,0*79,0*71;display(unsigned char num) P0=tablenum; dula=1; dula=0; P0=0*c0; wela=1; wela=0;void main() while(1) P3=
6、0*fe; temp=P3; temp=temp&0*f0; if(temp!=0*f0) delay(10); switch(temp) case 0*ee: key=0; break; case 0*de: key=1; case 0*be: key=2; case 0*7e: key=3; while(temp! beep=0; beep=1; display(key); P1=0*fe; P3=0*fd; case 0*ed: key=4; case 0*dd: key=5; case 0*bd: key=6; case 0*7d: key=7; P3=0*fb; case 0*eb:
7、 key=8; case 0*db: key=9; case 0*bb: key=10; case 0*7b: key=11; P3=0*f7; case 0*e7: key=12; case 0*d7: key=13; case 0*b7: key=14; case 0*77: key=15;汇编程序: dula bit P2.0;wela bit P2.1;KEYBUF EQU 30H ORG 00HSTART: MOV KEYBUF,*2WAIT: MOV P3,*0FFH CLR P3.4 MOV A,P3 ANL A,*0FH *RL A,*0FH JZ NOKEY1 LCALL D
8、ELY10MS CJNE A,*0EH,NK1 MOV KEYBUF,*0 mov p1,*11111110b LJMP DK1NK1: CJNE A,*0DH,NK2 MOV KEYBUF,*4 mov p1,*11111100bNK2: CJNE A,*0BH,NK3 MOV KEYBUF,*8 mov p1,*11111000bNK3: CJNE A,*07H,NK4 MOV KEYBUF,*12 mov p1,*11110000bNK4: NOPDK1: call displayDK1A: MOV A,P3 ;等待释放 JNZ DK1ANOKEY1: CLR P3.5 JZ NOKEY2 CJNE A,*0EH,NK5 MOV KEYBUF,*1 LJMP DK2NK5: CJNE A,*0DH,NK6 MOV KEYBUF,*5NK6: CJNE A,*0BH,NK7 MOV KEYBUF,*9NK7: CJNE A,*07H,NK8 MOV KEYBUF,*13NK8:DK2:DK2A:释放 JNZ DK2ANOKEY2: CLR P3.6 *RL A,*0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1