Thông báo

Collapse
No announcement yet.

Xin giúp đỡ quét LED 89C52 và 74595

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

  • Xin giúp đỡ quét LED 89C52 và 74595

    Tình hình là em đang học quét LED mà làm hoài hok đc

    Xin đa tạ trước ạ

    Mình có sơ đồ sau:


    Khi chạy mô phỏng thì nó ra thế này


    Đúng theo ý định ban đầu thì phải thế này



    Theo phân tích thì con 595 nó quét chậm hơn P3 nên nó bị trễ dẫn tới vậy.

    Code:
    #include <REGX52.H>
    #include <string.h>
    sbit SDA = P2^1;
    sbit SCL = P2^0;
    sbit STR = P2^2;
    sfr DataPort = 0xB0; //P3: 0xB0 P1: 0x90
    unsigned char charTable[1][8] = {
    	{0xC3,0x81,0x3C,0x3C,0x0,0x0,0x3C,0x3C} // Char A
    };
    void delay_ms(unsigned int ms,ttt){
    	//65535ms 9000MHz
    	while(ms--){ 
    		unsigned int xxx = 7*ttt+1;
    		while(xxx--); 
    	}
    }
    void main (){
     	unsigned int j;
     	while(1){ 
    		SDA=1; 
    		Tmp=0;	
    		for(j=1;j<8;j++){
    			//DataPort=0xFF;			
    			SCL=1;
    			SCL=0;
    			STR=1;
    			STR=0;	
    			SDA=0;		
    			delay_ms(1);
    			DataPort = charTable[0][j];
    			delay_ms(15);
    		}
    		
    										
    	}
    }

  • #2
    Code:
    #include <REGX52.H>
    #include <string.h>
    sbit SDA = P2^1;
    sbit SCL = P2^0;
    sbit STR = P2^2;
    sfr DataPort = 0xB0; //P3: 0xB0 P1: 0x90
    unsigned char charTable[1][8] = {
    	{0xC3,0x81,0x3C,0x3C,0x0,0x0,0x3C,0x3C} // Char A
    };
    void delay_ms(unsigned int ms,ttt){
    	//65535ms 9000MHz
    	while(ms--){ 
    		unsigned int xxx = 7*ttt+1;
    		while(xxx--); 
    	}
    }
    void main (){
     	unsigned int j;
     	while(1){ 
    		SDA=1; 
    		Tmp=0;	
    		for(j=0;j<8;j++){
    			//DataPort=0xFF;			
    			SCL=1;
    			SCL=0;
    			STR=1;
    			STR=0;	
    			SDA=0;		
    			DataPort = charTable[0][j];
    			delay_ms(5);
    		}
    		
    										
    	}
    }
    [/QUOTE]

    Comment


    • #3
      Được rồi ạ, Cảm ơn nhiều !

      Comment


      • #4
        Ah cho E hỏi thêm giờ E có thêm 1 chữ B, E muốn hiện chữ A khoảng 3s sau đó tắt và hiện chữ B thì làm thế nào ạ ?

        Comment


        • #5
          ở chỗ bạn khai báo mảng 2 chiều đó bạn khai báo là
          unsigned char charTable[n][8] = {
          {0xC3,0x81,0x3C,0x3C,0x0,0x0,0x3C,0x3C} // Char A
          {0xC3,0x81,0x3C,0x3C,0x0,0x0,0x3C,0x3C} // Char B ......

          bạn làm thêm mã của chữ B, C,D..... nhiều nữa bạn à.
          khi bạn muốn hiển thị chữ nào đó thì bạn chỉ cần thay đổi ở câu lệnh DataPort = charTable[i][j];
          chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
          Everything should be made as simple as possible, but not simpler

          Comment


          • #6
            Bác daohuytien vào giúp.

            Em đã biết quét cột.
            Giờ muốn tăng số cột lên gấp nhiều lần.
            Sử dụng quét hàng thì em chẳng biết dùng 595 dịch data vào cột như thế nào cả.
            Bác có tư liệu thì bảo em với.
            Bác viết giùm em code led matrix 8x24 ,595 để dịch cột. Chạy chử bất kì từ phải qua trái.
            Thank.

            Comment


            • #7
              @daohuytien E biết chổ mảng ấy, nhưng vấn đề ở dưới vòng lập E phải viết kiểu nào
              E viết thử theo kiểu
              Code:
              #include <REGX52.H>
              #include <string.h>
              #include <stdio.h>
              
              sbit SDA = P2^1;
              sbit SCL = P2^0;
              sbit STR = P2^2;
              sfr DataPort = 0xB0; //P3: 0xB0 P1: 0x90
              unsigned char charTable[2][8] = {
              	{0xC3,0x81,0x3C,0x3C,0x0,0x0,0x3C,0x3C}, // Char A
              	{0x83,0xBD,0xBD,0xBD,0x81,0xBD,0xBD,0x83} //Char B
              };
              void delay_ms(unsigned int ms,ttt){
              	//65535ms 9000MHz
              	while(ms--){ 
              		unsigned int xxx = 7*ttt+1;
              		while(xxx--); 
              	}
              }
              unsigned int i,j;
              void main (){
               	
              	TMOD=0x01;
              	TH0=TL0=-1000;
              	TR0=1;	
              	ET0=1;
              	EA=1;
               	while(1){ 
              		SDA=1; 	
              		for(i=0;i<2;i++){
              			for(j=0;j<8;j++){
              				//DataPort=0xFF;			
              				SCL=1;
              				SCL=0;
              				STR=1;
              				STR=0;	
              				SDA=0;		
              				DataPort = charTable[i][j];
              				delay_ms(5);
              			}			
              		}							
              	}
              }
              void INT_Timer0()interrupt 1{
              
              }
              [MENTION=118298]maingochoc[/MENTION]: ko có 8x24 chỉ có 8x32 đc ko ?

              Comment


              • #8
                code quét 8x40
                Code:
                #include "tableMT.c"
                sbit SH at P1_0_bit;
                sbit DS at P1_1_bit;
                sbit EO at P1_2_bit;
                #define ROW P2
                const int lens=400;
                char m;
                unsigned int start_addr;
                char tempR[50];// absolute 500;
                void shift595();
                void copy_to_ram();
                void main() {
                ROW=0xFF;
                delay_ms(500);
                while(1){
                         start_addr=0;
                                        while(start_addr<lens){
                                                          for(m=0;m<2;m++){
                                                          copy_to_ram();
                                                          shift595();
                                                          }
                                        start_addr++;
                                        }
                }
                }
                void shift595(){char i,j;
                SH=0;EO=0;
                j=0x80;
                      while(j!=0){
                      for(i=0;i<40;i++){
                                      DS=tempR[i];
                                      SH=1;
                                      SH=0;
                                      tempR[i]=tempR[i]>>1;
                      }
                      EO=1;EO=0;
                      ROW=j;
                      j=j>>1;
                      delay_ms(1);
                      ROW=0;
                      }
                }
                void copy_to_ram(){short i;unsigned int L;
                     L=start_addr;
                     for(i=0;i<40;i++)
                     tempR[i]=table[L++];
                }
                Code:
                                         //360+40
                const code char table[]={
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                
                0x00,0x01,0x07,0x3D,0xC4,0x3D,0x07,0x01,0x00,
                0x81,0xFF,0x91,0x91,0x91,0x6E,0x00,0x3C,0x42,
                0x81,0x81,0x81,0xC2,0x00,0x81,0xFF,0x81,0x81,
                0x81,0x42,0x3C,0x00,0x81,0xFF,0x91,0xB9,0x81,
                0xC3,0x00,0x81,0xFF,0x91,0xB8,0x80,0xC0,0x3C,
                0x42,0x81,0x81,0x89,0xCE,0x08,0x81,0xFF,0x91,
                0x10,0x91,0xFF,0x81,0x00,0x81,0xFF,0x81,0x00,
                0x01,0x81,0xFE,0x80,0x81,0xFF,0x91,0x28,0xC5,
                0x83,0x81,0x01,0x81,0xFF,0x81,0x01,0x01,0x03,
                0x00,0x81,0xFF,0xE1,0x1C,0x03,0x1C,0xE1,0xFF,
                0x81,0x00,0x81,0xFF,0x21,0x18,0x84,0xFF,0x80,
                0x00,0x3C,0x42,0x81,0x81,0x81,0x42,0x3C,0x00,
                0x81,0xFF,0x89,0x88,0x88,0x70,0x00,0x3C,0x42,
                0x81,0x81,0x81,0x42,0x3C,0x00,0x81,0xFF,0x91,
                0x98,0x96,0x61,0x01,0x63,0x91,0x89,0xC6,0x00,
                0xC0,0x80,0x81,0xFF,0x81,0x80,0xC0,0x00,0x80,
                0xFE,0x81,0x01,0x81,0xFE,0x80,0x00,0x80,0xE0,
                0x9C,0x03,0x9C,0xE0,0x80,0x80,0xE0,0x9C,0x03,
                0x8C,0xF0,0x8C,0x03,0x9C,0xE0,0x80,0x81,0xC3,
                0xA5,0x18,0xA5,0xC3,0x81,0x00,0x80,0xC0,0xB1,
                0x0F,0xB1,0xC0,0x80,0x00,0xC3,0x85,0x99,0xA1,
                0xC1,0x83,0x00,0x00,0x81,0xFF,0x01,0x00,0x00,
                0x41,0x83,0x85,0x89,0x73,0x00,0x41,0x81,0x91,
                0x91,0x6E,0x00,0x0C,0x34,0x44,0xFF,0x04,0x00,
                0x01,0x61,0xA1,0x91,0x8E,0x00,0x1E,0x69,0x51,
                0x91,0x8E,0x00,0x40,0x80,0x83,0x9C,0xE0,0x00,
                0x66,0x99,0x91,0x99,0x66,0x00,0x71,0x89,0x8A,
                0x8E,0x78,0x00,0x7E,0x81,0x81,0x81,0x7E,0x00,
                0x0C,0x08,0x0C,0x04,0x0C,0x00,0x00,0xFD,0x00,
                0x00,0x1F,0x20,0x4E,0x91,0xA1,0xAE,0xB2,0x42,
                0x3C,0x00,0x17,0x3C,0xD4,0x17,0x3C,0xD4,0x62,
                0x91,0xFF,0x89,0x46,0x00,0x60,0x91,0x62,0x04,
                0x18,0x20,0x46,0x89,0x06,0x30,0xC0,0xC0,0x30,
                0x00,0x0E,0x09,0x71,0x9D,0xA2,0xC5,0x19,0x12,
                0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x08,0x08,
                0x3E,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x40,0x8D,
                0x90,0x60,0x00,0x00,0xE0,0x00,0xE0,0x00,0x08,
                0x14,0x14,0x14,0x22,0x00,0x22,0x14,0x14,0x14,
                0x08,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                };

                Comment


                • #9
                  for(i=0;i<2;i++)
                  {
                  thêm vòng lặp nữa để nó hiển thị các chữ được lâu hơn
                  for(n=0;n<250;n++)
                  { SDA=1; /// đặt ở đây thì mới đúng chứ bạn nhỉ ?
                  for(j=0;j<8;j++){
                  //DataPort=0xFF;
                  SCL=1;
                  SCL=0;
                  STR=1;
                  STR=0;
                  SDA=0;
                  DataPort = charTable[i][j];
                  delay_ms(5);
                  }
                  }
                  chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
                  Everything should be made as simple as possible, but not simpler

                  Comment


                  • #10
                    [MENTION=33462]daohuytien[/MENTION]: Thanks Huynh nhiều 4rum ko có cái nút Thanks
                    [MENTION=100728]chung1608[/MENTION]: đã post rồi thì tiện thể giải thích cho AE hiểu luôn đi

                    Comment


                    • #11
                      Nếu ko phiền Huynh cho đệ hỏi giải thuật để di chuyển chữ A

                      Comment


                      • #12
                        Thư viện or file tableMT.c lấy ở đâu nhỉ. Hay là thư viện có sẵn rùi nhỉ.
                        Bác có file mô phỏng thì up lên 4r em xem tí.
                        Xem code thì hiểu nhưng ko biết là phần cứng,QA của 595 đầu tiên nối vào cột đầu hay cột cuối.

                        Comment


                        • #13
                          Hi mình có include cái thư viện tableMT.c nào đâu.
                          Còn cái sơ đồ thì ở ngay bài post đầu tiên đấy !

                          Comment


                          • #14
                            Reply

                            Ý mình là code của anh Chung cơ.

                            Comment


                            • #15
                              Nguyên văn bởi datinh4ever Xem bài viết
                              [MENTION=33462]daohuytien[/MENTION]: Thanks Huynh nhiều 4rum ko có cái nút Thanks
                              [MENTION=100728]chung1608[/MENTION]: đã post rồi thì tiện thể giải thích cho AE hiểu luôn đi
                              khả năng mô tả của mình kém bạn chịu khó đọc hiểu.
                              Nguyên văn bởi maingochoc Xem bài viết
                              Thư viện or file tableMT.c lấy ở đâu nhỉ. Hay là thư viện có sẵn rùi nhỉ.
                              Bác có file mô phỏng thì up lên 4r em xem tí.
                              Xem code thì hiểu nhưng ko biết là phần cứng,QA của 595 đầu tiên nối vào cột đầu hay cột cuối.
                              Q đầu tiên bên phải, tableMT.c là mã dịch từ các phần mềm tạo mã matrix. Tách ra 1 file riêng để cho gọn thôi, gom chung lại cũng đc. Mã matrix tạo theo cột.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • bqviet
                                Trả lời cho Đấu tắt điện cho máy tính bảng
                                bởi bqviet
                                Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                                06-12-2025, 17:17
                              • nguyendinhvan
                                Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                                bởi nguyendinhvan
                                Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                                05-12-2025, 19:59
                              • afrendly
                                Trả lời cho Đấu tắt điện cho máy tính bảng
                                bởi afrendly
                                Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                                04-12-2025, 01:27
                              • nick22
                                Trả lời cho Máy điện châm ?
                                bởi nick22
                                Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                                01-12-2025, 13:23
                              Đang tải...
                              X