標題:
關(guān)于一個單片機矩陣鍵盤掃描的代碼,為什么要賦0xfe給P1
[打印本頁]
作者:
周鑫鑫鑫666
時間:
2017-12-8 21:50
標題:
關(guān)于一個單片機矩陣鍵盤掃描的代碼,為什么要賦0xfe給P1
代碼里面標紅的那塊,有點疑問。不知道這段代碼的意思。為什么要賦0xfe給P1,不是要檢測P1的電位嗎?賦了0xfe給P1,還怎么檢測?
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
};
uchar code KeyCodeTable[]=
{
0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
};
void Delay()
{
uchar i;
for(i=0;i<200;i++);
}
uchar Keys_Scan()
{
uchar sCode,kCode,i,k;
P1 = 0xf0;
if((P1&0xf0)!=0xf0)
{
Delay();
if((P1&0xf0)!=0xf0)
{
sCode = 0xfe;
for(k=0;k<4;k++)
{
P1 = sCode;
if((P1&0xf0)!=0xf0)
{
kCode = ~P1;
for(i=0;i<16;i++)
{
if(kCode == KeyCodeTable[ i])
return i;
}
}
else
sCode = _crol_(sCode,1);
}
}
}
return -1;
}
void main()
{
uchar KeyNO = -1;
uchar i,P2_LED,P3_LED;
while(1)
{
KeyNO = Keys_Scan();
if(KeyNO != -1)
{
P2_LED = 0xff;
P3_LED = 0xff;
for(i=0;i<=KeyNO;i++)
{
if(i<8)
P3_LED>>=1;
else
P2_LED>>=1;
}
P3 = P3_LED;
P2 = P2_LED;
}
}
}
作者:
無罪之賓
時間:
2017-12-8 23:29
4*4鍵盤,實現(xiàn)掃描
作者:
單片機設(shè)計時鐘
時間:
2017-12-8 23:51
4*4的鍵盤,循環(huán)里面需要不斷的檢測,實現(xiàn)掃描
作者:
周鑫鑫鑫666
時間:
2017-12-11 20:20
準雙向I0口
作者:
zl2168
時間:
2017-12-11 22:18
先學(xué)理論,打基礎(chǔ),就不會有這么多問題了,本壇至少有50%的問題屬于此類情況。
作者:
lanyue51hei
時間:
2017-12-12 15:06
51 單片機檢測按鍵狀態(tài)前,要先給I/0口寫1。P1=0xfe 是把P1最地位清零(相當于按鍵接地)其他7位寫1,用于檢測按鍵是否按下。建議 先看論壇里關(guān)于51的C教程,這些問題自然就懂了。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1