Tải bản đầy đủ (.pdf) (46 trang)

Lập trình c cho vi điều khiển 8051 điều khiển sensor DS18B20

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (920.36 KB, 46 trang )



TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
KHOA VẬT LÝ




TỐNG THỊ ÁNH



ĐIỀU KHIỂN LCD DÙNG PIC 18F4520



KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC







HÀ NỘI, 2014


TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
KHOA VẬT LÝ





TỐNG THỊ ÁNH



ĐIỀU KHIỂN LCD DÙNG PIC 18F4520
Chuyên ngành: Vật lý Kỹ thuật


KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Người hướng dẫn khoa học:
ThS. PHÙNG CÔNG PHI KHANH




HÀ NỘI, 2014


LỜI CẢM ƠN
Sau một thời gian nghiên cứu, em đã hoàn thành khóa luận tốt nghiệp
với đề tài “Điều khiển LCD dùng PIC 18F4520”. Em xin được bày tỏ lòng
biết ơn sâu sắc và lời cảm ơn chân thành đến ThS.Phùng Công Phi Khanh đã
hướng dẫn và chỉ bảo em tận tình trong suốt quá trình nghiên cứu để hoàn
thành khóa luận tốt nghiệp của mình.
Em xin chân thành cảm ơn trường ĐHSP Hà Nội 2, ban chủ nhiệm
khoa Vật lý, tổ Sư phạm Kỹ thuật và các thầy cô giáo trong khoa đã giúp đỡ
em trong suốt quá trình học tập tại khoa.

Đồng thời, em cũng gửi lời cảm ơn tới gia đình, bạn bè đã luôn bên em,
giúp đỡ, động viên em trong suốt quá trình học tập và hoàn thành bài khóa
luận tốt nghiệp.
Em xin chân thành cảm ơn!

Hà Nội, tháng 5 năm 2014
Sinh viên

Tống Thị Ánh








LỜI CAM ĐOAN

Em xin cam đoan rằng số liệu và kết quả nghiên cứu trong khóa luận
này là trung thực và không trùng lặp với các đề tài khác. Em xin cam đoan
rằng mọi sự giúp đỡ cho việc thực hiện khóa luận này đã được cảm ơn và các
thông tin trích dẫn trong khóa luận này đã được chỉ rõ nguồn gốc.

Hà Nội, tháng 5 năm 2014
Sinh viên

Tống Thị Ánh















MỤC LỤC

Trang
Phần I: Mở đầu 5
1. Lí do chọn đề tài 5
2. Mục đích và nhiệm vụ nghiên cứu 6
3. Đối tượng và phạm vi nghiên cứu 6
4. Phương pháp nghiên cứu 6
5. Kết cấu khóa luận 7
Phần II: Nội dung 8
Chƣơng I: Tổng quan về vi điều khiển PIC 8
1.1. PIC là gì? 8
1.2. Các dòng PIC và cách lựa chọn vi điều khiển PIC 8
1.2.1. Các dòng PIC 8
1.2.2. Cách lựa chọn một vi điều khiển PIC 9
1.3. Ngôn ngữ lập trình cho PIC 9
1.4. Mạch nạp cho PIC 9
Chƣơng II: Tổng quan về vi điều khiển PIC 18F4520 11

2.1. Sơ đồ chân vi điều khiển PIC 18F4520 11
2.2. Các thông số về vi điều khiển PIC 18F4520 11
2.3. Sơ đồ khối của vi điều khiển PIC 18F4520 13
Chƣơng III: Tổng quan về LCD 16x2 14
3.1. Các chân điều khiển LCD 15
3.2. Chức năng các chân của LCD 17
3.3. Kết nối màn hình LCD 18
3.4. Các thanh ghi và tổ chức bộ nhớ LCD 16x2 19
3.4.1. Display Data Ram (DDRAM) 20


3.4.2. Character Generator Ram (CGRAM) 20
3.4.3. Bộ nhớ CGROM 21
3.5. Các lệnh cơ bản của LCD 22
3.6. Kết nối LCD với vi điều khiển PIC 18F4520 27
3.7. Khởi tạo LCD 29
3.7.1.Mạch khởi tạo bên trong chíp HD44780 30
3.7.2. Khởi tạo bằng lệnh 30
Chƣơng IV: Ứng dụng của vi điều khiển PIC 18F4520 34
4.1. Yêu cầu 34
4.2. Thiết kế mạch điện mô phỏng 35
4.2.1. Thiết kế phần cứng 35
4.2.2. Thiết kế phần mềm 36
Phần III: Kết luận 43
Tài liệu tham khảo














5

PHẦN I: MỞ ĐẦU
1. Lí do chọn đề tài
Ngày nay, với sự phát triển vượt bậc của khoa học kĩ thuật và điện tử
thì việc sử dụng các thiết bị điện tử có ý nghĩa rất quan trọng trong đời sống
sinh hoạt cũng như sản xuất. Ngày càng có nhiều sản phẩm kĩ thuật ra đời đáp
ứng được nhiều nhu cầu và lợi ích của con người. Hòa cùng xu hướng đó vi
điều khiển đã khẳng định được vị thế vững chắc của mình trong nhiều
ứng dụng.
Các thiết bị vi điều khiển có nhiều ứng dụng rộng rãi với ưu điểm nhỏ
gọn, linh hoạt và có thể điều khiển dễ dàng. Vi điều khiển ngày càng chiếm
lĩnh và đóng vai trò cực kì quan trọng trong kĩ thuật điều khiển và tự động
hóa. Ví dụ như: Việc sử dụng những biển quảng cáo, những thiết bị đèn chiếu
sáng, hay việc chạy các dòng chữ trên biển quảng cáo,…
Hiện nay, trên thị trường có rất nhiều họ vi điều khiển như: 8051,
Motorola 68HC, AVR, ARM,… Ngoài họ 8051 đã được hướng dẫn cơ bản ở
môi trường đại học thì việc lựa chọn vi điều khiển PIC để mở rộng kiến thức
và phát triển các ứng dụng trên công cụ này là vô cùng hợp lí vì họ vi điều
khiển này có thể tìm mua dễ dàng ở Việt Nam, giá thành không quá đắt, có
đầy đủ tính năng của một vi điều khiển hoạt động độc lập,… Số lượng người
sử dụng vi điều khiển PIC hiện nay tại Việt Nam cũng như trên thế giới ngày

càng nhiều.
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng
trong rất nhiều các ứng dụng của vi điều khiển. LCD có rất nhiều ưu điểm so
với các dạng hiển thị khác: Nó có khả năng hiển thị kí tự đa dạng, trực quan
(chữ, số và kí tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao
thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ thống và giá thành rẻ,…
6

Vì vậy sau một thời gian học tập và nghiên cứu về vi điều khiển PIC,
em đã lựa chọn đề tài “ĐIỀU KHIỂN LCD DÙNG PIC 18F4520”.
2. Mục đích và nhiệm vụ nghiên cứu
- Mục đích:
+ Tìm hiểu về vi điều khiển PIC
+ Tìm hiểu về màn hình tinh thể lỏng LCD
+ Nghiên cứu ứng dụng của vi điều khiển PIC trong việc hiển thị dữ liệu
lên LCD
- Nhiệm vụ:
+ Tìm hiểu tổng quan vi điều khiển PIC 18F4520
+ Tìm hiểu LCD 16x2 sử dụng chíp HD44780
+ Học cách lập trình C cho vi điều khiển PIC 18F4520
+ Biết cách lập trình hiển thị trên LCD dùng PIC 18F4520
3. Đối tƣợng và phạm vi nghiên cứu
- Đối tượng nghiên cứu:
+ Lập trình C cho vi điều khiển PIC 18F4520 điều khiển LCD
+ Họ vi điều khiển PIC
+ Màn hình tinh thể lỏng LCD 16x2
- Phạm vi nghiên cứu:
+ Vi điều khiển dòng PIC 18F4520
+ Màn hình tinh thể lỏng LCD 16x2
4. Phƣơng pháp nghiên cứu

- Phương pháp nghiên cứu lí thuyết
- Thảo luận và đánh giá
- Phương pháp thực nghiệm


7

5. Kết cấu khóa luận
* Cấu trúc khóa luận gồm 4 chương:
Chương I: Tổng quan về vi điều khiển PIC
Giới thiệu chung về vi điều khiển PIC: Hiểu được các dòng PIC và cách
lựa chọn vi điều khiển PIC; ngôn ngữ lập trình cho PIC và mạch nạp PIC.
Chương II: Tổng quan về vi điều khiển PIC 18F4520
Tìm hiểu những nét cơ bản về vi điều khiển PIC 18F4520: Tìm hiểu về
sơ đồ chân, sơ đồ khối và các thông số của vi điều khiển PIC 18F4520.
Chương III: Tổng quan về LCD 16x2
Tìm hiểu cơ bản về LCD 16x2: Chức năng các chân của LCD, các
thanh ghi và tổ chức bộ nhớ LCD; các lệnh cơ bản của LCD; việc kết nối
LCD với vi điều khiển PIC 18F4520.
Chương IV: Ứng dụng của vi điều khiển PIC 18F4520
Giới thiệu ứng dụng cụ thể của vi điều khiển PIC 18F4520 trong việc
điều khiển LCD 16x2.













8

PHẦN II: NỘI DUNG
CHƢƠNG I: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC
1.1. PIC là gì?
- PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch
là “máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho
vi điều khiển đầu tiên của họ.
- PIC 1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi điều
khiển CP 1600. Vi điều khiển này sau đó được nghiên cứu phát triển thêm và
từ đó hình thành nên dòng vi điều khiển PIC ngày nay.
1.2. Các dòng PIC và cách lựa chọn vi điều khiển PIC
1.2.1. Các dòng PIC
- Các kí hiệu của vi điều khiển PIC:
+ PIC 12xxxx: Độ dài lệch 12 bit.
+ PIC 16xxxx: Độ dài lệch 14 bit.
+ PIC 18xxxx: Độ dài lệch 16 bit.
+ C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM).
+ F: PIC có bộ nhớ flash.
+ LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp.
+ LV: Tương tự như LF, đây là kí hiệu cũ.
- Bên cạnh đó một số vi điều khiển có kí hiệu xxFxxx là EEPROM, nếu
có thêm chữ A ở cuối là flash (ví dụ PIC 16F877 là EEPROM, còn PIC
16F877A là flash).
- Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC. Ở Việt
Nam phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip sản xuất.




9

1.2.2. Cách lựa chọn một vi điều khiển PIC
- Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng
dụng. Có nhiều vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi
điều khiển chỉ có 8 chân, ngoài ra còn có các vi điều khiển 28, 40, 44,…chân.
- Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương
trình được nhiều lần hơn.
- Tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong
vi điều khiển, các chuẩn giao tiếp bên trong.
- Sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều khiển
cho phép.
- Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC có thể
được tìm thấy trong cuốn sách “Select PIC guide” do nhà sản xuất Microchip
cung cấp.
1.3. Ngôn ngữ lập trình cho PIC
- Trình dịch cho PIC rất đa dạng, từ các trình dịch sử dụng ngôn ngữ lập
trình cấp thấp như MPLAB ASM (được cung cấp miễn phí bởi nhà sản xuất
Microchip) đến các trình dịch sử dụng các ngôn ngữ lập trình cấp cao hơn
như C, Basic, Pascal,… Ngoài ra còn có một số trình dịch sử dụng ngôn ngữ
lập trình được phát triển dành riêng cho PIC như PICBasic, MikroBasic,…
- Ở đề tài này tôi đã tìm hiểu những tính năng và công cụ chính của
MPLAB Cxx, đây là trình dịch sử dụng ngôn ngữ lập trình C.
1.4. Mạch nạp cho PIC
- Đây là một dòng sản phẩm rất đa dạng dành cho vi điều khiển PIC. Có
thể sử dụng các mạch nạp được cung cấp bởi nhà sản xuất là hãng Microchip
như: PICSTART plus, MPLAB ICD2, MPLAB PM3, PRO MATE.

- Có thể dùng các sản phẩm này để nạp cho vi điều khiển khác thông
qua chương trình MPLAB. Dòng sản phẩm chính thống này có ưu thế là nạp
10

được cho tất cả các vi điều khiển PIC, tuy nhiên giá thành rất cao và thường
gặp rất nhiều khó khăn trong quá trình mua sản phẩm. Ngoài ra do tính năng
cho phép nhiều chế độ nạp khác nhau, còn có rất nhiều mạch nạp được thiết
kế dành cho vi điều khiển PIC.
- Có thể sơ lược một số mạch nạp cho PIC như sau:
+ JDM programmer: Mạch nạp này dùng chương trình nạp Icprog cho
phép nạp các vi điều khiển PIC có hỗ trợ tính năng nạp chương trình điện áp
thấp ISCSP (In Circuit Serial Programming). Hầu hết các mạch nạp đều hỗ
trợ tính năng nạp chương trình này.
+ WARP-13A và MCP-USB: Hai mạch này giống với mạch nạp
PICSTARTPLUS do nhà sản xuất Microchip cung cấp, tương thích với trình
biên dịch MPLAB, nghĩa là ta có thể trực tiếp dùng chương trình MPLAB để
nạp cho vi điều khiển PIC mà không cần sử dụng một chương trình nạp khác,
chẳng hạn như Icprog.
+ P16PRO40: Mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng.
Ông còn thiết kế cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng
chương trình nạp Icprog.
+ Mạch nạp Universal của Williem: Đây không phải là mạch nạp
chuyên dụng dành cho PIC như P16PRO40.
- Các mạch nạp kể trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn
toàn có thể tự lắp ráp một cách dễ dàng, và mọi thông tin về sơ đồ mạch nạp,
cách thiết kế, thi công, kiểm tra và chương trình nạp đều dễ dàng tìm được và
download miễn phí thông qua mạng Internet. Tuy nhiên các mạch nạp trên có
nhược điểm là hạn chế về số vi điều khiển được hỗ trợ, bên cạnh đó mỗi mạch
nạp cần được sử dụng với một chương trình nạp thích hợp.


11

CHƢƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC 18F4520
2.1. Sơ đồ chân vi điều khiển PIC 18F4520

Hình 2.1. Sơ đồ chân vi điều khiển PIC 18F4520
2.2. Các thông số về vi điều khiển PIC 18F4520
- CPU tốc độ cao có 75 cấu trúc lệnh, nếu được cho phép có thể kéo dài
đến 83 cấu trúc lệnh.
- Hầu hết các cấu trúc lệnh chỉ mất một chu kỳ máy, ngoại trừ lệnh rẽ
nhánh chương trình mất hai chu kỳ máy.
- Tốc độ làm việc: Xung clock đến 40MHz, tốc độ thực thi lệnh 125ns.
- Bộ nhớ chương trình (flash program memory) là 32 kbyte.
- Bộ nhớ dữ liệu SRAM là 1536 byte.
- Bộ nhớ dữ liệu EEPROM là 256 byte.
- 5 port vào hoặc ra.
- 4 bộ timer.
- 1 capture/compare/PWM modules.
- 1 enhanced capture/compare/PWM modules.
12

- Giao tiếp nối tiếp: MSSP, enhanced USART.
- Cổng giao tiếp song song.
- 13 bộ Analog to Digital module 10 bit.
- POR, BOR.
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
+ Bộ nhớ Flash có khả năng ghi xóa được 100.000 lần.
+ Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần.
+ Flash/Dữ liệu bộ nhớ EEPROM có thể lưu trữ hàng 100 năm.
+ Khả năng tự nạp chương trình với sự điều khiển của phần mềm.

+ Watchdog timer với bộ dao động trong.
+ Chức năng bảo mật mã chương trình.
+ Chế độ SLEEP.
+ Có thể hoạt động với nhiều dạng Oscillator khác nhau.














13

2.3. Sơ đồ khối của vi điều khiển PIC 18F4520


14

CHƢƠNG III: TỔNG QUAN VỀ LCD 16x2
* Giới thiệu về LCD 16x2

Hình 3.1. LCD 16x2
- LCD 16x2 là loại màn hình tinh thể lỏng nhỏ dùng để hiển thị dòng chữ

hoặc số trong bảng mã ASCII. Không giống với các loại LCD lớn, LCD 16x2
được chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một kí tự
ASCII. Cũng vì lí do chỉ hiển thị được kí tự ASCII nên loại LCD này được
gọi là Text LCD (để phân biệt với Graphic LCD có thể hiển thị hình ảnh).
Mỗi ô của Text LCD bao gồm các “chấm” tinh thể lỏng, việc kết hợp “ẩn” và
“hiện” các chấm này sẽ tạo thành một kí tự cần hiển thị. Trong các Text LCD,
các mẫu kí tự được định nghĩa sẵn. LCD 16x2 là loại có 2 dòng và mỗi dòng
có thể hiển thị tối đa 16 kí tự.
- Text LCD có hai cách giao tiếp cơ bản là nối tiếp và song song. Trong
phạm vi bài này tôi chỉ giới thiệu loại giao tiếp song song, cụ thể là LCD
16x2 điều khiển bởi chip HD44780 của hãng Hitachi.
- Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780)
bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được
đánh số thứ tự và đặt tên như hình 3.2 :
15



Hình 3.2. Các chân của LCD HD44780
3.1. Các chân điều khiển LCD
- Các chân điều khiển việc đọc và ghi LCD bao gồm RS, R/W và EN:
+ RS (chân số 4): Chân lựa chọn thanh ghi (Select Register), chân này
cho phép lựa chọn một trong hai thanh ghi IR hoặc DR để làm việc. Vì cả hai
thanh ghi này đều được kết nối với các chân Data của LCD nên cần một bit để
lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR được chọn và nếu RS=1 thanh
ghi DR được chọn. Chúng ta đều biết thanh ghi IR là thanh ghi chứa mã lệnh
cho LCD, vì thế nếu muốn gửi một mã lệnh đến LCD thì chân RS phải được
reset về 0. Ngược lại, khi muốn ghi mã ASCII của kí tự cần hiển thị lên LCD
thì chúng ta sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân RS được
mô tả trong hình 3.3.


Hình 3.3. Hoạt động của chân RS
16

+ R/W (chân số 5): Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0
thì dữ liệu sẽ được ghi từ bộ điều khiển ngoài (vi điều khiển 18F4520 chẳng
hạn) vào LCD. Nếu R/W=1 thì dữ liệu sẽ được đọc từ LCD ra ngoài. Tuy
nhiên, chỉ có duy nhất một trường hợp mà dữ liệu có thể đọc từ LCD ra, đó là
đọc trạng thái LCD để biết LCD có đang bận hay không (cờ Busy Flag- BF).
Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều khiển), vì
thế một cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta phải
chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác
mới sẽ được gán cho LCD. Vì thế khi làm việc với Text LCD chúng ta nhất
thiết phải có một chương trình con tạm gọi là wait_LCD để chờ cho đến khi
LCD rảnh. Có hai cách để viết chương trình wait_LCD. Cách 1 là đọc bit BF
về kiểm tra và chờ BF=0, cách này đòi hỏi lệnh đọc từ LCD về bộ điều khiển
ngoài, do đó chân R/W cần được nối với bộ điều khiển ngoài. Cách 2 là viết
một hàm delay một khoảng thời gian cố định nào đó (tốt nhất là trên 1 ms).
Ưu điểm của cách 2 là sự đơn giản vì không cần đọc LCD, dó đó chân R/W
không cần sử dụng và luôn được nối với GND. Tuy nhiên, nhược điểm của
cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ làm chậm quá trình
thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị.
+ EN (chân số 6): Chân cho phép LCD hoạt động (Enable), chân này
cần được kết nối với bộ điều khiển để cho phép thao tác LCD. Để đọc và ghi
data từ LCD chúng ta cần tạo một “xung cạnh xuống” trên chân EN. Nói theo
cách khác, muốn ghi dữ liệu vào LCD trước hết cần đảm bảo rằng chân
EN=0, tiếp đến xuất giữ liệu các chân D0:7, sau đó set chân EN lên 1 và cuối
cùng là xóa EN về 0 để tạo một xung cạnh xuống.




17

3.2. Chức năng các chân của LCD 16x2
- LCD thường sử dụng 14 chân, chế độ 16 chân khi cần điều khiển đèn
nền. Chức năng của các chân như sau:

Chân

hiệu
Mô tả
1
Vss
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này
với GND của mạch điều khiển.
2
VDD
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân
này với VCC=5V của mạch điều khiển.
3
VEE
Điều chỉnh độ tương phản của LCD.
4
RS
Chân chọn thanh ghi (Register select). Nối chân RS với
logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi:
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR
của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa
chỉ của LCD (ở chế độ “đọc” - read).
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu

DR bên trong LCD.
5
R/W
Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với
logic “1” để LCD ở chế độ đọc.
6
E
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên
bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung
cho phép của chân E:
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển
vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một
xung (high-to-low transition) của tín hiệu chân E.
18


- Trong một số LCD 2 chân LED nền được đánh số 15 và 16 nhưng
trong một số trường hợp 2 chân này được ghi là A (Anode) và K (Cathode).
3.3. Kết nối màn hình LCD

Hình 3.4. Kết nối màn hình LCD
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7
khi phát hiện cạnh lên (low-to-high transition) ở chân E và
được LCD giữ ở bus đến khi nào chân E xuống mức thấp.
7 - 14
DB0-
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin với
MPU. Có 2 chế độ sử dụng 8 đường bus này:

+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với
bit MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4
tới DB7, bit MSB là DB7.
15
-
Nguồn dương cho đèn nền.
16
-
GND cho đèn nền.
19

- Hình trên mô tả kết nối LCD với chế độ 16 chân, hai chân K và A
dùng để kết nối với đèn nền.
- Chân 1 và chân 2 là các chân nguồn, được nối với GND và nguồn 5V.
Chân 3 là chân chỉnh độ tương phản (contrast), chân này cần được nối với
một biến trở chia áp như trong hình 3.4. Trong khi hoạt động, chỉnh để thay
đổi giá trị biến trở để đạt được độ tương phản cần thiết, sau đó giữ mức biến
trở này. Các chân điều khiển RS, R/W, EN và các đường dữ liệu được nối
trực tiếp với vi điều khiển. Tùy theo chế độ hoạt động 4 bit hay 8 bit mà các
chân từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển.
3.4. Các thanh ghi và tổ chức bộ nhớ LCD 16x2
- LCD 16x2 có 2 thanh ghi 8 bit là INSTRUCTION REGISTER (IR)
và DATA REGISTER (DR). Thanh ghi IR chứa mã lệnh điều khiển LCD và
là thanh ghi “chỉ ghi” (chỉ có thể ghi vào thanh ghi này mà không đọc được
nó). Thanh ghi DR chứa các loại dữ liệu như kí tự cần hiển thị hoặc dữ liệu
đọc ra từ bộ nhớ LCD…Cả hai thanh ghi đều được nối với các đường dữ liệu
D0D7 của Text LCD và được lựa chọn tùy theo các chân điều khiển RS,
RW. Trên thực tế để điều khiển Text LCD chúng ta không cần quan tâm tới
cách thức hoạt động của hai thanh ghi này. Vì thế cũng không cần khảo sát

chi tiết chúng.
- LCD 16x2 có 3 loại bộ nhớ, đó là bộ nhớ RAM dữ liệu cần hiển thị
DDRAM (Display Data RAM), bộ nhớ chứa ROM chứa bộ font tạo ra kí tự
CGROM (Character Generator ROM) và bộ nhớ RAM chứa bộ font tạo ra các
symbol tùy chọn CGRAM (Character Generator RAM). Để điều khiển hiển
thị Text LCD chúng ta cần hiểu tổ chức và cách thức hoạt động của các bộ
nhớ này.


20

3.4.1. Display Data RAM (DDRAM)
- DDRAM là bộ nhớ tạm chứa các kí tự cần hiển thị lên LCD. Mã này
giống với mã ASCII. Có tất cả 80 ô nhớ DDRAM, mỗi ô được chia thành hai
hàng, mỗi ô có độ rộng 8 bit và được đánh số từ 0 đến 39 cho dòng thứ nhất;
từ 64 đến 103 cho dòng thứ hai. Mỗi ô nhớ tương ứng với một ô trên màn
hình LCD. Như chúng ta đã biết LCD loại 16x2 có thể hiển thị tối đa 32 kí tự
(có 32 ô hiển thị), vì thế có một số ô nhớ của DDRAM không được sử dụng
làm các ô hiển thị. Vùng hiển thị tương ứng với cửa sổ gồm 16 ô nhớ hàng
thứ hai. Chúng ta có thể tạo hiệu ứng dịch chữ bằng cách sử dụng lệnh dịch.
Khi đó cửa sổ hiển thị sẽ dịch đem lại hiệu ứng dịch chữ.
- Chỉ có 16 ô nhớ có địa chỉ từ 0 đến 15 ô địa chỉ từ 64 đến 79 là được
hiển thị trên LCD 16x2. Vì thế muốn hiển thị một kí tự nào đó lên LCD chúng
ta cần viết kí tự đó vào DDRAM ở một trong 32 địa chỉ trên. Các kí tự nằm
ngoài 32 ô nhớ trên sẽ không được hiển thị.
- Lưu ý là để truy cập vào DDRAM thì ta phải cũng cấp địa chỉ cho AC
theo mã HEX.
3.4.2. Character Generator RAM (CGRAM)
- CGRAM là vùng nhớ chứa các symbol do người dùng tự định nghĩa,
mỗi symbol được có kích thước 5x8 và được dành cho 8 ô nhớ 8 bit. Các

symbol thường được định nghĩa trước và gọi hiển thị khi cần thiết. Vùng này
có tất cả 64 ô nhớ nên có tối đa 8 symbol có thể được định nghĩa. Lưu trữ tám
mẫu kí tự do người dùng định nghĩa. Tám mẫu kí tự này tương ứng với các
mã kí tự D7-D0 = 000*D2D1D0 (* mang giá trị tùy định 0 hay 1).




21

3.4.3. Bộ nhớ CGROM
- CGROM là vùng nhớ cố định chứa định nghĩa font cho các kí tự.
Chúng ta không trực tiếp truy xuất vùng nhớ này mà chip HD44780 sẽ tự thực
hiện khi có yêu cầu đọc font để hiển thị. Một số điều đáng lưu ý là địa chỉ font
của mỗi kí tự vùng nhớ CGROM chính là mã ASCII của kí tự đó. Ví dụ kí tự
“a” có mã ASCII là 97, tham khảo tổ chức của vùng nhớ CGROM trong hình
3.5 bạn sẽ nhận thấy địa chỉ font của “a” có 4 bit thấp là 0001 và 4 bit cao là
0110, địa chỉ tổng hợp là 01100001 = 97.
- CGROM và DDRAM được tự động phối hợp trong quá trình hiển thị
của LCD. Giả sử chúng ta muốn hiển thị kí tự “a” tại vị trí đầu tiên, dòng thứ
hai của LCD thì các bước thực hiện sẽ như sau: Trước hết chúng ta biết rằng
vị trí đầu tiên của dòng hai có địa chỉ là 64 trong bộ nhớ DDRAM (xem hình
3.5), vì thế chúng ta sẽ ghi vào ô nhớ có địa chỉ 64 một giá trị là 97 (mã
ASCII của kí tự “a”). Tiếp theo, chip HD44780 đọc giá trị 97 này và coi như
là địa chỉ của vùng nhớ CGROM, nó sẽ tìm đến vùng nhớ CGROM có địa chỉ
97 và đọc bảng font đã được định nghĩa sẵn ở đây. Sau đó xuất bản font này
ra các “chấm” trên màn hình LCD tại vị trí đầu tiên của dòng hai trên LCD.
Đây chính là cách mà hai bộ nhớ DDRAM và CGROM phối hợp với nhau để
hiển thị các kí tự. Như mô tả, công việc của người lập trình điều khiển LCD
tương đối đơn giản, đó là viết mã ASCII vào bộ nhớ DDRAM tại đúng vị trí

được yêu cầu, bước tiếp theo sẽ do HD44780 đảm nhiệm.






22

- Các giá trị lưu trong bộ nhớ này như sau:

Hình 3.5. Vùng nhớ CGROM
- Chúng ta muốn hiển thị chữ “CE” ở giữa hàng đầu tiên, giả sử cửa sổ
hiển thị đang bắt đầu từ vị trí đầu tiên (hàng thứ nhất hiển thị dữ liệu của ô
nhớ từ 0x00 đến 0x0f, hàng thứ hai hiển thị dữ liệu của ô nhớ từ 0x40 đến
0x4f, đây là vị trí home). Giá trị của ô nhớ 0x07 là 0x43 (kí tự C), của ô nhớ
0x08 là 0x45 (kí tự E).
3.5. Các lệnh cơ bản của LCD
- Để truyền lệnh cho LCD thì chân RS = 0, khi đó các tín hiệu trên D0-
D7 được xem là lệnh. Ý nghĩa của các lệnh điều khiển LCD như sau:
23


Lệnh

RS

RW

D7


D6

D5

D4

D3

D2

D1

D0
Thời
gian
thực
thi
Clear display
0
0
0
0
0
0
0
0
0
1
1.52m

s
Return home
0
0
0
0
0
0
0
0
1
*
1.52m
s
Entry mode set
0
0
0
0
0
0
0
1
I/D
RL
37µs
Display on/off
control
0
0

0
0
0
0
1
D
C
B
37µs
Cursor/Display
shift
0
0
0
0
0
1
S/C
R/L
*
*
37µs
Function set
0
0
0
0
1
DL
N

F
*
*
37µs
Set CGRAM
address
0
0
0
1
CGRAM address
37µs
Set DDRAM
address
0
0
1
DDRAM address
37µs
Read BUSY flag
(BF)
0
1
BF
DDRAM address
0µs
Write to
DDRAM or
CGRAM
1

0
D7
D6
D5
D4
D3
D2
D1
D0
43µs
Read from
DDRAM or
CGRAM
1
1
D7
D6
D5
D4
D3
D2
D1
D0
43µs

×