Thông báo

Collapse
No announcement yet.

giup minh lap trinh lcd

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

  • giup minh lap trinh lcd

    minh co 1 doan cose sau nhung luc bat tay vao lam thi ko biet phai sua the nao cac ban giup minh voi
    Code:
    #ifndef __LCD_H__
    #define __LCD_H__
    
    #define Data_LCD P2
    
    sbit RS_LCD = P3^7;
    sbit RW_LCD = P3^6;
    sbit EN_LCD = P1^7;
    
    sbit Data_LCD_7 = P2^7;
    
    ///////////////////////////
    void wait_lcd();
    void init_lcd();
    void clear_lcd();
    void write_lcd(unsigned char character[14]);
    ///////////////////////////
    void movetoxy(unsigned char column, unsigned char row);
    void delay(unsigned char count);
    //////////////////////////////////////////////
    //	CHECKING THE BUSY STATUS OF THE LCD 	//
    //////////////////////////////////////////////
    void wait_lcd()
    {
     while(1)
     {
     //LCD_Busy:
    	RS_LCD = 0;						// It's command
    	RW_LCD = 1;						// It's Read Command
    	Data_LCD = 0xFF;				// P2_x = 1
    	EN_LCD = 1;					// Start LCD command
    
    	if(Data_LCD_7==0)				// If bit 7 low, LCD free
    	 break;//goto LCD_Busy1;
     }
    
    	EN_LCD = 0;					// Finish the command
    	RW_LCD = 0;						// Turn off RW for future commands
    	
    }
    //////////////////////////////////////////
    //		INITIALIZING THE LCD			//
    //////////////////////////////////////////
    void init_lcd()
    {
    	RS_LCD = 0;
    	Data_LCD = 0x38;
    	EN_LCD = 1;
    	EN_LCD = 0;
    
    	wait_lcd();
    
    	RS_LCD = 0;
    	Data_LCD = 0x0C;		// Inititalizing LCD without cursor
    	EN_LCD = 1;
    	EN_LCD = 0;
    
    	wait_lcd();
    
    	RS_LCD = 0;
    	Data_LCD = 0x06;
    	EN_LCD = 1;
    	EN_LCD = 0;
    
    	wait_lcd();
    }
    //////////////////////////////////////
    //		CLEARING THE DISPLAY 		//
    //////////////////////////////////////
    void clear_lcd()
    {
    	RS_LCD = 0;
    	Data_LCD = 0x01;
    	EN_LCD = 1;
    	EN_LCD = 0;
    
    	wait_lcd();
    }
    //////////////////////////////////////////
    //		WRITING TEXT TO THE LCD			//
    //////////////////////////////////////////
    void write_lcd(unsigned char character[41])
    {
    	unsigned char i;
    	for(i=0;i<41;i++)
    	{
    		if(character[i]=='@')
    			break;
    		RS_LCD = 1;
    		Data_LCD = character[i];
    		EN_LCD = 1;
    		EN_LCD = 0;
    
    		wait_lcd();
    	}
    }
    //////////////////////////////////////////////
    //			Setting postition cursor		//
    //////////////////////////////////////////////
    void movetoxy(unsigned char column, unsigned char row)
    {
    	unsigned char pos;
    	switch(row)
    	{
    	case 1:
    	{
    	 	pos = 0x7F + column;
    		RS_LCD = 0;
    		Data_LCD = pos;
    		EN_LCD = 1;
    		EN_LCD = 0;
    		wait_lcd();
    		break;
    	}
    
    	default:
    	{
    	 	pos = 0xBF + column;
    		RS_LCD = 0;
    		Data_LCD = pos;
    		EN_LCD = 1;
    		EN_LCD = 0;
    		wait_lcd();
    		break;
    	}
      }
    }
    ////////////////////////////////////////
    void delay(unsigned char count)
    {
    	int i;
    	for(i=0;i<count*10;i++)
    		;
    }
    ////////////////////////////////////////
    ///////////////// END /////////////////
    #endif


    minh da thay count column row bang 1 so bat ky va thay character bang chu minh muon hien thi nhung ko dc
    minh moun xuat hien chu T tren man lcd hi phia sua j trong cose cua minh dua ra
    Last edited by VNarmy; 21-03-2008, 12:18.

  • #2
    Trước khi trả lời bạn mình muốn nhắc nhở bạn vài điều:
    - Bạn cần viết có dấu nếu không mình sẽ move vào thùng rác
    - Các đoạn code bạn cần phải viết trong tag code để người xem dễ theo dõi

    Về đoạn code này mình thấy có dùng file LCD.H ko biết bạn đã cho vào chưa. Thứ 2 bạn kiểm tra xem phần cứng có đúng như define ở đây ko. Tốt nhất bạn post sơ đồ nguyên lý lên thì mới biết đc.

    Chúc vui.
    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


    • #3
      nhờ các bác chỉ giùm hộ em đoạn chương trình sau sai ở đâu nhé.em đau đầu mãi mà không nghĩ ra được.em mới tìm hiểu về LCD mong các bác thông cảm
      Code:
      #include "regx51.h"
      #include "stdio.h"
      #include "LCD.h"
      sbit	PORT_LCD = P1;
      sbit	E = P3^2;
      sbit	RW = P3^1;
      sbit	RS = P3^0;
       //ham delay
       void delay(unsigned int ms)
       	{
      	 unsigned int i,j;
      	 for (i=0;i<ms;i++)
      	 for (j=0;j<10;j++)
      	 {}
      	 }
      
      //thoi gian cho LCD thuc hien xong lenh
       void wait_LCD (void)
       	{ 
      	  P1_7=1;
      	  RS=0;//gui lenh len LCD
      	  RW=1;//yeu cau doc du lieu tu LCD xuong
      	  while (P1_7==1)//trong khi P1^7 =1 tuc la LCD dang ban cho den khi P1^7=0
      	{
      	 E=0;
      	 E=1;
      	 }
      	 }
      //chuong trinh gui 1 lenh dk len LCD
       void send_command(unsigned char my_command)
       	{
      	 P1=my_command;
      	 RS=0;//RS=0 gui lenh ,RS=1 gui du lieu
      	 RW=0;//RW=0 ghi hoac gui lenh len LCD
      	 E=1;
      	 E=0;
      	 wait_LCD();
      	 }
      //thiet lap ban dau cho LCD
       void init_LCD ()//khoi tao LCD
       	{
      	 delay(500);
      	 send_command(0x38);//dung LCD 2*16,ma tran 5*7
      	 send_command(0x08);//xoa man hinh
      	 send_command(0x0C);//tro ve dau dong;
      	 send_command(0x01);//bat hien thi,tat con tro
      	 send_command(0x02);//dua con tro ve dau dong
      	 }
      //gui 1 ky tu len LCD
       void send_char(char my_char)//my_char o dang hex theo max ASCII
       	{
      	 P1=my_char;
      	 RS=1;//gui du lieu
      	 RW=0;//gui du lieu len LCD
      	 E=1;
      	 E=0;
      	 wait_LCD();
      	 }
       
      main (void)
       {while (1)
        {
        init_LCD();
        delay(250);
         send_char(0x65);
         }
        }
      em mô phỏng bằng proteus ,tần số LCD là 250kHZ, của 8051 là 1MHZ
      các bác giúp em với nhé!
      Last edited by VNarmy; 24-03-2008, 16:14. Lý do: Lần sau nhớ đặt đoạn mã trong tag code

      Comment


      • #4
        Mỗi loại LCD có một đoạn Init khác nhau. Với LCD thì mô phỏng là vô nghĩa. Mà tại sao lại có tần số của LCD nhỉ. Có lẽ bạn đã lấy nhầm loại LCD dạng số.
        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


        • #5
          em mô phỏng bằng lcd loại LM020L mà.anh xem chương trình của em viết như trên liệu có ổn không ạ?em chỉ chạy được có 1 đoạn rồi nó lại báo và dừng chương trình,lcd không hiển thị được gì cả.anh xem giúp em với!

          Comment


          • #6
            cảm ơn các bác nhiều. em lam cho xuất hiên được chữ rồi nhưng lại gạp phải sự cố là khi cho chữ xuất hiện trên LCD thì các ô khác ngoài kỹ tự cũng hiện lên ( các ô vuông màu đen a ) là sao các bác. ( T__T).

            day la truong trinh e viet cac bac sua giup e

            #include <REGX52.H>
            #include "LCD.h"

            void main()
            {
            delay(10);
            init_lcd();
            clear_lcd();
            delay(100);
            write_lcd("ChoQuan");
            movetoxy(5,2);
            delay(10);
            while(1)
            {
            delay(1);
            }
            }

            Comment


            • #7
              Nguyên văn bởi nha_que_goc Xem bài viết
              cảm ơn các bác nhiều. em lam cho xuất hiên được chữ rồi nhưng lại gạp phải sự cố là khi cho chữ xuất hiện trên LCD thì các ô khác ngoài kỹ tự cũng hiện lên ( các ô vuông màu đen a ) là sao các bác. ( T__T).

              day la truong trinh e viet cac bac sua giup e

              Code:
              #include <REGX52.H>
              #include "LCD.h"
              
              void main()
              {   
              	delay(10);    
              	init_lcd();
              	clear_lcd();
              	delay(100);
              	write_lcd("ChoQuan"); 
                	movetoxy(5,2);
              	delay(10);
              	while(1)
              	{
              		delay(1);
              	}
              }
              Bạn chỉnh lại độ tương phản đi. Độ tương phản bạn để đậm quá.
              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

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X