Thông báo

Collapse
No announcement yet.

LCD 4 bit - Khi nhấn nút Reset

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

  • LCD 4 bit - Khi nhấn nút Reset

    Không biết tại sao khi cho chạy code LCD chạy đúng nhưng khi nhấn nút Reset của 8051 thì chạy sai, phải nhấn nút 2 lần mới ra kq đúng.
    code em mọi người xem thử

    Code:
    #include <at89x52.h>
    #define rs P2_2
    #define en P2_3
    
    //LCD Data pins
    #define lcdport P2
    
    void lcd_ini();
    void lcd_cmd(unsigned char);
    void lcd_putc(unsigned char);
    void lcd_puts(char *string);
    void lcd_goto(unsigned char x, unsigned char y);
    void delay_ms(unsigned int ms)	 //ham delay_ms(10)
    {unsigned int i,j;
    for(i=0;i<ms;i++)
    for(j=0;j<121;j++);
    }
    void delay_us(unsigned int us)
    {
    unsigned int i;
    for(i=0;i<us;i++);
    }
    
    void main(void)
    {		lcd_ini();
    		lcd_goto(2,3);
    		lcd_puts("dientuvietnam");
    		
    		while(1){
    	}
    }
    void lcd_ini()	                    
    {	delay_us(2000);		
    	lcd_cmd(0x28);	
    	delay_us(2000);
    	lcd_cmd(0x0C);
    	delay_us(2000);
    	lcd_cmd(0x06);
    	lcd_cmd(0x01);
    	lcd_cmd(0x02);
    	lcd_cmd(0x80);
    }
    void lcdcmd(unsigned char cmdout)
    {
    	delay_ms(10);
    	lcdport=cmdout;		
    	rs=0;						
    	en=1;
    	delay_ms(10);
    	en=0;
    	lcdport=0;
    }
    
    void lcd_cmd(unsigned char cmd_value)
    {
    	unsigned char cmd_value1;
    	cmd_value1 = (cmd_value & 0xF0);	
    	lcdcmd(cmd_value1);			/
    	delay_us(100);	
    	cmd_value1 = ((cmd_value<<4) & 0xF0);	
    	lcdcmd(cmd_value1);		
    	delay_us(100);
    }
    
    void lcd_puts(unsigned char *s)
    {
     while (*s)
     {
      lcd_putc(*s);
      s++;
     }
    }
    void lcddata(unsigned char dataout)
    {	delay_us(100);
    	lcdport=dataout;	//Send data to lcdport=PORTB
    	rs=1;
    	en=1;
    	delay_us(100);
    	en=0;
    }
    void lcd_putc(unsigned char data_value)
    {
    	unsigned char data_value1;
    	data_value1=(data_value&0xF0);
    	lcddata(data_value1);
    	data_value1=((data_value<<4)&0xF0);
    	lcddata(data_value1);
    }
    
    void lcd_goto(int x, int y)
    {
    	if((x<1||x>2)&&(y<1||y>16))
    	{
    		x=1;
    		y=1;
    	}
    	if(x == 1)
    		lcd_cmd(0x7F+y);
    	else
    		lcd_cmd(0xBF+y);
    }

  • #2
    cái này mình cũng đã gặp rồi đó bạn,có điều mình xài msp430,cũng như nhau cả thôi. Lúc reset thì CPU đang truyền dữ liệu đến LCD thì bị ngắt quãng => xảy ra lỗi. cái này là do vdk chứ ko phải do code đâu bạn,tốt nhất là ko nên bấm vào nút reset (trừ khi đang chạy mà gặp lỗi). nếu bạn muốn điều khiẻn LCD thì sử dụng phím nhấn nào đó chứ đừng dùng reset

    Comment


    • #3
      có cách nào reset lcd không bạn ?

      Comment


      • #4
        Chạy hàm lcd_init() thì sẽ khởi tạo lcd lại từ đầu, giống như reset nó.
        Nếu ấn Reset mà lỗi thì có thể lỗi trong hàm lcd_init() hoặc là thời gian tồn tại các xung kích hoạt quá thấp.

        Comment


        • #5
          Mới sửa lại hàm init
          Code:
          void lcd_ini()	                    
          {	
          	delay_ms(100);
          	lcd_cmd(0x03);
          	delay_ms(4);
          	lcd_cmd(0x03);
          	delay_us(100);
          	lcd_cmd(0x03);
          	delay_us(100);
          	lcd_cmd(0x02);
          	delay_us(100);
          	lcd_cmd(0x02);
          	lcd_cmd(0x08);
          	delay_us(53);
          	lcd_cmd(0x00);
          	lcd_cmd(0x08);
          	delay_us(53);
          	lcd_cmd(0x00);
          	lcd_cmd(0x01);
          	delay_us(53);
          	lcd_cmd(0x00);
          	lcd_cmd(0x06);
          	delay_us(53);
          	lcd_cmd(0x28);       
              lcd_cmd(0x0C);       
              lcd_cmd(0x06);      
              lcd_cmd(0x80);
          }
          Gần đúng thôi. Bác có INIT nào tốt không

          Comment


          • #6
            Help với mình không biết đặt delay làm sao để chuẩn đc.

            Comment


            • #7
              hàm lcd_clear() bạn. khi khởi tạo LCD thể nào chả có hàm này nhỉ
              Nguyễn Huy Biên - 01649 802 694
              gmail :

              Comment


              • #8
                Nguyên văn bởi bienhou Xem bài viết
                hàm lcd_clear() bạn. khi khởi tạo LCD thể nào chả có hàm này nhỉ
                Bạn có thể share code đc. không ?
                Lcd_clear()
                Mình làm trong Init đó. Nhưng khi bấm phím rết nhanh liên tục thì vẫn lỗi

                Comment


                • #9
                  Bạn xem cái lcd_init() kìa. Có sai đó.
                  Sau câu lệnh lcd_cmd(0x01) thì theo đúng datasheet yêu cầu thời gian hoàn thành tối thiểu là 1.64ms trong khi đó bạn de lay chỉ có 53us ?
                  Hoặc nếu không delay 1.64ms sau câu lệnh lcd_cmd(0x01) thì trong hàm của xung kích hoạt hoặc hàm của lcd_cmd phải có chỗ xử lí 1.64ms với giá trị 0x01.
                  __
                  Mà bạn làm thế nào để delay 53us vậy ? Chèn ASM sao @@.

                  Comment


                  • #10
                    // them vao doan nay thu xem su dung ngat ngoai INT0
                    unsigned char ss
                    void main(void)
                    {
                    IE =0x81;
                    P3_2 =1; // ngat canh xuong
                    while (1)
                    {
                    switch (ss)
                    { case 0:
                    {
                    ss++;
                    lcd_int();
                    lcd_goto(2,3);
                    lcd_puts ("dientuvietnam");
                    }
                    case 1: delay_ms (20);
                    }
                    }
                    }
                    //====================

                    //xuong cuoi dong
                    void ngatngoai() interrupt 0
                    {
                    ss=0;

                    }
                    Nguyên văn bởi MMKC_IT Xem bài viết
                    có cách nào reset lcd không bạn ?

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X