Dùng 8051 điều khiển chạy chữ trên màn hình LCD Họ và tên: LÊ NGỌC PHÚC Lớp: CDDT9QNMSSV: 0782743
BÀI TIỂU LUẬN VI XỬ LÝ
ĐỀ TÀI : Chạy chữ trên màn hinh LCD, ứng dụng IC 8051
MỤC LỤC1. Giới thiệu IC 80512. Giới thiệu cách lấy linh kiện3. Mô tả về LCD4. Sơ đồ giao tiếp5. Chương trình mô phỏng6. Chạy mô phỏng 1. Giới thiệu IC 8051:1.1Giới thiệu họ MSC-51: MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM nội. AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit, vecto ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON-CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống. 1.2 Sơ đồ khối của AT89C51 :
http://photo.zing.vn/photo/gallery/detail.5387929.html
1. 3 Sơ đồ chân của AT89C51
http://photo.zing.vn/photo/gallery/detail.5387932.html 1.4Chức năng các chân của AT89C51-89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ.a/.Các port:Port 0:Port 0 là port có hai chức năng ở các chân 32-39 của 89C51. trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.b/.Port 1:-port 1 là port IO trên các chân 1-8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.c/.Port 2:-port 2 là 1 port có tác dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.d/.Port 3:Port 3 là port có tác dụng kép trên các chân 10-17. các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:
http://photo.zing.vn/photo/gallery/detail.5387937.html * Các ngõ tín hiệu điều khiển: Ngõ tín hiệu PSEN:- PSEN là tín hiêu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nói đén chân OE của Eprom cho phép đọc các byte mở rộng .- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1. Ngõ tín hiệu điều khiển ALE(Address latch Enable):
- Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.- Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là 12Mhz.- Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 89C51. Ngõ tín hiệu EA\(External Access):- Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89c51. Ngõ tín hiệu RST (Reset):- Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi cấp điện mạch tự động Reset. Các ngõ vào bộ dao động X1, X2:nguồn 5V .
2.Giới thiệu cách lấy linh kiện • Bước 1: Click vào biểu tượng trên thanh công cụ,
http://photo.zing.vn/photo/gallery/detail.5387719.html
tiếp theo click vào chữ P,ta sẽ thấy một bảng sau:
http://photo.zing.vn/photo/gallery/detail.5387725.html
Pick Device/Symbol từ Menu lệnhhoặc chọn Library
http://photo.zing.vn/photo/gallery/detail.5387729.html
Hoặc ta có thể bấm phím P trên bàn phím.• Bước 2: Chọn linh kiện 80C51 như sau:
http://photo.zing.vn/photo/gallery/detail.5387733.html
Nhấp đúp vào dòng chữ 80C51, ta sẽ thấy:
http://photo.zing.vn/photo/gallery/detail.5387741.html Sau đó nhấp vào chữ 80C51, ta được:
o
http://photo.zing.vn/photo/gallery/detail.5387745.html Sau đó, chúng ta nhấp chột trái vào vùng đặt linh kiện thì chip 80C51 sẽ hiện ra:
http://photo.zing.vn/photo/gallery/detail.5387745.html
Tương tự cho tụ điện, thạch anh, LCD…Ta nhấn phím P trên bàn phím, sau đó, gõ vào keywords từ capacitor, crystal, LCD…
http://photo.zing.vn/photo/gallery/detail.5387767.html
Ta chọn LCD 14 chân:
http://photo.zing.vn/photo/gallery/detail.5387776.html • Bước 3: Ta chọn nguồn và mass bằng cách:Click vào biểu tượng: trên thanh công cụ,
http://photo.zing.vn/photo/gallery/detail.5387782.html
Thì hộp thoại sau xuất hiện:
http://photo.zing.vn/photo/gallery/detail.5387792.html
Ta sẽ chọn nguồn khi click vào Power, mass khi click vào Ground.Đến đây ta sẽ có:
http://photo.zing.vn/photo/gallery/detail.5387798.html -Nếu chúng ta muốn xoay linh kiện thì ta nhấn vào biểu tượng: thì các linh kiện sẽ xoay theo ý muốn của ta.
3. Mô tả về LCDTrong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.Mô tả các chân, loại 14 chân.-VCC: cấp nguồn dương-VSS: cấp nguồn âm-VEE: điều khiển độ tương phản của LCD-Chân chọn thanh ghi RS( Register Select)Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng…Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.-Chân đọc/ghi (R/W)Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1-Chân cho phép E (Enable)Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung này phải rộng tối thiểu là 450 ns.-Chân D0~D7:
Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất kyf dữ liệu nào lên LCD
http://photo.zing.vn/photo/gallery/detail.5387811.html
Chân Kí hiệu I/O Mô tả
1 VSS - Đất
2 VCC - Dương 5V
3 VEE - Cấp nguồn điều khiển phản
4 RS I RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.
5 R/W I R/W=1 đọc dữ liệu. R/W=0 ghi
6 E I/O Cho phép
7 DB0 I/O Các bit dữ liệu
8 DB1 I/O Các bit dữ liệu
9 DB2 I/O Các bit dữ liệu
10 DB3 I/O Các bit dữ liệu
11 DB4 I/O Các bit dữ liệu
12 DB5 I/O Các bit dữ liệu
13 DB6 I/O Các bit dữ liệu
14 DB7 I/O Các bit dữ liệu
Các mã lệnh LCD
Mã Hex
Lệnh đến thanh ghi của LCD
1 Xóa màn hình hiển thị
2 Trở về đầu dòng
4 Giảm con trỏ (dịch con trỏ sang trái)
5 Tăng con rỏ (dịch con trỏ sang phải)
6 Dịch hiển thị sang phải
7 Dịch hiển thị sang trái
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị, nhấp nháy con trỏ
F Tắt hiển thị, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái
1C Dịch toàn bộ hiển thị sang phải
80 Ép con trỏ Vũ đầu dòng thứ nhất
C0 Ép con trỏ Vũ đầu dòng thứ hai
38 Hai dòng ma trận
4. Sơ đồ giao tiếp Cách nối dây:Nhấn vào biểu tượng , tiến hành nối bằng cách nhấp chuột vào chân linh kiện và rê đến chỗ cần nối. muốn tạo đường bus thì nhấn vào biểu tượng
http://photo.zing.vn/photo/gallery/detail.5387842.html Sau khi nối hoàn chỉnh bản vẽ sẽ tương tự như sau:
http://photo.zing.vn/photo/gallery/detail.5387852.html
5.Chương trình mô phỏng$mod51 ; Chương trình hiển thị LCD
; Tần số thạch anh 12MHz
;Khái báo thanh ghi địa chỉ LCD
LCD_CMD_WR equ 0LCD_DATA_WR equ 1LCD_BUSY_RD equ 2LCD_DATA_RD equ 3
;LCD CommandsLCD_CLS equ 1LCD_HOME equ 2LCD_SETMODE equ 4LCD_SETVISIBLE equ 8LCD_SHIFT equ 16LCD_SETFUNCTION equ 32LCD_SETCGADDR equ 64LCD_SETDDADDR equ 128
;Vị trí chương trình nhảy đến khi reset org 0000h jmp start ;nhảy đến chương trình chính
;Bắt đầu chương trình chính
org 0100h
string1a:db ' !!XIN CHAO!! ' db 0string1b:db '!! XIN CHAO !! ' db 0string2:db ' tat ca cac ban... ' db 0
string3:db ' Day la tieu luan ' db 0string4:db ' cua Ngoc Phuc !' db 0string5:db 'Em ten la:' db 0string6:db '*Le Ngoc Phuc*' db 0string7:db '*Ma So Sinh Vien*' db 0string8: db ' 0782743 ' db 0string9: db ' Lop 5CDCQDT09' db 0string10: db 'Truong Cong Nghiep' db 0string11: db 'TP Ho Chi Minh.'db 0string12: db 'Em chan thanh' db 0string13: db 'cam on thay:' db 0string14: db '*TranNguyenBaoTran*' db 0string15: db 'da giup do em' db 0string16: db 'thuc hien tieu' db 0string17: db 'luan nay!!' db 0string18: db 'Cam on cac ban da' db 0string19: db 'quan tam theo doi' db 0string20: db ' $THE_END$ ' db 0string22: db 'De tai: Chay chu ',0
string23: db 'Tren man hinh LCD' db 0string24: db ' ung dung IC 8051' db 0string25: db 'mo phong bang' db 0string26: db 'phan mem Proteus ' db 0 start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit call wrcmd ;gọi chương trình con gửi lệnh
loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt: call wrcmd ;gọi chương trình con gửi lệnh
mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp
loop2: mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ
call wrstr ;gọi chương trình con xuất dòng chữ tới LCD
mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS
call wtms ;Gọi chương trình con đợi 200mS
mov A,#LCD_CLS ;Xóa màn hình LCD
mov DPTR,#string1b call wrstr
mov DPTR,#200 call wtms
mov A,#LCD_CLS ; Xóa màn hình LCD call wrcmd
djnz R7,loop2 ; lặp lại 2 lần
mov DPTR,#string1a call wrstr
mov DPTR,#400 call wtms
mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A
call wrcmd
mov DPTR,#string2 call wrslow
mov DPTR,#200 call wtms
mov A,#LCD_CLS ;Clear screen mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A
call wrcmd
mov A,#LCD_CLS ;Clear screen call wrcmd
mov DPTR,#string3
call wrslow
mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A
call wrcmd
mov DPTR,#string4 call wrslow mov A,#LCD_CLS mov A,#LCD_SETDDADDR+64 call wrcmd mov A,#LCD_CLS call wrcmd mov DPTR,#string5 call wrslow mov A,#LCD_SETDDADDR+64 call wrcmd mov DPTR,#string6 call wrslow mov A,#LCD_CLS mov A,#LCD_SETDDADDR+64 call wrcmd mov A,#LCD_CLS call wrcmd mov DPTR,#string7 call wrslow mov A,#LCD_SETDDADDR+64 call wrcmd mov DPTR,#string8 call wrslow mov A,#LCD_CLS mov A,LCD_SETDDADDR+64 call wrcmd mov A,#LCD_CLS call wrcmd mov DPTR,#string9 lcall delay1 mov DPTR,#string10 lcall delay1 mov DPTR,#string11 lcall delay1 mov DPTR,#string22 lcall delay1 mov DPTR,#string23 lcall delaylc mov DPTR,#string24 lcall delay1 mov DPTR,#string25 lcall delaylc mov DPTR,#string26 acall delay1 mov DPTR,#string12 lcall delay1 mov DPTR,#string13 lcall delaylc mov DPTR,#string14 lcall delay1 mov DPTR,#string15 lcall delaylc mov DPTR,#string16 lcall delay1 mov DPTR,#string17 lcall delaylc mov DPTR,#string18 lcall delay1 mov DPTR,#string19 lcall delaylc
mov R7,#20loop1: mov DPTR,#string20 call wrstr
mov DPTR,#1000 call wtms
mov A,#LCD_CLS ;Clearscreen call rcmd
mov DPTR,#string20 call wrstr
mov DPTR,#1000 call wtms
mov A,#LCD_CLS ;Clear screen call wrcmd
djnz R7,loop1
mov DPTR,#string20 call wrstr
mov DPTR,#400 call wtms
mov A,#LCD_SETDDADDR+64 call wrcmd
;******************************************* mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well. call wrcmd
mov DPTR,#2000 call wtms
mov A,#LCD_CLS ;Clear screen call wrcmd
jmp loop
;Chương trình con viết chuỗi ký tự trong DPTR wrstr: mov R0,#LCD_DATA_WRwrstr1: clr A movc A,@A+DPTR jz wrstr2 movx @R0,A call wtbusy inc DPTR push DPL push DPH pop DPH pop DPL jmp wrstr1wrstr2: ret
;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy rawrslow: mov R0,#LCD_DATA_WRwrslw1: clr A movc A,@A+DPTR jz wrslw2 movx @R0,A call wtbusy inc DPTR
push DPL push DPH mov DPTR,#100 call wtms pop DPH pop DPL jmp wrslw1wrslw2: ret
;chương trình con gởi một lệnh trong thanh chứa A ra LCD:wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0 movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD jmp wtbusy ;Kiểm tra LCD bận
;chương trình con ghi một ký tự lên LCD:wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0 movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD
;Chương trình con đợi LCD hết bậnwtbusy: mov R1,#LCD_BUSY_RD movx A,@r1 jb ACC.7,wtbusy ret
;Chương trình con đợi tổng số giây có trong thanh chúa A wtsec: push ACC call wtms pop ACC dec A jnz wtsec ret
;Chương trình con đợi tổng số mS có trong con trỏ DPTR wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng xrl DPH,#0FFh ;and incrementing instead. inc DPTRwtms1: mov TL0,#low(-1200) ;100 xung = 1ms ở tần số thạch anh 1.2MHz mov TH0,#high(-1200) mov TMOD,#1 ;Timer 0 mode 1 setb TCON.4 ;Timer 0 runswtms2: jnb TCON.5,wtms2 clr TCON.4 ;Timer 0 stops clr TCON.5 inc DPTR mov A,DPL orl A,DPH jnz wtms1 retdelaylc: call wrslow
mov A,#LCD_SETDDADDR+64 call wrcmd ret
delay1: call wrslow mov A,#LCD_CLS mov A,#LCD_SETDDADDR+64 call wrcmd
mov A,#LCD_CLS call wrcmdret END
6. Chạy mô phỏng:
http://photo.zing.vn/photo/gallery/detail.5345279.html
http://photo.zing.vn/photo/gallery/detail.5345378.html
http://photo.zing.vn/photo/gallery/detail.5345333.html
http://photo.zing.vn/photo/gallery/detail.5345320.html
http://photo.zing.vn/photo/gallery/detail.5345290.html
http://photo.zing.vn/photo/gallery/detail.5345346.html
http://photo.zing.vn/photo/gallery/detail.5345362.html
http://photo.zing.vn/photo/gallery/detail.5345304.html
phuc_1076116
Hiện đã có 2 ý kiến thảo luận về bài viết này. Mời bạn cùng trao đổi!
Về đầu trang
In bài viết
Gửi qua email
Thảo luận về bài viết
phuc_1076116
MỤC LỤC
1.Giới thiệu cách lấy linh kiện
……………………….trang 2
2.Mô tả về LCD………………………………………trang6
3.Sơ đồ giao
tiếp……………………………………..trang 9
4.Chương trình mô phỏng……………………………tra
ng 10
5.Chạy mô phỏng…………………………………….trang 17
1.Giới thiệu cách lấ
y linh kiện
• Bước 1: Click vào biểu tượng trên thanh công cụ,
t
iếp theo click vào chữ P,ta sẽ thấy một bảng sau:
Pick Device/Sym
bol từ Menu lệnhhoặc chọn Library
Hoặc ta có thể
bấm phím P trên bàn phím.
• Bước 2: Chọn linh kiện 80C51 như sau:
Nhấp đúp vào dòng chữ 80C51, ta sẽ thấy:
S
au đó nhấp vào chữ 80C51, ta được:
Sau đó, chúng ta nh
ấp chột trái vào vùng đặt linh kiện thì chip 80C51 sẽ hiện ra:
Tương tự cho tụ điện, thạch anh, LCD…
Ta nhấn phím P trên
bàn phím, sau đó, gõ vào keywords từ capacitor, crystal, LCD…
Ta chọn LCD 14 chân:
• Bước 3: Ta chọn nguồn và mass b
ằng cách:
Click vào biểu tượng: trên thanh công cụ,
Thì hộp tho
ại sau xuất hiện:
Ta sẽ chọn nguồn khi click vào Power, mas
s khi click vào Ground.
Đến đây ta sẽ có:
-Nếu chúng ta muốn xo
ay linh kiện thì ta nhấn vào biểu tượng: thì các linh kiện sẽ
xoay theo ý muốn của ta.
2. Mô tả về LCD
Trong những năm gần đ
ây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn L
ed.
Mô tả các chân, loại 14 chân.
-VCC: cấp nguồn dương
-VSS: cấp
nguồn âm
-VEE: điều khiển độ tương phản của LCD
-Chân chọn thanh g
hi RS( Register Select)
Có hai thanh ghi rất quan trọng trong LCD,
chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì th
anh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳn
g hạn như xóa màn hình, đưa con trỏ về đầu dòng…Nếu RS=1 thì thanh
ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển th
ị trên LCD.
-Chân đọc/ghi (R/W)
Đầu đọc/ghi cho phép người dùng gh
i thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1
-
Chân cho phép E (Enable)
Chân cho phép E được sử dụng bởi LCD để c
hốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được
cung cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải đượ
c áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung
này phải rộng tối thiểu là 450 ns.
-Chân D0~D7:
Đây là 8 chân dữ l
iệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung c
ủa các thanh ghi trong LCD.
Để hiển thị các chữ cái và các con số
, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và
các con số từ 0~9 đến các chân này khi bật RS=1
Cũng như các mã l
ệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về
vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0
để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ
bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:
Nếu R/W=1,
RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong v
à sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng
nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi g
hi bất khì dữ liệu nào lên LCD
Chân Kí hiệu I/O Mô tả
1 VSS -
Đất
2 VCC - Dương 5V
3 VEE - Cấp nguồn điều khiển phản
4 RS I RS
=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.
5 R/W I R/W=1
đọc dữ liệu. R/W=0 ghi
6 E I/O Cho phép
7 DB0 I/O Các bit dữ liệu
8 DB1 I/O Các bit dữ liệu
9 DB2 I/O Các bit dữ liệu
10 DB3 I/O Cá
c bit dữ liệu
11 DB4 I/O Các bit dữ liệu
12 DB5 I/O Các bit dữ liệ
u
13 DB6 I/O Các bit dữ liệu
14 DB7 I/O Các bit dữ liệu
Các mã lện
h LCD
Mã Hex Lệnh đến thanh ghi của LCD
1 Xóa màn hình hiển thị
2
Trở về đầu dòng
4 Giảm con trỏ (dịch con trỏ sang trái)
5 Tăng con
rỏ (dịch con trỏ sang phải)
6 Dịch hiển thị sang phải
7 Dịch hiển
thị sang trái
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con
trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị, nhấp nháy con trỏ
F Tắt hiển thị, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trá
i
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang t
rái
1C Dịch toàn bộ hiển thị sang phải
80 Ép con trỏ Vũ đầu dòng t
hứ nhất
C0 Ép con trỏ Vũ đầu dòng thứ hai
38 Hai dòng ma trận
3.
Sơ đồ giao tiếp
Cách nối dây:
Nhấn vào biểu tượng , tiến
hành nối bằng cách nhấp chuột vào chân linh kiện và rê đến chỗ cầ
n nối. muốn tạo đường bus thì nhấn vào biểu tượng
Sau khi nối
hoàn chỉnh bản vẽ sẽ tương tự như sau:
4.Chương trìn
h mô phỏng
$mod51
; Chương trình hiển thị LCD
; Tần số
thạch anh 12MHz
;Khái báo thanh ghi địa chỉ LCD
LCD_CMD_WR equ
0
LCD_DATA_WR equ 1
LCD_BUSY_RD equ 2
LCD_DATA_RD equ 3
;LCD Comman
ds
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
;Vị trí chương trình nhảy đến khi reset
org 0000h
jmp start ;nhảy đến chương trình chính
;Bắt đầu
chương trình chính
org 0100h
string1a:db ' !!XIN CHAO!! '
db 0
string1b:db '!! XIN CHAO !! '
db 0
string2:db ' tat ca cac ban..
. '
db 0
string3:db ' Day la tieu luan '
db 0
string4:db ' cua
Ngoc Phuc !'
db 0
string5:db 'Em ten la:'
db 0
string6:db '*Le N
goc Phuc*'
db 0
string7:db '*Ma So Sinh Vien*'
db 0
string8: db
' 0782743 '
db 0
string9: db ' Lop 5CDCQDT09'
db 0
string10: d
b 'Truong Cong Nghiep'
db 0
string11: db 'TP Ho Chi Minh.'
db 0
s
tring12: db 'Em chan thanh'
db 0
string13: db 'cam on thay:'
db
0
string14: db '*TranNguyenBaoTran*'
db 0
string15: db 'da giup d
o em'
db 0
string16: db 'thuc hien tieu'
db 0
string17: db 'luan
nay!!'
db 0
string18: db 'Cam on cac ban da'
db 0
string19: db
'quan tam theo doi'
db 0
string20: db ' $THE_END$ '
db 0
string
22: db 'De tai: Chay chu ',0
string23: db 'Tren man hinh LCD'
db
0
string24: db ' ung dung IC 8051'
db 0
string25: db 'mo phong
bang'
db 0
string26: db 'phan mem Proteus '
db 0
start: m
ov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS
8bit
call wrcmd ;gọi chương trình con gửi lệnh
loop: mov A,
#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:
call wrcmd ;gọi chương trình con gửi lệnh
mov R7,#2
;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp
loop2:
mov DPTR,#str
ing1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ
call wrstr ;gọi ch
ương trình con xuất dòng chữ tới LCD
mov DPTR,#200 &nb s
p; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS
ca
ll wtms ;Gọi chương trình con đợi 200mS
mov A,#LCD_CLS ;Xóa mà
n hình LCD
mov DPTR,#string1b
call wrstr
mov DPTR,#200
call
wtms
mov A,#LCD_CLS ; Xóa màn hình LCD
call wrcmd
djnz R7,loo
p2 ; lặp lại 2 lần
mov DPTR,#string1a
call wrstr
mov DPTR,#400
call wtms
mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 4
0H vào A
call wrcmd
mov DPTR,#string2
call wrslow
mov DPTR,#2
00
call wtms
mov A,#LCD_CLS ;Clear screen
mov A,#LCD_SETDDAD
DR+64 ; ;Đưa giá trị lệnh 40H vào A
call wrcmd
mov A,#LC
D_CLS ;Clear screen
call wrcmd
mov DPTR,#string3
call wrslow
mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A
call
wrcmd
mov DPTR,#string4
call wrslow
mov A,#LCD_CLS
mov A,#LCD_
SETDDADDR+64
call wrcmd
mov A,#LCD_CLS
call wrcmd
mov DPTR,#st
ring5
call wrslow
mov A,#LCD_SETDDADDR+64
call wrcmd
mov DPTR,
#string6
call wrslow
mov A,#LCD_CLS
mov A,#LCD_SETDDADDR+64
ca
ll wrcmd
mov A,#LCD_CLS
call wrcmd
mov DPTR,#string7
call wrsl
ow
mov A,#LCD_SETDDADDR+64
call wrcmd
mov DPTR,#string8
call
wrslow
mov A,#LCD_CLS
mov A,LCD_SETDDADDR+64
call wrcmd
mov A,
#LCD_CLS
call wrcmd
mov DPTR,#string9
lcall delay1
mov DPTR,#s
tring10
lcall delay1
mov DPTR,#string11
lcall delay1
mov DPTR,
#string22
lcall delay1
mov DPTR,#string23
lcall delaylc
mov DP
TR,#string24
lcall delay1
mov DPTR,#string25
lcall delaylc
mov
DPTR,#string26
acall delay1
mov DPTR,#string12
lcall delay1
m
ov DPTR,#string13
lcall delaylc
mov DPTR,#string14
lcall delay1
mov DPTR,#string15
lcall delaylc
mov DPTR,#string16
lcall del
ay1
mov DPTR,#string17
lcall delaylc
mov DPTR,#string18
lcall
delay1
mov DPTR,#string19
lcall delaylc
mov R7,#20
loop1:
mov
DPTR,#string20
call wrstr
mov DPTR,#1000
call wtms
mov A,#LC
D_CLS ;Clearscreen
call rcmd
mov DPTR,#string20
call wrstr
m
ov DPTR,#1000
call wtms
mov A,#LCD_CLS ;Clear screen
call wrc
md
djnz R7,loop1
mov DPTR,#string20
call wrstr
mov DPTR,#400
call wtms
mov A,#LCD_SETDDADDR+64
call wrcmd
;******************
*************************
mov A,#LCD_SETVISIBLE+7;Show theblink
cursor as well.
call wrcmd
mov DPTR,#2000
call wtms
mov A,#L
CD_CLS ;Clear screen
call wrcmd
jmp loop
;Chương trình con
viết chuỗi ký tự trong DPTR
wrstr: mov R0,#LCD_DATA_WR
w
rstr1: clr A
movc A,@A+DPTR
jz wrstr2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
pop DPH
pop DPL
jmp wrstr1
wrstr2
: ret
;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký
tự nhảy ra
wrslow: mov R0,#LCD_DATA_WR
wrslw1: clr A
movc A,@A+D
PTR
jz wrslw2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push
DPH
mov DPTR,#100
call wtms
pop DPH
pop DPL
jm
p wrslw1
wrslw2: ret
;chương trình con gởi một lệnh trong than
h chứa A ra LCD:
wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa
chỉ WR lệnh vào R0
movx @R0,A ;xuất lệnh nằm trong thanh chứa A
ra LCD
jmp wtbusy ;Kiểm tra LCD bận
;chương trình con ghi mộ
t ký tự lên LCD:
wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ W
R dữ liệu vào R0
movx @R0,A ;xuất ký tự nằm trong thanh chứa A r
a LCD
;Chương trình con đợi LCD hết bận
wtbusy: mov R1,#LCD_BUSY_
RD
movx A,@r1
jb ACC.7,wtbusy
ret
;Chương trình con đợi tổng số
giây có trong thanh chúa A
wtsec: push ACC
call wtms
pop ACC
dec A
jnz wtsec
ret
;Chương trình con đợi tổng số mS có trong
con trỏ DPTR
wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC
DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng
xrl DPH,#0FFh ;and
incrementing instead.
inc DPTR
wtms1: mov TL0,#low(-1200) ;100 x
ung = 1ms ở tần số thạch anh 1.2MHz
mov TH0,#high(-1200)
mov TM
OD,#1 ;Timer 0 mode 1
setb TCON.4 ;Timer 0 runs
wtms2: jnb TC
ON.5,wtms2
clr TCON.4 ;Timer 0 stops
clr TCON.5
inc DPTR
mo
v A,DPL
orl A,DPH
jnz wtms1
ret
delaylc:
call wrslow
mo
v A,#LCD_SETDDADDR+64
call wrcmd
ret
delay1:
call wrslow
mov
A,#LCD_CLS
mov A,#LCD_SETDDADDR+64
call wrcmd
mov A,#LCD_CLS
call wrcmd
ret
END
5. Chạy mô phỏng:
Read more: http://www.ant7.com/forum/forum_post.asp?TID=5630#ixzz0VyWvlEck