Hướng dẫn Điều khiển LCD 16x02 dùng AVR cho người mới bắt đầu

Thảo luận trong 'Họ AVR'

Đang xem chủ đề này ( Thành viên: 0, Khách: 1)

Moderators: mta_cdt
  1. dangsonbk

    dangsonbk I'm aimin' right at you! Staff Member

    Tham gia ngày:
    2/7/13
    Bài viết:
    515
    Đã được thích:
    652
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    freelancer
    Nơi ở:
    Hanoi, Vietnam
    Trong bài này chúng ta sẽ thực hiện viết một chương trình đơn giản cho người mới tìm hiểu về AVR để điều khiển hoạt động của LCD.

    LCD được sử dụng rất phổ biến đảm nhận vai trò hiển thị thông tin được lập trình sẵn hoặc các thông tin đã qua xử lý của bộ điều khiển hoặc vi xử lý. Giúp chúng ta dễ dàng giao tiếp, điều khiển cũng như giám sát hoạt động của hệ thống.

    Chúng ta sử dụng loại LCD 16x02, có 2 dòng trên màn hình và mỗi dòng có thể hiển thị 16 ký tự. LCD được nối với PORTD như hình sau:
    1.JPG

    Trong đó:

    Các chân 1,2: Cấp nguồn cho LCD hoạt động.
    Chân 3 (VSS): Điều chỉnh độ tương phản.
    Chân 15,16: Đây là 2 chân cấp nguồn đèn nền.
    Chân 4 đến 14: Các chân điều khiển, truyền dữ liệu.

    Chúng ta sẽ sử dụng CodeVisionAVR để lập trình phần mềm cho vi điều khiển.

    Về cơ bản:
    1. Vào menu File/New.
    2. Chọn File Type là Project.
    2.JPG


    3. Chọn YES để dùng CodeWizard.

    3.JPG

    4. Chọn Atmega8, thạch anh 8MHz
    4.JPG


    5. Ở tab LCD, chọn sử dụng PORTD.

    5.JPG

    6. Chọn File Generate, Save and Exit. Lưu project và các file liên quan vào thư mục bạn muốn.
    7. Trong vòng while(1) ở hàm main() ta viết các câu lệnh như sau:
    Mã:
    while (1)
     
    {
     
    lcd_clear();
     
    lcd_putsf("Hello world");
     
    lcd_gotoxy(0,1);
     
    lcd_putsf("dangsonbk");
     
    delay_ms(1000);
     
    };
    Hoặc bạn có thể xóa vòng while(1) và thay bằng:
    Mã:
    lcd_clear();
     
    lcd_putsf("Hello world");
     
    lcd_gotoxy(0,1);
     
    lcd_putsf("dangsonbk");
    Để biên dịch chương trình bạn vừa viết, bạn nhấn Ctrl + F9 hoặc trong menu Project/Build All. Nếu không có lỗi xảy ra, chương trình của bạn đã sẵn sàng để nạp vào vi điều khiển.

    Khi bạn đã làm việc quen với AVR, bạn có thể không cần dùng tới CodeWizard nữa, khi đó bạn sẽ phải tự khai báo các thanh ghi, các hàm ngắt cần thiết. Dĩ nhiên đó là khi bạn đã hiểu về cấu trúc của AVR và sử dụng khá thành thạo CodeVisionAVR.
    Tiếp theo bạn sẽ làm việc với Proteus để vẽ và mô phỏng.
    1.JPG


    Bạn cần chọn các linh kiện và vẽ mạch như hình trên. Gồm có vi điều khiển Atmega8 và LCD 16x2. Bạn có thể download file đính kèm ở bài viết và sử dụng nếu chưa quen với việc sử dụng Proteus.
    Tiếp đó, bạn double click vào con chíp, chọn như hình dưới:

    6.JPG

    Bấm nút chạy:
    7.JPG

    Kết quả chương trình của chúng ta:
    8.JPG

    Ngoài ra để lập trình cho AVR bạn có thể sử dụng trình biên dịch AVR Studio do chính hãng Atmel cung cấp miễn phí trên trang chủ.

    >> Hiển thị số trên LCD.
    >> Hiển thị số thập phân. Bởi: mta_cdt
    Chúc các bạn thành công!
     

    Các file đính kèm:

    QUANG THANH, vietthai, xaxa9ztb10 others thích bài này.
  2. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,055
    Đã được thích:
    1,289
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    Bạn hướng dẫn thêm hiển thị số lên LCD 16x2 nhé....bạn mới hiển thị chữ thôi..Vì lập trình như ADC hay tốc độ động cơ cần hiển thị giá trị số liệu lên màn hình...^^:D
     
  3. tung2486

    tung2486 Học sinh phổ thông

    Tham gia ngày:
    6/10/12
    Bài viết:
    2
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Bạn hướng dẫn hàm hiển thị số thập phân và hex lên nhé, cái này chưa nhiều người biết đâu thanks ^^
     
  4. dangsonbk

    dangsonbk I'm aimin' right at you! Staff Member

    Tham gia ngày:
    2/7/13
    Bài viết:
    515
    Đã được thích:
    652
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    freelancer
    Nơi ở:
    Hanoi, Vietnam
    Cảm ơn 2 bạn, :)
    Để hiển thị số, chúng ta có thể tạo thêm hàm sau:
    Mã:
    void lcd_putnum( int number)
    {
        if(number/1000!=0)  lcd_putchar((number/1000)+48);
        if(number/100!=0)  lcd_putchar((number%1000)/100+48);
        if(number/10!=0)    lcd_putchar((number%100)/10+48);
        lcd_putchar((number%10)+48);
    }
    Mục đích là để tách các hàng phần nghìn, chục, đơn vị của một số, sau đó chuyển số qua thành ký tự bằng cách cộng thêm vào đó 48 (mở bảng ASCII ra bạn sẽ hiểu ngay vấn đề) và cuối cùng xuất ra LCD giống như khi ta xuất ký tự bình thường bằng hàm lcd_putchar();
     
  5. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,055
    Đã được thích:
    1,289
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    Cảm ơn bạn đã cung cấp bài viết bổ ích..dùng phần mềm Codevision rất tiện vì có nhiều hàm có sẵn nên chỉ việc lấy luôn..bạn viết lấy 1 ví dụ hiển thị tốc độ động cơ băm xung PWM dùng hàm lcd_putnum xem() sao nhé
     
    QUANG THANHmta_cdt thích bài này.
  6. dangsonbk

    dangsonbk I'm aimin' right at you! Staff Member

    Tham gia ngày:
    2/7/13
    Bài viết:
    515
    Đã được thích:
    652
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    freelancer
    Nơi ở:
    Hanoi, Vietnam
    Ok bạn, rảnh mình sẽ cố gắng viết thêm nữa. :)
     
    QUANG THANH, ChipKoolphunghe thích bài này.
  7. phunghe

    phunghe Moderator Staff Member

    Tham gia ngày:
    20/9/12
    Bài viết:
    410
    Đã được thích:
    300
    Điểm thành tích:
    63
    Giới tính:
    Nam
    Nghề nghiệp:
    sinh viên ĐH Công Nghiệp HN
    có tut về pic nữa thì hay.cảm ơn nhé
     
  8. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,055
    Đã được thích:
    1,289
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    Chip tóm gọn bài hướng dẫn của bạn dangsonbk có Mô Phỏng code biên dịch các bạn tải về xài nhé..còn thích thì viết thêm..
     

    Các file đính kèm:

    QUANG THANH, trimykaphunghe thích bài này.
  9. ken___

    ken___ Kỹ sư

    Tham gia ngày:
    8/11/12
    Bài viết:
    121
    Đã được thích:
    87
    Điểm thành tích:
    28
    Giới tính:
    Nam
    Hướng dẫn hiện thị số này nữa cậu 109,45 :D
     
  10. mr_Anh

    mr_Anh Kỹ sư

    Tham gia ngày:
    1/11/12
    Bài viết:
    299
    Đã được thích:
    346
    Điểm thành tích:
    63
    Giới tính:
    Nam
    Nơi ở:
    255B. Bồ Đề, Long Biên , Hà Nội
    Xin hỏi : Tại sao phải bỏ qua PORTD.3 (Chân số 5) mà không " liền luôn một lèo " cho tiện?
     
Moderators: mta_cdt
Tags: AVR, LCD 16x02

Chia sẻ trang này