|
- #ifndef __keyc1_H__ //定義延時頭文件
- #define __keyc1_H__//
- //--------------------------------------------------
- //-------------各種演示函數(shù)聲明---------------------
- //4x4鍵盤處理函數(shù)
- //--------------------------------------------------
- //*****************************************************
- #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
- //===========================================================================
復(fù)制代碼 |
|