生活随笔
收集整理的這篇文章主要介紹了
51单片机的键盘分类和运用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
鍵盤分類
鍵盤分為編碼鍵盤和非編碼鍵盤。
編碼鍵盤:鍵盤上閉合鍵的識別由專用的硬件編碼器實現,并產生鍵編碼號或鍵值 (如計算機鍵盤)
非編碼鍵盤:靠軟件編程來識別 (分為獨立鍵盤和矩陣鍵盤)
在單片機組成的各種系統中,用的最多的是非編碼鍵盤。
獨立鍵盤
獨立鍵盤控制數碼管的數值
代碼示例:
#include<reg52.h>#define uchar unsigned char
#define uint unsigned intsbit we
= P2
^7;
sbit du
= P2
^6;
sbit S2
= P3
^0;
sbit S3
= P3
^1;uchar counter
,time_counter
;uchar code leddata
[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x37,0x3E, 0x73,0x5C,0x40,0x00,0x00
}; void delay(uint z
)
{uint x
,y
;for(x
= z
;x
> 0;x
--)for(y
= 114; y
> 0; y
-- );
}void display(uchar i
)
{uchar shi
,ge
;shi
= i
/ 10; ge
= i
% 10; P0
= 0xff;we
= 1;P0
= 0xbf; we
= 0; du
= 1;P0
= leddata
[shi
];du
= 0;delay(1);P0
= 0xff;we
= 1;P0
= 0x7f; we
= 0;du
= 1;P0
= leddata
[ge
];du
= 0;delay(1);
}void main()
{while(1){display(time_counter
);if(S2
== 0){delay(5);if(S2
== 0){time_counter
++;while(!S2
);
}} if(S3
== 0){delay(5);if(S3
== 0 && time_counter
!= 0){time_counter
--;while(!S3
);}}}
}
四乘四矩陣鍵盤
按下按鍵,八個數碼管顯示對應的按鍵號
代碼示例:
#include<reg52.h>#define uchar unsigned char
#define uint unsigned intsbit we
= P2
^7;
sbit du
= P2
^6;uchar code leddata
[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x37,0x3E, 0x73,0x5C,0x40,0x00,0x00
}; void delay(uint z
)
{uint x
,y
;for(x
= z
;x
> 0;x
--)for(y
= 114; y
> 0; y
-- );
}uchar
KeyScan()
{uchar cord_l
,cord_h
; P3
= 0xf0;
if((P3
& 0xf0) != 0xf0) {delay(5);if((P3
& 0xf0) != 0xf0){cord_l
= P3
& 0xf0; P3
= cord_l
| 0x0f;cord_h
= P3
& 0x0f; while(P3
& 0x0f != 0x0f);return (cord_l
+ cord_h
); }}
}void KeyPro()
{switch(KeyScan()){case 0xee: P0
= leddata
[0]; break;case 0xde: P0
= leddata
[1]; break;case 0xbe: P0
= leddata
[2]; break;case 0xee: P0
= leddata
[3]; break;case 0xed: P0
= leddata
[4]; break;case 0xdd: P0
= leddata
[5]; break;case 0xbd: P0
= leddata
[6]; break;case 0xed: P0
= leddata
[7]; break;case 0xeb: P0
= leddata
[8]; break;case 0xdb: P0
= leddata
[9]; break;case 0xbb: P0
= leddata
[10]; break;case 0xeb: P0
= leddata
[11]; break;case 0xe7: P0
= leddata
[12]; break;case 0xd7: P0
= leddata
[13]; break;case 0xb7: P0
= leddata
[14]; break;case 0xe7: P0
= leddata
[15]; break;}
}void mian()
{we
= 1;P0
= 0;we
= 0;du
= 1;while(1){KeyPro(); }
}
總結
以上是生活随笔為你收集整理的51单片机的键盘分类和运用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。