Thông báo

Collapse
No announcement yet.

led 7 thanh từ 0-9

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

  • led 7 thanh từ 0-9

    Mình mới học về lập trình C, có vài cái chưa hiểu lắm ai có thế cho mình xin cái code led 7 đoạn sáng từ 0-9 dể mình tham khảo dc ko, xin cám ơn
    maled: 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90
    Last edited by bienhoacc; 06-06-2012, 11:32.

  • #2
    Cho mình hỏi về delay, nhiều người hay sử dụng delay này
    void delay_ms(int ms) // hàm tao tre
    {
    int i,j;
    for(i=0;i<=ms;i++)
    for(j=0;j<=120;j++)
    {;}
    }

    còn mình thì sử dụng delay này

    void delay(long time)
    {
    while (time--);
    }

    Mình thấy delay của mình ngắn dễ hiểu hơn nhưng sao nhiều người lại sử dụng delay ở trên hơn.
    Ai có cái code đếm từ o-9 thì cho mình xin về tham khảo với nhé.

    Comment


    • #3
      void delay_ms(int ms) // hàm tao tre
      {
      int i,j;
      for(i=0;i<=ms;i++)
      for(j=0;j<=120;j++)
      {;}
      }
      đây là hàm delay xấp xỉ 1 ms nên lúc gọi hàm sẽ cho thời gian chuẩn xác như mong muốn , viết như bạn cũng k sao ,ước lượng chính xác là dc , nhưng với các ứng dụng cần độ chính xác cao thì bạn nên dùng timer để tạo ham delay .

      Comment


      • #4
        Code:
        #include <REGX51.H>
        unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
        void delay(long time)
        {long n;
        for(n=0;n<time;n++)
        {
        ;
        }
        }
        void main()
        {int k;
        while(1)
        {for(k=0;k<10;k++)
        {P2=ma[k];
        delay(5000);
        }
        }
        }
        Nguyễn Huy Biên - 01649 802 694
        gmail :

        Comment


        • #5
          Nguyên văn bởi bienhou Xem bài viết
          Code:
          #include <REGX51.H>
          unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
          void delay(long time)
          {long n;
          for(n=0;n<time;n++)
          {
          ;
          }
          }
          void main()
          {int k;
          while(1)
          {for(k=0;k<10;k++)
          {P2=ma[k];
          delay(5000);
          }
          }
          }
          bạn xem lại code nhé ! Led 7 thanh bạn không cho kích nguồn à hay bạn nối lên nguồn luôn,nếu nối lên nguồn luôn thì bạn chính xác ,còn nếu không thì chưa chính xác ! theo ý kiến của mình để tạo thói quen tốt khi viết code thì phần cứng quá quan trọng luôn bạn đưa code lên thì bạn phải có sơ đồ nguyên lý thì các anh em mới hiểu ý bạn muốn làm gì ở đoạn code đó chứ ? vài ý kiến nhỏ mong bác đừng chém !
          Email :
          Phone : 0902 5777 39
          Branch: LẬP TRÌNH CÁC DÒNG CHIP NXP, ST, ATMEL

          Comment


          • #6
            Nguyên văn bởi bienhoacc Xem bài viết
            Cho mình hỏi về delay, nhiều người hay sử dụng delay này
            void delay_ms(int ms) // hàm tao tre
            {
            int i,j;
            for(i=0;i<=ms;i++)
            for(j=0;j<=120;j++)
            {;}
            }

            còn mình thì sử dụng delay này

            void delay(long time)
            {
            while (time--);
            }



            Mình thấy delay của mình ngắn dễ hiểu hơn nhưng sao nhiều người lại sử dụng delay ở trên hơn.
            Ai có cái code đếm từ o-9 thì cho mình xin về tham khảo với nhé.
            thế này bác nhé !
            for(j=0;j<=120;j++) tương đương 120x8us=960us chưa được 1ms với thạch anh 12 MHZ
            for(i=0;i<=ms;i++) thì chính xác hơn nhé 125x8us=1000us=1ms với thạch anh 12 MHZ nhé
            còn vòng for(i=0;i<ms;i++) chỉ là bộ số của 1ms thôi ví dụ bạn muốn trễ 10ms thì sẽ nạp ms=10; thế nhé
            Email :
            Phone : 0902 5777 39
            Branch: LẬP TRÌNH CÁC DÒNG CHIP NXP, ST, ATMEL

            Comment


            • #7
              Nguyên văn bởi daily84 Xem bài viết
              bạn xem lại code nhé ! Led 7 thanh bạn không cho kích nguồn à hay bạn nối lên nguồn luôn,nếu nối lên nguồn luôn thì bạn chính xác ,còn nếu không thì chưa chính xác ! theo ý kiến của mình để tạo thói quen tốt khi viết code thì phần cứng quá quan trọng luôn bạn đưa code lên thì bạn phải có sơ đồ nguyên lý thì các anh em mới hiểu ý bạn muốn làm gì ở đoạn code đó chứ ? vài ý kiến nhỏ mong bác đừng chém !
              Anot của led e nối duơng nguồn luôn bác.
              Nguyễn Huy Biên - 01649 802 694
              gmail :

              Comment


              • #8
                - Cám ơn các bạn đã nhiệt tình giúp đở
                - Mình làm thêm nút nhấn khi nhấn nút ở p1.0 thì led 7 đoạn tăng len 1 số. Nhưng sao nó cứ hiện số 0 và ko tăng lên được, đây là code của mình

                #include<regx51.h>
                unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                sbit up=P1^0;
                int tang =0;

                void main()
                {
                while(1)
                {
                P2=ma[tang];
                if(up=0)
                {
                while(!up);
                tang = tang+1;
                }
                }
                }

                Comment


                • #9
                  viết như bạn thì nếu có chạy thì khi bạn ấn nút nó sẽ chạy từ 0-9. chứ ko phải ấn 1 nút nó nẩy 1 số đâu.
                  bạn có thể dùng ngắt hoặc dùng cấu trúc swicht- case
                  Nguyễn Huy Biên - 01649 802 694
                  gmail :

                  Comment


                  • #10
                    Code:
                    #include <REGX51.H>
                    unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                    sbit tang=P1^0;
                    unsigned int k=0;
                    void delay(long time)
                    {long n;
                    for(n=0;n<time;n++)
                    {
                    ;
                    }
                    }
                    void khoitao()
                    {EA=0;
                    IT0=1;
                    EX0=1;
                    EA=1;
                    }
                    void isr_0() interrupt 0
                    {
                    k++;
                    }
                    void main()
                    {khoitao();
                    while(1)
                    {P2=ma[k];
                    if(k==10)k=0;
                    }
                    }
                    đây là ví dụ dùng ngắt. bạn tham khảo nhé. nút ấn nối vào chân INT0 P3^2
                    Nguyễn Huy Biên - 01649 802 694
                    gmail :

                    Comment


                    • #11
                      Nguyên văn bởi bienhou Xem bài viết
                      Code:
                      #include <REGX51.H>
                      unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                      sbit tang=P1^0;
                      unsigned int k=0;
                      void delay(long time)
                      {long n;
                      for(n=0;n<time;n++)
                      {
                      ;
                      }
                      }
                      void khoitao()
                      {EA=0;
                      IT0=1;
                      EX0=1;
                      EA=1;
                      }
                      void isr_0() interrupt 0
                      {
                      k++;
                      }
                      void main()
                      {khoitao();
                      while(1)
                      {P2=ma[k];
                      if(k==10)k=0;
                      }
                      }
                      đây là ví dụ dùng ngắt. bạn tham khảo nhé. nút ấn nối vào chân INT0 P3^2
                      Ví dụ về ngắt của bạn rất hay, bạn có thể cho mình hỏi trong chương trình của bạn có lệnh k++, lệnh đó dùng để làm gì vậy bạn. Cám ơn

                      Comment


                      • #12
                        Nguyên văn bởi bienhoacc Xem bài viết
                        - Cám ơn các bạn đã nhiệt tình giúp đở
                        - Mình làm thêm nút nhấn khi nhấn nút ở p1.0 thì led 7 đoạn tăng len 1 số. Nhưng sao nó cứ hiện số 0 và ko tăng lên được, đây là code của mình

                        #include<regx51.h>
                        unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                        sbit up=P1^0;
                        int tang =0;

                        void main()
                        {
                        while(1)
                        {
                        P2=ma[tang];
                        if(up=0) // ? ý bác là gì đây nếu so sánh phải là "=="
                        {
                        while(!up); // ở đây bác nên cho delay(50) vào nhé
                        tang = tang+1;
                        }
                        }
                        }
                        P2=ma[tang];
                        if(up=0) // ? ý bác là gì đây nếu so sánh phải là "=="
                        {
                        while(!up); // ở đây bác nên cho delay(50) vào nhé
                        tang = tang+1;
                        chú ý cho bác : bác nên xử lý phím nhấn trong hàm ngắt có vẻ hợp lý và chuyên nghiệp hơn nha bác ! một vài ý kiến nhỏ bác có thể tham khảo
                        Email :
                        Phone : 0902 5777 39
                        Branch: LẬP TRÌNH CÁC DÒNG CHIP NXP, ST, ATMEL

                        Comment


                        • #13
                          Nguyên văn bởi bienhoacc Xem bài viết
                          Ví dụ về ngắt của bạn rất hay, bạn có thể cho mình hỏi trong chương trình của bạn có lệnh k++, lệnh đó dùng để làm gì vậy bạn. Cám ơn
                          có gì đau bác ! bác bienhou dùng ngắt ngoài khi có ngắt ngoài sẽ nhẩy đến trình phục vụ ngắt và tăng biến k lên 1 thế thôi !
                          Email :
                          Phone : 0902 5777 39
                          Branch: LẬP TRÌNH CÁC DÒNG CHIP NXP, ST, ATMEL

                          Comment


                          • #14
                            Nguyên văn bởi daily84 Xem bài viết
                            có gì đau bác ! bác bienhou dùng ngắt ngoài khi có ngắt ngoài sẽ nhẩy đến trình phục vụ ngắt và tăng biến k lên 1 thế thôi !
                            vâng. bác nói đúng đó. khi có ngắt xảy ra thì k tăng 1 giá trị
                            Nguyễn Huy Biên - 01649 802 694
                            gmail :

                            Comment


                            • #15
                              Nguyên văn bởi daily84 Xem bài viết
                              P2=ma[tang];
                              chú ý cho bác : bác nên xử lý phím nhấn trong hàm ngắt có vẻ hợp lý và chuyên nghiệp hơn nha bác ! một vài ý kiến nhỏ bác có thể tham khảo
                              - Cám ơn bạn đã góp ý, nhưng mình chỉ mới học về lập trình C, hàm ngắt bên ASM mình có học rồi (nhưng ko hiểu lắm)

                              - Mình có làm 1 bài như này
                              - Viết chương trình cài đặt số đếm từ 0-9
                              - Nhấn nút up thì tăng lên 1 số
                              - Nhấn nút down thì giảm xuống 1 số ( VD nhấn up tăng len đến số 8, nhấn down sẽ giảm xuống số 7 nhấn tiếp thì giảm tiếp cho đến khi về 0)
                              - Nhấn nút start thì đếm lên tự động (vd: đang nhấn up đếm lên được số 2 rồi mình nhấn start nó sẽ tự động tăng lên tiếp số 3 cho đến số 9 rồi lại về 0 tiếp tục đếm đến 9, cứ như vậy)
                              - Nhấn stop thì dừng ( dừng cho nó về 0 hoặc là led không sáng nữa, rồi lại tiếp tục nhấn up nhấn down, nhấn start tùy ý )
                              Đây là code của mình

                              /*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
                              #include <regx51.h>
                              unsigned char code ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                              sbit start=P1^0;
                              sbit stop=P1^1;
                              sbit up=P1^2;
                              sbit down=P1^3;

                              int n=0 ;
                              void delay(long time) //ham delay
                              {
                              while(time--);
                              }
                              void main()
                              {
                              while(1)
                              {
                              if (up==0 && down==1 && n<9)
                              {
                              while (!up);
                              n=n+1;
                              }
                              if (up==1 && down==0 && n>0)
                              {
                              while (!down);
                              n=n-1;
                              }
                              P2=ma[n];
                              }
                              }

                              /*Mình chỉ viết được nhấn up với nhấn down còn nhấn start với stop thì chịu thua, các bạn có thể giúp mình được ko, sử dụng hàm ngắt cũng được mình cũng có thể tham kháo thêm, xin cám ơn*/
                              Đây là fire mô phỏng của mình
                              http://www.mediafire.com/?5hvkyvf36bg73zh
                              Last edited by bienhoacc; 07-06-2012, 23:01.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • mèomướp
                                Trả lời cho Công thức điện tử
                                bởi mèomướp
                                Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
                                hôm nay, 21:21
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
                                hôm nay, 20:31
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                Ok , thanks bác đã chỉ...
                                hôm nay, 15:06
                              • nguyendinhvan
                                Công thức điện tử
                                bởi nguyendinhvan
                                Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

                                Chập thì thay. Cháy thì tháo
                                Làm thì láo. Báo thì hay
                                May thì khoe. Rủi thì bỏ
                                Thành tích nhỏ. Báo thành to
                                Làm cho có. Báo chi li
                                Sai cả li. Báo
                                ...
                                hôm nay, 00:35
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
                                Hôm qua, 22:31
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
                                Hôm qua, 22:14
                              • bactho
                                Trả lời cho Tự làm máy đo Cuộn cảm
                                bởi bactho
                                Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
                                Hôm qua, 21:48
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
                                Hôm qua, 21:43
                              • bactho
                                Trả lời cho các bạn giúp mình về file HEX với!!!
                                bởi bactho
                                Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
                                Hôm qua, 21:21
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
                                Hôm qua, 20:43
                              Đang tải...
                              X