预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

P1外接4x4键盘的反转法扫描 2009-11-0710:53 ;----------------------------------------------------------------------------------------P1口外接4×4按键,常用的读出键值的方法有“查表法”和“反转法”。查表法的程序最为简短,但是稍多占用一点存储空间;反转法的程序执行速度最快,只是要求接口是双向的。下面分别给出了使用查表法和反转法读取键值的程序。;----------------------------------------------------------------------------------------#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar/***************************************************************名称:Key_Tab()*功能:P1外接4×4按键,按照查表法读出键值*返回:按键值0~15/如无键按下,返回16***************************************************************/ucharKey_Tab(void){ucharcodeK_Tab[4][4]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};uchartemp1=0xfe,temp2,i,j;for(i=0;i<4;i++){//扫描低四位P1=temp1;//输出一行0temp2=P1;//马上就读入if((temp2&0xf0)!=0xf0){//如果有键按下for(j=0;j<4;j++)//就扫描高四位if(temp2==K_Tab[i][j])//查表returni*4+j;//查到了就返回按键的数值}elsetemp1=_crol_(temp1,1);}return16;//没有查到,返回按键松开的代码}//呵呵,实质性的语句不过9行,就是这么简练!;----------------------------------------------------------------------------------------/***************************************************************名称:KeyRvs()*功能:P1外接4×4按键,按照反转法读出键值*输出:按键值0~15/如无键按下,返回16***************************************************************/ucharKeyRvs(void){uchartemH,temL,key;P1=0xf0;temH=P1;//低四位先输出0;读入,高四位含有按键信息P1=0x0f;temL=P1;//然后反转输出0;读入,低四位含有按键信息//-----------------------------------------------------//两次读入的时间间隔,必须尽量的小,以尽量避免按键状态发生变化//有些人给出的程序,就没有注重这些,有些程序甚至还有间隔几个毫秒的!//要知道,按键是会抖动的,夜长梦多,真不知道读出些什么!//呵呵,做而论道给出的这个程序,读键的准确性最高。//-----------------------------------------------------switch(temH){case0xe0:key=0;break;case0xd0:key=1;break;case0xb0:key=2;break;case0x70:key=3;break;default:return16;//按下的不是上述按键,就当是没有按键}switch(temL){case0x0e:returnkey;case0x0d:returnkey+4;case0x0b:returnkey+8;case0x07:returnkey+12;default:return16;//按下的不是上述按键,就当是没有按键}}//本程序虽然稍多几行,但是没有循环,还可以提前返回,所以执行的速度最快