//子函数delay_1ms(1)大家自己写吧- #define scan_key_port P3
- uchar key_scan()
- {
- uchar sccode,recode;
- uchar key_value;
- scan_key_port=0xf0; /* 发全 "0" 的行扫描码,列线输入 */
- if((scan_key_port&0xf0)!=0xf0) /* 若有键按下 */
- {
- delay_1ms(1); /*延时去抖动*/
- if((scan_key_port&0xf0)!=0xf0) /* 若有键按下 */
- {
- sccode=0xfe; /*逐行扫描初值*/
- while((sccode&0x10)!=0)
- {
- scan_key_port=sccode; /* 输出行扫描码 */
- if((scan_key_port&0xf0)!=0xf0) /* 本行有键按下 */
- {
- recode=(scan_key_port&0xf0)|0x0f;
- key_value=(~sccode)+(~recode);/* 返回特征码 */
- }
- else sccode=(sccode<<1)|0x01; /* 行扫描左移一位 */
- }
- }
- }
- else { //若无键按下
- scan_key_port = 0xff;
- return (0);
- }
- scan_key_port = 0xff; /*释放按键扫描端口*/
- switch(key_value){ /*显示按键对应的丝印*/
- case 0x11:
- return('0');
-
- case 0x12:
- return('1');
-
- case 0x14:
- return('2');
-
- case 0x21:
- return('3');
-
- case 0x22:
- return('4');
-
- case 0x24:
- return('5');
-
- case 0x41:
- return('6');
-
- case 0x42:
- return('7');
-
- case 0x44:
- return('8');
-
- case 0x81:
- return('9');
-
- case 0x82:
- return('A');
-
- case 0x84:
- return('B');
-
- case 0x18:
- return('C');
-
- case 0x28:
- return('D');
-
- case 0x48:
- return('E');
-
- case 0x88:
- return('F');
- }
- }
|