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

                              Đang tải...
                              X