디지털 파이프 디스플레이 매트릭스 키보드와 독립 키보드

3188 단어 단편기
#include 

typedef unsigned char uchar;
typedef unsigned char uint;

sbit WE = P2^7;
sbit DU = P2^6;

uchar code ledata[]={ 
 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //ϨÃð
                0x00  //×Ô¶¨Òå
 
                         };
void delay_ms(uint n)
{
   uint x,y;
	for(x = n;x > 0;x--)
		for(y = 114;y > 0;y--);
}
//º¯ÊýÃû£ºÉ¨Ã躯Ê
//º¯Êý¹¦ÄÜ£ºÅжÏ20¸ö°´¼üÄǸö±»°´ÏÂÁË
uchar Keyscan()
{
	uchar dat_l,dat_h;//l ÐÐ h ÁÐ
	P3 = 0xf0;// 1111 0000 ¸ßλÊÇÁÐ µÍλÊÇÐÐ
	if((P3 & 0xf0)!= 0xf0)
	{
		delay_ms(10);
		if((P3 & 0xf0) != 0xf0)
		{
		   dat_l = P3 & 0xf0;//´¢´æÁеÄÖµ ¸ßËÄλ µÍËÄλʼÖÕΪÁã
			 P3 = P3 | 0x0f;//µÍËÄλȫΪһ ÅжÏÄÄÒ»ÐÐ
			 dat_h = P3 & 0x0f;// ¸ßËÄλΪ0 µÍËÄλΪÐÐÖµ ´¢´æÐÐÖµ
			while((P3 & 0x0f) != 0x0f)//Åжϰ´¼üÊÇ·ñËÉ¿ª ²»³ÉÁ¢Ìø³öÑ­»·
				return(dat_l+dat_h);//·µ»Ø¼üÂëÖµ
			}
	}
}
//º¯ÊýÃû³Æ£»Êä³öº¯Êý
//º¯Êý¹¦ÄÜ£»Êä³öÿ¸ö¼üËù´ú±íµÄÊý×Ö
void  keypro()
{
	    
      switch(Keyscan())
			{
				//µÚÒ»ÐмüÅÌ
				case 0xee: P0 = ledata[0];  break;
			  case 0xde: P0 = ledata[1];  break;
				case 0xbe: P0 = ledata[2];  break;
				case 0x7e: P0 = ledata[3];  break;
				//µÚ¶þÐмüÅÌ
				case 0xed: P0 = ledata[4];  break;
				case 0xdd: P0 = ledata[5];  break;
				case 0xbd: P0 = ledata[6];  break;
				case 0x7d: P0 = ledata[7];  break;
				//µÚÈýÐмüÅÌ
				case 0xeb: P0 = ledata[8];  break;
				case 0xdb: P0 = ledata[9]; break;
				case 0xbb: P0 = ledata[10]; break;
				case 0x7b: P0 = ledata[11]; break;
				//µÚËÄÐмüÅÌ
				case 0xe7: P0 = ledata[12]; break;
				case 0xd7: P0 = ledata[13]; break;
				case 0xb7: P0 = ledata[14]; break;
				case 0x77: P0 = ledata[15]; break;
				
				//¶ÀÁ¢¼üÅÌ
				case 0xfe: P0 = ledata[16]; break;
				case 0xfd: P0 = ledata[11]; break;
				case 0xfb: P0 = ledata[17]; break;
				case 0xf7: P0 = ledata[18]; break;
		    default: P0 = ledata[23];break;
			}
}
void main()
{
    WE = 1;
	  P0 = 0;
	  WE = 0;//Ñ¡¶¨ËùÓÐÊýÂë¹Ü
	
	 DU = 1;
	P0 = ledata[22];
	while(1)
	{
		
	  keypro();
		
	}
}

매트릭스 키보드의 스캐닝 함수: 열을 저장할 때 열의 값이 높은 네 자리이면 낮은 네 자리의 값 & 0xf0이 낮은 네 자리를 0000으로 바꿉니다.
P3 = P3 | 0x0f는 낮은 4위를 1111로 변경한다. 버튼을 눌렀을 때 높은 4위 중 하나가 0이기 때문에 낮은 4위가 1111이 되면 그 중 하나가 0이 되고 다음 명령은 높은 4위 중 하나를 0으로 바꾸어 줄 값을 저장한다.
줄의 값을 저장할 때 줄의 값이 4위이면 높은 4위의 값 & 0x0f가 높은 4위를 0000으로 바꿉니다.
줄 값과 열 값의 합을 되돌려주기;

좋은 웹페이지 즐겨찾기