PS:雖然這個程序不加修改不壹定能在妳的開發板上運行,但是妳可以把這個程序作為模板,自己修改就能達到精通的目的。剛開始學編程的時候,妳是在不斷的模仿別人寫的程序。
//行列掃描器,可以自己定義端口和掃描方式。下面簡單介紹壹下。
# include & ltreg52.h & gt//包含頭文件
#定義uchar無符號字符
#定義uint無符號整數
無符號char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x 71 };//0-F
uchar鍵掃描(void);
無效延遲(uint I);
void main()
{
uchar鍵;
P2 = 0x 00;//1數碼管會在您按下相應的鍵時顯示鍵上的字符。
while(1)
{
key = key scan();//調用鍵盤掃描,
開關(鑰匙)
{
情況0x7e:P0 = do fly[0];打破;//0按相應的鍵顯示相應的代碼值。
案例0x7d:P0 = do fly[1];打破;//1
情況0x7b:P0 = do fly[2];打破;//2
情況0x 77:P0 = do fly[3];打破;//3
案例0x be:P0 = do fly[4];打破;//4
案例0x BD:P0 = do fly[5];打破;//5
案例0x bb:P0 = do fly[6];打破;//6
案例0xb 7:P0 = do fly[7];打破;//7
案例0x de:P0 = do fly[8];打破;//8
案例0x DD:P0 = do fly[9];打破;//9
案例0x db:P0 = do fly[10];打破;//a
案例0xd 7:P0 = do fly[11];打破;//b
案例0x ee:P0 = do fly[12];打破;//c
案例0x ed:P0 = do fly[13];打破;//d
case 0xeb:P0 = do fly[14];打破;//e
案例0xe 7:P0 = do fly[15];打破;//f
}
}
}
Uchar keyscan(void)//鍵盤掃描功能,采用行列反轉掃描方式。
{
uchar cord_h,cord _ l;//行和列值
P3 = 0x0f;//行線輸出都是0。
P3 & amp;0x0f//讀入列行值
if(cord_h!=0x0f) //先檢查按鍵是否按下。
{
延時(100);//去搖動
if(cord_h!=0x0f)
{
P3 & amp;0x0f//讀入列行值
P3 = cord _ h | 0xf 0;//輸出當前列線值。
P3 & amp;0xf0//讀入行線值
return(cord _ h+cord _ l);//鍵盤最後壹個組合代碼值
}
} return(0x ff);//返回值。
}
Void delay(uint i)//延遲函數
{
while(I-);
}