Thông báo

Collapse
No announcement yet.

kết nối 8051 với LCD dùng C

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

  • kết nối 8051 với LCD dùng C

    các pro sửa giúp e code này với

    em build thì nó hiện lỗi một lỗi ở chố "RS=0" ĐẦU TIÊN


    #include <REGX51.H>
    /*=========bo tien xu li===============*/

    #include<string.h>
    /*===========khai bao bien toan cuc============*/
    sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
    sbit BF = 0xA7; // co ban, bit DB7.
    #define RS P3^0 // chon thanh ghi
    #define RW P3^1 // doc/ghi
    #define EN P3^2 //cho phep chot du lieu
    /*===========cac chuong trinh con cua LCD==========*/
    /*--------------kiem tra su san sang cua LCD------------------------*/
    void wait(void)
    {
    RS=0; //chon thanh ghi lenh
    nop();
    RW=1; //doc tu LCD
    LCDdata=0xff; //gia tri 0xff
    while(BF) //kiem tra co ban
    {
    EN=0; //dua xung cao xuong thap de chot.
    nop();
    EN=1; //dua chan cho phep len cao
    }
    }
    /*------------------------thiet lap lenh cho LCD--------------------------*/
    void LCDcontrol(unsigned char x)
    {
    RS=0;//chon thanh ghi lenh
    RW=0;//ghi len LCD.
    LCDdata=x ;// gia tri x
    EN=1;//cho phep muc cao
    EN=0;//xung cao xuong thap
    wait();//doi LCD san sang.
    }
    /*------------------------------Khoi tao LCD-------------------------*/
    void LCDinit(void)
    {
    LCDcontrol(0x38);//2 dong va ma tran 5x7
    LCDcontrol(0x0e);//bat man hinh, bat con tro
    LCDcontrol(0x01);//xoa man hinh
    }
    /*-------------------------thiet lap du lieu cho LCD-----------------*/
    void LCDwrite(unsigned char c)
    {
    RS=1;//ghi du lieu
    RW=0;//ghi du lieu len LCD
    LCDdata=c;//gia tri C
    EN=1;//cho phep muc cao
    EN=0;//xung cao xuong thap
    wait();//cho
    }
    void LCDwrites(unsigned char *s)
    {
    unsigned char data lens,count;
    lens=strlen(s);
    for(count=0;count<lens;count++){
    LCDwrite(*(s+count));
    }
    }
    /*=====================chuong trinh tre================*/
    void delay(long time)
    {
    while(time--);
    }
    /*========================ham chinh==================*/
    void main(void)
    {
    LCDinit(); // khoi tao LCD
    LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1
    LCDwrite("V");
    LCDwrite("I");
    LCDwrite("E");
    LCDwrite("T");
    LCDwrite(" ");
    LCDwrite("N");
    LCDwrite("A");
    LCDwrite("M");
    LCDcontrol(0xC0);
    LCDwrites("VI DIEU KHIEN");
    while(1); //vong lap vo han
    }
    Attached Files

  • #2
    quả này lỗi nhiều quá, không đỡ được. chắc phải dùng loại đặc trị, đơn giản như thế này.
    Code:
    #include<stdio.h>
    #include<REGX51.h>
    #include<string.h>	  // khai bao thu vien ve xau ki tu 
    
    sbit rs=P2^0;
    sbit rw=P2^1;
    sbit e =P2^2;
    
    void delayms(int n)
    { 	int i;
      	for(i=0;i<n;i++)
    	{ 
    	TMOD=0x21;	  //ghi tu dieu khien vao thanh ghi tmode
    	TH0=0xfc;	  //chon timer0  che do 1 
    	TL0=0x18;
    	TR0=1;			
    	while(TF0==0)
    	{}
    	TF0=0;
    	}	  
    }
    void LCD_write(unsigned char x)	 // gui du lieu len man hinh 
    {
            rs=1;	 // chon thanh ghi du lieu 
    	rw=0;	 // chon che do ghi du lieu 
    	P0=	x;   // dua ra tren cong P0 gia tri du lieu 
    	e=1;  // dua chan cho phep tu cao xuong thap de chot du lieu 
    	e=0;		 
    	delayms(1);
    }
    void LCD_cmd(unsigned char x)    // gui lenh len man hinh 
    {
            rs=0;	 // chon thanh ghi lenh
    	rw=0;	 // chon che do ghi du lieu 
    	P0=	x;   // dua ra tren cong P0 gia tri du lieu 
    	e=1;  // dua chan cho phep tu cao xuong thap de chot du lieu 
    	e=0;	
    	delayms(1); // cho cho den khi lenh gui da hoan tat	 
    } 
    void LCD_init()					 // khoi tao man hinh LCD
    {	LCD_cmd(0x01);  // xoa man hinh 
            LCD_cmd(0x38);  // hai hang ma tran 5x7
            LCD_cmd(0x0c);  // bat man hinh tat con tro 	    
            LCD_cmd(0x06);  // dich con tro sang phai mot don vi
    	LCD_cmd(0x80);	// dat con tro ve dau dong thu nhat
    }
    void text1()					     
    {
    	unsigned char m;
    	char text[16]="chua co du lieu!";	
    	LCD_cmd(0x01);  // xoa man hinh
    	LCD_cmd(0x80);
    	for(m=0;m<strlen(text);m++)
    	{
    	 	LCD_write(text[m]);
    	}
    }
    void text2()					     
    {
    	unsigned char m;
    	char text[16]="dientuvietnam";
    	LCD_cmd(0x01);  // xoa man hinh	
    	LCD_cmd(0x80);
    	for(m=0;m<strlen(text);m++)
    	{
    	 	LCD_write(text[m]);
    	}
    }
    void text3()					     
    {
    	unsigned char m;
    	char text[16]="   chuc vui !   ";	
    	LCD_cmd(0x01);  // xoa man hinh
    	LCD_cmd(0x80);
    	for(m=0;m<strlen(text);m++)
    	{
    	 	LCD_write(text[m]);
    	}
    }
    
    main()
    {	LCD_init();	
    	for(;;)
    	{	
    		text1();delayms(2000);
    		text2();delayms(2000);
    		text3();delayms(2000);
    	}							  
    }
    chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
    Everything should be made as simple as possible, but not simpler

    Comment


    • #3
      các bạn tham khảo vi du AT89 giao tiep voi LCD trong Phan Information Technology tim trong muc Hoc tap
      0912666017

      Comment


      • #4
        em cám ơn ạ!

        Comment


        • #5
          anh cho em biet cach viet code de lam bọ cam bien nhiet dung 89c51,lm35 hien thị lên lcd với ạ .e mới học đến cái này

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X