Thông báo

Collapse
No announcement yet.

Help "Timer 1 pic16f877a"

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

  • Help "Timer 1 pic16f877a"

    Em đang học timer của con này, viết thử đoạn code quét LED ma trận 8x8 cho nó sáng LED hình trái tim
    sau khoảng thời gian chiu khó đọc tài liệu trên đây của các pro, e cũng viết được 1 đoạn code với CCS. có vẻ khá ổn
    nhưng khi mô phỏng thì ôi thôi, sao lại thế. cái trái tim của em nó đâu mất rồi, thành cái cục kỳ quái gì thế này.
    Đây là code của em, mong mọi người xem và góp ý giúp em.
    e cảm ơn rất nhiều
    e dùng HC595 và HC138 quét cột và hàng, dùng timer1 quét LED và truyền SPI ra HC595
    Không biết sai chỗ nào nữa...
    Code:
    #include <16f877a.h>
    
    #fuses HS,NOWDT,NOPROTECT
    #use fast_io(D)
    
    #use delay(clock=2000000)
    #define SCK   PIN_C3
    #define DATA  PIN_C5
    #define SCL   PIN_C4
    #define A     PIN_D0
    #define B     PIN_D1
    #define C     PIN_D2
    #define OE    PIN_D3
    
    unsigned char text[]={24,24,96,6,36,36,32,4,66,66,16,8,129,129,8,16,1,128,4,32,1,128,2,64,1,128,1,128,2,64,0,0};
    unsigned char Dao[32];
    
    unsigned char i=0;
    unsigned char j;
    
    void LatchData()
     {
     output_low(SCL);
     output_high(SCL);
     }
    #int_timer1
    void ngat_timet1()
     {
     set_timer1(64535);
    
      spi_write(text[i*4+3]);
      spi_write(text[i*4+2]);
      spi_write(text[i*4+1]);
      spi_write(text[i*4]);
    
     LatchData();
     output_D(i+8);
     i++;
     if(i==8)
     i=0;
     }
    
    
    void main()
    {
     output_high(SCK);
     output_high(SCL);
     
     setup_timer_1 ( T1_DISABLED );
     setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
     setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
    
     
     setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_16);
     
     enable_interrupts(INT_SSP);
     enable_interrupts(INT_TIMER1);
     enable_interrupts(GLOBAL);
     set_tris_D(0x00);
     set_tris_C(0x00);
     for(j=0;j<=31;j++)
     Dao[j]=~text[j];
     while (true)
     {
     }
    }
    còn đây là file mô phỏng:
    https://www.dropbox.com/s/yzxcgko2rmm0ghm/manMatrix.rar
    không up được lên diễn đàn, chắc tại bắt wifi chùa
    giúp e với nhé!
    thêm cái ảnh lỗi cho nó dễ nhìn:
    https://www.dropbox.com/s/1a5juli51682wud/traitim.png
    Last edited by ngocnamdhgt; 12-10-2012, 12:31.

  • #2
    Nguyên văn bởi ngocnamdhgt Xem bài viết
    Em đang học timer của con này, viết thử đoạn code quét LED ma trận 8x8 cho nó sáng LED hình trái tim
    sau khoảng thời gian chiu khó đọc tài liệu trên đây của các pro, e cũng viết được 1 đoạn code với CCS. có vẻ khá ổn
    nhưng khi mô phỏng thì ôi thôi, sao lại thế. cái trái tim của em nó đâu mất rồi, thành cái cục kỳ quái gì thế này.
    Đây là code của em, mong mọi người xem và góp ý giúp em.
    e cảm ơn rất nhiều
    e dùng HC595 và HC138 quét cột và hàng, dùng timer1 quét LED và truyền SPI ra HC595
    Không biết sai chỗ nào nữa...
    Code:
    #include <16f877a.h>
    
    #fuses HS,NOWDT,NOPROTECT
    #use fast_io(D)
    
    #use delay(clock=2000000)
    #define SCK   PIN_C3
    #define DATA  PIN_C5
    #define SCL   PIN_C4
    #define A     PIN_D0
    #define B     PIN_D1
    #define C     PIN_D2
    #define OE    PIN_D3
    
    unsigned char text[]={24,24,96,6,36,36,32,4,66,66,16,8,129,129,8,16,1,128,4,32,1,128,2,64,1,128,1,128,2,64,0,0};
    unsigned char Dao[32];
    
    unsigned char i=0;
    unsigned char j;
    
    void LatchData()
     {
     output_low(SCL);
     output_high(SCL);
     }
    #int_timer1
    void ngat_timet1()
     {
     set_timer1(64535);
    
      spi_write(text[i*4+3]);
      spi_write(text[i*4+2]);
      spi_write(text[i*4+1]);
      spi_write(text[i*4]);
    
     LatchData();
     output_D(i+8);
     i++;
     if(i==8)
     i=0;
     }
    
    
    void main()
    {
     output_high(SCK);
     output_high(SCL);
     
     setup_timer_1 ( T1_DISABLED );
     setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
     setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
    
     
     setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_16);
     
     enable_interrupts(INT_SSP);
     enable_interrupts(INT_TIMER1);
     enable_interrupts(GLOBAL);
     set_tris_D(0x00);
     set_tris_C(0x00);
     for(j=0;j<=31;j++)
     Dao[j]=~text[j];
     while (true)
     {
     }
    }
    còn đây là file mô phỏng:
    https://www.dropbox.com/s/yzxcgko2rmm0ghm/manMatrix.rar
    không up được lên diễn đàn, chắc tại bắt wifi chùa
    giúp e với nhé!
    thêm cái ảnh lỗi cho nó dễ nhìn:
    https://www.dropbox.com/s/1a5juli51682wud/traitim.png
    quả tim đó bị rối loạn nhịp đập .
    Code:
    void ngat_timet1()
     {
     
      set_timer1(64535);
      spi_write(dao[i*4+3]);
      delay_us(40);
      spi_write(dao[i*4+2]);
        delay_us(40);
      spi_write(dao[i*4+1]);
        delay_us(40);
      spi_write(dao[i*4]);
        delay_us(40);
      LatchData();
      output_D(i+8);
     i++;
     if(i==8)
     i=0;
     
     }
    |

    Comment


    • #3
      Á, bác sỹ bắt mạch cái ra luôn bái phục...
      cảm ơn anh tdm nhiều, nó chạy rồi a
      hic, nhưng mà sao e cho code khác vào nó không đúng nhỉ, liệu code của e có bị sai ở đâu không anh... nó vẫn không nghe lời e gì cả, chạy loạn lên. cái trái tim vừa nãy bị lỗi ở dòng 4. Mong anh chỉ giáo thêm ạ
      Last edited by ngocnamdhgt; 13-10-2012, 00:13.

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X