Thông báo

Collapse
No announcement yet.

giúp em hiệu ứng quét theo hàng

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

  • giúp em hiệu ứng quét theo hàng

    em đang làm cái quang bao 16x 64 dùng loại 2 màu anot chung và dùng giải thuật quét led theo hàng.......với sơ đồ như trong hình và cách tạo font nhưng em đang hơi bí lúc dịch chữ với kiểu quét theo hàng dùng 89... bởi mỗi lần dịch nó đi nguyên byte nên trong rất kì nếu dịch theo bít thì em sẽ chỉnh lại sao ? em viết bằng keilc

    em mô tả lại cái chương trình //

    sbit sda = p1^0 ; chân p1.0 của vdk làm nhiệm vụ cấp data cho ic 74hc595
    sbit sck = p1^1 ; chân p1.1 làm nhiệm vụ cung cấp xung clock để dịch bit
    sbit lat = p1^2; chân p1.2 làm nhiệm vụ bắt ic 74hc595 xuất data ra chân

    mảng dử liệu để hiển thị "

    unisigned char code display [] = { 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff// kí tự rống
    0,68,56,0,56,66,198,198,254,254,198,198,198,0,0,0 //kí tự Ă
    ..............................................}

    Hàm chuyển dứ liệu nối tiếp ra song song :

    void nt2ss (unsigned char data_out)
    { int luutam;
    luutam = data_out ; // cất tạm dữ liệu vào biến luutam
    for(int i =0 ;i<=7 ;i++) // dịch đủ 1 byte dử liệu ra ic 74hc595
    {
    luutam =luutam&0x80 ; trích ra bit đầu tiên của byte
    if(luutam =0x80)

    sda =1 ; //xuất bít 1 vào 74hc..
    else
    sda =0 ; //xuất bít 0 vào 74hc..

    sck =0;
    sck =1 ; // tạo một xung clock để dịch bit vào ic

    data_out * = 2; // dịch bít kế tiếp trong data_out để chuyển ra 74hc595
    }

    void main () // hàm chính
    int j,m


    while (1)
    { for (m=0;m <=15;m++) // quét đủ 16 hàng
    {

    for (int k =0 ;k <=15++) // vong lặp nạp đủ data cho 16 led matrix
    { nt2ss(display[n+8]); // n+ 8 để lần lượt lấy từng byte của mối kí tự theo kiểu có một hàng giả sử 5 người ban đầu em chém một phát đứt hết đầu tưng người rồi xếp ra led .. sau đó em lại chém phần thân của 5 người này rồi xuất ra led , rồi đến chân của họ và xuất led.. cuối cùng thì em nhìn thấy 5 người này xuất hiện trên bảng led matrix

    lat =1 ; // xuất dữ liệu ra các chân của 74hc595
    kichtransistor(m) // kích transistor tương ứng để cấp áp cho hàng led
    delay(300); tạo trễ để quan sát ;
    }
    }
    }

    ở đây có 1 số hàm như delay và hàm kích transistor em không viết ra
    Vấn đề lớn ở đây là cái matrix của em
    xuất hiện hiệu ứng dịch hình nhưng cả byte tức kí tự em xuất led nó nhảy từng con led 16x8 .. mà không phải dịch từ từ từng điểm sáng.. chỗ này em đang bí...
    ở trên em có mô tả cái khung có độ rộng là 8 bít sẽ di chuyển từ trái qua phải đủ 8 led matrix rồi lại từ trên xuống cho đủ 16 mối lần nó chỉ dịch 1 bít thôi để xuất ra 74hc595 tạo hiệu ứng dịch chữ từ từ mà không phải nhảy tưng con led 8x8.
    Em đang bí chỗ này nên nhờ mấy anh chỉ cho em .. cám ơn nhé !
    Attached Files

  • #2
    anh nào rành về món quang báo thì chỉ em đoạn mã dịch từng bit với !

    Comment


    • #3
      Bạn tham khảo nha

      http://dientuvietnam.net/forums/arch...p/t-11228.html
      ----------------------
      Bể học là mênh mông!

      Comment


      • #4
        Nguyên văn bởi hai_abc Xem bài viết
        cảm ơn anh đã quan tâm.!

        link anh đưa em cũng chỉ là đoạn code chuyển từng byte dữ liệu vào con Ic 74hc595.. đoạn code này thì trong chương trình em vẫn có... vấn đề em muốn hỏi là cách để mình tạo hiệu ứng dịch chũ .. em mô tả lại thế này nhé..
        - Mỗi kí tự mà em mã hóa sẽ là một mảng nhỏ trong mảng lớn số kí tự mà em muốn hiển thị vì em nối matrix theo kiểu 16x8 : giải sử mảng của em thế này có mã là:
        -
        {0xff,0xff........(16 lần 0xff )// kí tự rỗng -kí tự thứ nhất
        0x77,0x77.....(16 lần 0x77) // kí tự thứ 2
        -
        - đầu tiên em sẽ dùng byte : 0xff -(kí tự thứ nhất) để bơm vào ic 74hc595
        - bước thứ hai em sẽ dùng byte :0x77 -(kí tự thứ 2)để bơm vào ic 74hc595
        -bước cuối em sẽ kích một transistor để cấp cho hàng 1 sáng và gọi delay.


        tuy nhiên ở bước tiếp theo em muốn tạo ra hiệu ứng dịch em phải bỏ đi bit đầu của byte : 0xff (11111111)-8 bít ---->(1111111)- còn lại 7 bít...rồi em dùng 1 bít đầu của byte :0x77 (01110111)-8 bít --> em trích ra bít 0 của nó rồi bỏ vào đằng sau cái byte đầu mà em đã trích ra để tạo thành 1 byte mới hoàn chỉnh là (11111110).
        - bước kế là em sẽ dùng cái byte mới này (11111110)--> chuyển vào ic 74hc595. rồi kích transistor...
        -- cứ làm tương tự thế thì em tạo thành hiệu ứng dịch chữ.. em nghĩ thế..

        -- vấn đề chính là em chưa nghĩ ra cái đoạn code để tách từng bít của byte này rồi lại bỏ vào byte kia .như em mô tả.... anh có cách nào chỉ cho em với !

        Comment


        • #5
          Bạn xem mình hiểu như hình vẽ có đúng không?

          Đây là code viết cho Keil

          sfr Reg1 = 0xE0;
          sfr Reg2 = 0xE8;
          sfr Reg = 0xF0;

          sbit Bit7 = Reg1^0; // Bit 7 cua byte 1
          sbit Bit0 = Reg2^7; // Bit 0 cua byte 2
          sbit Bit = Reg^0; // Bit 0

          // pointer: con tro vung du lieu can dich
          // N: tong so byte vung du lieu can dich
          void Shift_Right_Bit_(unsigned char *pointer, unsigned char N)
          {
          unsigned char i;

          Reg = pointer[0]; // Luu byte 1 cua vung du lieu dich
          for(i = 0; i < N; i++)
          {
          Reg1 = pointer[i]; // Luu byte du lieu 1
          Reg1>>1; // Dich phai byte du lieu 1
          Reg2 = pointer[i+1]; // Luu byte du lieu 2
          Bit7 = Bit0; // Bit 7 byte du lieu 1 = Bit 0 byte du lieu 2
          } // Lap lai cho 2 va byte 3 va tiep theo...

          Reg1 = pointer[N-1]; // Luu byte cuoi cua vung du lieu
          Bit7 = Bit; // Dua bit 0 cua byte dau vao bit 7 cua byte cuoi
          }
          Attached Files
          ----------------------
          Bể học là mênh mông!

          Comment


          • #6
            Nguyên văn bởi hai_abc Xem bài viết
            Bạn xem mình hiểu như hình vẽ có đúng không?

            Đây là code viết cho Keil

            sfr Reg1 = 0xE0;
            sfr Reg2 = 0xE8;
            sfr Reg = 0xF0;

            sbit Bit7 = Reg1^0; // Bit 7 cua byte 1
            sbit Bit0 = Reg2^7; // Bit 0 cua byte 2
            sbit Bit = Reg^0; // Bit 0

            // pointer: con tro vung du lieu can dich
            // N: tong so byte vung du lieu can dich
            void Shift_Right_Bit_(unsigned char *pointer, unsigned char N)
            {
            unsigned char i;

            Reg = pointer[0]; // Luu byte 1 cua vung du lieu dich
            for(i = 0; i < N; i++)
            {
            Reg1 = pointer[i]; // Luu byte du lieu 1
            Reg1>>1; // Dich phai byte du lieu 1
            Reg2 = pointer[i+1]; // Luu byte du lieu 2
            Bit7 = Bit0; // Bit 7 byte du lieu 1 = Bit 0 byte du lieu 2
            } // Lap lai cho 2 va byte 3 va tiep theo...

            Reg1 = pointer[N-1]; // Luu byte cuoi cua vung du lieu
            Bit7 = Bit; // Dua bit 0 cua byte dau vao bit 7 cua byte cuoi
            }
            - Cái hình mà anh đính kèm cho em thì đúng là ý tưởng dịch bít của em để tạo hiệu ứng là như vậy...
            - bữa trước em có theo dõi một cái tutorial cúa anh nghiaha về quang báo viết với avr... tuy nhiên cách xếp mảng kí tự cần hiển thị khôn được linh hoạt lắm theo cách nghĩ của cá nhân em vì em xem người ta sắp kí tự hầu hết không theo kiểu như của anh nghiaha dưới đây:
            vd : display [] ={ byte1 of kí tự a;byte1 of kí tự b;byte1 of kí tự c......byte1 of kí tự thứ n;
            byte2 of kí tự a; byte2 of kí tự b; byte2 of kí tự c;..;byte2 of kí tự thứ n .................................................. .....................
            .................................................. ....................
            byte8 of kí tự a; byte8 of kí tự b; byte8 of kí tự c...;byte8 of kí tự thư n
            }

            - trong khi đó mảng em muốn hiển thị thì em sắp xếp theo kiểu :
            beiudientu [] ={ byte1 của a ;................;byte16 của kí tự a;
            byte1 của kí tự b;..........;byte16 của kí tự b;
            .................................................. ...........
            byte1 của kí tự thứ n; ...........; byte16 của kí tự thứ n
            }
            em không biết còn có những cách nào tốt hơn nứa không. Bởi trước giời mấy món em làm chỉ quét led 7 đoạn thôi chưa quét ma trận mà dùng ic dịch nên cũng hơi rối lúc hiệu ứng dịch...
            em sẽ coi kĩ đoạn code anh đưa nếu có gì không hiểu mong anh chỉ giáo thêm
            thanks again !

            Comment


            • #7
              @ hai_ABC
              em về ngâm cái code của anh rùi mà thui anh xem lại cái hình ý tưởng quét matrix theo hàng với hiệu ứng dịch kí tự từ phải qua trái.
              Rồi cho em đoạn code rõ hơn chút nhé !

              -Tất nhiên là trong chương trình em đã có một hàm riêng chỉ để đưa từng byte dữ liệu ra 74HC595 rồi.... void nt2ss(unsigned chardata). Và do em có 8 matrix nên sẽ gọi hàm này 8 lần là bơm đủ data cho một hàng...
              -Vấn đề chính của em là rối ở chỗ em cần một hàm nữa để lấy dữ liệu như trong hình em đính kèm để để được các byte dữ liệu như mong mún rồi em gọi cái hàm void nt2ss(unsigned char data) là có hiệu ứng dịch ổn..
              Attached Files

              Comment


              • #8
                @ beiudientu
                Để mai mình xem kỹ rồi gửi cho bạn nhé!
                ----------------------
                Bể học là mênh mông!

                Comment


                • #9
                  Nguyên văn bởi beiudientu Xem bài viết
                  @ hai_ABC
                  em về ngâm cái code của anh rùi mà thui anh xem lại cái hình ý tưởng quét matrix theo hàng với hiệu ứng dịch kí tự từ phải qua trái.
                  Rồi cho em đoạn code rõ hơn chút nhé !

                  -Tất nhiên là trong chương trình em đã có một hàm riêng chỉ để đưa từng byte dữ liệu ra 74HC595 rồi.... void nt2ss(unsigned chardata). Và do em có 8 matrix nên sẽ gọi hàm này 8 lần là bơm đủ data cho một hàng...
                  -Vấn đề chính của em là rối ở chỗ em cần một hàm nữa để lấy dữ liệu như trong hình em đính kèm để để được các byte dữ liệu như mong mún rồi em gọi cái hàm void nt2ss(unsigned char data) là có hiệu ứng dịch ổn..

                  Mình kiếm được tài liệu rồi đây. Đã làm chạy thành công rồi. Chương trình này đưa 24 chữ cái ( Chữ IN HOA đó nha) vào rối muốn chữ nào xuât ra thì chỉ việc đổi chữ "DEMO" thành chữ mình muốn nha. Chúc bạn thành công


                  #include <AT89X52.h>
                  //--------------------------------
                  //khai bao bien
                  //16hang, 4led
                  //P0 SELECT HANG
                  sbit clk = P2^5;
                  sbit s_clk = P2^4;
                  sbit data_d = P2^6;
                  sbit data_x = P2^7;
                  //--------------------------------
                  unsigned char n,m,l,step,color =0;
                  unsigned int count =0,temp_1=0,temp_2=0;
                  //----------------------------------------------
                  /*font du lieu chi lap trinh cho chu IN HOA,
                  neu muon cho chu thuong thi tao them font chu IN THUONG
                  cho bang ma font */
                  //FONT TIENG VIET 24 CHU CAI
                  unsigned char code lib_font[]={
                  0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0xC6,0xC6,0xFE, 0xFE,0xC6,0xC6,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xF8,0xFE,0xC6,0xC6,0xFC,0xFC,0xC6 ,0xC6,0xFE,0xFC,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xC0,0xC0 ,0xC0,0xFE,0x7C,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xF8,0xFC,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFC,0xF8,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xF8,0xF8,0xC0 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xFC,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xCE,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xFE,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7E,0x3C,0x18,0x18,0x18,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7E,0x7E,0x18,0x18,0x18,0x18,0x98 ,0xD8,0xF8,0x70,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xCC,0xD8,0xF0,0xE0,0xE0,0xF0 ,0xD8,0xCC,0xCE,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC2 ,0xC6,0xFE,0xFE,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xC6,0xEE,0xFE,0xD6,0xC6,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xC6,0xE6,0xE6,0xF6,0xDE,0xCE ,0xCE,0xC6,0xC6,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xD6,0xDA ,0xCC,0xF6,0x7B,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xD8 ,0xDC,0xCE,0xC6,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xFC,0x7E,0x06 ,0x06,0xFE,0x7C,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,0x18 ,0x18,0x18,0x18,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xEE ,0x7C,0x38,0x10,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xFE ,0xEE,0xC6,0xC6,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x38,0x10,0x10,0x38 ,0x6C,0xC6,0xC6,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x66,0x66,0x66,0x7E,0x3C,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0xFE,0xFE,0x06,0x0C,0x18,0x30,0x60 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
                  ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00};
                  unsigned char code lib_dis []={"ABCDEFGHIJKLMNOPQRSTUVWXYZ "};
                  unsigned char code lib_out []={" DEMO @"};
                  unsigned char data_out [5];
                  unsigned char data_temp[5];
                  void delay_ms(unsigned int data_in)
                  {
                  unsigned int i,j;
                  for(i=0;i<=data_in;i++)
                  for(j=0;j<=33;j++);
                  }
                  //------------------------------------------------------
                  void out_serial(unsigned char data_in,unsigned char loop)
                  {
                  unsigned char i,j;
                  for(i=0;i<=loop;i++)
                  {
                  j = data_in;
                  j = j>>i;
                  j &= 0x01;
                  if(j ==0)
                  {
                  data_x =0;
                  data_d =0;
                  clk =0;
                  clk =1;
                  }
                  else
                  {
                  if(color==0) //RED
                  {
                  data_d =1;
                  data_x =0;
                  clk =0;
                  clk =1;
                  }
                  else
                  if(color==1) //GREEN
                  {
                  data_d =0;
                  data_x =1;
                  clk =0;
                  clk =1;
                  }
                  else
                  {
                  data_d =1; //YELLOW
                  data_x =1;
                  clk =0;
                  clk =1;
                  }
                  }

                  }
                  }
                  //----------------------------------------------------------
                  void tra_ma (unsigned char data_in)
                  {
                  unsigned char i,j,k=0;
                  for(i=data_in;i<=(data_in + 4);i++)
                  {
                  data_temp[k] = lib_out[i];
                  k ++;
                  }
                  for(i=0;i<=4;i++)
                  {
                  for(j=0;j<=26;j++)
                  {
                  if(data_temp[i] == lib_dis[j])
                  data_out[i] = j;
                  }
                  }
                  }
                  //------------------------------------------------------------
                  void next_led(unsigned char data_in,unsigned char dich_bit)
                  {
                  out_serial(data_in,7-dich_bit);
                  }
                  //------------------------------------------------------------
                  void hien_thi(unsigned char hang,unsigned char dich_bit)
                  {
                  unsigned char i;
                  for(i=0;i<=3;i++)
                  {
                  out_serial(lib_font[(data_out[4-i])*16+hang],7);
                  }
                  next_led (lib_font [(data_out[0])*16+hang],dich_bit);
                  }
                  //-----------------------------------------------------
                  void change_color () interrupt 1 //ngat timer0
                  {
                  TR0 =0;
                  TH0=0x3C;
                  TL0=0xB0;
                  TR0=1;
                  count ++;
                  if(count == 40) //delay 50.000uS * 80 = 2s (Crystal = 22.1184MHz)
                  {
                  count =0;
                  color ++;
                  if(color==3)
                  color=0;
                  }
                  }
                  //---------------------------------------------------

                  void stop_data()
                  {
                  unsigned char i,k,u;
                  for(k=0;k<=150;k++)
                  {
                  for(u=0;u<=15;u++)
                  {
                  for(i=0;i<=3;i++)
                  {
                  out_serial(lib_font[(data_out[3-i])*16+u],7);
                  }
                  delay_ms(2);
                  P0 =255;
                  s_clk =0;
                  s_clk =1;
                  P0 =u;
                  }
                  }

                  }
                  //------------------------------------------------------
                  void down_up()
                  {
                  unsigned int u,i,j,k,v;
                  tra_ma(4);
                  for(k=0;k<=15;k++)
                  {
                  for(j=0;j<=20;j++)
                  {
                  v = 0;
                  for(u=0;u<=15;u++)
                  {
                  if(u>=15-k)
                  {
                  for(i=0;i<=3;i++)
                  {
                  out_serial(lib_font[(data_out[3-i])*16 + v],7);
                  }
                  delay_ms(2);
                  P0 =255;
                  s_clk =0;
                  s_clk =1;
                  P0 =u;
                  v++;
                  }
                  }
                  }
                  }
                  for(k=0;k<=15;k++)
                  {

                  for(j=0;j<=20;j++)
                  {
                  v = k;
                  for(u=0;u<=15;u++)
                  {
                  if(u <= 15-k)
                  {
                  for(i=0;i<=3;i++)
                  {
                  out_serial(lib_font[(data_out[3-i])*16 + v],7);
                  }
                  delay_ms(2);
                  P0 =255;
                  s_clk =0;
                  s_clk =1;
                  P0 =u;
                  v++;

                  }
                  }
                  }
                  }
                  }
                  void up_down()
                  {
                  unsigned int u,i,j,k,v;
                  tra_ma(4);
                  for(k=0;k<=15;k++)
                  {
                  for(j=0;j<=20;j++)
                  {
                  v = 15-k;
                  for(u=0;u<=15;u++)
                  {
                  if(u<=k)
                  {
                  for(i=0;i<=3;i++)
                  {
                  out_serial(lib_font[(data_out[3-i])*16 + v],7);
                  }
                  delay_ms(2);
                  P0 =255;
                  s_clk =0;
                  s_clk =1;
                  P0 =u;
                  v++;
                  }
                  }
                  }
                  }
                  tra_ma(4);
                  for(k=0;k<=15;k++)
                  {
                  for(j=0;j<=20;j++)
                  {
                  v = 0;
                  for(u=0;u<=15;u++)
                  {
                  if(u>=k)
                  {
                  for(i=0;i<=3;i++)
                  {
                  out_serial(lib_font[(data_out[3-i])*16 + v],7);
                  }
                  delay_ms(2);
                  P0 =255;
                  s_clk =0;
                  s_clk =1;
                  P0 =u;
                  v++;
                  }
                  }
                  }
                  }
                  }

                  Comment


                  • #10
                    Nguyên văn bởi Mr_se7en Xem bài viết
                    Mình kiếm được tài liệu rồi đây. Đã làm chạy thành công rồi. Chương trình này đưa 24 chữ cái ( Chữ IN HOA đó nha) vào rối muốn chữ nào xuât ra thì chỉ việc đổi chữ "DEMO" thành chữ mình muốn nha. Chúc bạn thành công


                    #include <AT89X52.h>
                    //--------------------------------
                    //khai bao bien
                    //16hang, 4led
                    //P0 SELECT HANG
                    sbit clk = P2^5;
                    sbit s_clk = P2^4;
                    sbit data_d = P2^6;
                    sbit data_x = P2^7;
                    //--------------------------------
                    unsigned char n,m,l,step,color =0;
                    unsigned int count =0,temp_1=0,temp_2=0;
                    //----------------------------------------------
                    /*font du lieu chi lap trinh cho chu IN HOA,
                    neu muon cho chu thuong thi tao them font chu IN THUONG
                    cho bang ma font */
                    //FONT TIENG VIET 24 CHU CAI
                    unsigned char code lib_font[]={
                    0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0xC6,0xC6,0xFE, 0xFE,0xC6,0xC6,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xF8,0xFE,0xC6,0xC6,0xFC,0xFC,0xC6 ,0xC6,0xFE,0xFC,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xC0,0xC0 ,0xC0,0xFE,0x7C,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xF8,0xFC,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFC,0xF8,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xF8,0xF8,0xC0 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xFC,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xCE,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xFE,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7E,0x3C,0x18,0x18,0x18,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7E,0x7E,0x18,0x18,0x18,0x18,0x98 ,0xD8,0xF8,0x70,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xCC,0xD8,0xF0,0xE0,0xE0,0xF0 ,0xD8,0xCC,0xCE,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC2 ,0xC6,0xFE,0xFE,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xC6,0xEE,0xFE,0xD6,0xC6,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xC6,0xE6,0xE6,0xF6,0xDE,0xCE ,0xCE,0xC6,0xC6,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xD6,0xDA ,0xCC,0xF6,0x7B,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xD8 ,0xDC,0xCE,0xC6,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xFC,0x7E,0x06 ,0x06,0xFE,0x7C,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,0x18 ,0x18,0x18,0x18,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xEE ,0x7C,0x38,0x10,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xFE ,0xEE,0xC6,0xC6,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x38,0x10,0x10,0x38 ,0x6C,0xC6,0xC6,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x66,0x66,0x66,0x7E,0x3C,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0xFE,0xFE,0x06,0x0C,0x18,0x30,0x60 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
                    ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00};
                    unsigned char code lib_dis []={"ABCDEFGHIJKLMNOPQRSTUVWXYZ "};
                    unsigned char code lib_out []={" DEMO @"};
                    unsigned char data_out [5];
                    unsigned char data_temp[5];
                    void delay_ms(unsigned int data_in)
                    {
                    unsigned int i,j;
                    for(i=0;i<=data_in;i++)
                    for(j=0;j<=33;j++);
                    }
                    //------------------------------------------------------
                    void out_serial(unsigned char data_in,unsigned char loop)
                    {
                    unsigned char i,j;
                    for(i=0;i<=loop;i++)
                    {
                    j = data_in;
                    j = j>>i;
                    j &= 0x01;
                    if(j ==0)
                    {
                    data_x =0;
                    data_d =0;
                    clk =0;
                    clk =1;
                    }
                    else
                    {
                    if(color==0) //RED
                    {
                    data_d =1;
                    data_x =0;
                    clk =0;
                    clk =1;
                    }
                    else
                    if(color==1) //GREEN
                    {
                    data_d =0;
                    data_x =1;
                    clk =0;
                    clk =1;
                    }
                    else
                    {
                    data_d =1; //YELLOW
                    data_x =1;
                    clk =0;
                    clk =1;
                    }
                    }

                    }
                    }
                    //----------------------------------------------------------
                    void tra_ma (unsigned char data_in)
                    {
                    unsigned char i,j,k=0;
                    for(i=data_in;i<=(data_in + 4);i++)
                    {
                    data_temp[k] = lib_out[i];
                    k ++;
                    }
                    for(i=0;i<=4;i++)
                    {
                    for(j=0;j<=26;j++)
                    {
                    if(data_temp[i] == lib_dis[j])
                    data_out[i] = j;
                    }
                    }
                    }
                    //------------------------------------------------------------
                    void next_led(unsigned char data_in,unsigned char dich_bit)
                    {
                    out_serial(data_in,7-dich_bit);
                    }
                    //------------------------------------------------------------
                    void hien_thi(unsigned char hang,unsigned char dich_bit)
                    {
                    unsigned char i;
                    for(i=0;i<=3;i++)
                    {
                    out_serial(lib_font[(data_out[4-i])*16+hang],7);
                    }
                    next_led (lib_font [(data_out[0])*16+hang],dich_bit);
                    }
                    //-----------------------------------------------------
                    void change_color () interrupt 1 //ngat timer0
                    {
                    TR0 =0;
                    TH0=0x3C;
                    TL0=0xB0;
                    TR0=1;
                    count ++;
                    if(count == 40) //delay 50.000uS * 80 = 2s (Crystal = 22.1184MHz)
                    {
                    count =0;
                    color ++;
                    if(color==3)
                    color=0;
                    }
                    }
                    //---------------------------------------------------

                    void stop_data()
                    {
                    unsigned char i,k,u;
                    for(k=0;k<=150;k++)
                    {
                    for(u=0;u<=15;u++)
                    {
                    for(i=0;i<=3;i++)
                    {
                    out_serial(lib_font[(data_out[3-i])*16+u],7);
                    }
                    delay_ms(2);
                    P0 =255;
                    s_clk =0;
                    s_clk =1;
                    P0 =u;
                    }
                    }

                    }
                    //------------------------------------------------------
                    void down_up()
                    {
                    unsigned int u,i,j,k,v;
                    tra_ma(4);
                    for(k=0;k<=15;k++)
                    {
                    for(j=0;j<=20;j++)
                    {
                    v = 0;
                    for(u=0;u<=15;u++)
                    {
                    if(u>=15-k)
                    {
                    for(i=0;i<=3;i++)
                    {
                    out_serial(lib_font[(data_out[3-i])*16 + v],7);
                    }
                    delay_ms(2);
                    P0 =255;
                    s_clk =0;
                    s_clk =1;
                    P0 =u;
                    v++;
                    }
                    }
                    }
                    }
                    for(k=0;k<=15;k++)
                    {

                    for(j=0;j<=20;j++)
                    {
                    v = k;
                    for(u=0;u<=15;u++)
                    {
                    if(u <= 15-k)
                    {
                    for(i=0;i<=3;i++)
                    {
                    out_serial(lib_font[(data_out[3-i])*16 + v],7);
                    }
                    delay_ms(2);
                    P0 =255;
                    s_clk =0;
                    s_clk =1;
                    P0 =u;
                    v++;

                    }
                    }
                    }
                    }
                    }
                    void up_down()
                    {
                    unsigned int u,i,j,k,v;
                    tra_ma(4);
                    for(k=0;k<=15;k++)
                    {
                    for(j=0;j<=20;j++)
                    {
                    v = 15-k;
                    for(u=0;u<=15;u++)
                    {
                    if(u<=k)
                    {
                    for(i=0;i<=3;i++)
                    {
                    out_serial(lib_font[(data_out[3-i])*16 + v],7);
                    }
                    delay_ms(2);
                    P0 =255;
                    s_clk =0;
                    s_clk =1;
                    P0 =u;
                    v++;
                    }
                    }
                    }
                    }
                    tra_ma(4);
                    for(k=0;k<=15;k++)
                    {
                    for(j=0;j<=20;j++)
                    {
                    v = 0;
                    for(u=0;u<=15;u++)
                    {
                    if(u>=k)
                    {
                    for(i=0;i<=3;i++)
                    {
                    out_serial(lib_font[(data_out[3-i])*16 + v],7);
                    }
                    delay_ms(2);
                    P0 =255;
                    s_clk =0;
                    s_clk =1;
                    P0 =u;
                    v++;
                    }
                    }
                    }
                    }
                    }
                    Anh post bai thì trong câu lệnh anh chú thích trong từng câu lệnh với để mọi người cùng hiểu, không thì anh mô tả phần cứng thì còn hiểu chứ chương trình không thì khó xem was... ! dù sao cũng bít ơn anh.. ráng giúp anh nhé !!

                    Comment


                    • #11
                      bạn lên tìm hiêu ki về IC số nha

                      Comment


                      • #12
                        Mình học ASM nên đọc code C như nhìn bức vách, mà nhìn vách còn dễ chịu hơn
                        Ai trình cao changslate qua ASM cho ae ASM vọc với!
                        Trần Đức Sơn

                        tel:0934691385

                        Comment


                        • #13
                          Kết hợp assemly và Keilc như thế nào thế các anh ơi ??

                          Mọi người nói assembly là ngôn ngữ cấp thấp mà em được học đầu tiên khi làm wen với dòng 8051.. tuy nhiên khi biết nó rồi chuyển sang dùng C có lẽ mấy anh ở đây cũng tự học ... thì cũng thấy nó có nhiều cái hay.. và trong chương trình C.. dùng trình dịch Keil C chẳng hạn có khả năng cho phép người lập trình kết hợp cả code assem.. và ngôn ngữ c.. nhưng khi em làm thử thì báo lỗi tùm lum ah !! các anh cho một ví dụ đơn giản có sự kết hợp cả c và assem nhé .. giải dụ nháy một con led đơn thôi mà trong đó tham số từ C có thể truyền vào đoạn code của assem và ngược lại !!..

                          Comment


                          • #14
                            Nguyên văn bởi hai_abc Xem bài viết
                            @ beiudientu
                            Để mai mình xem kỹ rồi gửi cho bạn nhé!
                            em đợi repply của anh dài cả cổ rồi đó nghen chờ tiếp vậy...!

                            Comment


                            • #15
                              111111111111111111111

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X