單片機型號說明:IAP15F2K61S2
新建工程時單片機型號選擇STC15F2K60S2
51單片機矩陣鍵盤代碼
void Delay_ms(int xms) //15單片機延時函數(shù)
{
int i;
long a;
for (i = xms; i > 0; i --)
for(a = 810; a > 0; a --);
}
unsigned char KeyJZ_16(void)
{
unsigned char KeyNumber;
unsigned char temp;
//第一列
P3 = 0x7F; //P37 = 0,其他是1,檢測第一列
temp = P3; //按鍵檢測,輸入
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20); //延時20ms來確認(rèn)是否真正按下按鍵
temp = P3;
temp &= 0x0F;//檢測是第一列哪個按鍵
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0x7E : KeyNumber = 7; break;
case 0x7D : KeyNumber = 6; break;
case 0x7B : KeyNumber = 5; break;
case 0x77 : KeyNumber = 4; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
//第二列
P3 = 0xBF;
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20);
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0xBE : KeyNumber = 11; break;
case 0xBD : KeyNumber = 10; break;
case 0xBB : KeyNumber = 9; break;
case 0xB7 : KeyNumber = 8; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
//第三列
P3 = 0xDF;
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20);
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0xDE : KeyNumber = 15; break;
case 0xDD : KeyNumber = 14; break;
case 0xDB : KeyNumber = 13; break;
case 0xD7 : KeyNumber = 12; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
//第四列
P3 = 0xEF;
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20);
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0xEE : KeyNumber = 19; break;
case 0xED : KeyNumber = 18; break;
case 0xEB : KeyNumber = 17; break;
case 0xE7 : KeyNumber = 16; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
return KeyNumber;
}
本程序燒寫到51單片機應(yīng)該是正常使用的,手頭沒有51開發(fā)板了,暫時沒測試
這個程序燒寫到15單片機,前兩列按鍵不能正常使用
只需要在判斷第一列按鍵那部分程序,前面加上P42 = 0;
在判斷第二列按鍵那部分程序,前面加上P44?= 0;
因為這兩列接線是P42和P44
?
矩陣按鍵部分代碼(新寫法)
void Delay_ms(int xms) //15單片機延時函數(shù)
{
int i;
long a;
for (i = xms; i > 0; i --)
for(a = 810; a > 0; a --);
}
unsigned char KeyJZ_16(void)
{
unsigned char KeyNumber = 0;
unsigned char temp;
//第一列
P3 = 0x7F; //P37 = 0,其他是1,檢測第一列
P4 = 0xEF; //P44 = 0; P42 = 1; //15單片機第一列占用的引腳
temp = P3; //按鍵檢測,輸入
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20); //延時20ms來確認(rèn)是否真正按下按鍵
temp = P3;
temp &= 0x0F;//檢測是第一列哪個按鍵
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0x7E : KeyNumber = 7; break;
case 0x7D : KeyNumber = 6; break;
case 0x7B : KeyNumber = 5; break;
case 0x77 : KeyNumber = 4; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
//第二列
P3 = 0xBF;
P4 = 0xFB; //P42 = 0; P44 = 1; //15單片機第二列占用的引腳
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20);
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0xBE : KeyNumber = 11; break;
case 0xBD : KeyNumber = 10; break;
case 0xBB : KeyNumber = 9; break;
case 0xB7 : KeyNumber = 8; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
//第三列
P3 = 0xDF;
P4 = 0xFF;
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20);
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0xDE : KeyNumber = 15; break;
case 0xDD : KeyNumber = 14; break;
case 0xDB : KeyNumber = 13; break;
case 0xD7 : KeyNumber = 12; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
//第四列
P3 = 0xEF;
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
Delay_ms(20);
temp = P3;
temp &= 0x0F;
if(temp != 0x0F)
{
temp = P3;
switch (temp)
{
case 0xEE : KeyNumber = 19; break;
case 0xED : KeyNumber = 18; break;
case 0xEB : KeyNumber = 17; break;
case 0xE7 : KeyNumber = 16; break;
}
while(temp != 0x0f)
{
temp = P3;
temp &= 0x0F; //因為這條,所以松手檢測才寫成 temp != 0x0f
}
}
}
return KeyNumber;
}
測試鍵盤是否好使文章來源:http://www.zghlxwxcb.cn/news/detail-449516.html
#include <STC15F2K60S2.H>
unsigned char KeyNum;
void main()
{
P2 = 0xA0; P0 = 0x00; P2 = 0x80; P0 = 0xFF; //初始化
while(1)
{
KeyNum = KeyJZ_16();
if(KeyNum != 0)
{
P00 = !P00; //每次按鍵按下P00狀態(tài)都會取反
}
}
}
一定要加初始化呀,這次忘了,按鍵根本不好使文章來源地址http://www.zghlxwxcb.cn/news/detail-449516.html
到了這里,關(guān)于【STC15單片機】簡單的矩陣鍵盤代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!