關於CT107D開發板矩陣按鍵前兩列不工作問題的研究
阿新 • • 發佈:2018-12-26
CT107D開發板矩陣按鍵原理圖如下所示:
其中CON3的1引腳和2引腳相連構成矩陣鍵盤。
//經典矩陣按鍵處理函式
unsigned char keyProcess(void)
{
unsigned char keyTemp = 0;
unsigned char keyValue = 0;
unsigned char P3_Value = 0;
P3 = 0xf0;
if(P3 != 0xf0)
{
Delay15ms();
if(P3 != 0xf0)
{
P3_Value = P3;
switch (P3_Value)
{
case 0xe0:
{
keyTemp = 1;
}break;
case 0xb0:
{
keyTemp = 2;
}break;
case 0xd0:
{
keyTemp = 3;
}break ;
case 0x70:
{
keyTemp = 4;
}break;
}
}
}
P3 = 0x0f;
if(P3 != 0x0f)
{
Delay15ms();
if(P3 != 0x0f)
{
P3_Value = P3;
switch(P3_Value)
{
case 0x0e:
{
keyValue = keyTemp;
}break;
case 0x0b:
{
keyValue = 4 + keyTemp;
}break;
case 0x0d:
{
keyValue = 8 + keyTemp;
}break;
case 0x07:
{
keyValue = 12 + keyTemp;
}break;
}
}
}
return keyValue;
}
由上述經典矩陣鍵盤掃描函式編寫按鍵驅動時發現由P3^6和P3^7兩個引腳控制的兩列鍵盤無論如何按,都不產生任何效果,也許有人會認為這是開發板壞掉了,其實不然,開發板沒有壞掉,只是這裡的P3^6和P3^7實際上不控制該兩列按鍵。
若使用如下程式碼進行矩陣鍵盤驅動程式碼的編寫,則完全可以實現功能,程式碼如下:
sfr P4 = 0xC0;
sbit r1=P3^0;
sbit r2=P3^1;
sbit r3=P3^2;
sbit r4=P3^3;
sbit c1=P4^4;
sbit c2=P4^2;
sbit c3=P3^5;
sbit c4=P3^4;
unsigned char keyProcess(void)
{
unsigned char key_value;
r1=0;
r2=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1)
{
key_value=0;
}
else if(!c2)
{
key_value=1;
}
else if(!c3)
{
key_value=2;
}
else if(!c4)
{
key_value=3;
}
r2=0;
r1=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1)
{
key_value=4;
}
else if(!c2)
{
key_value=5;
}
else if(!c3)
{
key_value=6;
}
else if(!c4)
{
key_value=7;
}
r3=0;
r2=r1=r4=1;
c1=c2=c3=c4=1;
if(!c1)
{
key_value=8;
}
else if(!c2)
{
key_value=9;
}
else if(!c3)
{
key_value=10;
}
else if(!c4)
{
key_value=11;
}
r4=0;
r2=r3=r1=1;
c1=c2=c3=c4=1;
if(!c1)
{
key_value=12;
}
else if(!c2)
{
key_value=13;
}
else if(!c3)
{
key_value=14;
}
else if(!c4)
{
key_value=15;
}
return key_value;
}
讓人驚訝的是,矩陣鍵盤的第1列和第2列竟然是有P4^4引腳和P4^2引腳控制的,這又是為何呢?
藍橋杯開發板的矩陣鍵盤電路連線和普通的開發板一樣,它使用的是P3口,但藍橋杯比賽要求使用IAP轉接板轉接的IAP15F2k61s2晶片,這個微控制器內建晶振,執行速度快,由於其沒有P36,P37口,在轉接板上用晶片的P42,P44口代替。因此在開發時需要改變一下控制引腳的地址。
最終測試程式參考程式碼下載地址:
http://download.csdn.net/download/qq_34706280/10260248