ブルーブリッジカップ単片機総合練習4
1614 ワード
モジュール:マトリックスキーボードデジタルチューブ
機能:キーボードのキーを1つ押すと、デジタルチューブに異なる値が表示されます。
#include // 51
#include //
#define uint unsigned int
#define uchar unsigned char
sbit du = P2^6;//
sbit we = P2^7;//
//
uchar code leddata[]= {
//0 1 2 3 4 5 6 7 8
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
//9 A B C D E F H L
0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x76, 0x38,
//n u -
0x37, 0x3E, 0x40, 0x00 };
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
uint line;
uchar row;
uchar k;
uchar num;
uint keyscan()
{
P3 = 0xf0; // 1111 0000 P3
line = 0x00; //
row = 0x00; //
if(P3!= 0xf0)
{
delay(10); //
if(P3!= 0xf0)
{
row = P3; // row P3
P3 = 0x0f; // 0000 1111 P3
line = P3; // row P3
num = line | row;
while(P3 != 0X0f);//
switch (num)
{
case 0xee:k = 0; break;
case 0xde:k = 1; break;
case 0xbe:k = 2; break;
case 0x7e:k = 3; break;
case 0xed:k = 4; break;
case 0xdd:k = 5; break;
case 0xbd:k = 6; break;
case 0x7d:k = 7; break;
case 0xeb:k = 8; break;
case 0xdb:k = 9; break;
case 0xbb:k = 10; break;
case 0x7b:k = 11; break;
case 0xe7:k = 12; break;
case 0xd7:k = 13; break;
case 0xb7:k = 14; break;
case 0x77:k = 15; break;
}
}
}
return k;
}
void main ()
{
we = 1;
P0 = 0xfe;
we = 0;
du = 1;
while(1)
{
P0 = leddata[keyscan()];
}
}