Thông báo

Collapse
No announcement yet.

Tìm hiểu bảng quang báo

Collapse
This topic is closed.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Em trình bày nguyên lý làm chữ chạy mà không sử dụng màn hình off-screen, tốc độ xử lý cực nhanh vì công việc của vi xử lý là rất ít. Nguyên tắc em đã đề cập trong các bài viết trước trong các bài trả lời bác IRF540.

    Trước tiên các bác vẽ một hình nào đó trên máy tính, chẳng hạn em viết câu: "Vita hư đi chơi không hỏi bà, mải chơi quá tối cũng không về nhà."

    Em khai báo một mảng trong bộ nhớ Flash như sau:

    const unsigned char wDataArr=52;
    const unsigned char DataArr[]={
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,
    .............dài quá em xin bỏ bớt............
    0x36,0x06,0x36,0x7F,0x30,0x36,0xE6,0x07,0x3C,0x66, 0x8C,0xC1,0xD8,0x18,0x8C,0x0D,
    0x06,0x63,0x63,0x83,0xC7,0xD8,0xD8,0xD8,0x18,0x8C, 0x8D,0x0D,0xC6,0xC6,0x00,0x66,
    0x36,0x36,0x18,0x8C,0x8D,0x0D,0xC6,0xC6,0xC6,0xC0, 0x18,0x1B,0x0C,0xC6,0xC6,0xC6,
    0xE0,0x31,0x36,0x36,0x36,0x06,0x36,0x03,0x30,0x36, 0x36,0x06,0x18,0x66,0x8C,0xC1,
    0xD8,0x1C,0xCC,0x0D,0x46,0x63,0x63,0x83,0xCD,0xD8, 0xD8,0xD8,0x1C,0x8C,0x8D,0x0D,
    0xC6,0xC6,0x0C,0x66,0x36,0x36,0x18,0x8D,0x8D,0x0D, 0xE6,0xE6,0xC6,0xC0,0x18,0x1B,
    0x8C,0xE6,0xC6,0xE6,0x60,0x33,0x36,0x36,0x36,0x07, 0x1C,0x43,0x30,0x36,0x36,0x66,
    .............dài quá em xin bỏ bớt............
    0x18,0xC6,0xF9,0xC1,0x98,0x1B,0xB8,0x0D,0x3C,0x63, 0x3E,0x83,0xD9,0x98,0xCF,0x98,
    0x1B,0x8C,0xF9,0x0C,0x7E,0xFC,0x0C,0x66,0xE6,0x37, 0xF0,0x8C,0xF9,0x0C,0xDC,0xDC,
    0xFC,0x80,0xF3,0x19,0x78,0xDC,0xC6,0xDC,0x60,0x36, 0xE6,0x33,0xE6,0x06,0x1C,0x3E,
    };

    biến wDataArr=52 chỉ ra rằng mảng này có tất cả 52 x 8 cột.
    mảng DataArr chứa câu: "Vita hư....về nhà", gồm 52 x 8 cột và 16 dòng như 2 ảnh đính kèm dưới đây.
    Attached Files
    Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
    Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

    Comment


    • Tiếp theo khai báo 2 mảng con trỏ. Thực ra chỉ cần 1 mảng thôi, nhưng nếu ta muốn chạy đi chạy lại nhiều lần thì phải backup cái mảng trên.

      // DMem là bo nho man hinh: Display Memory;
      // Con tro (pointer) DMem se tro vao DataArr; *DMem[i] se mang du lieu cua dong thu i
      unsigned char flash *DMem[16];
      unsigned char flash *DMemBackup[16];

      Ban đầu ta sẽ cho bộ nhớ màn hình trỏ vào vùng dữ liệu Flash DataArr ở trên:

      for (i=0;i<=15;i++){
      // Con tro DMem[i] tro vao byte dau tien cua dong thu i trong DataArr
      DMem[i]=DataArr+i*wDataArr;
      DMemBackup[i]=DMem[i];
      }

      Các bác có thể thấy ngay DMem[0] sẽ trỏ vào byte đầu tiên (byte 0) của DataArr, DMem[1] trỏ vào byte thứ 52, DMem[2] trỏ vào byte thứ 104...

      Như vậy DMem[i] sẽ trỏ vào byte đầu tiên của dòng thứ i tương ứng với byte thứ i*wDataArr của mảng DataArr
      Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
      Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

      Comment


      • Em sử dụng Timer 1 để quyết định tốc độ quét led, ghi chú là ở đây dùng quét hàng, dữ liệu được dịch ra các thanh ghi 74595. Như vậy trong ngắt Timer1 em sẽ viết như sau: (tại thời điểm quét hàng thứ rowth)

        if (!nextdataready){ //data chua co trong cac thanh ghi dich
        byte1st=DMem[rowth];
        //ncols (number of columns) là số lượng cột chia cho 8, tức là ncols x 8 là số cột của bảng led ma trận.
        for (i=1;i<=ncols;i++){
        byteth=byte1st+i;
        temp=*byteth; // temp co gia tri của cot thu i, hang thu rowth
        for (j=0;j<=7;j++){
        temp>>=1; // dich byte du lieu sang phai
        Data=SREG.0; // lay du lieu trong co nho (Carry Flag)
        SH_CP=0; SH_CP=1; // tao mot suon duong de dua du lieu vao thanh ghi dich
        }
        }
        nextdataready=1; //du lieu da san sang trong thanh ghi dich
        rowth++; // lan tiep theo se quet hang rowth+1
        if (rowth==16) rowth=0 // neu quet den dong cuoi cung thi tro lai quet dong dau tien
        Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
        Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

        Comment


        • Công việc còn lại là ở trong chương trình chính, còn rất đơn giản như sau:
          while (1){
          // Vòng lặp này chỉ có tác dụng cho chuỗi chạy đi chạy lại nhiều lần
          for (i=0;i<=15;i++){
          DMem[i]=DMemBackup[i];
          }

          // Cho con tro DMem (hay bo nho man hinh DMem) dich chuyen moi lan 1 byte tu dau mang DataArr den cuoi mang DataArr
          for (j=0;j<=wDataArr;j++){
          delay_ms(200);
          for (i=0;i<=15;i++){
          DMem[i]++;
          }
          }
          };

          Như vậy không tính vòng lặp để chuỗi chạy đi chạy lại nhiều lần em chỉ cần đúng 2 vòng lặp.
          Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
          Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

          Comment


          • Bây giờ còn phải sửa lại chương trình một chút, để sao cho nó chỉ dịch chuyển 1 bit thôi, chứ mỗi lần dịch chuyển cả 8 bits (1 byte) thì kỳ quá. Sửa lại trong chương trình chính như sau:

            while (1){
            for (i=0;i<=15;i++){
            DMem[i]=DMemBackup[i];
            }

            for (j=0;j<=wDataArr;j++){
            //Thêm vào biến kk để cho chương trình ngắt trong Timer1 biết là xuất từ bit thứ kk của DMem[i] thôi chứ không phải lúc nào cũng xuất từ bit thứ 0
            for (kk=0;kk<=7;kk++){
            delay_ms(movingspeed);
            }
            for (i=0;i<=15;i++){
            DMem[i]++;
            }
            }
            };

            Và cũng phải sửa một chút trong chương trình ngắt Timer1, chưong trình hoàn chỉnh như sau:

            void datapreparing(void){
            int i;
            int j;
            if (!nextdataready){ //data chua co trong cac thanh ghi dich
            byte1st=DMem[rowth];
            //lấy từ bit thứ kk đến bit thứ 7 của byte đầu tiên
            temp=*byte1st;
            if (kk!=0) temp>>=kk;
            for (j=kk;j<=7;j++){
            temp>>=1; // dich byte du lieu sang phai
            Data=SREG.0; // lay du lieu trong co nho (Carry Flag)
            SH_CP=0; SH_CP=1; // dua vao thanh ghi dich
            }
            // lấy đủ từ bit 0..7 của n bytes tiếp theo
            for (i=1;i<=ncols-1;i++){
            byteth=byte1st+i;
            temp=*byteth;
            for (j=0;j<=7;j++){
            temp>>=1; // dich byte du lieu sang phai
            Data=SREG.0; // lay du lieu trong co nho (Carry Flag)
            SH_CP=0; SH_CP=1; // dua vao thanh ghi dich
            }
            }
            // lấy từ bit 0 đến bit thứ kk của byte cuối cùng
            if (kk!=0){
            byteth=byte1st+ncols;
            temp=*byteth;
            for (j=0;j<=kk-1;j++){
            temp>>=1; // dich byte du lieu sang phai
            Data=SREG.0; // lay du lieu trong co nho (Carry Flag)
            SH_CP=0; SH_CP=1; // dua vao thanh ghi dich
            }
            }
            nextdataready=1; //du lieu da san sang trong thanh ghi dich
            }
            }
            // Timer 1 output compare A interrupt service routine
            interrupt [TIM1_COMPA] void timer1_compa_isr(void){
            OutEn=1;
            ST_CP=0; ST_CP=1; // dua tu thanh ghi dich ra cac chan cua 74595
            PORTB=ROW[rowth];
            OutEn=0;
            rowth++;
            if (rowth==16) rowth=0;
            nextdataready=0;
            datapreparing();
            }
            Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
            Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

            Comment


            • Lần sau em xin trình bày một số kỹ thuật khác như hiện chữ, xóa chữ từ giữa ra, từ ngoài vào, làm bảng led tối dần rồi mất hẳn, từ từ hiện ra mà vẫn kết hợp được với hiệu ứng chạy chuỗi. Tất cả đều chưa sử dụng đến màn hình Offscreen.

              Bật mí một chút dành cho các bác muốn làm màn hình Offscreen. Vẫn xài con trỏ DMem như của em, khai báo hai mảng DataArr1, DataArr2 để chứa dữ liệu của 2 màn hình (trong bộ nhớ RAM nhé, không phải trong Flash).
              Ban đầu gán DMem tro vao DataArr1 (giống như ở các ví dụ các bài viết trước)
              Vẽ hình thoải mái trong DataArr2, khi nào vẽ xong thì gán DMem trỏ vào DataArr2...
              Mọi việc có vẻ đơn giản nhỉ? Tiết kiệm được CPU cho VXL để có nhiều thời gian hơn vào việc vẽ vời, xử lý các hiệu ứng.
              Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
              Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

              Comment


              • ---------------------------------------------------------------------------xí một chỗ--
                Last edited by nghaiha; 11-03-2008, 22:04.
                Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
                Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

                Comment


                • Hay quá nhỉ?Em cũng đang nghiên cứu nhưng mà tài chính eo hẹp+non kinh nghiệm nên chưa được j nhiều
                  |

                  Comment


                  • các bác xem hộ em cái mạch này nha, em chỉ mới mô phổng thôi chờ các bác cho ý kiến rồi mới làm trên test booard sau.
                    cái mạch của em chỉ là demo thôi còn phát triển nữa nên mong các bác chỉ giáo
                    còn đây là code của mình, mình chưa chuẩn bị cái font nên dùng tạm vậy.
                    em định phát triển mạch là giao tiếp với máy tính qua rs232, và với Ram ngoài chứ Ram nội ít quá.
                    mong các bác giúp đỡ em
                    Code:
                    					/*SAN PHAM DAU TAY*/
                    					/*BY TRAN HOANG DAT*/
                    					;0620124
                    ORG 0H
                    SJMP MAIN
                    ORG 30H
                    NUM 	EQU 4
                    MODULE 	EQU 2;MAX 10
                    CLK0 	EQU P1.0
                    CLK1 	EQU P1.2
                    CLK		EQU P1.7
                    CRY 	EQU P1.1
                    SM 		EQU P1.3
                    CR		EQU P1.5
                    RG		EQU P1.6
                    LED		EQU 2
                    MAIN:
                    	ACALL LOAD
                    	MOV 01,00;R1 LUU MAX CUA R0
                    	MOV A,#8
                    	MOV B,#LED
                    	MUL AB
                    	MOV R2,A;R2 LUU STEP
                    	LOOP4:
                    	MOV R0,#30H
                    	MOV 03,00
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
                    	LOOP3:
                    	MOV 04,02
                    	CLR CR
                    	SETB CR
                    	SETB RG
                    	PUSH 03
                    	LOOP2:
                    	MOV 00,03
                    	CLR CLK
                    	SETB CLK
                    	CLR RG
                    	CLR P1.4
                    	PUSH 03
                    	MOV R3,#MODULE
                    	LOOP1:
                    	MOV A,@R0
                    	;;;;;;;;;;;;;;
                       	PUSH 01
                    	MOV R1,#8
                    	LOOP:
                    	RLC A
                    	MOV CRY,C
                    	CLR CLK0
                    	SETB CLK0
                    	DJNZ R1,LOOP
                    	POP 01
                    	;;;;;;;;;;;;;;
                    	CLR CLK1
                    	SETB CLK1
                    	CLR SM
                    	SETB SM
                    	;;;;;;;;;;;;;;
                    	MOV A,R0
                    	ADD A,R2
                    	MOV R0,A
                    	CLR C
                    	SUBB A,R1
                    	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;***********************
                    	JC NEXT
                    	ADD A,#30H
                    	MOV R0,A
                    	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;***********************
                    	NEXT:
                    	ACALL DELAY
                    	DJNZ R3,LOOP1
                    	SETB P1.4
                    	POP 03
                    	INC R3
                    	DJNZ R4,LOOP2
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    	POP 03
                    	INC R3
                    	MOV A,R3
                    	CJNE A,01,NEXT1
                    	NEXT1:
                    	JNC NEXT2
                    	SJMP LOOP3
                    	NEXT2:
                    	SJMP LOOP4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
                    LOAD:
                    	CLR A
                    	MOV R0,#30H
                    	MOV R3,#0;
                    	LOAD2:
                    	MOV DPTR,#MYDATA
                    	MOVC A,@A+DPTR
                    	CLR C
                    	SUBB A,#30H
                    	MOV B,#8; x5 KHI LED CO 5 COT
                    	MUL AB
                    	MOV DPTR,#FONT
                    	MOV R1,#8
                    	LOAD1:
                    	MOV R2,A
                    	MOVC A,@A+DPTR
                    	MOV @R0,A
                    	MOV P1,@R0
                    	INC	R0
                    	INC DPTR
                    	MOV A,R2
                    	DJNZ R1,LOAD1
                    	INC R3
                    	MOV A,R3
                    	CJNE R3,#NUM,LOAD2
                    	MOV R4,#7
                    	LOAD3:
                    	MOV @R0,#0FFH
                    	INC R0
                    	DJNZ R4,LOAD3
                    	MOV @R0,#0FFH
                    RET
                    
                    DELAY:		MOV R7,#100
                    DL3:	    MOV R6,#10            
                    DL4:        DJNZ R6,DL4
                    			DJNZ R7,DL3
                    RET
                    MYDATA: DB "0123"
                    FONT:
                    	db 11111111b,11000000b,00000000b,00110011b,00110011b,00000000b,11000000b,11111111b;A
                    	db 11111111b,00000000b,00000000b,01100110b,01100110b,01100110b,10011001b,11111111b;B
                    	db 11111111b,11000011b,10000001b,00111100b,00111100b,00111100b,10111101b,11111111b;C
                    	db 11111111b,00000000b,00000000b,00111100b,00111100b,00000000b,10000001b,11111111b;D
                    END
                    Attached Files

                    Comment


                    • anh nghaiha giúp em với!!!!!

                      ----------------------------------------------------------------------------------------------
                      chào anh nghaiha! em thấy anh rất dành về quang báo. xin anh giúp em với, em bây giờ mới tìm hiểu về quang báo nên em rất mong được anh giúp đỡ.
                      phần thiết kế mạch của em như thế này:
                      - avr atmega16
                      - 74hc154 để quét hàng
                      - 74hc595 xuất dữ liệu ra cột
                      - led matrix 8*8
                      - em sử dụng port c để xuất dữ liệu ra cột, cụ thể là PC0 nối với DS, PC1 nối với SH_CP, PC2 nối với ST_CP. em sử dụng portB để điều khiển hàng thông qua con 74hc154.
                      dưới đây là thiết kế phần cứng của em. anh xem giúp em với

                      Click image for larger version

Name:	untitled.JPG
Views:	1
Size:	105.2 KB
ID:	1330189

                      em chưa biết phải viết chương trình như thế nào để có thể hiển thị một chữ bất kỳ được nhập từ bàn phím của máy vi tính và cho nó chạy từ phải qua trái.em đang rất cần, anh giúp em với nhé.anh có chương trình mẫu nào phù hợp với thiết kế phần cứng của em thì gửi cho em với.đây là mail của em biennho1205@yahoo.com . em sắp phải nộp rồi,em đang làm thiết kế môn học anh à
                      em cảm ơn anh nhiều lắm!
                      Last edited by dinhthai; 19-03-2008, 15:13.

                      Comment


                      • em moi tim hieu ma tran led nay roi nhung chua lam de luu du lieu tren ROM ngoai vay bac nao da lam roi cothe chia se kinh nghiem duoc khong
                        chung ta cung hoc hoi a
                        a cho em hoi post bai lên thi cần điều kiện gì va bị giới hạn là bao nhiêu K
                        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


                        • Nguyên văn bởi encoder Xem bài viết
                          mọi người lâu nay thường hay dùng thanh ghi dịch hc595 để xuất dữ liệu. Đã có ai sử dụng nó để quyét led chưa. đây là một ví dụ của tôi về việc sử dụng hc595 để quyét cột led matrix 8x8. dữ liệu được xuất đồng thời ra hàng.
                          em dang thiet ke MACH QUANG BAO GIAO TIEP VOI MAY TINH, anh co the goi cho em chuong trinh viet bang ngon ngu C cho em tham khao duoc khong . mail cua em la congtrinh12c4@yahoo.com. em rat can cam on anh nhieu

                          Comment


                          • Nguyên văn bởi encoder Xem bài viết
                            mọi người lâu nay thường hay dùng thanh ghi dịch hc595 để xuất dữ liệu. Đã có ai sử dụng nó để quyét led chưa. đây là một ví dụ của tôi về việc sử dụng hc595 để quyét cột led matrix 8x8. dữ liệu được xuất đồng thời ra hàng.
                            anh em dang thiet ke MACH QUANG BAO GIAO TIEP VOI may tinh, anh co the goi cho em chuong trinh viet bang ngon ngu C cho em thao khao duoc khong . em rat can. cam on anh nhieu. mail cua em la congtrinh12c4@yahoo.com

                            Comment


                            • Nguyên văn bởi dinhthai Xem bài viết
                              anh nghaiha giúp em với!!!!!

                              ----------------------------------------------------------------------------------------------
                              chào anh nghaiha! em thấy anh rất dành về quang báo. xin anh giúp em với, em bây giờ mới tìm hiểu về quang báo nên em rất mong được anh giúp đỡ.
                              phần thiết kế mạch của em như thế này:
                              - avr atmega16
                              - 74hc154 để quét hàng
                              - 74hc595 xuất dữ liệu ra cột
                              - led matrix 8*8
                              - em sử dụng port c để xuất dữ liệu ra cột, cụ thể là PC0 nối với DS, PC1 nối với SH_CP, PC2 nối với ST_CP. em sử dụng portB để điều khiển hàng thông qua con 74hc154.
                              dưới đây là thiết kế phần cứng của em. anh xem giúp em với

                              [ATTACH]6899[/ATTACH]

                              em chưa biết phải viết chương trình như thế nào để có thể hiển thị một chữ bất kỳ được nhập từ bàn phím của máy vi tính và cho nó chạy từ phải qua trái.em đang rất cần, anh giúp em với nhé.anh có chương trình mẫu nào phù hợp với thiết kế phần cứng của em thì gửi cho em với.đây là mail của em biennho1205@yahoo.com . em sắp phải nộp rồi,em đang làm thiết kế môn học anh à
                              em cảm ơn anh nhiều lắm!
                              Thiết kế phần cứng của bác như thế là tạm ổn rồi, sửa lại 1 chút (cái hình nhìn không rõ nên khó đoán quá, chẳng biết Transitor là loại nào và giá trị của điện trở)
                              - Thiếu một điện trở kéo lên ở chân reset. Mục đích khi không nhấn nút Reset thì chân Reset sẽ chắc chắn ở mức 1.
                              - Bỏ điện trở ở con 595 đi, cứ cho thẳng lên nguồn, không sao đâu.
                              - Nên có điện trở hạn dòng cho led ma trận mặc dù 595 hút dòng ít. Khi làm bảng mạch thương mại người ta mới không xài trở hạn dòng.
                              - Xài 74138 chứ xài 74154 chi cho tốn tiền.

                              + Giao tiếp máy tình thì CodeVision đã sinh đủ hết mã cho bác rồi. Thêm vài lệnh để xuất nhập ký tự cho AVR nữa, sau đó dùng chương trình Hyper Terminal (có sẵn trong Windows) để giao tiếp với AVR, đỡ mất công phải viết chương trình điều khiển bên Windows.
                              + Sử dụng một mảng 8x8 trong AVR để làm bộ nhớ màn hình. Một chưong trình với ngắt Timer sẽ đọc mảng này rồi dùng phương pháp quét đưa mảng này ra Led ma trận.
                              + Khi cần dịch chữ hay các hiệu ứng phụ, bác chỉ cần thay đổi cái mảng này là sẽ thay đổi kết quả xuất ra led.

                              Chúc thành công.
                              Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
                              Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

                              Comment


                              • bác nghaiha coi dùm em cái mạch ở trên đi!

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X