Thông báo

Collapse
No announcement yet.

em đang làm cái chương trình dùng led matix để thiết kế đèn giao có vấn đề thắc mắc

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

  • em đang làm cái chương trình dùng led matix để thiết kế đèn giao có vấn đề thắc mắc

    viết cái code này cho AT89C51 Cho tớ hỏi để cho led matrix chạy đúng 1s so với ngoài đời thì làm như thế nào mình đã tạo hàm trễ dùng timer nhưng khi kết hợp với led matrix quét led thì thời gian kết hợp thì chưa dõ vì cả vòng lặp
    Các bạn chỉ dõ cho mình cách chạy đúng thòi gian ngoài đời và giải thích giúp mình nhé đây là code của mình dùng matrix 5*7
    cảm ơn các bạn trước nhé !!!
    #include<at89x51.h>
    void delay(int s)
    {
    while(s--)
    {
    TMOD=0x01;//hehe hehe
    TH0=0xFC;
    TL0=0x18;
    TR0=1;//cho phep timer hoat dong
    while(!TF0);
    TF0=0;
    TR0=0;
    }
    }
    unsigned char m,n,lap;
    void quet(unsigned int x)
    {
    while(x--){}
    }
    unsigned char quetcot[5]={0x01,0x02,0x04,0x08,0x10};
    unsigned char codeled[5][5]={{0xc1,0xbe,0xbe,0xbe,0xc1},{0xfb,0xfd,0x80,0xff, 0xff},{0x9d,0xae,0xb6,0xb8,0xff},{0xff,0xbe,0xb6,0 xb6,0xc9},
    {0xf7,0xf3,0xf5,0xf6,0x80}};
    void dislay()
    {
    for(m=0;m<5;m++)
    {
    for(lap=0;lap<5;lap++)
    {
    for(n=0;n<5;n++)
    {
    P2=quetcot[n];
    P1=codeled[m][n];
    delay(10);
    P1=0xff;
    P2=0x00;
    }
    }
    delay(975);
    }
    }
    void main()
    {
    while(1)
    {
    quet();
    dislay();
    }
    }

  • #2
    void delay_ms ( unsigned int time )
    {
    while ( time-- )
    {
    TMOD = 0x01 ;//chọn timer 0 chế độ 16bits
    TH0 = (-1000>>8) ;
    TL0 = ( -1000 ) ;
    TF0 = 0 ;
    TR0 = 1 ;
    while ( !TF0 ) ;
    }
    }
    bạn muốn delay 1s thì viết là delay_ms ( 1000 ) ;

    Comment


    • #3
      hàm trễ delay mình biết rồi ý mình là làm thế nào cho led ma trận kia đếm 0 1 2 3 4 chuẩn với thơi gian thực cơ

      Comment


      • #4
        Cái này thì bạn phải làm phép chia thôi. VD 1s cho tăng 1 số chẳng hạn. Như vậy thời gian để hiện thị 1 số là 1s.bạn dùng led 5x7 cột là anot thì 1 cột cần 1/5 = 0.2s cho phần hiện thị. Time quét tối thiểu để mắt người nhìn thấy ổn là 24 hình/1s tuơng đuơng khoảng 40ms/1hinh => chọn 20ms/1 lượt quét => 1 cột có time 20/5 = 4ms. dễ dàng nhận thấy vòng lặp ta cần là 0.2s/4ms = 50 lần. Hi vọng bạn hiểu ý mình,mình nói hơi khó hiểu tí. Có thể hiểu đơn giản là bạn chia time 1s đều cho mỗi cột là oke.

        Comment


        • #5
          Nguyên văn bởi phuphuongbk Xem bài viết
          Cái này thì bạn phải làm phép chia thôi. VD 1s cho tăng 1 số chẳng hạn. Như vậy thời gian để hiện thị 1 số là 1s.bạn dùng led 5x7 cột là anot thì 1 cột cần 1/5 = 0.2s cho phần hiện thị. Time quét tối thiểu để mắt người nhìn thấy ổn là 24 hình/1s tuơng đuơng khoảng 40ms/1hinh => chọn 20ms/1 lượt quét => 1 cột có time 20/5 = 4ms. dễ dàng nhận thấy vòng lặp ta cần là 0.2s/4ms = 50 lần. Hi vọng bạn hiểu ý mình,mình nói hơi khó hiểu tí. Có thể hiểu đơn giản là bạn chia time 1s đều cho mỗi cột là oke.
          bạn ơi cho mình hỏi mỗi vòng for thực hiện mấy bao nhiêu thời gian và cách chọn thời gian lặp cho vong for ntn
          có phải cái for(lap=0;lap<25;lap++);//trong cái code mình vết ý thì 25 mạng ý nghĩ gì và cách chọn thời gian lặp cho vòng for
          Last edited by chelseaboy; 19-10-2013, 00:58.

          Comment


          • #6
            mình cũng tương đối hiểu rồi cám ơn bạn nha

            Comment


            • #7
              time thực hiện 1 vòng lặp for thì còn tùy vào chỉ số nó thuộc kiểu gì bạn ak. VD kiểu unsigned char thì 1 vòng for mất 8 chu kỳ máy còn kiểu int thì sẽ nhiều hơn.Để xác định được time thực hiện 1 câu lệnh bạn có thể debug và xem dạng asm rồi đếm các câu lệnh ở đấy để tính số chu kỳ máy thực hiện là biết.

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X