1、0xf0)case 0x10:j=0;break;case 0x20:j=1;case 0x40:j=2;case 0x80:j=3;return(4*i+j); else P3=P31;i+;return (key) ; /* * 功能:P3外接44按键, 按照查表法读出键值* 返回:按键值015/如无键按下, 返回16*/ /*uchar keyscan(void) uchar code K_Tab44 = 0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d,0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x7
2、7;uchar temp1 = 0xfe, temp2, i, j;for(i = 0; i 4; i+) /扫描低四位P3 = temp1; /输出一行0temp2 = P3; /马上就读入if(temp2 & 0xf0) != 0xf0) /如果有键按下for(j = 0; j j+) /就扫描高四位if(temp2 = K_Tabij) /查表return i * 4 + j; /查到了就返回按键的数值else temp1 = _crol_(temp1, 1);return 16; /没有查到,返回按键松开的代码 */ /呵呵,实质性的语句不过9行,就是这么简练!* 名称:KeyRvs(
3、) P1外接44按键, 按照反转法读出键值* 输出:uchar keyscan(void) uchar temH, temL, key;P3 = 0xf0; temH = P3;/低四位先输出0;读入,高四位含有按键信息P3 = 0x0f; temL = P3;/然后反转输出0;读入,低四位含有按键信息/-/两次读入的时间间隔,必须尽量的小,以尽量避免按键状态发生变化/有些人给出的程序,就没有注重这些,有些程序甚至还有间隔几个毫秒的!/要知道,按键是会抖动的,夜长梦多,真不知道读出些什么!/呵呵,做而论道给出的这个程序,读键的准确性最高。switch(temH) case 0xe0: key
4、= 0; break;case 0xd0: key = 1;case 0xb0: key = 2;case 0x70: key = 3;default: return 16;/按下的不是上述按键,就当是没有按键/delay(10);switch(temL) case 0x0e: return key;case 0x0d: return key + 4;case 0x0b: return key + 8;case 0x07: return key + 12;/本程序虽然稍多几行,但是没有循环,还可以提前返回,所以执行的速度最快 /44矩阵键盘按键为1-16,按键显示0-9、a-f;/ #incl
5、ude #define uchar unsigned char uchar key=0;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc0;void show(uchar key) P0=tablekey;显示数值void Scan_key()/扫描键盘uchar m;P1=0xff;数码管全亮P2=0x0f;/P2口赋初值低位1高位0 m=P2;switch (m) P2=0xf0;key=0;show(key);key=1;key=2;key=3;key=4;key=5;key=6;key=7;key=8;key=9;key=10;key=11;key=12;key=13;key=14;key=15;default :void main() while(1) Scan_Key();
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2