Thông báo

Collapse
No announcement yet.

Help hiển thị LCD bằng 89c51

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

  • Help hiển thị LCD bằng 89c51

    em chào các bác.
    Em đang làm AVR quen giờ thầy bắt làm 89c51 thấy nó rắc rối quá.
    Các bác cho em hỏi là CODE của em thế này thì sai ở chỗ nào?

    //-------------------------nhom 2-----------------------------------
    //-----------chuong trinh hien thi lcd-------------
    #include <AT89x51.h>
    #include <math.h>// thu vien lenh toan hoc
    #include <stdio.h>// cai nay khong biet cai gi
    #include <string.h>
    ////////////////khai bao chan lcd gan voi cac cong////////////
    sfr lcddata=0xA0;// p2=0xA0
    sbit rs=P1^0;
    sbit rw=P1^1;
    sbit e=P1^2;
    sbit bf=0xA7;
    //------------------------cac chuong trinh con phuc vu------------
    void baoban(void)
    {
    long n;
    n=0;
    e=1;// dua chan cho phep nen muc cao
    rs=0;// chon thanh ghi lenh
    rw=1; // doc LCD
    lcddata=0xFF;
    while(bf){n++;if(n<100)break;}// kien tra neu ban tang n den 100 rui thoat
    e=0;//chot voi suon xuong
    rw=0; //doc lcd
    }
    //-----------------------------------------------
    void dklcd(unsigned char n)
    {
    e=1;//chan cho pheps muc cao
    rs=1; //chon thanh ghi lenh . neu rs=1 chon chon thanh ghi du lieu
    rw=0;// ghi nen lcd
    lcddata=n; // chon gia tri x
    e=0; // xuong thap de chot
    baoban();
    }
    //--------------------------------------------
    void khoitaolcd(void)
    {
    dklcd(0x30);
    dklcd(0x30);
    dklcd(0x30);//che do 8 bit
    dklcd(0x38); // 2 dong ma tra 5x7
    dklcd(0x0A);
    dklcd(0x06); //tang con tro sang phai
    dklcd(0x01); //xoa toan man hinh

    }
    //-----------------hienthi 1 ky tu-----------------
    void lcdwrite(unsigned char c)
    { e=1;//muc cao
    rs=1; //ghi du lieu
    rw=1;// ghi len lcd
    lcddata=c; //ghi nen ky tu c
    e=0;// xuong muc thap
    baoban();
    }
    //-------------------ghi chuoi ky tu-----------
    void lcdputs(unsigned char *s,unsigned char row)
    {
    unsigned char len;
    if(row==1){dklcd(0x80);}// dua con tro ve dau dong dau tien
    else dklcd(0xC0);// ep con tro ve dau dong thu hai
    len=strlen(s);// lay do dai hien thi
    while(len!=0)// do dai van con
    {
    lcdwrite(*s);// ghi ra gia tri lcd duoc doc boi con tro
    s++; //tawng con tro
    len--; //tru dan do dai
    }
    }
    //////////////////
    void delay(long time)
    {
    long k;
    for(k=0;k<time;k++)
    {}
    }

    //////////////////////chuong trinh chinh--------------------
    void main(void)
    {
    char x;
    khoitaolcd();
    lcdputs("dien tu viet nam",1);
    delay(30000);
    while(1)
    {
    for(x=0;x<20;x++)//dich 20 lan
    {
    lcdputs("dien tu viet nam",1);
    dklcd(0x18);// dich hien thi sang trai
    delay(5000);
    }
    }


    }

    Em xin cảm ơn các bác
    Attached Files

  • #2
    cái hàm
    void lcdwrite(unsigned char c)
    { e=1;//muc cao
    rs=1; //ghi du lieu
    rw=1;// ghi len lcd
    lcddata=c; //ghi nen ky tu c
    e=0;// xuong muc thap
    baoban();
    bạn thử sửa rw=0 xem

    Comment


    • #3
      em cũng đang rất nan giải vấn đề này
      có bác nào biết hiển thị chữ lên lcd như thế nào không?
      sử dung assembly!
      xin các tiền bối chỉ dùm!

      Comment


      • #4
        Nguyên văn bởi FrozenHeart Xem bài viết
        em cũng đang rất nan giải vấn đề này
        có bác nào biết hiển thị chữ lên lcd như thế nào không?
        sử dung assembly!
        xin các tiền bối chỉ dùm!
        Cái này hả bác:
        Click image for larger version

Name:	lcd.JPG
Views:	1
Size:	68.2 KB
ID:	1375819
        Email:
        Phone: 0969 226 539

        Comment


        • #5
          Code *ASM cho LCD 16x02;
          ;; Chuong trinh dieu khien "LCD"
          ;; Author NGUYEN VAN TRINH
          ;; Dong A Univesity
          ;; Electrical Technology

          ;; Chuong trinh
          ;; Thiet lap cac Port ban dau
          ORG 00H
          MOV P0,#0FFH ;;
          MOV P1,#0FFH
          MOV P2,#0FFH
          MOV P3,#0FFH
          ;; Khai bao dia chi
          RS BIT P3.5;
          RW BIT P3.6
          E BIT P3.7
          LCD EQU P1

          ;; Chuong trinh LCD
          CT_LCD:
          LCALL KHOI_TAO_LCD
          MOV A,#80H ;
          LCALL GUI_LENH
          MOV DPTR,#HANG_1;
          MOV R7,#0;
          HT_HANG_1:
          CLR A
          MOVC A,@A+DPTR
          LCALL GUI_KY_TU
          INC R7
          INC DPTR
          CJNE R7,#16,HT_HANG_1
          MOV A,#0C0H;;
          LCALL GUI_LENH
          MOV DPTR,#HANG_2;
          MOV R7,#0; Bat dau tu 0
          HT_HANG_2:
          CLR A
          MOVC A,@A+DPTR
          LCALL GUI_KY_TU
          INC R7
          INC DPTR
          CJNE R7,#16,HT_HANG_2
          LJMP $
          KHOI_TAO_LCD:
          MOV A,#38H;
          LCALL GUI_LENH
          MOV A,#0CH;
          MOV A,#0FH;
          LCALL GUI_LENH
          MOV A,#01H;
          LCALL GUI_LENH
          GUI_CHUOI:
          MOV R6,#0
          LAP:
          CLR A
          MOVC A,@A+DPTR
          LCALL GUI_KY_TU
          INC DPTR
          INC R6
          CJNE R6,#16,LAP
          GUI_LENH:
          CLR RS;;
          CLR RW;;
          SETB E;;
          MOV LCD,A;
          CLR E
          LCALL TRE
          RET
          GUI_KY_TU:
          SETB RS;;
          CLR RW;;
          SETB E;;
          MOV LCD,A;
          CLR E
          LCALL TRE
          RET
          TRE:
          MOV R0,#250
          DJNZ R0,$;; 250*2=500
          MOV R0,#250
          DJNZ R0,$
          RET
          HANG_1:
          DB ' DAI HOC DONG A '
          HANG_2:
          DB 'MICROCONTROLER'
          END
          Email:
          Phone: 0969 226 539

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X