- #ifndef __keyc1_H__ //定义延时头文件
- #define __keyc1_H__//
- //--------------------------------------------------
- //-------------各种演示函数声明---------------------
- //4x4键盘处理函数
- //--------------------------------------------------
- //*****************************************************
- #include <REG52.H>
- #define uchar unsigned char
- #define uint unsigned int
- #define data_key P2
- void delay_1ms(unsigned int x)
- {
- unsigned int i,j;
- for(j=0;j<x;j++)
- for(i=0;i<110;i++);
- }
- /*----------------------------------------------------*/
- unsigned char key1()
- {
- unsigned char i;
- unsigned char j;
- data_key=0x0f; //行线作为输入,列线输出低电平
- i=data_key; //读列线
- j=0xff;
- if(i!=0x0f)//判断是否有键按下
- {delay_1ms(5);//有5ms延迟
- i=data_key;//再读列线
- if(i!=0x0f)//判断是否有干扰
- {data_key=0xf0;//不是干扰,列线作为输入,行线输出低电平
- delay_1ms(5);//5ms延迟
- j=data_key;//读列线
- i=i+j;//行值与列值合并,得到键值
- switch(i)
- {
- case 0x7e:j=0;break;//如果键值是0x7e就赋0号键返回
- case 0xbe:j=1;break;//如果键值是0xbe就赋1号键返回
- case 0xde:j=2;break;//如果键值是0xbe就赋2号键返回
- case 0xee:j=3;break;//如果键值是0xbe就赋3号键返回
- case 0x7d:j=4;break;//如果键值是0xbe就赋4号键返回
- case 0xbd:j=5;break;//如果键值是0xbe就赋5号键返回
- case 0xdd:j=6;break;//如果键值是0xbe就赋6号键返回
- case 0xed:j=7;break;//如果键值是0xbe就赋7号键返回
- case 0x7b:j=8;break;//如果键值是0xbe就赋8号键返回
- case 0xbb:j=9;break;//如果键值是0xbe就赋9号键返回
- case 0xdb:j=10;break;//如果键值是0xbe就赋10号键返回
- case 0xeb:j=11;break;//如果键值是0xbe就赋11号键返回
- case 0x77:j=12;break;//如果键值是0xbe就赋12号键返回
- case 0xb7:j=13;break;//如果键值是0xbe就赋13号键返回
- case 0xd7:j=14;break;//如果键值是0xbe就赋14号键返回
- case 0xe7:j=15;break;//如果键值是0xbe就赋15号键返回
- default:j=0xff;break;//如果不是以上键值,就赋0xff无键压下返回
- }
- }
- }
- return(j);//返回0xff,表示没有按下键,其他值表示有键按下
- }
- #endif
- //===========================================================================
复制代码 |