|
- uchar keyscan()
- {
- uchar key,i,keyscan;
- P3=0x3d; //准备读取P3.2~P3.5 51的I/0为准双向I/0口 作为输入是最好先将其置1
- //读取接地按键值
- if((P1&0x3d)!=0x3d){ //若无按键按下 P3.2~P3.5为高
- delay(); //延时去抖动
- if((P1&0x3d)!=0x3d){//判断哪个按键按下
- key=P1&0x3d;
- return key;
- }
- }
- keyscan=0x3D;
- for(i=0;i<4;i++){
- P1=keyscan; //输出I/O口扫描 输出 判断
- if(P1!=keyscan){ //读取I/O口,看输出扫P1.0~P1.5的值是否与扫描不同
- key=P1&0x3D; //转换扫描码
- return key;
- }
- keyscan=(keyscan<<1)|0x01; //逐行输出扫描 0
- }
- return 0;
- }
复制代码 |
|