Thông báo

Collapse
No announcement yet.

đã sửa đi sửa lại đủ kiểu mà LCD vẫn ko chạy. help

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

  • đã sửa đi sửa lại đủ kiểu mà LCD vẫn ko chạy. help

    Cứu em với các bác ơi.Gấp lắm rùi ,tình hình là em đã sử đi sửa lại phần code theo như các cao thủ hướng dẫn . Nhưng cái con lcd vẫn chỉ hiện 1 hàng đen xì ở dòng 1.
    4 hôm nữa em phải nộp bài tập rồi.
    Các bác xem file code và sơ đồ nguyên lý rồi sửa giúp em với hu hu..

    Đại khái ý tưởng là như thế này:
    - bắy đầu thì hiện lần lượt các hàm :display_vxl ,display_thuchien, hientungtu, display_chao, run_loimoi
    - bấm 1 (INT0): hiện run_camon1
    - bấm 2 (INT1): hiện run-camon2
    Attached Files

  • #2
    Nguyên văn bởi orcian Xem bài viết
    cứu em với các bác ơi.Gấp lắm rùi ,tình hình là em đã sử đi sửa lại phần code theo như các cao thủ hướng dẫn . nhưng cái con lcd vẫn chỉ hiện 1 hàng đen xì ở dòng 1. 4 hôm nữa em phải nộp bài tập rồi. các bác xem file code và sơ đồ nguyên lý rồi sửa giúp em với hu hu..
    đại khái ý tưởng là như thế này:
    - bắy đầu thì hiện lần lượt các hàm :display_vxl ,display_thuchien, hientungtu, display_chao, run_loimoi
    - bấm 1 (INT0): hiện run_camon1
    - bấm 2 (INT1): hiện run-camon2
    Đã khởi tạo LCD tốt chưa bạn? Thay cả LCD xem sao.

    email:mahaco@fpt.vn

    Comment


    • #3
      bác coi hộ em phần khởi tạo ( LCD_setup ) em viết trong cáii file em đính kèm đó, tạo delay , gửi 3 lần mã lệnh 30H ..... đủ cả. nhưng vẫn ko chạy. LCD thi em vừa đi bảo hành. khả năng hỏng có lẽ là ko có đâu, nó vẫn hiện 1 dòng đen xì ở hàng 1 mà bác.
      ah nhân tiện cho em hỏi. cái chân số 3 của LCD em nối nó xuống GND thì có vấn đề gì ko ?

      Comment


      • #4
        Nguyên văn bởi orcian Xem bài viết
        bác coi hộ em phần khởi tạo ( LCD_setup ) em viết trong cáii file em đính kèm đó, tạo delay , gửi 3 lần mã lệnh 30H ..... đủ cả. nhưng vẫn ko chạy. LCD thi em vừa đi bảo hành. khả năng hỏng có lẽ là ko có đâu, nó vẫn hiện 1 dòng đen xì ở hàng 1 mà bác.
        ah nhân tiện cho em hỏi. cái chân số 3 của LCD em nối nó xuống GND thì có vấn đề gì ko ?
        Nếu nối chân 3 với GND thì nó sẽ không sáng. Chân này sẽ nối chân giữa của 1 con VR, 2 chân còn lại của VR sẽ nối GND và VCC. Khi thay đổi VR thì chữ sáng rõ hoặc không sáng.

        email:mahaco@fpt.vn

        Comment


        • #5
          ban oi, chan thu ba cw noi xuống đất qua một con trở 220 ôm là sáng rõ.

          Comment


          • #6
            bạn dịch chwowng trình bằng gì. xem cần thiết phải có dòng #include <sfr51.inc> không thì xóa đi chws

            Comment


            • #7
              mình dịch = reads51 nên phải có thêm cái dòng #include <sfr51.inc> cho vdk at89c51
              ah cái lcd mình dùng là loại 16x2 .

              Comment


              • #8
                To orcian: bạn tham khảo ct của mình xem có giúp gì được không, đã test hiển thị 2 dòng OK
                chúc thành công
                Attached Files

                Comment


                • #9
                  Bạn mô phỏng bàng Proteus ah, mình thấy sơ đồ mạch của bạn không cấp nguồn vậy, VSS=+5,VDD=0, VEE qua 1 biến trở nối 1 đầu xuống mass và 1 đầu lên cao thế để chỉnh độ tương phản của LCD. Sau đây mình gửi code mà mô phỏng bằng Proteus.
                  Attached Files

                  Comment


                  • #10
                    chạy mô phỏng thì ko cần cấp nguồn cho vdk với LCD đâu bạn.Cái mô phỏng của mình thì nó chạy ầm ầm rồi . đây nè bạn:
                    Attached Files

                    Comment


                    • #11
                      tui có vài góp ý nho nhỏ thui
                      - ct của u gọi delay nhìu wa , nhìn vào thấy ko pro
                      - ko cần phải nạp giá trị 0x38H nhìu lần như vậy đâu , chỉ cần trong hàm setup_LCd , dùng 1 lần là đc rùi
                      Bây h đến kinh nghiệm mà tui dùng với LCD
                      - kiểm tra cờ D7 để xem LCD hoàn thành công việc chưa , thay vì gọi delay
                      - trong lần đầu tiên , ghi vào LCd các giá trị
                      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 // về đầu dòng
                      sau khi khởi tạo các giá trị đó xong , trong lần tiếp theo ,chỉ cần
                      Code:
                      0x38 . 0x01 , 0x80
                      thế là xong!
                      Bạn cho hiện 1 chữ nào đó đã , ok rùi thì hãy thực hiện cho xuất dòng kí tự , nhằm bit mình sai ở đâu
                      Ủa , u ko dùng mấy cổng port 0 , kéo trở làm gì vậy ? mấy chân dùng làm phím thì nên kéo dương = trở , nhận mức 0 sẽ chắc chắn hơn !
                      u mới giao tiếp 8bit hui ah , nguyên cứu làm luôn 4 bit đi . Bt như thế này nộp thầy thì chán lém

                      Comment


                      • #12
                        đã chạy rồi. nghe theo lời khuyên của thằng bạn, em đổi sang xài 89s52 + ngôn ngữ C. vừa lắp vô cái nó chạy luôn. phần code nó thế này
                        Code:
                        #include<AT89X52.h>
                        sfr LCD_port   = 0xA0;
                        sbit LCD_E     = P0^7;
                        sbit LCD_RS    = P0^5;
                        sbit LCD_RW    = P0^6;
                        
                        unsigned char string1[] = "may ban nuoc";
                        unsigned char string2[] = "1 : cafe";
                        unsigned char string3[] = "giai khat";
                        unsigned char string4[] = "xin moi lua chon";
                        unsigned char string5[] = "2 : vodka ";
                        
                        //Khai bao cac ham
                        void initSystem(void);
                        void initLCD(void);
                        void delay(unsigned int n);
                        void writeLCD_IR(unsigned char instruction);
                        void writeLCD_DDR(unsigned char character);
                        void writeLCD(unsigned char dulieu);
                        void sendstringLCD(unsigned char*p);
                        void displayLCD(void);
                        //Dinh nghia cac ham
                        void initSystem(void)
                        { 
                          LCD_E = 0;
                          delay(100);
                          initLCD();
                        }
                        void initLCD(void)
                        {
                          writeLCD_IR(0x30);
                          writeLCD_IR(0x30);
                          writeLCD_IR(0x30);
                          writeLCD_IR(0x38);
                          writeLCD_IR(0x0E);
                          writeLCD_IR(0x06);
                          writeLCD_IR(0x01);
                        }
                        void writeLCD(unsigned char dulieu)
                        {
                          LCD_RW = 0;
                          LCD_port = dulieu;
                          LCD_E =1;
                          LCD_E =0;
                          delay(10);
                        }
                        void writeLCD_IR(unsigned char instruction)
                        {
                          LCD_RS = 0;
                          writeLCD(instruction);
                        }
                        void writeLCD_DDR(unsigned char character)
                        {
                          LCD_RS = 1;
                          writeLCD(character);
                        }
                        void delay(unsigned int n)
                        {
                            unsigned int i,j;
                        	for(i=0;i<n;i++);
                        	for (j=0;j<100;j++);
                        }
                        void sendstringLCD(unsigned char*p)
                        {
                            int i;
                        	i=0;
                        	while(p[i]!= 0)
                        	{
                        	   writeLCD_DDR(p[i]);
                        	   i++;
                        	   delay(100);
                        	} 
                        }
                        void displayLCD(void)
                        {
                             writeLCD_IR(0x80);
                        	 sendstringLCD(string2);
                        	 writeLCD_IR(0xC0);
                        	 sendstringLCD(string5);
                        	 writeLCD_IR(0xCE);
                        	 
                        }
                        //Khai bao ham chinh
                        void main(void)
                        {
                        
                               initSystem();
                        
                        	   writeLCD_IR(0x80);
                        	   sendstringLCD(string1);
                        	   writeLCD_IR(0xC0);
                        	   sendstringLCD(string3);
                        	   delay(60000);
                        
                        	   writeLCD_IR(0x01);
                        	   delay(60000);
                        
                        	   writeLCD_IR(0x80);
                        	   sendstringLCD(string4);
                        	   delay(60000);
                        		writeLCD_IR(0x01);
                        	   delay(60000);
                        
                        	 writeLCD_IR(0x80);
                        	   sendstringLCD(string2);
                        	   writeLCD_IR(0xC0);
                        	   sendstringLCD(string5);
                        	   delay(60000);
                        
                        	   
                        	   writeLCD_IR(0x01);
                        	   delay(60000);
                        	  
                                        displayLCD();
                        	
                        }
                        giờ em muốn hỏi các cao thủ. muốn viết 1 hàm ngắt có tác dụng như sau :
                        khi có 1 xung tác dụng vào port3_2 thì vdk sẽ tạo ra mức 1 ở chân p0_1 và p0_2. đồng thời hiện ra lcd 1 dòng chữ.
                        mong các bác chỉ giáo
                        Last edited by orcian; 16-05-2008, 19:23.

                        Comment


                        • #13
                          Code:
                          //------ hàm ngắt------
                          void INT0() interrupt 0
                          { P0_1 = P0_2 = 1 ; // tạo mức 1 ở chân P0_1 và P0_2
                            sendstringLCD('...dòng chữ cần hiện..');
                            display_LCD();
                          }
                          tất nhiên trong hàm main cần cấu hình cho các thanh ghi IE , cấu hình thế nào chắc u bit !

                          Comment


                          • #14
                            Thế giờ đã chạy được chưa vậy? bạn tham khảo cái code của mình đi, nó viết bằng C và chạy được ở bên ngoài ngon lành đó. Minh đang làm đề tài nhỏ điều khiển động cơ và hiển thị LCD mà, nên code dùng được

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X