BÀI 4 : LED TRÁI TIM PIC16F887

5:30:00 AM
Để kết thúc chuỗi bài đăng về LED đơn mình sẽ làm 1 ví dụ nhỏ về LED để tổng kết chuỗi bài về LED đơn đó là mạch trính tim sử dụng PIC16F887 để làm mạch mô phỏng trên Protues. Ở đây mình sẽ viết code trên trình biên dịch CCS cho nó đơn giản hơn. Trong bài này mình sẽ tổng hợp tất cả các liến thức của bài đăng trước vào bài này như là cách nối LED Anode chung hay Cathode chung, chớp tắt LED, đuổi LED, sáng dần và tắt dần…. Và lý do đơn giản nhất để mình sử dụng PIC16F887 là vì PORTA,B,C,D của nó có số chân bằng nhau nên rất thuận lợi cho việc vẽ mạch cũng như điều khiển LED theo ý muốn của chúng ta.
Trong bài đăng mình chỉ làm một vài hiệu ứng thôi nên các bạn thích thì có thể làm thêm nhiều hiệu ứng khác nữa bằng cách kết hợp các hiệu ứng ở các bài đăng trước và tham khảo trên các diễn đàn để làm cho nó đẹp và bắt mắt hơn.
Mạch này các bạn có thể làm tặng cho ba mẹ,người yêu  hay bạn bè gì tùy các bạn nhưng thông qua bài đăng này mình muốn các bạn hỏi nhiều hơn về PIC cũng như là về cấu tạo cũng như hoạt động của LED đơn.

- Đây là ảnh mô phỏng protues.

led trái tim pic16f887

- Đây là code chương trình.

#include <16F887.H>
#FUSES NOWDT,PUT,NOPROTECT,NOLVP,INTRC_IO
#USE DELAY(CLOCK=8M)
UNSIGNED INT32 I,X,Y,J,CD,DC,F,K;
VOID SANGHET()
{ SET_TRIS_B(0X00);SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);

      OUTPUT_B(0XFF); OUTPUT_C(0XFF);OUTPUT_D(0XFF);OUTPUT_A(0XFF); DELAY_MS(1000);
      OUTPUT_B(0X00); OUTPUT_C(0X00);OUTPUT_D(0X00);OUTPUT_A(0X00);DELAY_MS(1000);  
   
}
VOID SANGDUOI()
{SET_TRIS_b(0X00);SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);X=0X00000000;
  FOR(I=0;I<32;I++)
   {
      X=(X<<1)+0X01;
      OUTPUT_B(X);  OUTPUT_C(X>>8); OUTPUT_D(X>>16);  OUTPUT_A(X>>24); DELAY_MS(100);
   }
   FOR(I=0;I<32;I++)
   { X=(X>>1);
   OUTPUT_B(X); OUTPUT_C(X>>8);  OUTPUT_D(X>>16); OUTPUT_A(X>>24); DELAY_MS(100);
   }
}
 VOID SANGXENKE1()
   {
   for(I=0;I<2;I++)
   {
     SET_TRIS_b(0X00);SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);
 
     OUTPUT_B(0XAA); OUTPUT_C(0XAA);OUTPUT_D(0XAA);OUTPUT_A(0XAA); DELAY_MS(300);
     OUTPUT_B(0X00); OUTPUT_C(0X00);OUTPUT_D(0X00);OUTPUT_A(0X00);DELAY_MS(100);
     OUTPUT_B(0X55); OUTPUT_C(0X55);OUTPUT_D(0X55);OUTPUT_A(0X55); DELAY_MS(300);
     OUTPUT_B(0X00); OUTPUT_C(0X00);OUTPUT_D(0X00);OUTPUT_A(0X00);DELAY_MS(100);
 
   }
   }
VOID SANGCAP()
  { SET_TRIS_B(0X00); SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);X=0X00000000;Y=0X0000;
   FOR (I=0;I<16;I++)
   {
     X=(X<<1)+0X0001; Y=(Y>>1)+0X8000;
    OUTPUT_B(X); OUTPUT_A(Y>>8);
    OUTPUT_C(X>>8);OUTPUT_D(Y);
    DELAY_MS(500);
   }
  }
VOID SANGCAP1()
  { SET_TRIS_B(0X00); SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);X=0X00000000;Y=0X0000;
    FOR(I=0;I<16;I++)
  {
     X=(X>>1)+0X8000; Y=(Y<<1)+0X0001;
     OUTPUT_C(X>>8);OUTPUT_D(Y);
     OUTPUT_B(X);OUTPUT_A(Y>>8);
     DELAY_MS(300);
  }
  }
void sangdon2()

{   CD=0X00000000;
   FOR ( J=16;J>0;J--)
   {
      DC=0X00000003;
      FOR(I=0;I<J;I++)
     {
       Y=CD+DC;
      OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(Y>>16);  OUTPUT_A(Y>>24); DELAY_MS(100);
      DELAY_MS(100);
      DC=(DC<<2);
     }
     CD=Y;
   }
}
void sangdon1()

{   CD=0X00000000;
   FOR ( J=32;J>0;J--)
   {
      DC=0X00000001;
      FOR(I=0;I<J;I++)
     {
       Y=CD+DC;
      OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(Y>>16);  OUTPUT_A(Y>>24); DELAY_MS(40);
      DELAY_MS(100);
      DC=(DC<<1);
     }
     CD=Y;
   }
}
VOID SANG1()
   { X=0X00000001;J=0X80000000;
      FOR(I=0;I<32;I++)
       {
         Y=X;
         OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(Y>>16);  OUTPUT_A(Y>>24);
         DELAY_MS(100);
         X=(X<<1);
       }
      FOR (I=0;I<32;I++)
      {
         F=J;
         OUTPUT_B(F);  OUTPUT_C(F>>8); OUTPUT_D(F>>16);  OUTPUT_A(F>>24);
         DELAY_MS(100);
         J=J>>1;
      }    
   }
VOID SANGNUA()
{CD=0X00000000;DC=0X00000000;
  FOR(I=16;I>0;I--)
   {X=0X0001;J=0X8000;
     FOR (K=0;K<I;K++)
      {
         Y=CD+X ; F=DC+J;
         OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(F);  OUTPUT_A(F>>8);
         DELAY_MS(100);
         X=(X<<1);J=(J>>1);
      }
     CD=Y ; DC=F;
   }
}
       
     
VOID MAIN()
{ SET_TRIS_B(0X00); SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);
  WHILE (TRUE)
{
SANGHET();
SANGDUOI();
SANGXENKE1();
SANGCAP();
SANGCAP1();
SANGDON1();
SANGDON2();
SANG1();
SANGNUA();
}
}
- Link download project : Click here

Share this

Related Posts

Previous
Next Post »

1 nhận xét:

Write nhận xét
March 3, 2019 at 10:42 PM delete

Cho e xin sơ đồ mạch in với sơ đồ nguyên lí với ạ

Reply
avatar