Thông báo

Collapse
No announcement yet.

Help, cần các cao thủ lập trình vi điều khiển 8051 giúp đỡ

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

  • Help, cần các cao thủ lập trình vi điều khiển 8051 giúp đỡ

    Mình viết code điểu khiển 8 LED đơn dùng 89S52 có nút set để thay đổi hiệu ứng LED, up và down để chỉnh tốc độ nháy, sao mà mô phỏng trên proteus thì chạy nhưng khi nạp vào mạch thật thì nhấn nút không được gì hết cả, nhờ các cao thủ giúp đỡ, mình mô phỏng trên proteus 8.
    Link code và file mô phỏng:
    Code Effect LED With 7 Effect + Button Set Effect + Up+ Down
    Code:
    #include <AT89x52.h>
    #define set P1_7
    #define up  P1_5  
    #define down  P1_6 
    unsigned int i,a,b=500;     /* Khai báo biến(toàn cục) cho vòng lặp for của các hàm hiệu ứng LED */
    unsigned char j=0;  /* Khai báo biến (toàn cục) để đếm số lần bấm button */	
    void delay(unsigned int ts)  /* Hàm tạo trễ */
    {
    	unsigned int x;
    	unsigned char y;
    	for(x=0;x<ts;x++)
    	{
    		for(y=0;y<125;y++)
    		{;}
    	}
    }
    void Led_Effect_0()   /* Hàm Effect LED luôn tắt */
    {
    	for(i=0;i<2;i++)
    	{
    		P2=0xFF;
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }
    	}
    }
    void Led_Effect_1()  /* Hàm Effect LED sáng tắt */
    {
    	unsigned char EffectLED[]={0x00,0xFF,0x00,0xFF};
      for(i=0;i<4;i++)
    	{
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
      }
    }
    void Led_Effect_2()  /* LED nháy đuổi 2 chiều */
    {
    	unsigned char EffectLED[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
      for(i=0;i<8;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
    	}
    	for(i=0;i<8;i++)
    	{
    		P2=EffectLED[7-i];
        for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  	
    	}
    } 
    void Led_Effect_3()  /* LED quét sáng dần 2 chiều */
    {
    	unsigned char EffectLED[]={0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00};
      for(i=1;i<9;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
    	}
    	for(i=0;i<9;i++)
    	{
    		P2=EffectLED[8-i];
    	  for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
      }
    }
    void Led_Effect_4()  /* LED nháy đuổi từ giữa sang 2 bên và ngược lại */ 
    {
    	unsigned char EffectLED[]={0xE7,0xDB,0xBD,0x7E};
      for(i=0;i<4;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}
    	for(i=0;i<4;i++)
    	{
    		P2=EffectLED[3-i];
        for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}		
    }	
    void Led_Effect_5()  /* LED sáng chẵn lẻ  */
    {
    	unsigned char EffectLED[]={0xAA,0x55,0xAA,0x55};
    	for(i=0;i<4;i++)
    	{
    		P2=EffectLED[i];
    	  for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    	  }
      }
    }
    void Led_Effect_6()  /* LED Dồn Tuần Tự v1.0 */
    {
    	unsigned char EffectLED[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x7E,0x7D,0x7B,0x77,0x6F,0x5F,0x3F,
                                 0x3E,0x3D,0x3B,0x37,0x2F,0x1F,0x1E,0x1D,0x1B,0x17,0x0F,0x0E,0x0D,0x0B,0x07,
                                 0x06,0x05,0x03,0x02,0x01,0x01,0x00,0xFF};
      for(i=0;i<38;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}
    }
    void Led_Effect_7()  /* LED Dồn Tuần Tự v2.0 */
    {
    	unsigned char EffectLED[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0x7E,0xBE,0xDE,0xEE,0xF6,0xFA,0xFC,
                                 0x7C,0xBC,0xDC,0xEC,0xF4,0xF8,0x78,0xB8,0xD8,0xE8,0xF0,0x70,0xB0,0xD0,0xE0,
                                 0x60,0xA0,0xC0,0x40,0x80,0x80,0x00,0xFF};
      for(i=0;i<38;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}	
    }
    unsigned char dem_so_lan_bam_cong_tac()  /* Hàm đếm số lần bấm button */
    {
    	if(set==0)   /* Nếu button được bấm */
    	{
    		delay(500);     /* Trễ 1 khoảng thời gian cho xung nhiễu đi qua */
    		while(set==0)
    		 {;}
    		j++;
       if(j==9)
    		 j=0;
    	}
    	return j;
    }
    unsigned int toc_do_effect()
    {
    	if(up==0)
    	{
    		delay(500);
    		while(up==0)
    		 {;}
    		b-=50;
      }	
      if(down==0)
    	{
    		delay(500);
    		while(down==0)
    		  {;}
    		b+=150;
    	}
    	return b;	
    }
    void Set_Effect(unsigned char so_lan_bam)  /* Hàm lựa chọn hiệu ứng LED theo số lần bấm Button */
    {
    	switch(so_lan_bam)
      {
    		case 0: 
    			{
    				Led_Effect_0();		
            break;
    			}
    		case 1:
    			{
    				Led_Effect_1();
    				break;
    			}	
    			case 2:
    			{
    				Led_Effect_2();
    				break;
    			}
          case 3: 
        	{
    				Led_Effect_3();
    				break;
    			}	
          case 4:
    			{
    			  Led_Effect_4();
    				break;
    			}
    			case 5:
    			{
    				Led_Effect_5();
    				break;
    			}
    			case 6:
    			{
    				Led_Effect_6();
    				break;
    			}
    			case 7:
    			{
    				Led_Effect_7();
    				break;
    			}
    			case 8:
    			{
    				Led_Effect_1();
    				Led_Effect_2();
    				Led_Effect_3();
    				Led_Effect_4();
    				Led_Effect_5();
    				Led_Effect_6();
    				Led_Effect_7();
    				break;
    			}
      }	
    }	
    void main()
    {
    	while(1)
    	{	 
                 dem_so_lan_bam_cong_tac();
    	     toc_do_effect();
                 Set_Effect(j);	
      }
    }

  • #2
    Nguyên văn bởi khanhhungno1 Xem bài viết
    Mình viết code điểu khiển 8 LED đơn dùng 89S52 có nút set để thay đổi hiệu ứng LED, up và down để chỉnh tốc độ nháy, sao mà mô phỏng trên proteus thì chạy nhưng khi nạp vào mạch thật thì nhấn nút không được gì hết cả, nhờ các cao thủ giúp đỡ, mình mô phỏng trên proteus 8.
    Link code và file mô phỏng:
    Code Effect LED With 7 Effect + Button Set Effect + Up+ Down
    Code:
    #include <AT89x52.h>
    #define set P1_7
    #define up  P1_5  
    #define down  P1_6 
    unsigned int i,a,b=500;     /* Khai báo biến(toàn cục) cho vòng lặp for của các hàm hiệu ứng LED */
    unsigned char j=0;  /* Khai báo biến (toàn cục) để đếm số lần bấm button */	
    void delay(unsigned int ts)  /* Hàm tạo trễ */
    {
    	unsigned int x;
    	unsigned char y;
    	for(x=0;x<ts;x++)
    	{
    		for(y=0;y<125;y++)
    		{;}
    	}
    }
    void Led_Effect_0()   /* Hàm Effect LED luôn tắt */
    {
    	for(i=0;i<2;i++)
    	{
    		P2=0xFF;
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }
    	}
    }
    void Led_Effect_1()  /* Hàm Effect LED sáng tắt */
    {
    	unsigned char EffectLED[]={0x00,0xFF,0x00,0xFF};
      for(i=0;i<4;i++)
    	{
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
      }
    }
    void Led_Effect_2()  /* LED nháy đuổi 2 chiều */
    {
    	unsigned char EffectLED[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
      for(i=0;i<8;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
    	}
    	for(i=0;i<8;i++)
    	{
    		P2=EffectLED[7-i];
        for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  	
    	}
    } 
    void Led_Effect_3()  /* LED quét sáng dần 2 chiều */
    {
    	unsigned char EffectLED[]={0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00};
      for(i=1;i<9;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
    	}
    	for(i=0;i<9;i++)
    	{
    		P2=EffectLED[8-i];
    	  for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;							
        }  
      }
    }
    void Led_Effect_4()  /* LED nháy đuổi từ giữa sang 2 bên và ngược lại */ 
    {
    	unsigned char EffectLED[]={0xE7,0xDB,0xBD,0x7E};
      for(i=0;i<4;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}
    	for(i=0;i<4;i++)
    	{
    		P2=EffectLED[3-i];
        for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}		
    }	
    void Led_Effect_5()  /* LED sáng chẵn lẻ  */
    {
    	unsigned char EffectLED[]={0xAA,0x55,0xAA,0x55};
    	for(i=0;i<4;i++)
    	{
    		P2=EffectLED[i];
    	  for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    	  }
      }
    }
    void Led_Effect_6()  /* LED Dồn Tuần Tự v1.0 */
    {
    	unsigned char EffectLED[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x7E,0x7D,0x7B,0x77,0x6F,0x5F,0x3F,
                                 0x3E,0x3D,0x3B,0x37,0x2F,0x1F,0x1E,0x1D,0x1B,0x17,0x0F,0x0E,0x0D,0x0B,0x07,
                                 0x06,0x05,0x03,0x02,0x01,0x01,0x00,0xFF};
      for(i=0;i<38;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}
    }
    void Led_Effect_7()  /* LED Dồn Tuần Tự v2.0 */
    {
    	unsigned char EffectLED[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0x7E,0xBE,0xDE,0xEE,0xF6,0xFA,0xFC,
                                 0x7C,0xBC,0xDC,0xEC,0xF4,0xF8,0x78,0xB8,0xD8,0xE8,0xF0,0x70,0xB0,0xD0,0xE0,
                                 0x60,0xA0,0xC0,0x40,0x80,0x80,0x00,0xFF};
      for(i=0;i<38;i++)
      {
    		P2=EffectLED[i];
    		for(a=b;a>0;a--)
    		{
    			delay(1); 
          if(set==0 || up==0 || down==0)
          break;
    		}
    	}	
    }
    unsigned char dem_so_lan_bam_cong_tac()  /* Hàm đếm số lần bấm button */
    {
    	if(set==0)   /* Nếu button được bấm */
    	{
    		delay(500);     /* Trễ 1 khoảng thời gian cho xung nhiễu đi qua */
    		while(set==0)
    		 {;}
    		j++;
       if(j==9)
    		 j=0;
    	}
    	return j;
    }
    unsigned int toc_do_effect()
    {
    	if(up==0)
    	{
    		delay(500);
    		while(up==0)
    		 {;}
    		b-=50;
      }	
      if(down==0)
    	{
    		delay(500);
    		while(down==0)
    		  {;}
    		b+=150;
    	}
    	return b;	
    }
    void Set_Effect(unsigned char so_lan_bam)  /* Hàm lựa chọn hiệu ứng LED theo số lần bấm Button */
    {
    	switch(so_lan_bam)
      {
    		case 0: 
    			{
    				Led_Effect_0();		
            break;
    			}
    		case 1:
    			{
    				Led_Effect_1();
    				break;
    			}	
    			case 2:
    			{
    				Led_Effect_2();
    				break;
    			}
          case 3: 
        	{
    				Led_Effect_3();
    				break;
    			}	
          case 4:
    			{
    			  Led_Effect_4();
    				break;
    			}
    			case 5:
    			{
    				Led_Effect_5();
    				break;
    			}
    			case 6:
    			{
    				Led_Effect_6();
    				break;
    			}
    			case 7:
    			{
    				Led_Effect_7();
    				break;
    			}
    			case 8:
    			{
    				Led_Effect_1();
    				Led_Effect_2();
    				Led_Effect_3();
    				Led_Effect_4();
    				Led_Effect_5();
    				Led_Effect_6();
    				Led_Effect_7();
    				break;
    			}
      }	
    }	
    void main()
    {
    	while(1)
    	{	 
                 dem_so_lan_bam_cong_tac();
    	     toc_do_effect();
                 Set_Effect(j);	
      }
    }
    Mình sửa được rồi nhé!.

    Comment


    • #3
      chúc mừng bác

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X