Thông báo

Collapse
No announcement yet.

LCD của em tại sao không chạy???

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

  • LCD của em tại sao không chạy???

    Em có biết đổi đoạn code của một tác giả trên mạng viết bằng asm, sau đó em mô phỏng proteus chạy rất ok! Nhưng khi em làm board thiệt thì lại ko chạy! LCD chỉ hiển thị dòng 1 đen thui thế thôi! Em biết là mình chưa khởi tạo được LCD đó! Nhưng em không hiểu em sai chỗ nào. Mặc dù em đã kiểm tra và đo từng đường mạch và không có lỗi gì cả! Em xin gửi code và mạch cho mấy bác nghiên cưú giúp!
    Attached Files

  • #2
    mình đã làm với LCD- cho chữ chạy ngựoc xuôi, chạy nhảy các vị trí ( các loại từ 16x2 đến 20x4 ), dùng asem-, mình dọc qua bài code của bạn, cách thấy cách khơi tao của bạn khác mình, cậu đình dùng LCD làm đồng hồ à.

    Comment


    • #3
      quyen nick của mình nha_que_goc@yahoo.com,
      DD 0902181802
      rất vui nếu có thể giúp bạn điều gi

      Comment


      • #4
        Alo! Có ai nói cho mình biết tại sao ko? Mình làm đồng hồ lcd!

        Comment


        • #5
          đây là code khởi tạo & gửi kí tự đến LCD
          Code:
          ;============SETUP_LCD====================;
          LCD_SETUP:	MOV 	A,#2CH	
          		CALL 	WRITE_CONTROL
          		MOV 	A,#2CH	
          		CALL 	WRITE_CONTROL
          		MOV 	A,#06H
          		CALL 	WRITE_CONTROL	
          		MOV	A,#0FH		
          		CALL 	WRITE_CONTROL
          		MOV	A,#2
          		CALL	DELAYMS
          		CALL	WRITE_CONTROL
          		CALL	DELAYMS
          		MOV	A,#0CH			;NO POINT 
          		CALL	WRITE_CONTROL
          		MOV	A,#0CH			;NO POINT 
          		CALL	WRITE_CONTROL
          		CALL	DELAYMS
          		RET
          ;============CHO PHEP VIET LENH===========;
          WRITE_CONTROL:	MOV	REGA,A
          		CLR	ACC.3
          		CLR E
          		CALL	CLOCK
          		SETB E      
          		;CALL	CLOCK
          		NOP
          		NOP
          		NOP
                         	;CALL	DELAYUS
                          CLR E
          		MOV	A,REGA
          		SWAP	A
          		CLR	ACC.3
          		SETB E       
                         	CALL	CLOCK
          		NOP
          		NOP
          		NOP
                        	;CALL	DELAYUS
          		NOP
                          CLR E
          		RET
          ;==========CHO PHEP VIET DATA=============;
          WRITE_DATA:   	MOV	REGA,A
          		SETB	ACC.3
          		CLR E
          		CALL	CLOCK
          		SETB E 
                     	;CALL	CLOCK
                        	;CALL	DELAYUS
          		NOP
          		NOP
          		NOP
                          CLR E
          		MOV	A,REGA
          		SWAP	A
          		SETB	ACC.3
          		SETB E 
                     	CALL	CLOCK
          		NOP
          		NOP
          		NOP
          		;CALL	DELAYUS
          		NOP	
          		NOP 
                          CLR E
          		RET
          ;===========GUI CHUOI KI  TU==============;
          SEND_STRING:    PUSH ACC
          		MOV	REG_P,#0
          LOOP_ST:	CLR A
                          MOVC A,@A+DPTR      
                          JZ EXIT_S            
          		CALL WRITE_DATA
          		INC	REG_P
          		INC DPTR
          		MOV	A,REG_P
          		CJNE	A,#8,LOOP_ST
          		MOV	A,#0C0H
          		CALL	WRITE_CONTROL
          		JMP LOOP_ST
          	EXIT_S: POP ACC
          		RET
          
          ;=============XOA_MAN_HINH==============;
          CLR_DISLAY:	MOV A,#01H
          		CALL WRITE_CONTROL
          		CALL	DELAYMS
          		RET
          LCD 4 bit , sd 4 chân cuối D4-D7 , VDK philip . ASM tui ko rành lám , code này là thằng bạn viết , còn tui thích sài C hơn .
          code CCS viết cho PIC , cũng sd 4 chân cuối của LCD
          Code:
          void LCD_Init ( void )
          {
              delay_ms(200);                // thoi gian de LCD khoi dong
          
              output_low(RW);                    // RW = 0
              output_low(RS);                    // che do gui lenh
          
              send_to_LCD( 0x00 );
              output_high ( E ); output_low ( E ); delay_ms ( 10 );
          
          
              send_to_LCD( 0x03 );  /* init with specific nibbles to start 4-bit mode */
              output_high ( E ); output_low ( E ); delay_ms ( 3 );    
              output_high ( E ); output_low ( E ); delay_ms ( 3 );
              output_high ( E ); output_low ( E ); delay_ms ( 3 );
          
              send_to_LCD( 0x02 );  /* set 4-bit interface */
              output_high ( E ); output_low ( E ); delay_ms ( 3 );    
          
          
              LCD_PutCmd ( 0x2C );    /* function set (all lines, 5x7 characters) */
              LCD_PutCmd ( 0x0C);    /* display ON, cursor off, no blink */
              LCD_PutCmd ( 0x06 );    /* entry mode set, increment & scroll left */
              LCD_PutCmd ( 0x01 );    /* clear display */
          }
          
          void LCD_SetPosition ( unsigned int data )
          {
          
              send_to_LCD( swap ( data ) | 0x08 );
              output_high ( E ); output_low ( E ); delay_ms ( 3 );    
          
              send_to_LCD( swap ( data ) );
              output_high ( E ); output_low ( E ); delay_ms ( 3 );    
          
          }
          
          void LCD_PutChar ( unsigned int data )
          {
              output_high( RS ); //RS = 1
              output_low ( RW ); //RW = 0
          
              send_to_LCD( swap ( data ) );                              // gui 4 bit cao
              output_high ( E ); output_low ( E ); delay_ms ( 3 );    
          
              send_to_LCD( swap ( data ) );                              //gui 4 bit thap
              output_high ( E ); output_low ( E ); delay_ms ( 3 );    
          
          }
          
          void LCD_PutCmd ( unsigned int data )
          {
              output_low(RS); // RS = 0
              output_low(RW); // RW = 0
          
              send_to_LCD( swap(data) );    // gui 4 bit cao
              output_high (E); output_low (E); delay_ms (3);
          
              send_to_LCD( swap(data) );    // gui 4 bit thap
              output_high (E); output_low (E); delay_ms ( 3 );
          }
          
          
          void send_to_LCD( unsigned int data )
          {
              output_bit ( LCD_D4, data & 0x01 );
              output_bit ( LCD_D5, data & 0x02 );
              output_bit ( LCD_D6, data & 0x04 );
              output_bit ( LCD_D7, data & 0x08 );
          }

          Comment


          • #6
            Còn ai cho mình lời khuyên nào khác ko? Mình đang rất cần giúp đỡ!

            Comment


            • #7
              bạn vẫn còn chưa hiển thị đc ah ! lúc mới khởi tạo LCd , bạn cần khởi tạo đầy đủ các giá trị & theo thứ tự
              Code:
              0x38 : 2 dòng & ma trận 5x7
              0x08 : tắt con trỏ , tắt hiển thị
              0x0C : tắt con trỏ , bật hiển thị
              0x01 : xóa màn hình
              0x02 : đưa con trỏ về đầ dòng
              sau lần đó , bnj ko cần khởi tạo rườm rà như thế nữa , chỉ cần 0x38 và 0x01 là đủ

              Comment


              • #8
                Sở dĩ lập trình LCD nó chuối bởi vì không có datasheet chi tiết về timing.
                - Kiểm tra phần cứng xem đã ngon chưa (xem các SCH trên mạng vô khối) xem có đứt, chập không.
                - Xem các code của đồng đạo xem thứ tự các lệnh khởi tạo đúng chưa
                - "Mò" timing của các lệnh <-- cái này thì chuối. Nhưng thử một vài giá trị delay khác mà xem, lơ mơ nó lại chạy đấy

                Comment


                • #9
                  Nguyên văn bởi phamthaihoa Xem bài viết
                  Sở dĩ lập trình LCD nó chuối bởi vì không có datasheet chi tiết về timing.
                  - Kiểm tra phần cứng xem đã ngon chưa (xem các SCH trên mạng vô khối) xem có đứt, chập không.
                  - Xem các code của đồng đạo xem thứ tự các lệnh khởi tạo đúng chưa
                  - "Mò" timing của các lệnh <-- cái này thì chuối. Nhưng thử một vài giá trị delay khác mà xem, lơ mơ nó lại chạy đấy
                  Sở dĩ không có timing là vì mua hàng trôi nổi không biết nó dùng con điều khiển là con gì. Nếu mua hàng ngon thì biết ngay nó dùng con gì điều khiển. Tra datasheet con đó là có đủ hết từ timing cho tới khởi tạo rồi đến tập lệnh.
                  AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                  Xem thêm tại Online Store ---> Click here
                  Mob: 0982.083.106

                  Comment


                  • #10
                    Vẫn không hiểu tại sao khi đã thử hết tất cả các code khởi tạo! Mấy hôm nay mất ăn, mất ngủ để kiểm tra dò từng đường xem có sai sót gì ko mà vẫn không thấy gì là sai! Ai đã từng làm cái này rồi thì cho ý kiến dùm em cái!

                    Comment


                    • #11
                      Thui cứ nghỉ Tết vui vẻ đi. Ra Tết tôi sẽ làm một tut với loại màn LCD ký tự.
                      AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                      Xem thêm tại Online Store ---> Click here
                      Mob: 0982.083.106

                      Comment


                      • #12
                        chạy rồi đây bạn!!!!!!
                        mình chỉ sửa lại đoạn mã của bạn 1 tí thôi.
                        đó là khi bạn đặt tên cho các pin thì dùng lệnh "bit" chứ ko phải là "equ"
                        Attached Files

                        Comment


                        • #13
                          Giúp mình cái LCD, nó không chạy!

                          @VNarmy: Sặc, làm sao nghỉ tết vui vẻ được chứ, đây là đề án mà mình làm nộp sau tết đấy, nghỉ tết xong là đi đứt luôn!
                          Bạn làm tut về LCD thì sao? Mình đã đọc LCD tát nước rồi! Vấn đề không phải là viết chương trình LCD thế nào, cái này dư sức mình biết mà! Dù sao cũng Thanks bạn! Mình sẽ post hình mạch của mình bạn coi dùm mình sai chỗ nào nhé!

                          @Tranpic: Đổi EQU thành BIT thì sao? Chả ảnh hưởng gì đến điện đâu bạn ơi, mình đã nói với code của mình mô phỏng proteus thì chạy rồi, chỉ làm mạch thật là chưa chạy thôi! Hãy giúp mình thêm nhé, cái đổi này không phải đâu!

                          Đây là hình mạch của mình, các bạn coi xem mình sai chỗ nào nhé!
                          Attached Files

                          Comment


                          • #14
                            choy ah ! có cái mạch nhỏ xíu mà bạn làm to tướng như thế , lại chia ra nhìu module . mạch để ko như thế xí lắm ! bạn xịt cho nó lớp sơn , che phần màu tấm nhựa đó lại đi ...chưa pro lám ! thầy chấm cả phần đẹp nữa đó . Đồ án môn lập trình hê thống chứ gì

                            Comment


                            • #15
                              Mình chia làm nhiều module là có ý đồ mà! Đẹp hay không đẹp tính sau đi, quan trọng là chạy hay không chạy kìa! Mình kiểm tra rất kỹ rồi mà vẫn không hiểu nguyên nhân vì sao không chạy! Mình pó tay rồi đó, ai đã làm rồi thì làm ơn chỉ dùm mình cái!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X