|
首先說下,剛開始學習c51程序,是根據郭天祥的教程寫的
發現實驗板的鍵盤電路圖有問題。
圖上標的是
s6 s7 s8 s9
s10 s11 s12 s13
s14 s14 s16 s17
s18 s19 s20 s21
實際是
s6 s10 s14 s18
s7 s11 s15 s19
s8 s12 s16 s20
s9 s13 s17 s21
//鍵盤按列依次被按下,數碼管依次顯示0-F
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar temp,num;
/////////////////延時程序////////////////
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=250;y>0;y--)
{
};
};
}
/////////////////延時程序////////////////
void main()
{
dula=1;
P0=0;
dula=0;
wela=1;
P0=0x00;
wela=0;
while(1)
{
P3=0xef;
temp=P3;
temp=temp&0x0f;
/////////////////消去按鍵時的抖動////////////////
while(temp!=0x0f)//檢測是否有按鍵被按下
{
delay(5);
temp=P3;
temp=temp&0x0f;
/////////////////消去按鍵時的抖動////////////////
while(temp!=0x0f)//檢測是否真有按鍵被按下
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xed:num=2;
break;
case 0xeb:num=3;
break;
case 0xe7:num=4;
break;
};
/////////////////第一列鍵盤掃描的松手檢測////////////////
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
/////////////////第一列鍵盤掃描的松手檢測////////////////
/////////////////數碼管根據按鍵信息顯示////////////////
dula=1;
P0=table[num-1];
dula=0;
/////////////////數碼管根據按鍵信息顯示////////////////
};
};
//第二列鍵盤掃描程序
P3=0xdf;
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
delay(5);
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xde:num=5;
break;
case 0xdd:num=6;
break;
case 0xdb:num=7;
break;
case 0xd7:num=8;
break;
};
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
dula=1;
P0=table[num-1];
dula=0;
};
};
//第三列鍵盤掃描程序
P3=0xbf;
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
delay(5);
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xbe:num=9;
break;
case 0xbd:num=10;
break;
case 0xbb:num=11;
break;
case 0xb7:num=12;
break;
};
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
dula=1;
P0=table[num-1];
dula=0;
};
};
//第四列鍵盤掃描程序
P3=0x7f;
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
delay(5);
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0x7e:num=13;
break;
case 0x7d:num=14;
break;
case 0x7b:num=15;
break;
case 0x77:num=16;
break;
};
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
dula=1;
P0=table[num-1];
dula=0;
};
};
};
}
|
|