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

                                Đang tải...
                                X