Thông báo

Collapse
No announcement yet.

Led matran bằng ASM có nhiều bạn quang tâm..................

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

  • #16
    Nguyên văn bởi 1991conga Xem bài viết
    bác CONGMINHfs ơi mún làm thành 16 hàng mà chỉ dùng 595 thì ntn đấy, bác chỉ giúp cho em với. Em đang làm đồ án về kái đó
    Bạn xem lại #1 cách mà mình thiết kế mạch là mạch thật luôn đó và khả năng mở rộng của nó,cái này bạn muốn 16 hang thì chỉ cần thêm 1em 74hc138 và tốn thêm 1 chân vdk nữa là ok rồi,tất nhiên phải sữa code lại là quét 8h thành 16hàng hay 24 hàng thì tùy bạn kể cả led 2 màu luôn..

    Comment


    • #17
      Đây là code mới kết hợp 3 kiểu chạy các bạn ngâm cứu tiếp nhé
      Code:
      
      
      
       ;QUETLED hien thi gom 80 cot va 8 hang
           SI   BIT P3.0 ;pin 14 74HC595
           SCK  BIT P3.1 ;pin 11 74HC595
      	 RCK  BIT P3.2 ;pin 12 74HC595
      ;******************************************* 	
          CHONHANG EQU P2 ;CHONHANG PORT P2
      ;*******************************************
      	CON_TRO  EQU R0
      	DIA_CHI	 EQU R1	
      	SO_COT   EQU R2
      	TOC_DO   EQU R3
      	DICHBIT  EQU 08H
                   ;hang 0>7 p2=00H>>07H
      
      ;****************************************	
      ;************BAT DAU CHUONG TRINH ********
      ;******************************************                                                     
                            ORG 0000H              
                            LJMP MAIN
      					 ; ORG 0003H
      					  ;LJMP EX0ISR
      					 ; ORG 000BH   ;Dia chi vector bo dinh thoi 0
      					 ; LJMP T0ISR
      					 ; ORG 001BH   ;Dia chi vector bo dinh thoi 1
      					 ; LJMP T1ISR  ;tao am thanh bipbip
      				     ; ORG 002BH  ;Dia chi vector bo dinh thoi 2
      
      ;***************************************
      		   ORG 0030H
      ;**************************  
      MAIN :     MOV SP,#60H                          
      	       MOV TMOD,#11H;11H ;Ca 2 bo dinh thoi che do 1
                     MOV IE,#8AH ;8A;cho phep ngat do cac bo dinh thoi
      		MOV DPTR,#CONGMINH
      ;*******************************************************
      ;*************CH/TR Chinh *****************************
      PLAY:
      
      ;***************************	
                       MOV DIA_CHI,#-80
      DICH_TRAI:MOV TOC_DO,#3
      LRAM:        LCALL LOADLENRAM
          	          LCALL QUET8HANG
      		  DJNZ TOC_DO,EX_01
      		  MOV TOC_DO,#3
      	           INC DIA_CHI
      		  CJNE R1,#80,EX_01
      		  LJMP DICH_PHAI 
      EX_01:        LJMP LRAM
      ;***************************
      DICH_PHAI: MOV DIA_CHI,#80
      dich_phai1: MOV TOC_DO,#3
      LRAM_P:     LCALL LOADLENRAM
        	         LCALL QUET8HANG
      		 DJNZ TOC_DO,EX_02
      		 MOV TOC_DO,#3
      		 DEC DIA_CHI
      		 CJNE DIA_CHI,#-80,EX_02
      		 LJMP DICH_LEN 
      EX_02:       LJMP LRAM_P
      ;**************************
      DICH_LEN:mov r6,#100
                     MOV DICHBIT,#7
                     MOV TOC_DO,#3
      LRAM_L:   LCALL DICH_RAM_LEN
           	       LCALL QUET8HANG
      	       MOV A,DICHBIT
      	       CJNE A,#0,EX_04;khi DICHBIT=0 thì dung lai
         djnz r6,EX_05
         mov DIA_CHI,#-9 
         ljmp dich_trai
        ; ljmp dich_phai1		 
      		; LJMP LRAM_L
      EX_04:   DJNZ TOC_DO,EX_05
      	     MOV TOC_DO,#3
      	     DEC DICHBIT
      EX_05:   LJMP LRAM_L 
      
      
       LJMP PLAY
      
      
      
      ;************************************************
      
      ;************************************************
      ;**********CH/TR con ********************** 
      DICH_RAM_LEN:
                      PUSH 00H
      		PUSH 01H
      		PUSH 02H 
                      MOV CON_TRO,#80H
      	        MOV DIA_CHI,#-9;addr giua bang=(80-62)/2
      		MOV SO_COT,#80 ;80cot                        
      LAPL_02:   MOV A,DIA_CHI                                                       
                      MOVC A,@A+DPTR
      		MOV R5,DICHBIT 
      		CJNE R5,#0,Q_T1
      		LJMP KHDICH
      Q_T1:	RL A	;Chay chu duoi len 
      Q_T:      	CLR C;,muon chay xuong thay bang RR A
                      RRC A  ;Chay chu duoi len ,
      		DJNZ R5,Q_T;muon chay xuong thay bang RRC A                                       
      KHDICH:    MOV @CON_TRO,A
      	        INC CON_TRO
      		INC DIA_CHI
      		MOV A,DIA_CHI				   
      		DJNZ SO_COT,LAPL_02
      		POP 00H
      		POP 01H
      		POP 02H
              RET
      
      
      
      
      
      
      ;**********************************************
      LOADLENRAM:
                      PUSH 00H
      		PUSH 01H
      		PUSH 02H 
                      MOV CON_TRO,#80H ;Dia chi dau 
      	        MOV A,DIA_CHI
      		MOV SO_COT,#80 ;80cot                             
      LAPL_01:   MOV A,DIA_CHI                                                       
                      MOVC A, @A+DPTR ;lay du lieu                                        
      		MOV @CON_TRO,A ;ghi vao ram
      	        INC CON_TRO	  ;tang con to dia chi
      		INC DIA_CHI	;tang dia chi trung gian		   
      		DJNZ SO_COT,LAPL_01;du so cot chua
      		POP 00H
      		POP 01H
      		POP 02H
              RET
      
      ;***********************************************
       QUET8HANG:  
                        PUSH 07H
      		  PUSH 00H
              	  MOV R7,#7  ;chon hang  
                        LAPHANG: MOV CON_TRO,#80H  
      	          CLR RCK					 
          LAPCOT:  CLR SCK 	          
      	          MOV A,@CON_TRO
      		  CLR C
      	          RRC A
      		  MOV @CON_TRO,A
      	          SETB SCK
      		  MOV SI,C			  		 
      		  INC CON_TRO			  
      		  CJNE CON_TRO,#0D1H,LAPCOT 
      		  SETB RCK		  
      		  MOV CHONHANG,R7;Sang hang			  
      		  LCALL DELAYLED
      		  MOV CHONHANG,#8
      		  DEC R7
                        CJNE R7,#-1,LAPHANG
      		  POP 00H
      		  POP 07H
      	        	RET
      ;*******************************************    
      ;*******************************
      DELAYLED:	
                         MOV 09H,#8
                   D1: MOV 10H,#250                 
                         DJNZ 10H,$       
                         DJNZ 09H,D1
      				   
                          RET   
      ;***************************;***********
      ;*************
      CONGMINH: 
      DB 7CH,0FEH,82H,82H,0CEH,4CH,0H,5CH,0BEH,0A2H,0BEH,5CH,0H,3EH,3EH,20H,3EH,1EH,0H,19H,3DH,25H,3FH,3EH,0H,0H
      DB 0FEH,0FEH,60H,30H,60H,0FEH,0FEH,0H,0BCH,0BEH,4H,0H,3EH,3EH,20H,3EH,1EH,0H,0FEH,0FEH,20H,3EH,1EH,0H,0H
      DB 0FEH,0FEH,90H,90H,80H,64H,0F6H,92H,0DEH,4CH,0H      
      ;*************
      END

      Comment


      • #18
        [QUOTE=CONGMINHfs;603069]Đây là code mới kết hợp 3 kiểu chạy các bạn ngâm cứu tiếp nhé
        [CODE]
        Cảm ơn bác, mặc dù code mình đọc chưa được thông suốt lắm nhưng bài viết rất hay và ý nghĩa

        Comment


        • #19
          Nguyên văn bởi CONGMINHfs Xem bài viết
          Bạn xem lại #1 cách mà mình thiết kế mạch là mạch thật luôn đó và khả năng mở rộng của nó,cái này bạn muốn 16 hang thì chỉ cần thêm 1em 74hc138 và tốn thêm 1 chân vdk nữa là ok rồi,tất nhiên phải sữa code lại là quét 8h thành 16hàng hay 24 hàng thì tùy bạn kể cả led 2 màu luôn..
          ý em là dùng kon 595 để đưa DL ra hàng và quét cột cơ chứ ko phải kon 138. kon 138 thì em làm đc rồi

          Comment


          • #20
            Nguyên văn bởi CONGMINHfs Xem bài viết
            Trong code có đó bạn vì ngẩu hứng nên mình chọn 80 byte ram từ 9EH đến EFH có phải là 80 byte không ,thực chất thì từ 9EH đến EEH nhưng vì lệnh so sánh nên phải là EFH



            hỡi anh em còn ai thắc mắc gì nữa không ta....!!!!
            Giờ em mới nhớ ra cái để hỏi: Ở trên em thấy bác chạy chữ "Công Minh FS", chữ này tạo như thế nào vậy bác? Mình cũng phải kẻ các ô tròn kích thước 8x80 như cái matrix của mình rồi tô chữ vào đó, xong dựa vào đó để dò ra code hả bác?

            Comment


            • #21
              Nguyên văn bởi CONGMINHfs Xem bài viết
              hỡi anh em còn ai thắc mắc gì nữa không ta....!!!!
              Bạn ơi,mỗi khi muốn đổi nội dung phải lôi con atmel 8951 ra nạp lại code mất công quá,làm thế nào để nhập nội dung vào ô nhớ từ máy tính?cám ơn bạn nhé.

              Comment


              • #22
                Nguyên văn bởi hongphuong98 Xem bài viết
                Bạn ơi,mỗi khi muốn đổi nội dung phải lôi con atmel 8951 ra nạp lại code mất công quá,làm thế nào để nhập nội dung vào ô nhớ từ máy tính?cám ơn bạn nhé.
                Bác qua bền này nè hướng dẩn chi tiết lắm Hướng dẫn giao tiếp máy tính từ A đến Z(Hình ảnh)

                Comment


                • #23
                  Nguyên văn bởi PDEL Xem bài viết
                  Bác qua bền này nè hướng dẩn chi tiết lắm Hướng dẫn giao tiếp máy tính từ A đến Z(Hình ảnh)
                  Tôi có theo dõi luồng này và tôi cũng lập trình VB6 để giao tiếp và điều khiển các thiết bị .Mấy cái này đơn giản không cần ram ngoài, nhưng với quang báo phải cần ram ngoài để chứa nội dung được nhiều cũng như không cần tháo 89XX để nạp.

                  Dùng max 232 giao tiếp 89xx với máy tính nạp mã ácii tôi không biết bạn ạ!

                  Comment


                  • #24
                    Nguyên văn bởi 1991conga Xem bài viết
                    ý em là dùng kon 595 để đưa DL ra hàng và quét cột cơ chứ ko phải kon 138. kon 138 thì em làm đc rồi
                    À mình hiểu ý bạn rồi ,thì bạn thêm 1con 595 nữa và xuất nối tiếp với con kia,thay vì bạn cần 1 byte
                    cho hàng thì bây giờ xuất 2 byte

                    chúc thành công !...

                    Comment


                    • #25
                      Nguyên văn bởi Ck33spkt Xem bài viết
                      Giờ em mới nhớ ra cái để hỏi: Ở trên em thấy bác chạy chữ "Công Minh FS", chữ này tạo như thế nào vậy bác? Mình cũng phải kẻ các ô tròn kích thước 8x80 như cái matrix của mình rồi tô chữ vào đó, xong dựa vào đó để dò ra code hả bác?
                      tặng bạn cái này:Tao Ma Chu Cho Led Matrix.rar

                      Comment


                      • #26
                        bác Congminh cho em hỏi 2 vấn đề cái :
                        - bác đặt biến DIACHI=#-80 là nghĩa thế nào nhỉ ?
                        - để quét led lần lượt như vậy thì phải có một chương trình xử lý những đoạn mà có những cột không sáng ( kiểu như bác quét chữ CONGMINH thì đầu tiên là 32 cột tắt,sau đó là 31 cột tắt và 1 cột sáng, sau đó tiếp là 30 cột tắt và 2 cột sáng theo chữ mình quy định trong mã, cứ tiếp như vậy, đến 0 cột tắt và 32 cột sáng theo chữ trong bảng mã matrix, và sau đó là cứ dịch bình thường ). bác có thuật toán nào xử lý vấn đề đó không ? (em thì chỉ biết có hai cách là : 1, nạp thêm vào ROM những mã matrix; 2, viết một chương trình con để xử lý khoảng trắng đó- cái này hơi rắc rối), em xem trong code của bác không thấy (à em quên, bác code quét theo hàng, nhưng em muốn quét theo cột thì xử lý xao nhỉ ?)
                        cảm ơn bác.

                        Comment


                        • #27
                          Nguyên văn bởi huuthobka Xem bài viết
                          bác Congminh cho em hỏi 2 vấn đề cái :
                          - bác đặt biến DIACHI=#-80 là nghĩa thế nào nhỉ ?
                          - để quét led lần lượt như vậy thì phải có một chương trình xử lý những đoạn mà có những cột không sáng ( kiểu như bác quét chữ CONGMINH thì đầu tiên là 32 cột tắt,sau đó là 31 cột tắt và 1 cột sáng, sau đó tiếp là 30 cột tắt và 2 cột sáng theo chữ mình quy định trong mã, cứ tiếp như vậy, đến 0 cột tắt và 32 cột sáng theo chữ trong bảng mã matrix, và sau đó là cứ dịch bình thường ). bác có thuật toán nào xử lý vấn đề đó không ? (em thì chỉ biết có hai cách là : 1, nạp thêm vào ROM những mã matrix; 2, viết một chương trình con để xử lý khoảng trắng đó- cái này hơi rắc rối), em xem trong code của bác không thấy (à em quên, bác code quét theo hàng, nhưng em muốn quét theo cột thì xử lý xao nhỉ ?)
                          cảm ơn bác.

                          - bác đặt biến DIACHI=#-80 là nghĩa thế nào nhỉ ?
                          bản led của mình là 80 cột đúng không bạn,vậy từ trái qua phải cột đầu tiên mình chọn daichi là 0
                          thì tương ứng cột cuối bên trái là +80 và cột cuối bên phải là -80.

                          - để quét led lần lượt như vậy thì phải có một chương trình xử lý những đoạn mà có những cột không sáng ( kiểu như bác quét chữ CONGMINH thì đầu tiên là 32 cột tắt,sau đó là 31 cột tắt và 1 cột sáng, sau đó tiếp là 30 cột tắt và 2 cột sáng theo chữ mình quy định trong mã, cứ tiếp như vậy, đến 0 cột tắt và 32 cột sáng theo chữ trong bảng mã matrix, và sau đó là cứ dịch bình thường ). bác có thuật toán nào xử lý vấn đề đó không ? (em thì chỉ biết có hai cách là : 1, nạp thêm vào ROM những mã matrix; 2, viết một chương trình con để xử lý khoảng trắng đó

                          hoanh nghênh bạn đã hiểu được thấu đáo vấn đề cố giắng phát huy nhé

                          nếu bạn quét cột (với số cột không lớn) thì để đơn giản bạn nên tắt cột bằng mã trong bảng(mảng) luôn.
                          chúc thành công..!..

                          Comment


                          • #28
                            Nguyên văn bởi CONGMINHfs Xem bài viết
                            - bác đặt biến DIACHI=#-80 là nghĩa thế nào nhỉ ?
                            bản led của mình là 80 cột đúng không bạn,vậy từ trái qua phải cột đầu tiên mình chọn daichi là 0
                            thì tương ứng cột cuối bên trái là +80 và cột cuối bên phải là -80.
                            Vấn đề em băn khoăn chính là chỗ này,
                            giả xử DIA_CHI=-80 ; sau đó có lệnh mov a,dai_chi ; rồi có lệnh movc a,@a+dptr thì nó xẽ lấy mã hiển thị ở trước ô 9E (tức là 9EH-80=4EH );
                            Vậy tức là mình đã tốn mất 80byte RAM rồi phải không ? (tổng cộng mất 160byte RAM cho dữ liệu trắng ?).
                            Em hiểu có gì sai mong bác thông cảm,
                            hy vọng bác giúp đàn em thắc mắc này.
                            thank.

                            Comment


                            • #29
                              Nguyên văn bởi huuthobka Xem bài viết
                              Vấn đề em băn khoăn chính là chỗ này,
                              giả xử DIA_CHI=-80 ; sau đó có lệnh mov a,dai_chi ; rồi có lệnh movc a,@a+dptr thì nó xẽ lấy mã hiển thị ở trước ô 9E (tức là 9EH-80=4EH );
                              Vậy tức là mình đã tốn mất 80byte RAM rồi phải không ? (tổng cộng mất 160byte RAM cho dữ liệu trắng ?)..

                              Đúng rồi đó bạn nhưng ta sử lí 160byte này như thế nào chứ đâu thể dùng phí thế
                              lúc nào có dịp nào đó cụ thể mình sẽ hướng dẫn bạn về cái khoản trắng này,chỉ có vài lệnh thôi.

                              gợi ý: dlieutrang......dulieu......dlieutrang .khi diachi nằm trong tầm dlieutrang thì dptr không lấy dulieu ở bảng mà lấy dulieu trắng cố định là 00h hoặc FFH....

                              Comment


                              • #30
                                Bạn CongMinh ơi,port p2 xuất 3 bit qua 74138 (để chuyển từ 3 qua 8 bit) làm sao ra mã db:7ch,0fe... để quét hàng được?

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X