Thông báo

Collapse
No announcement yet.

Lập trình Led bằng C dùng 8051

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

  • Lập trình Led bằng C dùng 8051

    Chào các bác. Em mới vào nghề với con 8051. Hiện em đang học lập trình led dùng 8051. Nhưng em ko biết làm sao để điều khiển 2 dòng chữ chạy độc lập nhau khi chỉ dùng 1 con vi điều khiển 8051. Ví dụ ta có dòng chữ "ĐIỆN TỬ VIỆT NAM" và viền xung quanh phải chạy độc lập nhau. nhưng em ko biết làm thế nào cả. Các bác chỉ giùm em. Thanks...

  • #2
    dễ thôi mà bạn. hãy kết nối viền ngoài với 1 ngõ ra khác của vdk là được thui mà. chúc thành công

    Comment


    • #3
      bạn phải tìm hiểu thêm về 8051 nha

      Comment


      • #4
        Ý em hỏi là mình fai lập trình như thế nào. Các bác có thể chỉ giúp em ko?
        Có fai ta dùng hàm ngắt ko các bác. Các bác có thể cho em đoạn code để em tham khảo ko? code c hay asm đều đc

        Comment


        • #5
          cần gì ngắt hả bạn .mình ví dụ đường viền là P0 ,chữ là P1 ,giơ muon cho 2 cái chạy cùng lúc chỉ cần viết
          P0=0xaa;
          P1=0x78;
          delay(); //đấy là ví dụ nha
          P0=0x55;
          P1=0xce;
          delay();
          thế là 2 cái chạy cùng lúc ,vì thời gian sử lý 1 lệnh của vdk quá nhanh nên ta cảm giác chúng chạy cùng nhau.

          Comment


          • #6
            Cảm ơn bạn hepro_90nd. Nhưng mình muốn viết 1 chương trình chuyên nghiệp với nhiều hiệu ứng khác nhau. Nhiều chữ khác nhau và cả đường viền nữa thì viết như bạn ko ổn. Hơn nữa có thể có chữ nhiều hơn 8 chân của 1 cổng, theo mình để tạo hiệu ứng cho chữ đó thì fai sd vòng lặp. Mình có thể viết cho 1 chữ nhưng viết cho nhiều chữ và cả đường viền chạy đồng thời và độc lập nhau thì mình chưa biết làm thế nào cả. Mong mọi ng chỉ giáo giúp.

            Comment


            • #7
              nếu bạn làm biển cảo cáo chuyên nghiệp nên dùng phiên bản leddim của anh bảo việt hoàng vì phần mềm đó có thể cho trong một cổng chạy khác nhau và cùng một lúc thêm cả băm xung nữa rất hay mình đang làm hình trái tim tặng bạn gái nên cũng cần đường viền và đã dung leddim làm điều đó rất ok còn nếu không thì bạn lắp một bộ điều khiển riêng dành riêng cho đường viền có thay bằng vxl thì lắp mạch dao động đa hài cũng được mình cũng đã làm thử rất tốt mình thử viết bằng phương phát của bác hepro_90nd nhưng không ổn lắm
              hãy làm theo cách của bạn!

              Comment


              • #8
                Mình dùng cái này đế lập trình led trái tim đấy .Mình thấy lập trình cho mấy cái chữ với đường viền thì quá đơn giản .Dùng vòng for kết hợp với mảng là xong .Đọc đoạn code này mình viết xem có hiểu k? Nếu hiểu là làm dc.
                //############################################
                #include<reg52.h>
                #include<stdio.h>
                #include<intrins.h>
                unsigned int i,j,k;
                //###### ham delay tao thoi gian tre 0.5s ######
                void delay(unsigned int ms)
                {
                unsigned int a;
                unsigned char b;
                for(a=0;a<ms;a++)
                {
                for(b=0;b<125;b++)
                {
                }
                }
                }
                //##### hieu ung chop tat toan bo led ########
                void hieu_ung_1(void)
                {
                for(k=0;k<8;k++)
                {
                P0=P1=P2=P3=0xff;
                delay(300);
                P0=P1=P2=P3=0x00;
                delay(300);
                }
                }
                //##### hieu ung chop 2 nua trai tim #########
                void hieu_ung_2(void)
                {
                for(i=0;i<6;i++)
                {
                P0=P3=0x00;
                delay(300);
                P0=P3=0xff;
                P1=P2=0x00;
                delay(300);
                P1=P2=0xff;
                }
                }
                //##### hieu ung led nhay so le 1 ##############
                void hieu_ung_3(void)
                {
                for(i=0;i<8;i++)
                {
                P0=P1=P2=P3=0x55;
                delay(300);
                P0=P1=P2=P3=0xaa;
                delay(300);
                }
                }
                //##### hieu ung led nhay so le 2 ##############
                void hieu_ung_4(void)
                {
                for(i=0;i<8;i++)
                {
                P0=P1=P2=P3=0xaa;
                delay(300);
                P0=P1=P2=P3=0x55;
                delay(300);
                }
                }
                //##### p0,p1,p2,p3,p4 cung sang thuan ######
                void hieu_ung_5(void)
                {
                unsigned char x,y;
                x=y=255;
                i=1;
                j=128;
                for(k=0;k<8;k++)
                {
                x=x-i;
                y=y-j;
                P0=x;
                P1=P2=P3=y;
                i=i*2;
                j=j/2;
                delay(300);
                }
                }
                //##### p0,p1,p2,p3,p4 cung sang nghich ######
                void hieu_ung_6(void)
                {
                unsigned char x,y;
                x=y=255;
                i=1;
                j=128;
                for(k=0;k<8;k++)
                {
                x=x-i;
                y=y-j;
                P0=y;
                P1=P2=P3=x;
                i=i*2;
                j=j/2;
                delay(300);
                }
                }
                //##### sang dan het cac led theo chieu thuan ##
                void hieu_ung_7(void)
                {
                unsigned char M[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,
                0x80,0x00};
                unsigned char N[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,
                0x01,0x00};
                P0=P1=P2=P3=0xff;
                for(i=0;i<8;i++)
                {
                P0=M[i];
                delay(300);
                }
                for(i=0;i<8;i++)
                {
                P2=N[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P3=N[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P1=N[i];
                delay(300);
                }
                }
                //##### tat dan het cac led theo chieu thuan ############
                void hieu_ung_8(void)
                {
                unsigned char M[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
                unsigned char N[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
                P0=P1=P2=P3=0x00;
                for(i=0;i<8;i++)
                {
                P0=M[i];
                delay(300);
                }
                for(i=0;i<8;i++)
                {
                P2=N[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P3=N[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P1=N[i];
                delay(300);
                }
                }
                //##### sang dan het cac led theo chieu nghich #####
                void hieu_ung_9(void)
                {
                unsigned char M[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
                unsigned char N[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
                P0=P1=P2=P3=0xff;
                for(i=0;i<8;i++)
                {
                P1=M[i];
                delay(300);
                }
                for(i=0;i<8;i++)
                {
                P3=M[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P2=M[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P0=N[i];
                delay(300);
                }
                }
                //##### tat dan het cac led theo chieu nghich #####
                void hieu_ung_10(void)
                {
                unsigned char M[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
                unsigned char N[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
                P0=P1=P2=P3=0x00;
                for(i=0;i<8;i++)
                {
                P1=M[i];
                delay(300);
                }
                for(i=0;i<8;i++)
                {
                P3=M[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P2=M[i];
                delay(300);
                }for(i=0;i<8;i++)
                {
                P0=N[i];
                delay(300);
                }
                }
                //##### hieu ung pro 1 #################
                void hieu_ung_11(void)
                {
                unsigned char M[]={0xf0,0xe1,0xc3,0x87,0x0f};
                unsigned char N[]={0x0f,0x4f,0x63,0x71,0x78};
                unsigned char L[]={0x1f,0x4f,0x6f,0x73,0x79,0x7c};
                unsigned char K[]={0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};
                P0=P1=P2=P3=0xff;
                for(i=0;i<5;i++)
                {
                P0=M[i];
                delay(300);
                }
                P0=0xff;
                for(i=0;i<5;i++)
                {
                P2=N[i];
                delay(300);
                }
                P2=0x7f;
                for(i=0;i<6;i++)
                {
                P3=L[i];
                delay(300);
                }
                P2=P3=0x7f;
                for(i=0;i<7;i++)
                {
                P1=K[i];
                delay(300);
                }
                P1=P2=P3=0x7f;
                }

                Comment


                • #9
                  Nguyên văn bởi tjeunjnzah Xem bài viết
                  nếu bạn làm biển cảo cáo chuyên nghiệp nên dùng phiên bản leddim của anh bảo việt hoàng vì phần mềm đó có thể cho trong một cổng chạy khác nhau và cùng một lúc thêm cả băm xung nữa rất hay mình đang làm hình trái tim tặng bạn gái nên cũng cần đường viền và đã dung leddim làm điều đó rất ok còn nếu không thì bạn lắp một bộ điều khiển riêng dành riêng cho đường viền có thay bằng vxl thì lắp mạch dao động đa hài cũng được mình cũng đã làm thử rất tốt mình thử viết bằng phương phát của bác hepro_90nd nhưng không ổn lắm
                  bạn có thể share phần mềm này cho mình được không? mà mình nghe nói là kích hoạt phần mềm này thì mỗi máy có một code kích hoạt khác nhau đúng không?
                  thanks trước.

                  0912.159.369

                  Comment


                  • #10
                    Cảm ơn bạn hepro_90nd. Mình sẽ đọc đoạn code of bạn. nếu ko hiểu mình lại nhờ bạn chỉ giúp.

                    Comment


                    • #11
                      @tjeunjnzah: Mình đang học để biết lập trình thôi bạn à. Bắt đầu bằng việc xuất nhập cho các led. :d. phầm mềm ledimm mình cũng đã dùng rồi. Nhưng nó làm cho sinh viên như bọn mình lười nhác. ko chịu tìm hiểu để phát triển thêm kiến thức của mình. phầm mềm đó có 1 nhược điểm là khi cho led tối dần thì led bị nháy. Và chỉ có 1 hàm delay duy nhất cho tất cả các hiệu ứng.

                      Comment


                      • #12
                        Bác hepro_90nd ơi. Ý em là thế này.Em tác động vào các cổng theo từng bít. Ví dụ như một chữ có 10 chữ cái chẳng hạn, thì em định nghĩa cho nó từ chân P0_0 đến chân P1_1 chằng hạn. còn các chân P1_2 đến P1_4 thì em định nghĩa cho viền, và các chân còn lại em lại định nghĩa cho các chữ cái khác. Và viết hiệu ứng cho từng chữ riêng. Sau rồi làm cách nào để cho chúng chạy đồng thời cùng 1 lúc. Viết như bác thì khi muốn sửa hiệu ứng cho từng chữ rất khó. Bác có cách nào ko? giúp em với.

                        Comment


                        • #13
                          Sao chẳng có ai giúp em vậy??

                          Comment


                          • #14
                            Nguyên văn bởi hepro_90nd Xem bài viết
                            Mình dùng cái này đế lập trình led trái tim đấy .Mình thấy lập trình cho mấy cái chữ với đường viền thì quá đơn giản .Dùng vòng for kết hợp với mảng là xong .Đọc đoạn code này mình viết xem có hiểu k? Nếu hiểu là làm dc.
                            cho mình hỏi chút nha: cai viền bạn dùng ở đoạn nào vây?
                            Tôi thích cái cầu kỳ của kỹ thuật
                            Nhưng ghét mọi phức tạp trong tính cách con người

                            Comment


                            • #15
                              Nguyên văn bởi MinhNhat_dhv Xem bài viết
                              Sao chẳng có ai giúp em vậy??
                              bạn à nếu ko dùng ngắt, theo mình để dễ viết vì chưa siêu lắm bạn nên chọn 1 port out riêng biệt. để thực hiện cái viền chạy chỉ cần có 3 bít là đủ vd: P0_0; P0_1; P0_2. Các Led sẽ đc đấu song song theo từng cặp 1_1_1....; 2_2_2..nX2 ; 3_3_3....nX3.cho đến hết chu vi biển...
                              sau đó ta làm lập delay nhỏ cố định tùy theo muốn chạy viền nhanh hay chậm. sau đó tạo chương trình con chay_vien
                              VD:
                              void chay_vien(void){
                              P0=0x01;
                              delay(200);
                              P0=0x02;
                              delay(200);
                              P0=0x04;
                              delay(200);
                              }// và cái "chay_vien" này bạn thay nó cho "delay" trong chương trình(coi nó như delay chỉ có điều khi cần trễ nhiều bạn lặp lại nó nhiều lần bằng cách của riêng bạn), chay_vien tương đương với trễ (600). nếu chạy kểu khác bạn thay trễ nhỏ hơn tùy bạn.
                              chúc thành công!
                              Tôi thích cái cầu kỳ của kỹ thuật
                              Nhưng ghét mọi phức tạp trong tính cách con người

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X