生活随笔
收集整理的這篇文章主要介紹了
51单片机的键盘分类和运用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鍵盤分類
鍵盤分為編碼鍵盤和非編碼鍵盤。
編碼鍵盤:鍵盤上閉合鍵的識(shí)別由專用的硬件編碼器實(shí)現(xiàn),并產(chǎn)生鍵編碼號(hào)或鍵值 (如計(jì)算機(jī)鍵盤)
非編碼鍵盤:靠軟件編程來(lái)識(shí)別 (分為獨(dú)立鍵盤和矩陣鍵盤)
在單片機(jī)組成的各種系統(tǒng)中,用的最多的是非編碼鍵盤。
獨(dú)立鍵盤
獨(dú)立鍵盤控制數(shù)碼管的數(shù)值
代碼示例:
#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
);}}}
}
四乘四矩陣鍵盤
按下按鍵,八個(gè)數(shù)碼管顯示對(duì)應(yīng)的按鍵號(hào)
代碼示例:
#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(); }
}
總結(jié)
以上是生活随笔為你收集整理的51单片机的键盘分类和运用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。