|
- #include<reg51.h>
- //P0.0-P0.2
- unsigned char leddata[]={
-
- 0xC0, //"0"
- 0xF9, //"1"
- 0xA4, //"2"
- 0xB0, //"3"
- 0x99, //"4"
- 0x92, //"5"
- 0x82, //"6"
- 0xF8, //"7"
- 0x80, //"8"
- 0x90, //"9"
- 0x88, //"A"
- 0x83, //"B"
- 0xC6, //"C"
- 0xA1, //"D"
- 0x86, //"E"
- 0x8E, //"F"
- 0x89, //"H"
- 0xC7, //"L"
- 0xC8, //"n"
- 0xC1, //"u"
- 0x8C, //"P"
- 0xA3, //"o"
- 0xBF, //"-"
- 0xFF, //熄滅
- 0xFF //自定義
-
- };
- unsigned char key;
- void delay(unsigned char x)
- {
- unsigned char i;
- while(x--)
- for(i=0;i<115;i++);
- }
- void keyscan()
- {
- //------先掃描直接接地的3個按鍵-----//
- P0|=0X07; //先將IO拉高
- if(P0&0X01==0){
- delay(15);
- key=7;
- return;
- }
- else if(P0&0x02==0){
- delay(15);
- key=8;
- return;
- }
- else if(P0&0x04==0){
- delay(15);
- key=9;
- return;
- }
-
- //------接著對逐一對IO口進行掃鍵-----//
- P0|=0X07; //先將IO拉高,很重要
- P0&=0XFE; //P0.0置0
- if((P0&0X02)==0){
- delay(15);
- if((P0&0X02)==0){
- P0|=0X07; //對地的按鍵優先級高,這里是為了防止誤判
- if((P0&0X07)==0X07)
- key=1;
- else
- key=8;
- return;
- }
- }
- else if((P0&0X04)==0){
- delay(15);
- if((P0&0X04)==0){
- P0|=0X07;
- if((P0&0X07)==0X07)
- key=2;
- else
- key=9;
- return;
- }
- }
- P0|=0X07;//先將IO拉高,很重要
- P0&=0XFD;
- if((P0&0X01)==0){
- delay(15);
- if((P0&0X01)==0){
- P0|=0X07;
- if((P0&0X07)==0X07)
- key=3;
- else
- key=7;
- return;
- }
- }
- else if((P0&0X04)==0){
- delay(15);
- if((P0&0X04)==0){
- P0|=0X07;
- if((P0&0X07)==0X07)
- key=4;
- else
- key=9;
- return;
- }
- }
- P0|=0X07; //先將IO拉高,很重要
- P0&=0XFB;
- if((P0&0X01)==0){
- delay(15);
- if((P0&0X01)==0){
- P0|=0X07;
- if((P0&0X07)==0X07)
- key=5;
- else
- key=7;
- return;
- }
- }
- else if((P0&0X02)==0){
- delay(15);
- if((P0&0X02)==0){
- P0|=0X07;
- if((P0&0X07)==0X07)
- key=6;
- else
- key=8;
- return;
- }
- }
- }
- void main()
- {
- while(1){
- keyscan();
- P3=leddata[key];
- }
- }
復制代碼
|
|