Thông báo

Collapse
No announcement yet.

Xin sửa giúp đoạn code đọc bàn phím 4x4

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xin sửa giúp đoạn code đọc bàn phím 4x4

    Mình làm theo hướng dẫn sau mà làm hoài vẫn bị lỗi:

    Code:
    Set Columns as inputs, Rows as outputs
    Set a Row x to low, read Columns y
    If Column y is low, delay 20ms to debounce 
    If Column y is still low, wait until Column y go high 
    Assume corresponding key was pressed


    Và đây là đoạn code mình làm:

    Code:
    #define   LED_PORT	P0 // 8 bóng đèn led được nối vào P0
    sbit C0 = P2^0;
    sbit C1 = P2^1;
    sbit C2 = P2^2;
    sbit C3 = P2^3;
    sbit R0 = P2^7;
    sbit R1 = P2^6;
    sbit R2 = P2^5;
    sbit R3 = P2^4;
    void delay(tWord  ms);  
    tByte key_scan(void);
    
    void delay(tWord  ms)
    {  
    	unsigned int x, y;
       	for (x = 0; x <= ms; x++)
       	{  
    		for (y = 0; y <= 120; y++);
       	}
    }
    tByte key_scan(void)
    {  
     	unsigned char  key = 0xFF;
    	if(R0==0&&R1==1&&R2==1&&R3==1) // R: row, C:column
    	{
    		if(C0==0)
    		{
    			delay(100);
    			if(C0==0)
    			{
    				while(C0==0);
    				key=1;
    			}
    		}
    		if(C1==0)
    		{
    			delay(100);
    			if(C1==0)
    			{
    				while(C1==0);
    				key=2;
    			}
    		}
    		if(C2==0)
    		{
    			delay(100);
    			if(C2==0)
    			{
    				while(C2==0);
    				key=3;
    			}
    		}
    		if(C3==0)
    		{
    			delay(100);
    			if(C3==0)
    			{
    				while(C3==0);
    				key=4;
    			}
    		}
    	}
    	if(R0==1&&R1==0&&R2==1&&R3==1)
    	{
    		if(C0==0)
    		{
    			delay(100);
    			if(C0==0)
    			{
    				while(C0==0);
    				key=5;
    			}
    		}
    		if(C1==0)
    		{
    			delay(100);
    			if(C1==0)
    			{
    				while(C1==0);
    				key=6;
    			}
    		}
    		if(C2==0)
    		{
    			delay(100);
    			if(C2==0)
    			{
    				while(C2==0);
    				key=7;
    			}
    		}
    		if(C3==0)
    		{
    			delay(100);
    			if(C3==0)
    			{
    				while(C3==0);
    				key=8;
    			}
    		}
    	}
    	if(R0==1&&R1==1&&R2==0&&R3==1)
    	{
    		if(C0==0)
    		{
    			delay(100);
    			if(C0==0)
    			{
    				while(C0==0);
    				key=9;
    			}
    		}
    		if(C1==0)
    		{
    			delay(100);
    			if(C1==0)
    			{
    				while(C1==0);
    				key=10;
    			}
    		}
    		if(C2==0)
    		{
    			delay(100);
    			if(C2==0)
    			{
    				while(C2==0);
    				key=11;
    			}
    		}
    		if(C3==0)
    		{
    			delay(100);
    			if(C3==0)
    			{
    				while(C3==0);
    				key=12;
    			}
    		}
    	}			
    	if(R0==1&&R1==1&&R2==1&&R3==0)
    	{
    		if(C0==0)
    		{
    			delay(100);
    			if(C0==0)
    			{
    				while(C0==0);
    				key=13;
    			}
    		}
    		if(C1==0)
    		{
    			delay(100);
    			if(C1==0)
    			{
    				while(C1==0);
    				key=14;
    			}
    		}
    		if(C2==0)
    		{
    			delay(100);
    			if(C2==0)
    			{
    				while(C2==0);
    				key=15;
    			}
    		}
    		if(C3==0)
    		{
    			delay(100);
    			if(C3==0)
    			{
    				while(C3==0);
    				key=16;
    			}
    		}
    	}
    	
    	return key;
    	
    }
    void main(void)
    {  	 
    	unsigned char  i ;
    	while (1)
    	{
    		
    		i = key_scan();
    		LED_PORT = i;
    		delay(1000);
    	}
    }
    Kết quả hiển thị trên bóng đèn không đúng như mong đợi, xin các bạn sửa giúp.

  • #2
    [i][0];
    return sophim;
    break;
    }
    if(col2 == 0){
    sophim = num[i][1];
    return sophim;
    break;
    }
    if(col3 == 0){
    sophim = num[i][2];
    return sophim;
    break;
    }
    if(col4 == 0){
    sophim = num[i][3];
    return sophim;
    break;
    }

    }
    return sophim;
    }

    void main(void)
    {
    sophim = 0;
    i = 0;
    while(1)
    {
    if(getkey()!=0xff)
    {
    led=getkey();

    }

    }
    }

    Comment


    • #3
      Bạn tham khảo code của mình, Chúc bạn vui.

      Code:
      #include <at89x52.h>
      #define led P1
      #define keyhex P2
      
      #define col1 P2_4
      #define col2 P2_5
      #define col3 P2_6
      #define col4 P2_7
      
      
      unsigned char x,sophim,i,j[2],y;
      unsigned char code num[4][4]={1,2,3,0x0a,
      								4,5,6,0x0b,
      								7,8,9,0x0c,
      								0x0d,0,0x0e,0x0f};
      
      unsigned char getkey()
      {
      	x = 0xfe;
      	for(i=0; i<4; i++) 
      	{
      	keyhex = x;
      	x<<=1;
      	
      		if(col1 == 0){
      		sophim = num[i][0];
      		return sophim;
      		break;
      		}
      		if(col2 == 0){
      		sophim = num[i][1];
      		return sophim;
      		break;
      		}
      		if(col3 == 0){
      		sophim = num[i][2];
      		return sophim;
      		break;
      		}
      		if(col4 == 0){
      		sophim = num[i][3];
      		return sophim;
      		break;
      		}
      		
      	}
      	return sophim;
      }
      
      void main(void)
      {
      	sophim = 0;	
      	i = 0;			
      	while(1) 
      	{
      		if(getkey()!=0xff)
      		{
      			led=getkey();
      			
      		}
      	
      	}
      }

      Comment

      Về tác giả

      Collapse

      hikagu2000 Tìm hiểu thêm về hikagu2000

      Bài viết mới nhất

      Collapse

      Đang tải...
      X