Thông báo

Collapse
No announcement yet.

[HELP] cần giúp đỡ về hiệu ứng đổi màu cho led RGB

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

  • [HELP] cần giúp đỡ về hiệu ứng đổi màu cho led RGB

    em đang viết chương trình đổi màu cho led RGB bằng timer0 mode 2, sử dụng ic họ 8051, thạch anh 5Mhz nhưng k hiểu sao lại k làm theo ý mình được.
    em muốn nó sáng dần từng con thông qua lệnh switch case nhưng k hiểu sao cứ đến case thứ 2 thì nó lại trở lại case đầu, đây là code của em

    void Init_timer0_mode2(void)
    {

    TMOD &= 0xF0; /* Timer 0 mode 2 with software gate */
    TMOD |= 0x02; /* GATE0=0; C/T0#=0; M10=1; M00=0; */
    TL0 = 225; /* init values */
    TH0 = 225; /* reload value */
    ET0=1; /* enable timer0 interrupt */
    TR0=1; /* timer0 run */
    }

    unsigned char PWM_MAIN,PWM0,PWM1,PWM2;
    unsigned char PWMS[3],PWMSB[3],PWMSBS[3],tocdo=30,trangthai;
    unsigned int stick=0;
    long demtt=0;

    #define PWM0 P3_1
    #define PWM1 P3_3
    #define PWM2 P3_4

    #define led_r PWMS[0]
    #define led_g PWMS[1]
    #define led_b PWMS[2]

    void RGBC(void);
    void timer0(void) interrupt 1
    {
    TR0=0; //stop timer0
    TF0=0; // clear overflows flag
    // while(stick>0) stick--;
    if(PWM_MAIN>0) PWM_MAIN--; else PWM_MAIN=255;
    if(PWMS[0]<PWM_MAIN) PWM0=1; else PWM0=0;
    if(PWMS[1]<PWM_MAIN) PWM1=1; else PWM1=0;
    if(PWMS[2]<PWM_MAIN) PWM2=1; else PWM2=0;
    if(PWMSBS[0]<PWM_MAIN) PWMSB[0]=1; else PWMSB[0]=0;
    if(PWMSBS[1]<PWM_MAIN) PWMSB[1]=1; else PWMSB[1]=0;
    if(PWMSBS[2]<PWM_MAIN) PWMSB[2]=1; else PWMSB[2]=0;
    demtt++;
    RGBC();
    TR0=1;
    }

    void RGBC(void)
    {
    unsigned char buoc;
    switch(buoc)
    {
    case 0:
    if(stick>20)
    {
    if(PWMS[0]<255) PWMS[0]++; else PWMS[0]=0;
    stick=0;
    }
    else stick++;
    break;
    case 1:
    if(stick>20)
    {
    if(PWMS[0]>0) PWMS[0]--; else PWMS[0]=255;
    stick=0;
    }
    else stick++;
    break;
    case 2:
    if(stick>20)
    {
    if(PWMS[2]<255) PWMS[2]++; else PWMS[2]=0;
    stick=0;
    }
    else stick++;
    break;
    case 3:
    if(stick>20)
    {
    if(PWMS[2]>0) PWMS[2]--; else PWMS[2]=255;
    stick=0;
    }
    else stick++;
    break;
    }
    if(demtt>3000)
    {
    buoc++;
    demtt=0;
    }
    if(buoc>3) buoc=0;
    }

  • #2
    ai giúp em vớiiiiiiiiiiiiii

    Comment


    • #3
      Hãy xem thật kỷ trước khi hỏi nhé .

      Lỗi
      Code:
      void RGBC(void)
      {
      unsigned char buoc;
      sữa
      Code:
      unsigned char buoc;//dặt len tren cùng làm bíen toàn cục
       .......
       
      void RGBC(void)
      {
      thân.

      Comment


      • #4
        Nguyên văn bởi thientanvt Xem bài viết
        Hãy xem thật kỷ trước khi hỏi nhé .

        Lỗi
        Code:
        void RGBC(void)
        {
        unsigned char buoc;
        sữa
        Code:
        unsigned char buoc;//dặt len tren cùng làm bíen toàn cục
         .......
         
        void RGBC(void)
        {
        thân.
        em đã chuyển rồi nhưng vẫn vậy thôi, mà cái đó là biến cục bộ hay toàn cục vậy cũng đâu có ảnh hưởng gì đâu, "unsigned char buoc" em chỉ dùng trong hàm "void RGBC()" thôi mà

        Comment


        • #5
          Thứ nhất néu dạt trong void RGB thì mỏi lần dùng nó sẽ khai báo lại bién dó và có giá trị 0 hoặc xx
          Thứ 2 thạch anh nen dùng 12Mhz .

          Comment


          • #6
            Nguyên văn bởi thientanvt Xem bài viết
            Thứ nhất néu dạt trong void RGB thì mỏi lần dùng nó sẽ khai báo lại bién dó và có giá trị 0 hoặc xx
            Thứ 2 thạch anh nen dùng 12Mhz .
            thank bác nha, em tìm ra nguyên nhân rồi, do lúc cài đặt chân i/o em để chế độ input nên nó cứ chạy loạn xạ. em đang viết chương trình cho con led độ điện thoại nên k dùng thạch anh ngoài đc

            Comment


            • #7
              8051 có chế độ cài đặt Input, output ah, sao mình không biết nhỉ. bạn dùng trình dịch gì vậy????????????????.

              Comment


              • #8
                Nguyên văn bởi unhandsome Xem bài viết
                thank bác nha, em tìm ra nguyên nhân rồi, do lúc cài đặt chân i/o em để chế độ input nên nó cứ chạy loạn xạ. em đang viết chương trình cho con led độ điện thoại nên k dùng thạch anh ngoài đc
                mình đọc về 8051 cũng khá nhiều, nhưng chưa thấy phải cài đặt I/O bao h? bạn đang nhầm lẫn chăng?
                Nguyễn Huy Biên - 01649 802 694
                gmail :

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X