Mã Arduino cho màn hình LCD Nokia 5110
Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng màn hình LCD Nokia 5110 với Arduino để hiển thị nhiều loại đồ họa và văn bản. Dự án sẽ minh họa cách vẽ đường thẳng, hình tròn, hình chữ nhật và thậm chí hiển thị văn bản bên trong các hình dạng đó. Đến cuối bài, bạn sẽ hiểu rõ hơn về cách tương tác với màn hình LCD này bằng mã Arduino.

Để có hướng dẫn rõ ràng hơn, tôi khuyến khích bạn xem video liên quan để có hình ảnh trực quan về cách đấu dây và triển khai mã (trong video tại 00:00).
Phần cứng được giải thích
Màn hình LCD Nokia 5110 là một màn hình đồ họa nhỏ gọn hoạt động trên giao thức SPI, cho phép giao tiếp hiệu quả với Arduino. Nó có độ phân giải 84x48 pixel, đủ để hiển thị đồ họa và văn bản cơ bản. Màn hình chỉ cần một vài chân để hoạt động, khiến nó trở thành lựa chọn tuyệt vời cho các dự án có ít tùy chọn I/O.
Ngoài màn hình LCD, bạn sẽ cần một bo mạch Arduino, thường là Arduino Uno hoặc tương tự, một breadboard và một số dây jumper. Việc đấu dây khá đơn giản và màn hình LCD được cấp nguồn bằng cách kết nối chân VCC của nó với đầu ra 5V của Arduino.
Chi tiết từ bảng dữ liệu
| Nhà sản xuất | Philips |
|---|---|
| Số linh kiện | PCD8544 |
| Điện áp logic/I/O | 3,3 V |
| Điện áp cấp nguồn | 3,3 – 5,0 V |
| Dòng điện tối đa | 200 µA |
| Độ phân giải màn hình | 84 x 48 pixel |
| Giao diện | Nối tiếp (SPI) |
| Kiểu đóng gói | Module |
- Sử dụng điện trở giới hạn dòng cho chân LED để tránh hư hỏng.
- Đảm bảo các kết nối với VCC và GND chắc chắn để tránh sự cố hiển thị.
- Kiểm tra kỹ các kết nối chân SPI: SCE, RST, D/C, DN và SCLK.
- Giữ cài đặt độ tương phản trong phạm vi khuyến nghị (40-60).
- Cập nhật màn hình sau khi vẽ đồ họa để thấy các thay đổi.
Hướng dẫn đấu dây

Để đấu dây màn hình LCD Nokia 5110 với Arduino của bạn, hãy làm theo các kết nối sau:
- Kết nối chân
VCCcủa màn hình LCD với chân5Vtrên Arduino. - Kết nối chân
GNDtrên màn hình LCD với một trong các chânGNDcủa Arduino. - Kết nối chân
SCEtrên màn hình LCD với chân7trên Arduino. - Kết nối chân
RSTvới chân6. - Kết nối chân
D/Cvới chân5. - Kết nối chân
DN (MOSI)với chân11. - Kết nối chân
SCLKvới chân13. - Cuối cùng, kết nối chân
LEDvới chân9thông qua một điện trở 330 ohm.
Các kết nối này sẽ cho phép Arduino giao tiếp hiệu quả với màn hình LCD. Nếu bạn cần điều chỉnh cách đấu dây cho thiết lập cụ thể của mình, hãy đảm bảo các chân SPI vẫn nhất quán.
Ví dụ mã và hướng dẫn chi tiết
Đoạn mã sau khởi tạo màn hình LCD và đặt độ tương phản:
void setup() {
Serial.begin(9600);
lcdBegin(); // Khởi tạo màn hình LCD
setContrast(40); // Đặt mức độ tương phản
delay(2000);
clearDisplay(BLACK); // Xóa màn hình
updateDisplay(); // Cập nhật màn hình
}
Trong đoạn mã này, hàm lcdBegin() thiết lập các chân cần thiết cho màn hình LCD, trong khi setContrast(40) điều chỉnh độ tương phản của màn hình. Sau một khoảng trễ ngắn, màn hình được xóa để chuẩn bị cho nội dung mới.

Tiếp theo, chúng ta có thể vẽ một đường thẳng trên màn hình:
setLine(1, 4, 70, 4, BLACK); // Vẽ một đường thẳng ngang
updateDisplay(); // Làm cho đường thẳng hiển thị
Dòng mã này sử dụng hàm setLine(), nhận tọa độ điểm bắt đầu và điểm kết thúc cùng với tham số màu. Sau khi vẽ, điều quan trọng là gọi updateDisplay() để phản ánh các thay đổi trên màn hình.
Cuối cùng, chúng ta có thể hiển thị văn bản bên trong một hình chữ nhật:
setRect(10, 10, 70, 40, 1, BLACK); // Vẽ một hình chữ nhật đặc
setStr("Robojax ", 15, 20, WHITE); // Hiển thị văn bản bên trong
updateDisplay(); // Cập nhật để hiển thị các thay đổi
Ở đây, setRect() tạo một hình chữ nhật, trong khi setStr() đặt văn bản bên trong nó. Các tham số màu xác định cách hình chữ nhật và văn bản xuất hiện trên màn hình.
Trình diễn / Điều gì sẽ xảy ra
Khi chạy mã, bạn sẽ thấy một loạt đồ họa được hiển thị trên màn hình LCD Nokia 5110, bao gồm các đường thẳng, hình tròn, hình chữ nhật và văn bản. Đảm bảo đấu dây của bạn chính xác để tránh các sự cố như đảo cực hoặc đầu vào trôi nổi, có thể ngăn màn hình hoạt động (trong video tại 02:30).
Mốc thời gian video
- 00:00 - Giới thiệu về dự án
- 01:30 - Hướng dẫn đấu dây
- 03:00 - Thiết lập mã và giải thích
- 05:00 - Hiển thị đồ họa và văn bản
- 07:30 - Kết luận và các sửa đổi tiếp theo
/*
* This is Arduino code to use a dual-axis XY joystick with a Nokia 5110 LCD.
* It also reads a switch.
* Other Arduino libraries and videos: https://robojax.com
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/Pk5Wig5EO0s
*
* Get this code and other Arduino codes from Robojax.com.
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase my course on Udemy.com: http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this. You can support me on Patreon: http://robojax.com/L/?id=63
or make a donation using PayPal: http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact. *
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Nokia 5110 LCD Example Code
Graphics driver and PCD8544 interface code for SparkFun's
84x48 Graphic LCD.
https://www.sparkfun.com/products/10168
Original source code:
https://github.com/sparkfun/GraphicLCD_Nokia_5110
This stuff could all be put into a library, but we wanted to
leave it all in one sketch to keep it as transparent as possible.
Hardware: (Note: most of these pins can be swapped)
Graphic LCD Pin ---------- Arduino Pin
1-VCC ---------------- 5V
2-GND ---------------- GND
3-SCE ---------------- 7
4-RST ---------------- 6
5-D/C ---------------- 5
6-DN(MOSI) ---------------- 11
7-SCLK ---------------- 13
8-LED - 330 Ohm res -- 9
The SCLK, DN(MOSI), must remain where they are, but the other
pins can be swapped. The LED pin should remain a PWM-capable
pin. Don't forget to stick a current-limiting resistor in line
between the LCD's LED pin and Arduino pin 9!
Modified by Ahmad S. for Robojax.com
on Mar 11, 2018 at 20:49 in Ajax, Ontario, Canada
*/
#include <SPI.h>
#include "robojax-nokia5110.h"
void setup()
{
Serial.begin(9600);
lcdBegin(); // This will setup our pins, and initialize the LCD
//updateDisplay(); // with displayMap untouched, SFE logo
setContrast(40); // Good values range from 40-60
delay(2000);
clearDisplay(BLACK);
updateDisplay();
}
void loop()
{
// setPixel takes 2 to 3 parameters. The first two parameters
// are x and y variables. The third optional parameter is
// a "color" boolean. 1 for black, 0 for white.
// setPixel() with two variables will set the pixel with
// the color set to black.
// clearPixel() will call setPixel with the color set to
// white.
// setPixel(random(0, LCD_WIDTH), random(0, LCD_HEIGHT));
// After drawing something, we must call updateDisplay()
// to actually make the display draw something new.
//invertDisplay(); // This will swap all bits in our display
// setLine(x0, y0, x1, y1, bw) takes five parameters. The
// first four are coordinates for the start and end of the
// line. The last parameter is the color (1=black, 0=white).
setLine(1, 4, 70, 4, BLACK);
updateDisplay();
delay(2000);
//analogWrite(blPin, i); // blPin is connected to BL LED
/* setRect Example */
clearDisplay(WHITE); // Start fresh
// setCircle takes 5 parameters -- x0, y0, radius, bw, and
// lineThickness. x0 and y0 are the center coordinates of the circle.
// radius is the...radius. bw is the color (0=white, 1=black)
// lineThickness is the line width of the circle, 1 = smallest
// thickness moves in towards the center.
setCircle(20, 30, 20, BLACK, 2);
updateDisplay();
delay(2000);
clearDisplay(WHITE);
setStr("Welcome to ", 0, 0, BLACK);
updateDisplay();
delay(100);
setLine(0, 9, 70, 9, BLACK);
updateDisplay();
delay(100);
setStr("Robojax ", 20, 20, BLACK);
updateDisplay();
delay(2000);
clearDisplay(WHITE);
// setRect takes six parameters (x0, y0, x1, y0, fill, bw)
// x0, y0, x1, and y0 are the two diagonal corner coordinates
// fill is a boolean, which determines if the rectangle is
// filled in. bw determines the color 0=white, 1=black.
setRect(10, 10, 70, 40, 1, BLACK);
setStr("Robojax ", 15, 20, WHITE);
updateDisplay();
delay(2000);
/* setCircle Example */
clearDisplay(WHITE);
}
Nghĩ bạn có thể cần
-
Amazon
-
AmazonPurchase XY joystick from Amazonamzn.to
Tài nguyên & tài liệu tham khảo
Chưa có tài nguyên nào.
Tập tin📁
Tệp Yêu Cầu (.h)
-
robojax-nokia5110.h header file for Arduino
robojax-nokia5110.zip0.01 MB
Tập tin Fritzing
-
Nokia 5110 LCD
Nokia_5110_LCD.fzpz0.03 MB -
Black Joystick KY-023
Black Joystick KY-023.fzpz0.02 MB