Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về lập trinh ic 89 với 74HC595

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

  • Cần giúp đỡ về lập trinh ic 89 với 74HC595

    Chào các bác, em mới tập lập trình nên còn mù mờ lắm
    Tình hình lá thế này, mấy ngày qua em đang đau đầu về cái chạy chữ matrix đơn giản dùng 1 ic 89C52, 2 ic 595, 2 cái led 8x8 mà làm hoài không xong, tham khảo đủ chỗ vẫn vậy . Có vài vấn đề em còn mù mờ lắm, vì vậy em xin các bác vui lòng giải thích cho em hiểu cái nha
    1. làm sao để gom 2 byte riêng rẽ (mỗi byte 8 bit) thành 2 byte chung với nhau (dãy 16 bit) vd: 0xfe và 0x7f thành 0xfe7f ??? à, viết bằng Keil C nha các bác.
    2. em đã cố gắng làm thử nhưng kết quả là cứ bị 'DATA': SEGMENT TOO LARGE là như thế nào vậy các bác? mong các bác xem và ráng dành chút thời gian quý báu giúp dùm em khỏi mất ngủ trong những ngày tới .code cua em đây các bác
    #include <REGX52.H>
    sbit DAT = P2^0;
    sbit SCK = P2^1;
    sbit LACH = P2^2;
    int n;
    void delay(int ms)
    {for(n=0;n<ms;n++)
    {;}}
    void xuatdulieu(unsigned char x,unsigned char y)
    {
    unsigned long i,temp;
    temp=(x<<8)|y;
    temp=temp&0x8000;
    for(i=0;i<16;i++)
    {
    if(temp==0x8000)
    {DAT=1;}
    else
    {DAT=0;}
    SCK=0;
    SCK=1;
    temp*=2;
    }
    LACH=0;
    LACH=1;
    }
    unsigned int hang[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
    unsigned long cot1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x0 0,0xf9,0xf3,0xe7,0xcf,0x00,0x00,0xff,0xe7,0xe7,0xe 7,0xff,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xf f,0xff,0xff};
    unsigned long cot2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf f,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xf9,0xf 3,0xe7,0xcf,0x00,0x00,0xff,0xe7,0xe7,0xe7,0xff,0xf d,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf f};
    void main()
    {
    int m=0;
    int j,p;
    while(1)
    {
    for(j=0;j<8;j++)
    {
    P3=hang[j];delay(2);
    p=j+m;
    xuatdulieu(cot1[p],cot2[p]);
    delay(10);
    }
    m++;
    if(m==40)
    m=0;
    }
    }

    Xin các bác chỉ rõ chỗ sai và fix nó lại dùm em nha. em xin đa tạ

  • #2
    Nguyên văn bởi phanbanhut Xem bài viết
    Chào các bác, em mới tập lập trình nên còn mù mờ lắm
    Tình hình lá thế này, mấy ngày qua em đang đau đầu về cái chạy chữ matrix đơn giản dùng 1 ic 89C52, 2 ic 595, 2 cái led 8x8 mà làm hoài không xong, tham khảo đủ chỗ vẫn vậy . Có vài vấn đề em còn mù mờ lắm, vì vậy em xin các bác vui lòng giải thích cho em hiểu cái nha
    1. làm sao để gom 2 byte riêng rẽ (mỗi byte 8 bit) thành 2 byte chung với nhau (dãy 16 bit) vd: 0xfe và 0x7f thành 0xfe7f ??? à, viết bằng Keil C nha các bác.
    2. em đã cố gắng làm thử nhưng kết quả là cứ bị 'DATA': SEGMENT TOO LARGE là như thế nào vậy các bác? mong các bác xem và ráng dành chút thời gian quý báu giúp dùm em khỏi mất ngủ trong những ngày tới .code cua em đây các bác

    Xin các bác chỉ rõ chỗ sai và fix nó lại dùm em nha. em xin đa tạ
    chào em.
    em không nên viết hàm dịch 595 dạng 16 bít vì mở rộng thêm 595 rất khó.
    viết theo dạng dịch 8bit thôi . tham khảo thử code sau:
    Code:
        #include <REGX52.H>
    sbit data1=P2^0;
    sbit SCK=P2^1;
    sbit CL=P2^2;
    const unsigned char hang[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
    const unsigned char cot1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xf9,0xf3,0xe7,0xcf,0x00,0x00,0xff,0xe7,0xe7,0xe7,0xff,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
    const unsigned char cot2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xf9,0xf3,0xe7,0xcf,0x00,0x00,0xff,0xe7,0xe7,0xe7,0xff,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
    int n;
    int m=0;
    int j,p,toc_do_dich;
    void delay(int ms)
    {for(n=0;n<ms;n++)
    {;}}
    xuatdulieu(unsigned char k)
    {
    unsigned char i,tem;
    for(i=0;i<=7;i++)
    {
    tem=k;
    tem=tem&0x80;
    if(tem==0x80)
    data1=1;
    else
    data1=0;
    k*=2;
    SCK=0;
    SCK=1;
    }
    }
    void chot()
    {
    CL=0;
    CL=1;
    }
    
    void main()
    {
    CL=1;
    SCK=1;
    while(1)
    {
    for(toc_do_dich=0;toc_do_dich<20;toc_do_dich++)
    {
    for(j=0;j<8;j++)
    {
    P3=hang[j];
    p=j+m;
    xuatdulieu(cot1[p]);
    xuatdulieu(cot2[p]);
    chot();
    delay(10);
    }
    }
    m++;
    if(m==40)
    m=0;
    }
    }
    |

    Comment


    • #3
      Nguyên văn bởi tdm Xem bài viết
      chào em.
      em không nên viết hàm dịch 595 dạng 16 bít vì mở rộng thêm 595 rất khó.
      viết theo dạng dịch 8bit thôi . tham khảo thử code sau:
      vâng ạ, để em thử xem, hì, cảm ơn anh nhiều lắm!

      Comment


      • #4
        Con 8051 được có mấy byte sram mà bạn khai báo 1 đống byte thế kia thì nó báo lỗi rồi.Bạn nên khai báo mã trên ROM.
        unsigned char code Data[]={...};
        char code Data[]={...};
        đừng lạm dụng biến vượt quá 8 bit nhé.Phải hiểu 8051 là VĐK 8 bit.Nên những số trên 8 bit thì tốc độ tính toán giảm đó nha.
        , , ,

        Comment


        • #5
          Nguyên văn bởi rptdnmqs Xem bài viết
          Con 8051 được có mấy byte sram mà bạn khai báo 1 đống byte thế kia thì nó báo lỗi rồi.Bạn nên khai báo mã trên ROM.
          unsigned char code Data[]={...};
          char code Data[]={...};
          đừng lạm dụng biến vượt quá 8 bit nhé.Phải hiểu 8051 là VĐK 8 bit.Nên những số trên 8 bit thì tốc độ tính toán giảm đó nha.
          hì, em mù mờ cái này quá, nhưng đúng là khi em dùng hàm delay() với khai báo biến như sau:
          Code:
          void delay(unsigned long ms)
          {
          unsigned long n;
          for(n=0;n<ms<n++)
          {;}
          }
          thì thời gian delay chậm hơn nhiều so với khai báo biến n,ms là int???
          như vậy việc khai báo biến ảnh hưởng đến tốc độ xử lý của ic hả bác?
          hix, bác hay có bác nào biết giải thích tường tận dùng em vụ này với, và phải khai báo sao cho đúng?

          p/s: cảm ơn bác tdm một lần nữa vì đã giúp đỡ em

          Comment


          • #6
            Tổng thống + điện = Ăn mày + điện = die => Tổng thống = ăn mày

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X