2.CÁC CHƯƠNG TRÌNH KHI GIAO TIẾP 8051 PHẦN II : 3.CODE CHƯƠNG TRÌNH THỰC HIỆN THEO MẠCH.. TỔNG QUAN VỀ LCD hinh 2 Trong những năm gần đây LCD Liquid Crystal Display đã được sử dụng r
Trang 1PHẦN I GIAO TIẾP VĐK 8051 VỚI LCD
Hinh 1
NỘI DUNG:
PHẦN I :
1.TỔNG QUAN VỀ LCC & CÁCH GIAO TIẾP VỚI 8051.
2.CÁC CHƯƠNG TRÌNH KHI GIAO TIẾP 8051
PHẦN II :
3.CODE CHƯƠNG TRÌNH THỰC HIỆN THEO MẠCH.
4.MẠCH MÔ PHỎNG TRÊN PROTUS.
5.KẾT LUẬN ƯU & NHƯỢC ĐIỂM
6.NHIỆM VỤ CÁC THÀNH VIÊN VÀ ĐÁNH GIÁ
7.NHAN XÉT CỦA GIÁ VIÊN
Trang 2
I.TỔNG QUAN VỀ LCD & CÁCH GIAO TIẾP LCD VỚI 80C51:
1.1 TỔNG QUAN VỀ LCD
hinh 2
Trong những năm gần đây LCD (Liquid Crystal Display) đã được sử dụng rộng rãi thay thế cho LED 7 đoạn hay các loại LED nhiều đoạn khác Ngày nay LCD với những tính năng nổi trội của nó đã được sử dụng rất nhiều trong vi điều khiển Khả năng hiện thị của LCD là rất đa dạng, trực quan (chữ, số và nhiều loại kí tự đồ họa khác ),
dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức khác nhau mà giá thành rẻ…
LCD sử dụng trong mạch: lLCD LM 032L
Hình dạng, kích thước:
Sơ đồ chaân:
- Hình (3)
Trang 31.2 CÁCH GIAO TIẾP GIAO TIẾP LCD VỚI VĐK 8051 :
Tôi thực hiện giao tiếp 8051 thông qua IC đệm 74LS373 (kết nối 8 bit):
P0.0 Æ P0.7 (của 8051) nối với DB0 Æ DB7 (của LCD)
P3.6 và P3.7 nối với cổng NAND ,ngõ ra cổng NAND được nối chân E (chân số 6 của LCD) Chân số 2 IC 74LS373 nối với RS (chân số của LCD)
Chân số 5 IC 74 LS373 nối với RW (chân số 4 của LCD)
2.CÁC CHƯƠNG TRÌNH CON KHI GIAO TIẾP LCD VỚI 8051:
2.1.XỬ LÝ ĐƯỜNG ĐIỀU KHIỂN E:
Để thiết lập câu lệnh hay gởi dữ liệu kí tự cho LCD, ta phải tạo ra một xung cạnh xuống trên chân , do đó ta đưa chân E nhận mức cao, tạo một độ trễ khoảng 200ms (để tạo độ rộng xung) và sau đó đưa E xuống thấp, ta có thể coi như là một chương trình con để ra lệnh cho LCD đọc
dữ liệu
LENH:
SETB E LCALL DELAY2 CLR E RET
Đọc dữ liệu hay trạng thái từ LCD: tạo một xung cạnh lên , chương trình như sau:
LENH2: CLR E LCALL DELAY2 SETB E
Trang 4RET
Chương trình delay: 200ms, timer1, chế độ 1
DELAY2: MOV TMOD,#10H MOV R7,#4
LL: MOV TH1,#HIGH(-50000) MOV TL1,#LOW(-50000)
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
DJNZ R7,LL
MOV R7,#00H
RET
2.2 KIỂM TRA TRANG THÁI BÂN CỦA LCD:
Trong khi viết chương trình ta phải kiểm tra xem LCD Cĩ cịn bận hay đang bận thực hiện lệnh đã nhận trước đĩ hay khơng
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian để hồn tất Khi đang thực thi các hoạt động bên trong chip như thế, LCD sẽ bỏ qua mọi giao tiếp với bên ngồi và bật cờ BF (thơng báo qua chân DB7 khi cĩ thiết lập RS=0, R/W=1) lên để cho 80C51 biết nĩ đang “bận” Dĩ nhiên , khi xong việc nĩ sẽ đặt cờ BF lại mức 0 Dựa trên nguyên tắc đĩ ta viết đoạn chương trình con kiểm tra trạng thái bận của LCD như sau:
WAIT_LCD:
CLR E CLR RS SETB RW MOV DATA_LCD,#0FFH SETB E
MOV A,DATA_LCD
JB ACC.7,WAIT_LCD CLR RW
CLR RS RET
2.3 KHỞI TAO LCD:
Trang 5KHOITAO: CLR RS ;Chọn chế độ gởi lệnh
MOV DATA_LCD,#38H ;Chọn bus 8bit, font ký tự 5x8, 2 hàng LCALL LENH ;Gọi lệnh thực thi xuất ra LCD LCALL WAIT_LCD ;Kiểm tra trạng thái bận của LCD CLR RS ;Chọn chế độ gởi lệnh MOV DATA_LCD,#0FH ;LCD on, bật cursor
LCALL LENH LCALL WAIT_LCD RET
2.4.XÓA MÀN HÌNH :
CLR_LCD:
MOV DATA_LCD,#01H LCALL LENH
LCALL WAIT_LCD RET
2.5 GHI RA MÀN HÌNH DÒNG TIN THEO YÊU CẦU:
string1a:db ' !! W E L L C O M E !! '
db 0
string1b:db '!! D H MO HA NOI !! '
db 0
string2:db ' NHOM 2 '
db 0
string3:db ' K10 F '
db 0
string4:db ' HIEN THI CHU LCD!'
;****************************
WRITE_TEXT:
SETB E ;E=1 bắt đầulệnh LCD SETB RS ;RS=1 để chọn thanh chế độ xuất
Trang 6;các dữ liệu ký tự để hiển thị lên LCD MOV DATA_LCD,#’T’ ;goi dữ liệu ký tự chữ T lên LCD CLR E ;E=0 tạo cạnh xuống LCALL WAIT_LCD ; Kiểm tra xem LCD còn bận hay không RET
3 CODE CHƯƠNG TRÌNH THỰC HIÊN VÀ SƠ ĐỒTHỰC HIỆN: 3.1 CODE CHƯƠNG TRÌNH THỰC HIỆN: $MOD51 ; chuong trinh giao tiep 8051 $ LCD ; 1.2MHz Clock ;khoi tao LCD LCD_CMD_WR equ 0
LCD_DATA_WR equ 1
LCD_BUSY_RD equ 2
LCD_DATA_RD equ 3
;LCD DINH NGHIA LCD_CLS equ 1
LCD_HOME equ 2
LCD_SETMODE equ 4
LCD_SETVISIBLE equ 8
LCD_SHIFT equ 16
LCD_SETFUNCTION equ 32
LCD_SETCGADDR equ 64
LCD_SETDDADDR equ 128
;CAI DAT TRANG THAI BAN DAU
Trang 7org 0000h
ajmp start
;DIA CHI LUU TRONG CHUONGTRINH
org 0100h
string1a:db ' !! W E L L C O M E !! ' ;CHUO KI TU CAN HIEN THI
db 0
string1b:db '!! D H MO HA NOI !! ';CHUO KI TU CAN HIEN THI
db 0
string2:db ' NHOM 2 ' ;CHUO KI TU CAN HIEN THI
db 0
string3:db ' K10 F ' ;CHUO KI TU CAN HIEN THI
db 0
string4:db ' HIEN THI CHU LCD!' ;CHUO KI TU CAN HIEN THI
db 0
start: mov A,#038h ;NAP A BANG 38
call DATACMD
loop: mov A,#LCD_SETVISIBLE+6 ;NAP TRANG THAI MAN HINH call DATACMD
mov R7,#2 ;NAP GIA TRI HANG QUET TREN LCD loop2:
mov DPTR,#string1a ;NAP CON TRO VUNG DU LIEU HIEN THI call wrstr
Trang 8
mov DPTR,#200 ;NAP CON TRO VUNG DU LIEU DPTR =200 call wtms
mov A,#LCD_CLS ;xoa man hinh lcd
call DATACMD
mov DPTR,#string1b ;NAP CON TRO VUNG DU LIEU HIEN THI call wrstr
mov DPTR,#200 ;NAP CON TRO VUNG DU LIEU DPTR =200 call wtms
mov A,#LCD_CLS ;xoa man hinh lcd
call DATACMD
djnz R7,loop2 ;NAP LAI CHO TOI KHI BO DEM = 0
mov DPTR,#string1a ;NAP CON TRO VUNG DU LIEU HIEN THI call wrstr
mov DPTR,#400 ;NAP CON TRO VUNG DU LIEU DPTR =400 call wtms
mov A,#LCD_SETDDADDR+64 ;NAP TRANG THAI MAN HINH call DATACMD
mov DPTR,#string2 ;NAP CON TRO VUNG DU LIEU HIEN THI
call wrslow
mov DPTR,#200 ;NAP CON TRO VUNG DU LIEU DPRT=200
Trang 9call wtms
mov A,#LCD_CLS ;xoa man hinh lcd
call DATACMD
mov DPTR,#string3 ;NAP CON TRO VUNG DU LIEU HIEN THI
call wrslow
mov A,#LCD_SETDDADDR+64 ;NAP TRANG THAI MAN HINH
call DATACMD
mov DPTR,#string4 ;NAP CON TRO VUNG DU LIEU HIEN THI
call wrslow
mov A,#LCD_SETVISIBLE+7 ;XUAT RA MAN HINH
call DATACMD
mov DPTR,#2000 ;NAP DIA CHI VUNG DU LIEU DPTR = 2000
call wtms
mov A,#LCD_CLS ;xoa man hinh lcd
call DATACMD
jmp loop ;NAP LAI CHO TOI KHI BO DEM = 0
;CHUONG TRINH QUET CHUOI KI TU TRONG RAM
wrstr: mov R0,#LCD_DATA_WR ;NAP TRANG THAI MAN HINH
wrstr1: clr A
movc A,@A+DPTR ;LAY LAI DU LIEU O NHO ROM (A + DPTR) DUA VAO A
Trang 10jz wrstr2
mov @R0,A ;SAO CHEP NOI DUNG A VAO RO
call wtbusy ;GOI CHUONG TRINH BAN CUA LCD
inc DPTR ;TANG DIA CHI VUNG DU LIEU DPTR LEN
push DPL ;CAT VAO NGAN XEP
push DPH ;CAT VAO NGAN XEP
pop DPH ;LAY TU NGAN XEP
pop DPL ;LAY TU NGAN XEP
jmp wrstr1
wrstr2: ret
;CHUONG TRINH XUAT CHUOI KI TU TRONG RAM
wrslow: mov R0,#LCD_DATA_WR
wrslw1: clr A ;XOA NOI DUNG TRONG A
movc A,@A+DPTR ;LAY LAI DU LIEU O NHO ROM (A + DPTR) DUA VAO A
jz wrslw2 ;THOA RA CT CON
movx @R0,A ;SAO CHEP NOI DUNG A VAO RO
call wtbusy ;GOI CHUONG TRINH BAN CUA LCD
inc DPTR ;TANG DIA CHI VUNG DU LIEU DPTR LEN
push DPL ;CAT VAO NGAN XEP
push DPH ;CAT VAO NGAN XEP
mov DPTR,#100 ;NAP DIA CHI VUNG DU LIEU DPTR = 100
call wtms ;GOI CHUONG TRINH CON
pop DPH ;LAY TU NGAN XEP
pop DPL ;LAY TU NGAN XEP
jmp wrslw1 ;NHAY DEN CT CON
wrslw2: ret
;CHUONG TRINH XUAT RA LCD :
Trang 11DATACMD: mov R0,#LCD_CMD_WR
movx @R0,A ;SAO CHEP NOI DUNG A VAO RO
jmp wtbusy ;NHAY DEN CT CON TRANG THAI BAN LCD
;CHUONG TRINH CON:
wrchar: mov R0,#LCD_DATA_WR ;NAP TRANG THAI LCD VAO RO
movx @R0,A ;SAO CHEP NOI DUNG A VAO RO
;CHUONG TRINH DOI TRANG THAI BAN CUA LCD
wtbusy: mov R1,#LCD_BUSY_RD ;NAP TRANG THAI BAN LCD VAO R1
movx A,@r1 ;SAO CHEP NOI DUNG R1 VAO THANH A
jb ACC.7,wtbusy ;NHAY NEU ACC =1
ret
;TRE SO TRONG THANH A
wtsec: push ACC ;CAT ACC VAO NGAN XEP
call wtms ;GOI CHUONG TRINH CON
pop ACC ;LAY ACC TU NGAN XEP
dec A
jnz wtsec ;NHAY DEN NOI
ret
;TRE MOT SO THOI GIAN CHO VDK
wtms: xrl DPL,#0FFh ;THUC HIEN PHEP TOAN XOR GIUA HAI TOAN HANG xrl DPH,#0FFh ;THUC HIEN PHEP TOAN XOR GIUA HAI TOAN HANG inc DPTR ;TANG DPTR NEU CO CY = 1
wtms1: mov TL0,#01Ch ;100 TICH TAC DONG HO = 1ms CUA XUNG 1.2Mhz mov TH0,#0FFh
Trang 12mov TMOD,#1 ;TIME 0 O MUC 1 setb TCON.4 ;TIME 0 DEM CHAY wtms2: jnb TCON.5,wtms2
clr TCON.4 ;TIME 0 DUNG DEM clr TCON.5
inc DPTR
mov A,DPL
orl A,DPH
jnz wtms1
ret
END
3 2.SƠ ĐỐ MẠCH :
Hình 4
4 MẠCH MÔ PHỎNG TRÊN (PM) PROTUS:
Hình (1)
Trang 13Kết quả chạy mô phỏng: Mạch chạy tốt và đúng
Mạch chạy và hiện thị dòng tin theo yêu cầu trong code
5 KẾT LUẬN:
5.1.Nhược điểm:
- Phần mềm tương đối phức tạp, nhất là đối với những người mới học và chưa có nhiều kinh nghiệm như tui, cần viết nhiều, tham khảo nhiều chương trình thì mới có kinh nghiệm tốt để viết
- Chương trình còn dài dòng , phức tạp, chưa có thời gian nhiều cho việc tối ưu
- Chưa đưa ra được sơ đồ giải thuật
5.2 Ưu điểm:
- Có thể kết luận mạch chạy và làm việc hiệu quả, hiển thị đúng dòng tin theo yêu cầu
- Tuy mạch còn đơn giản chưa đáp ứng đc cho thực tế đẻ so sánh với các chương trình lớn , nói chung mạch đạt được yêu cầu là giao tiếp 80C51 với LCD
6.Nhiệm vụ các thành viên
-Do đây là lần đầu thiết kế nên nhiều phàn còn sơ sài do còn thiếu kinh nghiệm
-Nhóm chưởng cũng như các thành viên cùng tìm tai liệu tham khảo ,thiết kế mach qua proteus,tìm và lập trình theo
vi sử lý
-các thành viên trong nhóm hoạt động tích cực,năng nổ và nhiệt tình làm đề tài
7.nhận xét của giáo viên