Chào mừng đến với Câu Lạc Bộ Sáng Tạo
Chia sẻ kinh nghiệm
Kết nối đam mê
Đang cập nhật thời gian...
BÀI VIẾT NỔI BẬT
Xin chào! Tôi là Ếch Sáng Tạo :-)
Chia sẻ trang




Chuyên mục
Bài mới
Xem nhiều
Thống kê
  • Bài viết: 334/334
  • Thành viên: 10.085
  • Đang online: 3
  • Khách hôm nay: 1.661
  • Khách hôm qua: 3.625
  • Tổng khách: 16.184.617
Bài viết
Bài 9: Lập trình giao tiếp LCD 16x2 - SangTaoClub.Net
Bài 9: Lập trình giao tiếp LCD 16x2
Đăng bởi: Vũ Văn Thái - Thời gian: 24-11-2013, 16:32
Chuyên mục: Học lập trình 8051 - Lượt xem: 54.239

Lập trình giao tiếp LCD 16x2

Chào các bạn, hôm nay chúng ta sẽ xây dựng các hàm để giao tiếp LCD 16x2.

Việc giao tiếp LCD khá đơn giản khi chúng ta xây dựng dc hàm viết sẵn VD:

LCD_Init(); //Khởi tạo LCD

LCD_Puts("Nội dung"); //Hàm gửi 1 chuỗi ký tự lên LCD

LCD_PutChar(ký_tự); //Hàm gửi 1 ký tự lên LCD

LCD_Clear(); //Hàm xoá trắng màn hình

LCD_Gotoxy(x,y);//Hàm trỏ tới vị trí cần hiển thị, Trong đó X là vi trí, Y là dòng

 

OK!, có 2 cách gửi dữ liệu lên LCD là 8bit và 4bit ta chọn cách gửi 4bit vì ít chân cẳng hơn 8bit, tiết kiệm chân VDK cho các ứng dụng khác.

Ta xây dựng code luôn:

#include <REGX51.H>
/********Khai bao chan giao tiep************/
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_D4 P2_4
#define LCD_D5 P2_5
#define LCD_D6 P2_6
#define LCD_D7 P2_7
/************************************/
void delay_us(unsigned int t){
        unsigned int i;
        for(i=0;i<t;i++);
}
void delay_ms(unsigned int t){
        unsigned int i,j;
        for(i=0;i<t;i++)
        for(j=0;j<125;j++);
}
/**************Ctr giao tiep LCD 16x2 4bit**********************/
void LCD_Enable(void){
        LCD_EN =1;
        delay_us(3);
        LCD_EN=0;
        delay_us(50);
}
//Ham Gui 4 Bit Du Lieu Ra LCD
void LCD_Send4Bit(unsigned char Data){
        LCD_D4=Data & 0x01;
        LCD_D5=(Data>>1)&1;
        LCD_D6=(Data>>2)&1;
        LCD_D7=(Data>>3)&1;
}
// Ham Gui 1 Lenh Cho LCD
void LCD_SendCommand(unsigned char command){
        LCD_Send4Bit(command >>4);/* Gui 4 bit cao */
        LCD_Enable();
        LCD_Send4Bit(command); /* Gui 4 bit thap*/
        LCD_Enable();
}
void LCD_Clear(){// Ham Xoa Man Hinh LCD
        LCD_SendCommand(0x01);
        delay_us(10);
}
// Ham Khoi Tao LCD
void LCD_Init(){
        LCD_Send4Bit(0x00);
        delay_ms(20);
        LCD_RS=0;
        LCD_RW=0;
        LCD_Send4Bit(0x03);
        LCD_Enable();
        delay_ms(5);
        LCD_Enable();
        delay_us(100);
        LCD_Enable();
        LCD_Send4Bit(0x02);
        LCD_Enable();
        LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8
        LCD_SendCommand( 0x0c); // cho phep hien thi man hinh
        LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh
        LCD_SendCommand(0x01); // xoa toan bo khung hinh
}
void LCD_Gotoxy(unsigned char x, unsigned char y){
        unsigned char address;
        if(!y)address=(0x80+x);
        else address=(0xc0+x);
        delay_us(1000);
        LCD_SendCommand(address);
        delay_us(50);
}
void LCD_PutChar(unsigned char Data){//Ham Gui 1 Ki Tu
        LCD_RS=1;
        LCD_SendCommand(Data);
        LCD_RS=0 ;
}
void LCD_Puts (char *s){//Ham gui 1 chuoi ky tu
        while (*s){
                LCD_PutChar(*s);
                s++;
        }
}
/******************Ctr chinh**************************/
void main(){
        LCD_Init();//Khoi tao LCD
        delay_ms(1000);
        LCD_Puts("SangTaoClub.Net");//Gui chuoi len LCD
        delay_ms(1000);
        LCD_Clear();//Xoa man hinh
        LCD_Gotoxy(0,0);//Tro toi vi tri
        LCD_Puts("Test LCD.......");
        delay_ms(2000);
        LCD_Gotoxy(0,1);//Tro toi vi tri
        LCD_Puts("OK!!!!");
        while(1);//ko lam gi ca
}
//THE END

Mạch giao tiếp:

Lập trình giao tiếp LCD 16x2

Tải Code và mô phỏng trên proteus7.8: https://www.mediafire.com/?nkft434ql3avs32


  • Bạn chưa đăng nhập, không thể viết bình luận!
    Bấm vào đây để Đăng nhập hoặc Đăng ký!
  • Vũ Văn Thái lúc 16-03-2022, 07:59
    trong keilc uv4 nó có sẵn bạn nhé, bạn chỉ việc chèn đoạn include đó là nó tự thêm vào khi bạn chọn đúng chip
  • anhnd1204 lúc 15-03-2022, 16:41
    Cho mình hỏi #include <REGX51.H>, thư viện này lấy ở đâu ạ, Bạn giúp mình với, mình đang rất gấp
  • canhvktech lúc 23-10-2016, 08:04
    thanks
  • visaothaynho lúc 09-02-2016, 16:06


        Nội dung code

    // Ham Khoi Tao LCD
    void LCD_Init(){
             LCD_Send4Bit(0x00);
             delay_ms(20);
             LCD_RS=0;
             LCD_RW=0;
             LCD_Send4Bit(0x03);
             LCD_Enable();
             delay_ms(5);
             LCD_Enable();
             delay_us(100);
             LCD_Enable();
             LCD_Send4Bit(0x02);
             LCD_Enable();
             LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8
             LCD_SendCommand( 0x0c); // cho phep hien thi man hinh
             LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh
             LCD_SendCommand(0x01); // xoa toan bo khung hinh
    }

    Cho mình hỏi cái dòng LCD_Send4Bit(0x02); trong phần cấu hình lcd để làm gì vậy?
  • Vũ Văn Thái lúc 05-11-2015, 07:14
    Bạn tải code đính kèm về
  • hanhbe lúc 04-11-2015, 21:46
    tại sao e viết lại ctr trên nó lại báo lỗi ctr giao tiếp đặt dấu = k đúng chỗ ạ
  • Vũ Văn Thái lúc 07-12-2014, 18:30
    Đó là một chuỗi vòng lặp lồng nhau để cho cpu rảnh không làm gì trong một khoảng thời gian thì nó là thời gian trễ, vòng lặp for sẽ kiểm tra điều kiện nếu điều kiện đúng thì chạy code và tính toán biến tăng hoặc giảm tùy theo phép toán cứ như vậy bao giờ điều kiện sai thì thoát khỏi vòng lặp, rồi lại bị vòng lặp trước nó cho chạy lại quá trình trên....
  • xuanhai lúc 07-12-2014, 17:58
    for(i=0,i<t,i )
    for(j=0,j<125,j )
    em ko hiểu anh có thể hướng dẫn em dc ko ạ .e cảm ơn
  • el_tri lúc 11-08-2014, 20:38
    Viết bình luận#include <main.h>
    #FUSES HS, NOWDT,NOPROTECT
    #use delay(clock=20M)
    #define ENABLE_PIN B2
    #define RS_PIN B0
    #define RW_PIN B1
    #define Data4 B4
    #define Data5 B5
    #define Data6 B6
    #define Data7 B7
    #include <lcd.c>


    void main()
    {

       while(TRUE){
          lcd_init();
          lcd_gotoxy(1,1);
          lcd_putc(" nguyen tuan anh");
          delay_ms(500);
          lcd_putc("ok");
          delay_ms(500)
    ;
       }

    }
    anh ơi, e viết code như trên mà khi mô phỏng trên proteus thì LCD sáng nhưng không hiện chữ. em dùng 16f887.
  • volinh2309 lúc 29-12-2013, 08:44
    a ơi có thể hướng dẫn có thêm nút nhấn hiể thị lên lcd đc không ạ?
       
  • Trang 1/2: 12Sau

    Bài viết cùng chuyên mục
    Điều khiển tốc độ động cơ Motor DC sử dụng PWM Điều khiển tốc độ động cơ Motor DC sử dụng PWM
    Đăng bởi: kienvuce - Thời gian: 04-11-2021, 22:40
    Chuyên mục: Học lập trình 8051 - Lượt xem: 3.116
    Chia sẻ bộ thư viện Driver chuẩn cho LCD Gphone và Home Phone Chia sẻ bộ thư viện Driver chuẩn cho LCD Gphone và Home Phone
    Đăng bởi: Vũ Văn Thái - Thời gian: 22-02-2017, 14:54
    Chuyên mục: Học lập trình 8051 - Lượt xem: 6.628
    Led 7 thanh 4 số điều khiển bằng nút bấm Led 7 thanh 4 số điều khiển bằng nút bấm
    Đăng bởi: HoangQuan69 - Thời gian: 09-10-2016, 15:08
    Chuyên mục: Học lập trình 8051 - Lượt xem: 5.923
    Chia sẻ Code đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307 Chia sẻ Code đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307
    Đăng bởi: Vũ Văn Thái - Thời gian: 13-05-2015, 09:00
    Chuyên mục: Học lập trình 8051 - Lượt xem: 28.676
    Bài 15: Lập trình quét phím matrix 4x4 hiển thị lên LCD 16x2 Bài 15: Lập trình quét phím matrix 4x4 hiển thị lên LCD 16x2
    Đăng bởi: Vũ Văn Thái - Thời gian: 20-11-2014, 08:57
    Chuyên mục: Học lập trình 8051 - Lượt xem: 31.755
    [Share] Code giao tiếp Graphic LCD 12864 SPI của máy GPHONE ZTE [Share] Code giao tiếp Graphic LCD 12864 SPI của máy GPHONE ZTE
    Đăng bởi: Vũ Văn Thái - Thời gian: 12-11-2014, 22:06
    Chuyên mục: Học lập trình 8051 - Lượt xem: 19.257
    [Share] Code C đo nhiệt độ dùng DS18B20 hiển thị lên LED 7 thanh [Share] Code C đo nhiệt độ dùng DS18B20 hiển thị lên LED 7 thanh
    Đăng bởi: Vũ Văn Thái - Thời gian: 12-11-2014, 09:02
    Chuyên mục: Học lập trình 8051 - Lượt xem: 19.580
    Bài 14: Đo nhiệt độ dùng cảm biến DS18B20 với 8051 Bài 14: Đo nhiệt độ dùng cảm biến DS18B20 với 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 19-10-2014, 10:11
    Chuyên mục: Học lập trình 8051 - Lượt xem: 25.419
    Bài 13: Đo nhiệt độ dùng LM35 kết hợp IC ADC0808 với 8051 Bài 13: Đo nhiệt độ dùng LM35 kết hợp IC ADC0808 với 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 22-08-2014, 22:18
    Chuyên mục: Học lập trình 8051 - Lượt xem: 45.995
    Bài 12: Tạo xung PWM dùng ngắt timer 8051 Bài 12: Tạo xung PWM dùng ngắt timer 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 02-03-2014, 20:45
    Chuyên mục: Học lập trình 8051 - Lượt xem: 24.101
    
    Chào mừng hieutrang đã tham gia câu lạc bộ sáng tạo!
    Vũ Văn Thái - vuthai
    Hôm nay là sinh nhật của thien_tai_bk, nguyenvanly10153023, congnam1994, Tubaden, phamvanle, tranhung_09, kakaricardo, kakuta827, minhtrieudtv, tranconganhtu, ngochoanvfone, vantung2004, huynhngoctan_04dhdt, superprofessorA30, ntt762001, huynhngoctan95, phamnhatcuongddt, quangthang25, nguyenhuuphuoc2096, tan00123, gauxam, hvhieu, music1234, huynhngoctan, malacuda, NguyenCuong, caotrungtruc2041996, Quachdaik, Nhattanfc, minhk45, hoangthuong052, trancaoson181945, tuphuong, sangtaoclup_96, khaiptc2, Ngoctram27, no1bestrivenpt, ← Gửi tin nhắn chúc mừng
    Múi giờ: UTC+07:00 - Asia/Ho Chi Minh ***** IP của bạn: 18.191.181.231 ***** Status: Cache Update thành công!