You are on page 1of 5

Q1. Cho màn hình LCD ký tự 16x2 HD44780 tiêu chuẩn với giao diện 4 và 8 bit .

i) Mô tả chức năng từng chân của HD44780.


ii) Mô tả lệnh em cần để bật màn hình LCD khi tắt con trỏ gạch dưới. Chính xác những gì
sẽ phải được gửi đến mỗi chân của HD44780?
iii) Thiết bị này hỗ trợ cả 4 và 8-bit chế độ.
(1) Các chế độ đó khác nhau như thế nào ?
(2) Ưu điểm của việc sử dụng mỗi chế độ là gì? Làm thế nào để em sử dụng chế độ ?

i) Chức năng của mỗi chân của HD44780 như sau:


VSS (Ground): Chân này được kết nối đến đất của hệ thống.
VDD (Power supply): Chân này được kết nối đến nguồn cung cấp điện cho LCD (5V).
V0 (Contrast): Chân này được sử dụng để điều chỉnh độ tương phản của LCD.
RS (Register Select): Chân này được sử dụng để chọn kiểu đăng ký truyền vào cho LCD
(đăng ký lệnh hoặc đăng ký dữ liệu).
R/W (Read/Write): Chân này được sử dụng để chỉ định hoạt động truyền dữ liệu đến
hoặc đọc dữ liệu từ LCD.
E (Enable): Chân này được sử dụng để kích hoạt LCD. 7-14. D0-D7 (Data): Chân này được
sử dụng để truyền dữ liệu 8-bit đến hoặc từ LCD (sử dụng giao diện 8-bit). 7, 9, 10, 11.
D4-D7 (Data): Chân này được sử dụng để truyền dữ liệu 4-bit đến hoặc từ LCD (sử dụng
giao diện 4-bit).
A (Anode): Chân này được kết nối đến một điện trở đẩy để cung cấp ánh sáng nền cho
LCD.
K (Cathode): Chân này được kết nối đến đất của hệ thống và được sử dụng để hoàn
thành mạch ánh sáng nền của LCD.

ii)
Để bật màn hình LCD và tắt con trỏ gạch dưới, chúng ta cần gửi lệnh tới HD44780. Lệnh
đó là: 0b00001100
Đây là lệnh 8-bit và nó sẽ được gửi đến HD44780 thông qua giao diện 4-bit hoặc 8-bit.
Để gửi lệnh này, chúng ta cần gán các giá trị tương ứng cho các chân của HD44780 như
sau:
RS = 0 (đăng ký lệnh)
R/W = 0 (ghi dữ liệu)
D4-D7 hoặc D0-D7 (tùy thuộc vào giao diện) = 0b00001100
Sau khi các giá trị này được gán cho các chân của HD44780, ta cần đợi khoảng thời gian
tối thiểu 40us trước khi gửi lệnh tiếp theo. Sau đó, màn hình LCD sẽ được bật và con trỏ
gạch dưới sẽ biến mất.
iii)
Chế độ giao diện 4-bit và 8-bit cho phép truyền dữ liệu từ hệ thống tới màn hình LCD.
Tuy nhiên, chế độ 4-bit chỉ sử dụng 4 chân dữ liệu (D4-D7) của HD44780, trong khi đó,
chế độ 8-bit sử dụng 8 chân dữ liệu (D0-D7). Do đó, chế độ 8-bit cho phép truyền dữ liệu
nhanh hơn và chất lượng hiển thị cũng tốt hơn so với chế độ 4-bit.
Ưu điểm của sử dụng chế độ 4-bit là tiết kiệm số chân truyền dữ liệu và giảm độ phức
tạp của mạch điều khiển. Tuy nhiên, tốc độ truyền dữ liệu sẽ chậm hơn so với chế độ 8-
bit. Ưu điểm của sử dụng chế độ 8-bit là tốc độ truyền dữ liệu nhanh hơn và chất lượng
hiển thị cũng tốt hơn.
Để sử dụng chế độ 4-bit hoặc 8-bit, ta cần gán giá trị tương ứng cho các chân D0-D7 của
HD44780. Nếu sử dụng chế độ 4-bit, ta sẽ gán giá trị cho chân D4-D7 và chân D0-D3 sẽ
không được sử dụng. Nếu sử dụng chế độ 8-bit, ta sẽ gán giá trị cho tất cả các chân D0-
D7. Sau đó, ta gửi lệnh tới HD44780 để thiết lập chế độ truyền dữ liệu là 4-bit hoặc 8-bit.
Để thiết lập chế độ 4-bit, ta gửi lệnh 0b0010 tới HD44780 và để thiết lập chế độ 8-bit, ta
gửi lệnh 0b0011 tới HD44780.
Q2. Thiết kế lớp cho màn hình LCD 16x2. Hãy bắt đầu bằng định nghĩa tất cả các dữ liệu
và chức năng của lớp nhưng không cần phải viết mã thực hiện nó tại thời điểm này. Hãy
trả lời các câu hỏi khi thiết kế: người dùng có thể muốn làm gì? Làm thế nào họ có thể
muốn làm điều đó? Nếu họ chỉ muốn in một chuỗi thì sao? Điều gì sẽ xảy ra nếu họ chỉ
muốn viết một ký tự tại một vị trí nhất định? Còn các ký tự không phải ASCII thì sao?
Làm cho giao diện của em linh hoạt nhất có thể mà không cần quá phức tạp hóa mọi
thứ. Chất lượng thiết kế lớp (và việc triển khai nó sau này) sẽ chiếm một phần lớn trong
điểm đánh giá.
● Đối với câu hỏi này, chúng tôi chỉ yêu cầu những điều cơ bản—đưa các ký tự lên màn
hình một cách hợp lý. Chưa cần các chức năng phức tạp như cuộn, nhấp nháy con trỏ.
● Lưu ý: Đừng dựa vào hàm tạo ra bởi Arduino—hãy gọi một hàm khởi tạo cụ thể (ít
nhất là đối với việc sử dụng các chân I/O). Thiết kế lớp này phải là thiết kế mà em có thể
giao cho một nhóm khác và họ có thể hiểu và tiếp tục viết mã cho nó.

Để thiết kế lớp cho màn hình LCD 16x2, ta cần trả lời các câu hỏi sau:
- Người dùng có thể muốn làm gì?
Hiển thị các thông tin như văn bản, số liệu, ký tự, đồ thị trên màn hình LCD.
- Làm thế nào họ có thể muốn làm điều đó?
Sử dụng các phương thức để hiển thị dữ liệu lên màn hình LCD, bao gồm:
+ Phương thức để in một chuỗi lên màn hình LCD
+ Phương thức để viết một ký tự tại một vị trí nhất định trên màn hình LCD
+ Phương thức để in ký tự tùy chỉnh lên màn hình LCD
+ Phương thức để xoá màn hình LCD
+ Phương thức để di chuyển con trỏ đến một vị trí cụ thể trên màn hình LCD
- Nếu họ chỉ muốn in một chuỗi thì sao?
Sử dụng phương thức in một chuỗi lên màn hình LCD, đưa vào tham số là chuỗi cần in.
- Điều gì sẽ xảy ra nếu họ chỉ muốn viết một ký tự tại một vị trí nhất định?
Sử dụng phương thức để viết một ký tự tại một vị trí nhất định trên màn hình LCD, đưa
vào tham số là ký tự cần viết và vị trí cần viết.
- Còn các ký tự không phải ASCII thì sao?
Các ký tự không phải ASCII cần được chuyển đổi sang mã ASCII trước khi hiển thị lên
màn hình LCD. Ta có thể tạo các bảng mã tương ứng để chuyển đổi các ký tự này.
- Làm cho giao diện linh hoạt nhất có thể mà không cần quá phức tạp hóa mọi thứ.
Thiết kế lớp cần đơn giản và dễ hiểu để các nhóm khác có thể tiếp tục viết mã cho nó.
Nên tạo các phương thức đơn giản và rõ ràng để các nhóm khác có thể sử dụng dễ dàng.
Ngoài ra, nên chú ý đến việc tối ưu hóa mã để tránh tình trạng trùng lặp và làm tăng độ
phức tạp của mã.
Q3. Thiết kế lớp điều khiển robot bằng bàn phím. Hãy bắt đầu bằng mô tả ý tưởng mà
em muốn điều khiển rô-bốt bằng bàn phím, điều khiển cả hướng và tốc độ một cách
linh hoạt. Chẳng hạn, người dùng sẽ có thể cần điều hướng robot qua các điểm chật hẹp
với độ chính xác khá cao đồng thời dễ dàng di chuyển nhanh khi ở không gian rộng. Ghi
chú cụ thể cách giao diện của em
sẽ hoạt động thật chi tiết để nếu em cung cấp thiết kế của mình cho người khác và họ có
thể điều khiển rô-bốt mà không cần đặt câu hỏi trước. Lưu ý rằng không có yêu cầu bất
kỳ loại mã nào vào thời điểm này.
Lưu ý: Hãy thiết kế lớp này với tư cách là người dùng, không phải là lập trình viên.

Giao diện của em sẽ bao gồm các phím sau:


+Phím mũi tên lên: để di chuyển robot về phía trước
+Phím mũi tên xuống: để di chuyển robot về phía sau
+Phím mũi tên trái: để di chuyển robot sang trái
+Phím mũi tên phải: để di chuyển robot sang phải
+Phím +/-: để tăng hoặc giảm tốc độ di chuyển của robot
Khi người dùng nhấn các phím di chuyển, một tín hiệu sẽ được gửi đến robot để di
chuyển robot theo hướng tương ứng. Khi người dùng nhấn phím +/-, tốc độ di chuyển
của robot sẽ được tăng hoặc giảm tùy thuộc vào phím được nhấn.
Ngoài ra, em cũng sẽ cung cấp một phím dừng để người dùng có thể ngừng di chuyển
robot bất cứ lúc nào.
Với thiết kế này, người dùng có thể dễ dàng điều khiển robot một cách linh hoạt và chính
xác với các phím mũi tên và phím +/-, cũng như dễ dàng dừng robot bằng phím dừng.

Q4. Bit banging …


i) Kỹ thuật “bit bang” là gì?
ii) Chương trình của em trên Arudino sẽ được thực hiện thông qua kỹ thuật “bit
banging” hay sử dụng phần cứng chuyên dụng kết nối với màn hình LCD?
iii) Bộ xử lý trong Arduino có giao diện phần cứng chuyên dụng nào hỗ trợ kết nối với
LCD?
iv) Nhược điểm chính của kỹ thuật “bit bang” là gì?
v) Đối với những loại giao diện nào thì các nhược điểm ở IV có thể chấp nhận được?

i) Kỹ thuật "bit bang" là một phương pháp lập trình để giao tiếp với các thiết bị ngoại vi
như màn hình LCD, cảm biến hoặc bất kỳ thiết bị nào có giao tiếp đơn giản thông qua
các tín hiệu số. Thay vì sử dụng các giao tiếp phần cứng như I2C hay SPI, phương pháp
này sử dụng các chân I/O kỹ thuật số của vi điều khiển để giao tiếp với thiết bị ngoại vi
bằng cách đọc và ghi trực tiếp các tín hiệu điện.
ii) Chương trình của em có thể sử dụng cả hai phương pháp giao tiếp với màn hình LCD,
tùy thuộc vào việc em lựa chọn cách thiết kế giao tiếp với LCD của mình. Nếu sử dụng
các chân I/O kỹ thuật số để giao tiếp trực tiếp với LCD thông qua các tín hiệu điện, thì đó
là kỹ thuật "bit bang". Nếu sử dụng phần cứng chuyên dụng như chân I2C hoặc SPI trên
vi điều khiển để giao tiếp với màn hình LCD, thì đó là giao tiếp phần cứng.
iii) Arduino không có giao diện phần cứng chuyên dụng nào để hỗ trợ kết nối với LCD.
Tuy nhiên, một số mạch mở rộng (shield) cho phép kết nối với các giao diện LCD thông
qua các chân I/O của Arduino.
iv) Nhược điểm chính của kỹ thuật "bit bang" là tốc độ truyền dữ liệu chậm hơn so với
sử dụng các giao diện phần cứng chuyên dụng, do quá trình xử lý dữ liệu phải được thực
hiện bằng phần mềm. Điều này có thể dẫn đến giảm hiệu suất và độ ổn định của ứng
dụng.
v) Các nhược điểm của kỹ thuật "bit bang" có thể chấp nhận được đối với những loại
giao diện có tốc độ truyền dữ liệu thấp và không yêu cầu tần số làm mới cao, chẳng hạn
như giao diện LCD thông thường với tốc độ truyền dữ liệu thấp và tần số làm mới màn
hình thấp. Tuy nhiên, đối với các giao diện yêu cầu tốc độ truyền dữ liệu cao hoặc tần số
làm mới cao hơn, việc sử dụng kỹ thuật "bit bang" có thể gây ra các vấn đề về hiệu suất
và độ ổn định.

You might also like