Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

org 00h

rs bit P3.0 (Gán tên chuỗi “rs”cho cổng P3.0)

rw bit P3.1(Gán tên chuỗi “rw”cho cổng P3.1 )

E bit P3.2(Gán tên kí tự “E” cho cổng P3.2)

DBUS EQU p2(Gán tên chuỗi”DBUS” cho cụm cổng P2)

MAIN:

mov r0,#0

acall init_lcd

mov dptr,#table(Con trỏ dữ liệu DPTR là thanh ghi 16 bit duy nhất của Vi điều khiển 8051 được tạo thành
từ hai thanh ghi DPL (byte thấp-địa chỉ byte 82H) và DPH (byte cao-địa chỉ byte 83H))(lúc này gán table
vào dptr)

loop: clr a(xóa dữ liệu)

movc a,@a+dptr(chuyển vào A một byte từ bộ nhớ chương trình tại vị trí cách con trỏ gốc DPTR một
khoảng là nội dung của A)

CJNE a,#0,NHAY(nếu A khác 0 nhảy tới nhãn "NHAY")

SJMP THOAT(nếu A=0 thoát)

NHAY: acall lcd_write(viết từng kí tự của A :lúc này là table lên lcd)

acall delay(hàm delay)

INC r0(tăng r0 lên 1)

inc dptr(tăng con trỏ DPTR lên 1)

CJNE r0,#16,LOOP(nếu r0 khác 16 thì nhảy lên loop)(vì lcd chỉ có 16 ô 1 hàng)

mov a,#0C0H(nếu r0 =16 thì gán A cho C0H để đưa con trỏ về vị trí đầu hàng 2 của LCD)

ACALL lcd_command (thực hiện lệnh C0H)

sjmp LOOP(nhảy đến loop)

THOAT: SJMP $(thoát)

lcd_write:;Doc Data tu 8051

setb rs(Đặt RS = 0 nếu byte dữ liệu là lệnh và tạo RS = 1 nếu byte dữ liệu là dữ liệu sẽ được hiển thị.)

clr rw(Mức cao ở chân này cho phép chế độ đọc và mức thấp ở chân này cho phép chế độ ghi.)
mov DBUS,a

setb e(Chân E là để kích hoạt các mô-đun. Chuyển đổi từ cao xuống thấp ở chân này sẽ cho phép mô-
đun.

DB0 đến DB7 là các chân dữ liệu)

clr e

acall wait_lcd(lệnh delay)

ret

lcd_command:; nhân du liêu

clr rw(Mức cao ở chân này cho phép chế độ đọc và mức thấp ở chân này cho phép chế độ ghi.)

clr rs(Đặt RS = 0 nếu byte dữ liệu là lệnh và tạo RS = 1 nếu byte dữ liệu là dữ liệu sẽ được hiển thị.)

mov DBUS,a; nhân du liêu hoac lênh

setb e(Chân E là để kích hoạt các mô-đun. Chuyển đổi từ cao xuống thấp ở chân này sẽ cho phép mô-
đun.

DB0 đến DB7 là các chân dữ liệu)

clr e

acall wait_lcd

ret

wait_lcd:(Hàm delay) (Lưu ý: trường hợp không dùng lệnh đọc cờ BF để chờ LCD thực

hiện xong lệnh,ta có thể gọi chương trình con DELAY tạo thời gian

trễ tối thiểu 50μs,tốt nhất là 100μs sau khi xuất lệnh ra LCD,và phải

tạo trễ 1520μs khi xuất lệnh chuyển con trỏ về đầu dòng hoặc xóa

LCD(xem Table 6 data sheet)

mov r7,#100

djnz r7,$

ret
init_lcd:;khoi dong lcd

clr rs; (Đặt RS = 0 nếu byte dữ liệu là lệnh và tạo RS = 1 nếu byte dữ liệu là dữ liệu sẽ được hiển thị.)

mov A,#38H; (Đặt chức năng giao tiếp 8 bit,2 dòng,5X8)

setb E;(Chân E là để kích hoạt các mô-đun. Chuyển đổi từ cao xuống thấp ở chân này sẽ cho phép mô-
đun.

DB0 đến DB7 là các chân dữ liệu)

clr E

acall lcd_command(lúc này LCD nhận lệnh A=38H để lcd Đặt chức năng giao tiếp 8 bit,2 dòng,5X8)

clr rs

mov a,#0Eh;khoi tao hien thi lcd

setb e

clr e

acall lcd_command(lúc này LCD nhận lệnh 0EH tức là Màn hình bật, con trỏ nhấp nháy tắt)

clr rs

mov a,#06h;dich tro sang phai

setb e

clr e

acall lcd_command (lúc này LCD nhận lệnh 06H là tăng trỏ)

ret

(dưới đây là lệnh delay 10ms)

delay:

mov R3,#2

delay1:

mov R4,#250

delay2:

mov R5,#250

djnz R5,$

djnz R4,delay2

djnz R3,delay1
ret

table: db 'I HAVE CRUSH ON YOU, I LOVE YOU',00h

end

You might also like