ブルーブリッジカップ単片機総合練習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()]; 
   }

}