Thông báo

Collapse
No announcement yet.

HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]

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

  • Các bác ơi cho em hỏi chút nha, em đang viết đoạn code cho ledmatrix dùng để hiện thì đèn sáng xen kẽ, nhưng khi viết xong nó không sáng theo ý .Mong nhờ các bác thử xem giúp em , em làm quoài nó cũng kô sáng tắt xen kẻ được .
    Đây là sơ đồ mạch :http://www.mediafire.com/?sharekey=8...eada0a1ae8665a
    còn đây là code :
    #include <at89x52.h>
    #define DATA P0_0//Du lieu noi tiep ra 74595
    #define INPUT P0_1//Clock cho phep dich 74595
    #define OUTPUT P0_2//Clock cho phep chot 74595
    #define A P2_0//Dau vao A cua 74138
    #define B P2_1//Dau vao B cua 74138
    #define C P2_2//Dau vao C cua 74138
    #define ENBALE P2_3//Tin hieu cho phep dau ra cua 74138
    void delay(unsigned int ms)
    {
    unsigned int i,j;
    for (i=0;i<ms;i++)
    for (j=0;j<121;j++);
    }
    void scanmatrix();
    void data_in(unsigned char k);
    void out_595(void);

    void main(void)
    {

    P0=0xFF;
    P2=0xFF;
    INPUT=1;
    OUTPUT=1; while(1)
    {
    scanmatrix();
    }
    }
    void scanmatrix()
    {
    unsigned char i,j;
    for (i=0;i<=7;i++)
    {
    for(j=0;j<12;j++)
    {
    data_in(0);
    data_in(1);
    }
    out_595();
    P2=i+8;
    delay(20) ;

    }
    }
    void data_in(unsigned char k)
    {
    DATA=k;
    INPUT=1;
    INPUT=0;
    }
    void out_595(void)
    {
    OUTPUT=1;delay(1);
    OUTPUT=0; delay(1);
    }
    Học hỏi là trên hết .

    Comment


    • Nguyên văn bởi vuxuanloi Xem bài viết
      Hix, dĩ nhiên phần cứng là như vậy rồi thì mới dịch được từ trái qua phải đến hết chứ mấy con chứ. Nhưng, ở đây em hỏi là làm thế nào để dịch từ phải qua trái cơ, và điều này thay đổi bằng chương trình. . em thấy trong datasheet chỉ nói dịch từ trái sang phải thôi. Hay con 164 chỉ dịch được vậy thôi nhỉ?
      Cám ơn bác nhiều nhiều!
      bạn hãy dùng con ic ghi dịch 2 chiều là 74194 thì phải nó cho phép chọn dịch trái hay phải đấy
      o biết ai có giải pháp nào hay hơn o nhỉ???

      Comment


      • Nguyên văn bởi wish_blue07 Xem bài viết
        Các bác ơi cho em hỏi chút nha, em đang viết đoạn code cho ledmatrix dùng để hiện thì đèn sáng xen kẽ, nhưng khi viết xong nó không sáng theo ý .Mong nhờ các bác thử xem giúp em , em làm quoài nó cũng kô sáng tắt xen kẻ được .
        Đây là sơ đồ mạch :http://www.mediafire.com/?sharekey=8...eada0a1ae8665a
        hi hi, cái hình vẽ của bạn mờ quá, chẳng nhỉn rõ gì cả. Bạn thử viết thế này xem sao.
        void scanmatrix()
        {
        unsigned char i,j;
        for (i=0;i<=7;i++)
        {
        for(j=0;j<12;j++)
        {
        if(i%2==0&&j%2!=0)data_in(1);
        if(i%2!=0&&j%2==0)data_in(1);
        if((i%2!=0&&j%2!=0)||(i%2==0&&j%2==0)) data_in(0);

        out_595();
        P2=i+8;
        delay(20) ;

        }}}
        Vũ xuân Lợi
        YM!:

        Comment


        • Các bạn than mến các bạn có thể vui lòng giúp mìng viết đoạn code Asm chuyển số BCD ---> Decimal và ngược lại Decimal --> BCD để đọc và viết ds1307 mình có đoạn code DEcimal--> BCD:
          MOV A,GIAYDECIMAL
          MOV B,#10
          DIV A,B
          SWAP A
          ADD A,B
          MOV GIAYBCD,A
          không biết có đúng không còn ngược lại BCD --> DEcimal thì như thế nào mong bạn chỉ giúp cám on nhiều

          Comment


          • Nguyên văn bởi vuxuanloi Xem bài viết
            hi hi, cái hình vẽ của bạn mờ quá, chẳng nhỉn rõ gì cả. Bạn thử viết thế này xem sao.
            void scanmatrix()
            {
            unsigned char i,j;
            for (i=0;i<=7;i++)
            {
            for(j=0;j<12;j++)
            {
            if(i%2==0&&j%2!=0)data_in(1);
            if(i%2!=0&&j%2==0)data_in(1);
            if((i%2!=0&&j%2!=0)||(i%2==0&&j%2==0)) data_in(0);

            out_595();
            P2=i+8;
            delay(20) ;

            }}}
            Cám ơn bạn đã góp ý, nhưng theo chương trình của bạn nếu bỏ thời gian là delay(20) thì sẽ xãy ra hiện tượng từng cột sáng tắt chứ không phải là đèn led sáng xen kẽ như ý mình bạn ạ . Mình muốn đèn sáng tắt xen kẽ , ví dụ :
            1 0 1 0 1 0 1 0
            0 1 0 1 0 1 0 1
            ....................
            Như thế này và nó đứng yên, chứ không chạy . Mong các bác giúp đỡ mình
            Học hỏi là trên hết .

            Comment


            • Nguyên văn bởi wish_blue07 Xem bài viết
              Cám ơn bạn đã góp ý, nhưng theo chương trình của bạn nếu bỏ thời gian là delay(20) thì sẽ xãy ra hiện tượng từng cột sáng tắt chứ không phải là đèn led sáng xen kẽ như ý mình bạn ạ . Mình muốn đèn sáng tắt xen kẽ , ví dụ :
              1 0 1 0 1 0 1 0
              0 1 0 1 0 1 0 1
              ....................
              Như thế này và nó đứng yên, chứ không chạy . Mong các bác giúp đỡ mình
              như vậy quá đơn giản mình ko biết dùng con 74595 vì thuật toán của nó dùng hơi chuối mỗi lần chỉ đưa ra dc 1 bit .bạn nên dùng con 74573 hoặc 75373 mỗi lần đưa ra dc 8 bit mà co thể mở rộng port như con 74595 , 1 port của vdk có thể mở thành 10-->15 port dùng thoải mái mình làm thử thấy cũng thành công rồi và thuật toán cũn đơn giản
              sau đây là thuật toán
              bạn quét cột đưa data ra hàng
              lần 1 bạn quét cột 1 đưa data ra hàng la 10101010
              chốt data lại
              lần 2 bạn quét cột 2 đưa data ra hàng la 01010101
              chốt data lại
              .......
              ....
              cứ như vậy 8 lần thì sẽ thấy nó sáng chẵn lẻ
              còn muốn nó chạy thì cũng rất đơn giản bàn lập cho thêm 1 hàm for(..) là ok
              với yêu cầu như trên của bạn mình chỉ cần viết 7 dòng là ok (bao gồm cả chạy luôn)
              bạn nên tự nghĩ ra thuật toán của mình và nghĩ xem vdk nó thưc hiện thuật toán của mình ntn la song
              mình cũng tự nghĩ ra thuật toán để có thể giải quyết vấn đề và cũng thành công rồi
              Last edited by hoang_hai; 09-08-2009, 22:24.

              Comment


              • help me

                Em là sinh viên năm thứ 3 trường Đại Học Công Nghiệp.Em rất mê vi điều khiển nhưng lại chẳng có ai giúp đỡ.Học được 1 kì rồi mà vẫn chỉ ở mức tập tẹ với vi điều khiển thôi.Mong anh chị giúp đỡ nhiều hơn.

                Thành viên mới

                thật

                Comment


                • Các bác cho em hỏi em muốn tạo xung vuông co tần sổ 1Hz trên chân vi diều khiển 8051 sử dụng (mode1) thì làm như thế nào.Mode1 là chế độ 16 bit(65535) như vậy hệ số chia không dủ.Có sử dụng thêm vòng (for) không các bác?Nhân tiện cho em hỏi tren mode2 thì sao?

                  thành vien moi
                  thật

                  Comment


                  • Nguyên văn bởi that Xem bài viết
                    Các bác cho em hỏi em muốn tạo xung vuông co tần sổ 1Hz trên chân vi diều khiển 8051 sử dụng (mode1) thì làm như thế nào.Mode1 là chế độ 16 bit(65535) như vậy hệ số chia không dủ.Có sử dụng thêm vòng (for) không các bác?Nhân tiện cho em hỏi tren mode2 thì sao?

                    thành vien moi
                    thật
                    tham khảo tài liệu đi bạn :
                    http://dientuvietnam.net/forums/showthread.php?t=27660

                    f = 1Hz => T = 1/f = 1 sec => Td = 0.5 sec ( thời gian trễ )

                    org 0

                    ;--------------------
                    mov tmod,#01 ; khai báo timer0 mode 1 chế độ 16 bit

                    ;-------- tạo xung ---------------------
                    main:
                    setb p1.1 ; đưa pin p1.1 lên mức cao ( tùy chọn chân nào bạn mún ..)
                    acall delay_0.5sec ; gọi chương trình trễ tạo độ trễ 0.5 sec
                    clr p1.1 ; đưa pin p1.1 xuống mức thấp
                    acall delay_0.5sec ; tương tự
                    sjmp main

                    ;-------- chương trình tạo trễ 0.5 sec---------------

                    delay_0.5sec:

                    mov r0,#10 ; (-50000) =>50 milisecon = 50*10 = 0.5 sec
                    reload:
                    mov th0,#high(-50000);nạp giá trị ban đầu cho 2 thanh ghi timer0
                    mov tl0,#low(-50000)
                    setb tr0 ; cho phép timer0 bắt đầu đếm
                    jnb tf0,$ ; đợi cờ tràn timer0
                    clr tf0 ; xóa cờ tràn
                    clr tr0 ; dừng timer0
                    djnz r0,reload ; nếu chưa đủ 0.5 sec thì nạp lại cho timer0 và tiếp tục đếm
                    ret ; trở về chương trình chính

                    end; khai báo kết thúc chương trình

                    ;----------------- với keilc thì có 3 cách dùng vòng lặp for,while hoặc timer--; có thể dùng ngắt để cải tiến chương trình nếu muốn chương trình làm thêm nhiều task.
                    - mode 2 tự nạp lại thì phải ? (lâu đụng tới không nhớ rõ) nhưng với chương trình cần thời gian delay lớn thì người ta đã tạo cho mình mode 1 đó bạn. còn nếu bạn mún làm mode 2 cũng được thui cứ thế mà chế nó ra hen !

                    Comment


                    • Nguyên văn bởi wish_blue07 Xem bài viết
                      Cám ơn bạn đã góp ý, nhưng theo chương trình của bạn nếu bỏ thời gian là delay(20) thì sẽ xãy ra hiện tượng từng cột sáng tắt chứ không phải là đèn led sáng xen kẽ như ý mình bạn ạ . Mình muốn đèn sáng tắt xen kẽ , ví dụ :
                      1 0 1 0 1 0 1 0
                      0 1 0 1 0 1 0 1
                      ....................
                      Như thế này và nó đứng yên, chứ không chạy . Mong các bác giúp đỡ mình
                      Ừa, hi hi, mình hiểu ý bạn, và mình viết theo ý xen kẽ đó đấy chứ, delay thì bạn cho nhỏ xuống chút, vì nếu mà sáng từng cột một như thế thì có nghĩa là delay hơi bị nhớn.
                      Vũ xuân Lợi
                      YM!:

                      Comment


                      • từ đoạn kích chuột phải vào (project) ở cửa sổ bên trái là em tắc luôn khong tìm duọc chỗ thoát.Cụ thễ là em chẳng thấy chữ nào là(project) ở bên trái cả.Chỉ có 2cai của sổ một cái soạn bài phía tren va một cái phía duói thôi

                        Comment


                        • tạo xung vuông 1Hz mình đã làm rồi đây là chương trình của mình:
                          #include<regx51.h>
                          sbit xung=P1^1;
                          void delay()
                          {
                          TMOD=0x01;
                          TH0=-2500/256;
                          TL0=-2500%256;
                          TR0=1;
                          while(!TF0);
                          TF0=0;
                          TR0=0;
                          }
                          void main(void)
                          {
                          int i ;
                          while(1)
                          { xung=1;
                          for(i=0;i<=199;i++)
                          {
                          delay();
                          }
                          xung=0;
                          for(i=0;i<=199;i++)
                          {
                          delay();
                          }
                          }
                          }

                          Comment


                          • mình đang học vi điều khiển mong được sự giúp đỡ của các bạn

                            Comment


                            • sao dạo này anh em ít post bài lên vậy

                              Comment


                              • cho em hỏi cách tính thời gian dlay chính xác.ví dụ chương trình sau thi delay chính xác la bao nhiêu ms
                                void delay(int time){
                                while(time--){
                                unsigned char j = 122;
                                while(j--);
                                };
                                }
                                main()
                                { delay(500)
                                }
                                mong anh em giúp đỡ
                                Last edited by siriusr; 09-09-2009, 23:10.

                                Comment

                                Về tác giả

                                Collapse

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

                                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 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ạ 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 qua, 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 qua, 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 qua, 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 ??...
                                  25-11-2024, 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...
                                  25-11-2024, 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...
                                  25-11-2024, 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...
                                  25-11-2024, 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...
                                  25-11-2024, 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ả...
                                  25-11-2024, 20:43
                                Đang tải...
                                X