Tài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 9: Lập trình điều khiển LCD 16x2

- Hiểu được cấu trúc và nguyên lý hoạt động của LCD 16x2

- Nắm được phần cứng giao tiếp với vi điều khiển MCS51

- Viết được các chương trình đơn giản ứng dụng LCD 16x2

- Hiểu và nắm được các chương trình con điều khiển LCD 16x2

pdf15 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: dkS00TYs | Lượt xem: 2106 | Lượt tải: 1download
Tóm tắt nội dung Tài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 9: Lập trình điều khiển LCD 16x2, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
nh ký tự do người sử 
dụng ñịnh nghĩa ñể hiển thị các ký tự không có sẵn trong CGROM. 
- CGRAM cho phép tạo tối ña 8 ký tự 5x8 
MCU 
RS 
R/W 
E 
DB4 – DB7 
P1.1 
P1.2 
P1.3 
P3 
MCU 
RS 
R/W 
E 
DB0 – DB7 
P1.1 
P1.2 
P1.3 
P3 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 3 
Bảng 8-1 Các ký tự ñịnh nghĩa trong CGRAM 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 4 
ðể ñịnh nghĩa một ký tự, thực hiện thay thế dấu ? bằng các giá trị 0 hay 1 tương ứng 
và gởi vào CGRAM. 
Ví dụ: ðể ñịnh nghĩa chữ ð tại vị trí 1 trong CGRAM, ñịa chỉ và dữ liệu tương ứng là: 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 5 
Nghĩa là tại ñịa chỉ 00h của CGRAM chứa giá trị là 1Eh và tương tự cho ñến ñịa chỉ 
07h. 
b. Các chế ñộ truyền dữ liệu: 
LCD1602A có 2 chế ñộ truyền dữ liệu: chế ñộ 8 bit (dùng cả D0 – D7) và chế ñộ 4 bit 
(không dùng D3 – D0, chỉ dùng D7 – D4). Trong trường hợp dùng chế ñộ 4 bit, dữ 
liệu 8 bit sẽ ñược truyền 2 lần: truyền 4 bit cao rồi tiếp tục truyền 4 bit thấp. 
Sau khi thực hiện truyền xong 8 bit, BF mới chuyển lên 1. Hai chế ñộ truyền này mô tả 
như hình 8-2 và hình 8-3 
Hình 8-2 ðịnh thời giao tiếp ở chế ñộ 8 bit 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 6 
Hình 8-3 ðịnh thời giao tiếp ở chế ñộ 4 bit 
c. Tập lệnh: 
Bảng 8-2 - Tập lệnh của LCD1602A 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 7 
Ví dụ: I/D =1 là Increment 
 I/D = 0 là Decrement … 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 8 
Bảng 8-3 – Các lệnh thường dùng 
d. Sơ ñồ kết nối LCD 16x2 với MSC-51 trong hệ ET-LAB3A 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 9 
III. Phần thực hành 
Bài 1: Viết chương trình hiển thị chuỗi “DH CAN THO-KHOA CN” trên dòng 1 và 
“BO MON DIEN TU – VIEN THONG” trên dòng 2 của LCD 
a. Chương trình mẫu gợi ý 
; ðịnh nghĩa PORT ra LCD và ñiều khiển LCD 
; Viết chương trình ở MOD 4 bit tất cả dùng ở PORT1 
DATA EQU P1 ;Port LCD 
EN bit P1.2 ;Enable LCD 
WR bit P1.1 ;WR LCD 
RS bit P1.0 ;RS Select LCD 
 ORG 0000H 
MAIN: MOV SP,#256-32 ;Initial Stack 32 Byte 
 CALL DELAY ;initial delay 
 CALL INIT_LCD ;initial LCD 
 MOV A,#8 0H ;ðịa chỉ của vị trí ñầu dòng 1 trên LCD 
 CALL GOTOLCD ;Di chuyển con trỏ ñến 80H 
 MOV DPTR,#LINE1 ;Ghi chuỗi Hello World ra LCD tại vị trí 40H 
LOOP: CLR A 
 MOVC A,@A+DPTR 
 CJNE A,#0FFH,PRINT ;Kết thúc việc hiển thị nếu gặp 0FFH 
 JMP NEXT 
PRINT: CALL WRITE_DATA 
 INC DPTR 
 JMP LOOP 
NEXT: 
 MOV A,#0C 0H ;ðịa chỉ của vị trí ñầu dòng 2 trên LCD 
 CALL GOTOLCD ;Di chuyển con trỏ ñến 0C0H 
 MOV DPTR,#LINE2 ;Ghi chuỗi Hello World ra LCD tại vị trí 40H 
LOOP1: CLR A 
 MOVC A, @A+DPTR 
 CJNE A, #0FFH, PRINT1 ;Kết thúc việc hiển thị nếu gặp 0FFH 
 JMP EXIT 
PRINT1: CALL WRITE_DATA 
 INC DPTR 
 JMP LOOP1 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 10 
EXIT: 
 JMP $ 
;******************************************************* 
;* Write Instruction LCD * 
;* Input : ACC (Command) * 
;* Output : Data bus LCD * 
;******************************************************* 
WR_INS: MOV B,A 
 ANL A,#0F0H ;Giao tiếp 4 bits nên chỉ sử dụng 4 bits 
cao 
 MOV P1,A ;Ghi 4 bits cao lần ñầu 
 CALL EN_LCD ;Tạo xung E(nable) 
 MOV A,B ;Ghi 4 bits thấp lần sau 
 SWAP A 
 ANL A,#0F0H 
 MOV P1,A 
 CALL EN_LCD 
 RET 
WRITE_DATA: 
 MOV B,A 
 ANL A,#0F0H 
 SETB ACC.0 
 MOV P1,A 
 CALL EN_LCD 
 MOV A,B 
 SWAP A 
 ANL A,#0F0H 
 SETB ACC.0 
 MOV P1,A 
 CALL EN_LCD 
 RET 
;ðoạn chương trình di chuyển ñến vị trí con trỏ 
GOTOLCD: SETB ACC.7 
 CALL WRITE_INS 
 RET 
;******************************************************* 
;* ðoạn chương trình khởi tạo LCD * 
;* Initial LCD * 
;* 4-Bit Interface * 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 11 
;******************************************************* 
INIT_LCD: CLR RS_LCD 
 MOV A,#33H ;Khởi tạo LCD (xem bảng 8-2). 
 CALL WR_INS 
 MOV A,#32H ;Chọn mode giao tiếp 4 bits 
 CALL WR_INS 
 MOV A,#28H ;Chọn giao tiếp 4 bits và hiển thị 2 lines (xem bảng 
8-2) 
 CALL WR_INS ;Fonts ở chế ñộ 5x8 dots 
 MOV A,#01H ;Xoá display (xem tập lệnh bảng 8-3) 
 CALL WR_INS 
 MOV A,#02H ;ðưa con trỏ về ñầu dòng 
 CALL WR_INS 
 MOV A,#0FH ;Nhấp nháy con trỏ 
 CALL WR_INS 
 RET 
;******************************************************* 
;* Enable Pin E LCD * 
;* Active Chip select * 
;******************************************************* 
EN_LCD: SETB E_LCD ;Enable LCD 
 CALL BUSY ;Busy delay time 
 CLR E_LCD ;Disable LCD 
 CALL BUSY 
 RET 
;******************************************************* 
;* Delay time for Busy * 
;* Wait LCD Ready * 
;******************************************************* 
BUSY: PUSH 07H 
 PUSH 06H 
 MOV R6,#0B0H 
BUSY1: MOV R7,#0FFH 
 DJNZ R7,$ 
 DJNZ R6,BUSY1 
 POP 06H 
 POP 07H 
 RET 
;******************************************************* 
;* Delay Time * 
;******************************************************* 
DELAY: PUSH 07H 
 PUSH 06H 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 12 
DEL1: MOV R6,#0FFH 
DEL2: MOV R7,#0FFH 
 DJNZ R7,$ 
 DJNZ R6,DEL2 
 POP 06H 
 POP 07H 
 RET 
;-------------------------------------------------- 
LINE1: DB 'KHOA DIEN – DIEN TU', 0FFH 
LINE2: DB 'BO MON DIEN TU – VIEN THONG', 0FFH 
END 
b. Yêu cầu 
- Chạy chương trình trên kiểm tra và cho nhận xét 
- Hãy cho biết ý nghĩa của các chương trình con: BUSY, EN_LCD, 
INTI_LCD, WR_DATA VÀ WR_INS 
- Tai sao cuối LINE1 và LINE2 có giá trin 0FFh ? Có thể thay giá trị này 
bằng một giá trị khác ñược không ? Hãy tìm những chỗ có thể thay thế giá 
trị 0FFh này. Chạy chương trình kiểm chứng. 
- Lệnh SETB ACC.7 trong ñoạn GOTOLCD có ý nghĩa gì? (xem bảng 8-2) 
- Sửa lại chương trình ñể hiển thị chuỗi LINE1 và LINE2 ở giữa LCD ? 
- Sửa lại chương trình sao cho LINE1 và LINE2 dịch trái, dịch phải 
- Sửa lại chương trình sao cho LINE1 dịch trái và LINE2 dịch phải và ngược 
lại. 
- Có thể sửa chương trình lại ñể cho LCD 16x2 hoạt ñộng ở chế ñộ truyền 8 
bit ñược không? Tại sao? Nếu ñược hãy thử thay ñổi và kiểm chứng. 
- Phải sửa lại ñoạn lệnh INIT_LCD như thế nào ñể LCD hiển thị ở chế ñộ 1 
line và font ở chế ñộ 5x10 dots (xem bảng 8-2). 
- Sửa chương trình sao cho hiển thị ký tự A trên 1 dòng duy nhất. 
Bài 2: Chương trình sau ñây sẽ ñếm và hiển thị số ra LCD từ 0 ñến 9 rồi dừng. Chú ý 
con trỏ sẽ tự ñộng dịch phải sau khi in 1 số ñếm ra LCD. Do ñó, ñể số ñếm sau sẽ hiển 
thị ñè lên số ñếm trước thì ta phải dịch ngược con trỏ 1 ñơn vị sau mỗi lần hiển thị số 
ñếm. 
a. Chương trình gợi ý mẫu: 
DATA EQU P1 ;Port LCD 
EN bit P1.2 ;Enable LCD 
WR bit P1.1 ;WR LCD 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 13 
RS bit P1.0 ;RS Select LCD 
 ORG 0000H 
MAIN: MOV SP,#256-32 ;Initial Stack 32 Byte 
 CALL DELAY ;initial delay 
 CALL INIT_LCD ;initial LCD 
;ðây là ñoạn lệnh ñếm và hiển thị ra màn hình LCD 
 MOV R1,#0FFH 
LOOP: INC R1 
 CLR A ; mov a, #00h 
 CALL GOTOLCD ; Dời con trỏ về ñầu dòng 1 
 MOV A,R1 
 ADD A,#30H 
 CALL WRITE_DATA ;Hiển thị số ñếm ra LCD 
 CALL DELAY 
 CALL DELAY 
 CALL DELAY 
 CJNE R1,#9H,LOOP ;Dừng hiển thị khi ñếm ñến 9 
 JMP $ 
;******************************************************* 
;* Write Instruction LCD * 
;* Input : ACC (Command) * 
;* Output : Data bus LCD * 
;******************************************************* 
WR_INS: MOV B,A 
 ANL A,#0F0H ;Giao tiếp 4 bits nên chỉ sử dụng 4 bits cao 
 MOV P1,A ;Ghi 4 bits cao lần ñầu 
 CALL EN_LCD ;Tạo xung E(nable) 
 MOV A,B ;Ghi 4 bits thấp lần sau 
 SWAP A 
 ANL A,#0F0H 
 MOV P1,A 
 CALL EN_LCD 
 RET 
WRITE_DATA: 
 MOV B,A 
 ANL A,#0F0H 
 SETB ACC.0 
 MOV P1,A 
 CALL EN_LCD 
 MOV A,B 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 14 
 SWAP A 
 ANL A,#0F0H 
 SETB ACC.0 
 MOV P1,A 
 CALL EN_LCD 
 RET 
;ðoạn chương trình di chuyển ñến vị trí con trỏ 
GOTOLCD: SETB ACC.7 
 CALL WRITE_INS 
 RET 
;******************************************************* 
;* ðoạn chương trình khởi tạo LCD * 
;* Initial LCD * 
;* 4-Bit Interface * 
;******************************************************* 
INIT_LCD: CLR RS_LCD 
 MOV A,#33H ;Khởi tạo LCD (xem bảng 8-2). 
 CALL WR_INS 
 MOV A,#32H ;Chọn mode giao tiếp 4 bits 
 CALL WR_INS 
 MOV A,#28H ;Chọn giao tiếp 4 bits và hiển thị 2 lines (xem bảng 8-2) 
 CALL WR_INS ;Fonts ở chế ñộ 5x8 dots 
 MOV A,#01H ;Xoá display (xem tập lệnh bảng 8-3) 
 CALL WR_INS 
 MOV A,#02H ;ðưa con trỏ về ñầu dòng 
 CALL WR_INS 
 MOV A,#0FH ;Nhấp nháy con trỏ 
 CALL WR_INS 
 RET 
;******************************************************* 
;* Enable Pin E LCD * 
;* Active Chip select * 
;******************************************************* 
EN_LCD: SETB E_LCD ;Enable LCD 
 CALL BUSY ;Busy delay time 
 CLR E_LCD ;Disable LCD 
 CALL BUSY 
 RET 
;******************************************************* 
;* Delay time for Busy * 
;* Wait LCD Ready * 
;******************************************************* 
BUSY: PUSH 07H 
Bài 9: Lập trình ñiều khiển LCD 
 Trang IX- 15 
 PUSH 06H 
 MOV R6,#0B0H 
BUSY1: MOV R7,#0FFH 
 DJNZ R7,$ 
 DJNZ R6,BUSY1 
 POP 06H 
 POP 07H 
 RET 
;******************************************************* 
;* Delay Time * 
;******************************************************* 
DELAY: PUSH 07H 
 PUSH 06H 
DEL1: MOV R6,#0FFH 
DEL2: MOV R7,#0FFH 
 DJNZ R7,$ 
 DJNZ R6,DEL2 
 POP 06H 
 POP 07H 
 RET 
 END 
b. Yêu cầu 
- Quan sát số ñếm hiển thị trên LCD khi cho chạy chương trình? Chú ý: nếu số 
ñếm hiểu thị quá nhanh, học viên hãy tăng số lần gọi DELAY sau khi hiển thị 
số ñếm. 
- Tại sao phải cộng số ñếm với 30H trước khi cho hiển thị? 
- Sửa lại chương trình trên ñể số ñếm hiển thị ñến 25? 
- Sửa lại chương trình cho hiển thị ñồng hồ giờ phút giây tương ñối hiển thị trên 
LCD 
- Sửa chương trình sao cho khi ấn SW1 = Px.2 thì tăng giá trị hiển thị trên LCD 
là 1, còn khi ấn SW2 = Px.3 thì giảm giá trị hiển thị trên LCD xuống một. Khi 
chạy chương trình thi LCD hiển thị 0000 
-----Hết----- 

File đính kèm:

  • pdfTài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 9 Lập trình điều khiển LCD 16x2.pdf