Cách điều khiển màn hình nokia 5110

Trước đó trong blog này, một số màn hình/chỉ báo LCD và cách sử dụng chúng từ Arduino đã được đề cập. Hạn chế đáng kể của chúng là kích thước và trọng lượng khá lớn. Thường thì đây không phải là một vấn đề. Ví dụ: nếu bạn đang lắp ráp một trạm hàn DIY trong một hộp tự chế, thì bằng cách nào đó, kích thước màn hình không quan trọng. Mặt khác, nếu bạn cần một màn hình trên một chiếc máy bay bốn cánh, thì trọng lượng và kích thước trở nên quan trọng. Vì vậy, hôm nay chúng ta sẽ học cách làm việc với màn hình rất nhỏ và nhẹ của điện thoại Nokia 5110.

Ghi chú: Các bài đăng khác về chủ đề màn hình - Học cách hiển thị văn bản trên chỉ báo LCD từ Arduino, Về cách sử dụng 1602 màn hình với bộ chuyển đổi I2C, Làm việc với LCD dựa trên HD44780 không có thư viện và Nhiệt kế kỹ thuật số từ ma trận LCD, TMP36 và Arduino.

Đừng lo lắng, bạn sẽ không phải mua Nokia 5110, loại máy thực tế không tồn tại ngày nay, hãy lấy màn hình ra khỏi nó và vứt bỏ tất cả các bộ phận khác. Màn hình Nokia 5110 là một mô-đun độc lập rất phổ biến dành cho những người nghiệp dư về radio và có giá từ 2 USD đến 5 USD, tùy thuộc vào cửa hàng. Ở Nga, mô-đun này có thể được mua, ví dụ: trên tpai.ru, arduino-kit.ru, amperkot.ru, compacttool.ru, chipster.ru hoặc electromicro.ru. Và tất nhiên, màn hình được bán với giá thấp nhất trên AliExpress, nhưng bạn sẽ phải đợi một hoặc hai tháng cho đến khi chúng từ Trung Quốc đến.

Như thường lệ trong thế giới Arduino, đã có sẵn các thư viện dành cho mô-đun và nhiều hơn một thư viện. Tôi thích thư viện LCD5110 được đăng trên trang web rinkydinkelectronics.com. Thư viện này có hai phiên bản. Cái đầu tiên được gọi là LCD5110_Basic. Nó đơn giản hơn và chỉ có thể hiển thị văn bản ở các phông chữ có kích thước khác nhau. Có thể tạo phông chữ của riêng bạn. Phiên bản thứ hai được gọi là LCD5110_Graph. Nó có tất cả các khả năng của thư viện đầu tiên và ngoài chúng ra, nó còn có thể vẽ các đoạn, hình chữ nhật, hình tròn, v.v.

Với mục đích của bài đăng này, LCD5110_Basic sẽ được sử dụng. Cả hai thư viện đều được ghi chép đầy đủ và có nhiều ví dụ về cách sử dụng, vì vậy nếu cần LCD5110_Graph, bạn có thể dễ dàng tự mình tìm ra. Tuy nhiên, điều đáng lưu ý là để LCD5110_Basic biên dịch mà không có cảnh báo, tôi đã phải thực hiện một vài chỉnh sửa nhỏ đối với mã của nó.

Vì vậy, một ví dụ về việc sử dụng thư viện:

#bao gồm

bên ngoài uint8_t BigNumbers ;
bên ngoài uint8_t MediumNumbers ;
bên ngoài uint8_t SmallFont ;

/* SCK / CLK, MOSI / DIN, DC, RST, CS */
LCD5110 LCD(2, 3, 4, 6, 5);

thiết lập trống()
{
lcd.InitLCD();
}

int ctr = 0;
vòng lặp trống()
{
lcd.clrScr();

Lcd.setFont(BigNumbers);
lcd.printNumI(ctr, RIGHT, 0);

Lcd.setFont(MediumNumbers) ;
lcd.printNumF(12.34, 2, RIGHT, 24);

Lcd.setFont(SmallFont) ;
lcd.print ("Dòng 1", 0, 8 * 0);
lcd.print("Dòng 2", 0, 8 * 1);
lcd.print ("Dòng 3", 0, 8 * 2);
lcd.print ("L 4", 0, 8 * 3 );
lcd.print ("L 5", 0, 8 * 4 );
lcd.print ("0123456789ABCD", 0, 8 * 5);

Ctrl + = 5 ;
nếu (ctr >= 1000 )
ctr = 0;

Độ trễ (500);
}

Nó trông như thế nào trong hành động:

Tôi hy vọng không cần phải nhai mã. Xin lưu ý rằng mô-đun này được cấp nguồn 3,3 V, nhưng nó hiểu các lệnh từ Arduino một cách bình thường mà không cần bất kỳ bộ chuyển đổi mức logic nào. Theo đó, chúng tôi kết nối các chân VCC (nguồn) và BL (đèn nền) với 3,3 V, kết nối GND với đất và kết nối năm chân còn lại với các chân kỹ thuật số Arduino. Chúng tôi chuyển số pin cho hàm tạo lớp LCD5110 theo các nhận xét trong mã đã cho.

Đơn giản phải không? Bạn có thể tìm thấy mã nguồn đầy đủ cho bài đăng này trong kho GitHub này. Những bổ sung và câu hỏi, như mọi khi, đều được chào đón theo mọi cách có thể.

Phép cộng: Tác giả của thư viện làm việc với màn hình Nokia 5110 cũng là tác giả của thư viện OLED_I2C, được thiết kế để hoạt động với các màn hình OLED phổ biến không kém với giao diện I2C. Bạn có thể tìm thấy ví dụ về cách sử dụng OLED_I2C trong bài viết Sử dụng cần điều khiển Sega Genesis trong các dự án Arduino. Như bạn có thể mong đợi, hai thư viện có giao diện tương tự nhau.

Philips PCD8544.
Để kết nối mô-đun với các thiết bị khác, bo mạch chứa một phích cắm đầu nối và các lỗ để hàn dây. Ngoài ra còn có 4 lỗ gắn nằm ở các góc của bo mạch.
Màn hình đơn sắc của Nokia 5110 LCD (màn hình xanh) có đèn nền LED xanh lam. Qua nhiều năm sản xuất, Nokia 5110 đã được sử dụng và sử dụng trong rất nhiều ứng dụng. Mô-đun hiển thị tạo điều kiện thuận lợi cho việc kết nối và cài đặt Nokia vào thiết bị. Nhờ mô-đun này, lần làm quen đầu tiên của một kỹ sư điện tử hoặc lập trình viên với màn hình LCD Nokia 5110 được đơn giản hóa. Ban đầu được sử dụng làm chỉ báo điện thoại di động, màn hình đã lan rộng sang các loại thiết bị khác. Nó rất thuận tiện để sử dụng trong các dụng cụ đo lường: vôn kế, ampe kế, ohmmeter và các dụng cụ khác. Màn hình này cũng hữu ích để hiển thị các kết quả đọc từ thiết bị di động y tế. Thật thú vị khi sử dụng nó cho thang đo của máy thu radio hoặc chỉ báo mức tín hiệu trong thiết bị tái tạo âm thanh. Màn hình có độ phân giải 84x48 pixel cho phép bạn hiển thị thông tin tượng trưng và đồ họa.
Nếu bạn đã có kinh nghiệm với Nokia 3310 LCD thì sẽ dễ dàng làm chủ được Nokia 5110 LCD vì các chỉ báo này được xây dựng trên cùng một bộ điều khiển PCD8544.

Thông số kỹ thuật mô-đun LCD Nokia 5110

Dinh dưỡng
điện áp 2,7…3,3 V
hiện hành
đèn nền tắt 5 mA
đèn nền trên 20 mA

Nhiệt độ không khí trong quá trình hoạt động 0…50
Nhiệt độ bảo quản -10…70

Chỉ báo LCD Nokia 5110

Các đặc điểm chính

Thành phần chính của mô-đun LCD Nokia 5110 là đèn báo LCD. Nó có bộ tạo điện áp cung cấp và độ lệch của các phần tử LCD tích hợp, đồng thời có đèn nền LED. Giao diện SPI để nhập thông tin. Nokia 5110 có thể hoạt động ở 4 chế độ: bình thường, đảo ảnh, màn hình trống và “tất cả dấu chấm trên”. Người dùng cũng có thể kiểm soát nhiệt độ, điện áp cung cấp và độ lệch.

Dinh dưỡng
điện áp 2,7…3,3 V
dòng điện lên tới 320 µA
Tần số đồng hồ lên tới 4 MHz
Đặt lại thời gian ít nhất 100 ns

Cấu trúc hiển thị

Màn hình hiển thị là một ma trận gồm các phần tử LCD và vi mạch PCD8544 để điều khiển chúng, nằm trong một vỏ gắn trên bảng. Nó cũng chứa bốn đèn LED màn hình. Thông tin về trạng thái của các điểm hiển thị được lưu trữ trong RAM của bộ điều khiển PCD8544, mỗi điểm tương ứng với một bit bộ nhớ. Ngoài ra còn có bộ đếm địa chỉ tích hợp, bộ đếm này sẽ tự động tăng lên khi byte thông tin tiếp theo được ghi vào bộ nhớ.

Điều khiển hiển thị

Được thực hiện thông qua giao diện SPI, màn hình là một thiết bị phụ. Tuy nhiên, thay vì bốn dòng điều khiển thông thường thì chỉ có ba dòng. Đây là đồng hồ CLK, lựa chọn chip SCE và các dòng dữ liệu đầu vào MOSI. Không có dòng đầu ra MISO. Điều này dẫn đến nhu cầu sử dụng các phương pháp quản lý đặc biệt, chi tiết hơn về điều này bên dưới. Giao diện hoạt động ở chế độ SPI-0 hoặc SPI-3. Nokia 5110 còn có thêm dòng điều khiển Thông tin/Lệnh - D/C̅. Mỗi byte được gửi tới màn hình có thể được hiểu là một lệnh hoặc một byte thông tin, tùy thuộc vào cấp độ trên dòng D/C̅.
Truyền thông tin là một chiều và dữ liệu không thể được đọc từ bộ nhớ và thanh ghi hiển thị. Vì vậy, chương trình phải cung cấp khả năng kiểm soát trạng thái hiển thị. Tuy nhiên, có một đặc điểm nữa khiến việc quản lý trở nên phức tạp. Tính năng này liên quan đến việc tổ chức bộ nhớ.

Bộ nhớ bao gồm sáu ngân hàng, mỗi ngân hàng chứa 84 ô có dung lượng 1 byte.

Đánh địa chỉ từng pixel chỉ báo. Tổng cộng chúng tôi có 84x48 pixel, được sắp xếp thành 6 dãy ngang (từ 0 đến 5) và 84 cột.

Mỗi dãy chứa 8 pixel được sắp xếp theo chiều dọc, tổng cộng sáu dãy sẽ tạo ra 48 dòng. Hình này cho thấy cách một pixel nhất định sẽ được hiển thị từ RAM trên màn hình; mỗi dòng trong hình đại diện cho một ngân hàng.
Thông tin được ghi vào bộ nhớ theo từng byte chứ không phải từng bit và không có cách nào để kiểm soát từng điểm mà chỉ có nhóm tám điểm. Điều này, kết hợp với thực tế là không thể đọc được thông tin từ bộ nhớ LCD Nokia 5110, có nghĩa là trước khi gửi, cần phải nhớ dữ liệu nào được lưu trong ô nào. Nếu không, thông tin có thể bị mất khi dữ liệu mới được gửi tới màn hình. Đặc điểm này được minh họa bằng hình ảnh thể hiện sự thay thế của một biểu tượng. Khi viết chương trình điều khiển cần cung cấp khả năng lưu trữ dữ liệu.

Thay ký hiệu L bằng ký hiệu A.

Màn hình có kích thước 84x48 pixel. Thông tin được xuất ra ở dạng khối dọc cao 8 pixel, các giá trị của khối này được xác định bởi các giá trị bit trong byte đầu ra. Bit ít quan trọng nhất mã hóa pixel trên cùng.
Giả sử nhìn về phía trước các mô tả của các lệnh. Các lệnh 1xxxxxxx và 01000yyy xác định tọa độ con trỏ - dòng và vị trí mà 8 bit dữ liệu tiếp theo sẽ được hiển thị. Sau khi byte được xuất ra, con trỏ sẽ tự động được di chuyển đến vị trí liền kề.
Nếu chế độ địa chỉ ngang V=0 được chọn bằng lệnh 00100PDVH, con trỏ sẽ di chuyển sang phải và byte dữ liệu tiếp theo sẽ được hiển thị ở vị trí liền kề bên phải. Khi đến cạnh phải của màn hình, con trỏ sẽ di chuyển về đầu dòng tiếp theo. Nếu chọn địa chỉ dọc V=1 thì con trỏ sẽ di chuyển xuống dòng tiếp theo và sau dòng cuối cùng, con trỏ sẽ di chuyển một vị trí nằm ngang sang phải và được đặt ở dòng trên cùng.
Là bộ nhớ trung gian, bạn có thể sử dụng bộ nhớ của bộ điều khiển điều khiển, bộ nhớ này sẽ lưu trữ bản sao dữ liệu trên màn hình. Trước khi gửi, cần điều chỉnh dữ liệu, tùy thuộc vào thông tin nào được lưu trong bộ nhớ trung gian.

Các lệnh điều khiển Nokia 5110

Màn hình được điều khiển bằng cách gửi một từ lệnh qua giao diện SPI. Kích thước từ là 1 byte. Các lệnh điều khiển được chia thành 3 loại.

Chức năng quản lý tối cao

Đặt loại chức năng - cho biết loại chức năng nào mô-đun sẽ hoạt động, cơ bản hoặc nâng cao.
Đặt chế độ nguồn - bật hoặc tắt nguồn.
Đặt chế độ địa chỉ - xác định loại địa chỉ bộ nhớ: dọc hoặc ngang. Trong trường hợp đầu tiên, sau khi ghi một byte dữ liệu, bộ đếm địa chỉ Y sẽ tăng lên, nghĩa là quá trình ghi sẽ tiến hành theo cột. Trong phần thứ hai - bộ đếm địa chỉ X, bản ghi sẽ đi theo từng dòng.
Các chức năng được chuyển sang Nokia 5110 LCD khi đường D/C̅ ở mức thấp. Chúng được xác định bởi một từ lệnh duy nhất. Từ này phải được gửi đến màn hình khi bắt đầu hoạt động. Định dạng:

0 0 1 0 0 PD V H

Bit PD xác định chế độ nguồn, được đặt thành PD có nghĩa là chế độ tắt nguồn.
Chế độ địa chỉ bit V: 1 - dọc, 0 - ngang.
Bit H là loại hàm sẽ được sử dụng cho công việc tiếp theo: 0 - bình thường, 1 - mở rộng.
Như bạn có thể thấy, cần phải nhớ trạng thái hiện tại của màn hình để khi thiết lập một giá trị tham số mới, bạn không bị mất thông tin về các giá trị của người khác. Lệnh 00100PDVH có trong cả hai bộ lệnh.

Chức năng chính

Đặt chế độ hiển thị thành 00001D0E. Xác định chế độ hiển thị: màn hình trống, bật tất cả các điểm, hiển thị bình thường, hiển thị nghịch đảo. E - dấu hiệu đảo ngược hình ảnh, D - đầu ra hình ảnh. Nếu D=0 thì màn hình hoàn toàn rõ ràng E=0 hoặc hoàn toàn đen E=1.
Đặt lệnh địa chỉ X 1xxxxxxx hoặc 0x80 + x lựa chọn vị trí nằm ngang trong dòng hiện tại nơi hình ảnh sẽ được hiển thị. Trong đó x=0 là vị trí ngoài cùng bên trái, 83 là vị trí ngoài cùng bên phải.
Lệnh địa chỉ SetY 01000yyy đặt địa chỉ Y của ô nơi byte tiếp theo sẽ được ghi. Lệnh hoặc 0x40+y chọn số dòng (trang) mà hình ảnh được hiển thị. Y=0 là dòng trên cùng, 5 là dòng dưới cùng. Đường này cao 8 điểm.

Các tính năng tiên tiến

Bộ lệnh mở rộng được chọn sau khi lệnh 00100PDV1 được gửi.
Cài đặt chế độ nhiệt độ. Lệnh 000001tt hoặc 0x04 + t chọn một trong bốn chế độ hiệu chỉnh nhiệt độ. Tùy thuộc vào chế độ, điện áp hiển thị sẽ thay đổi khác nhau khi nhiệt độ thay đổi.
Đặt điện áp phân cực của các thành phần hiển thị LCD. Lệnh 00010bbb hoặc 0x10 + b chọn một trong tám chế độ để tính toán độ lệch mức cho điều khiển LCD. Đối với màn hình Nokia thông thường, chế độ được khuyến nghị là 0001011 hoặc 0x13.
Đặt điện áp cung cấp cho các thành phần hiển thị LCD. Lệnh 1vvvvvvv, hoặc 0x80 + v chọn điện áp trên bộ tạo điện áp tăng áp cho LCD. Khi v=0 máy phát điện sẽ tắt. Điện áp đầu ra được tính theo công thức VLCD = 3,06 V + v * 0,06 V. Tùy thuộc vào việc lựa chọn phương pháp hiệu chỉnh điện áp, giá trị này thay đổi tùy theo nhiệt độ. Để tránh làm hỏng màn hình ở nhiệt độ thấp, giá trị này nên nhỏ hơn 8,5 V, tức là v<=90. Для обычных дисплеев Nokia это нормальное рабочее значение этого параметра примерно равно 56, т. е. команда принимает вид 10111000, или 0xB8.
Các hàm cơ bản và nâng cao dễ làm việc hơn vì mỗi hàm có từ lệnh riêng.
Cần phải nhớ rằng để hoạt động với một loại chức năng nhất định, bạn phải đặt màn hình hoạt động với các chức năng này. Nếu không, việc gửi một từ lệnh sẽ dẫn đến việc thực thi lệnh này không chính xác. Bạn có thể tìm thêm chi tiết về các lệnh điều khiển trong tài liệu ở trang 11.

Đang khởi tạo hiển thị

Phải được thực thi trong vòng 30 ms sau khi nguồn điện xuất hiện theo trình tự sau:
đặt lại bằng cách điều chỉnh mức đầu vào tương ứng ở mức thấp trong 100 ns trở lên,
bật màn hình và chọn một bộ lệnh mở rộng bằng cách gửi 0x21,
gửi lệnh bù điện áp 0x13,
cài đặt hiệu chỉnh nhiệt độ bằng lệnh 0x04,
bật máy phát điện áp cao lên mức 6,42 V bằng lệnh 0xB8,
quay lại bộ lệnh tiêu chuẩn bằng cách gửi 0x20,
bật chế độ đồ họa bằng lệnh 0x0C.
Sau các bước này, Nokia 5110 LCD đã sẵn sàng để sử dụng.

Kết nối mô-đun LCD Nokia 5110

Đầu ra tín hiệu đến các tiếp điểm của mô-đun được hiển thị trong hình ảnh ở đầu trang. Cũng có thể có sự sắp xếp khác nhau của các điểm tiếp xúc được thể hiện trong hình.

Một trong những lựa chọn cho vị trí của các liên hệ.

Tín hiệu mô-đun và đường dây

Nguồn điện VCC 3,3V
Dây chung GND
SCE Kích hoạt, hoạt động ở mức thấp
Đặt lại Đặt lại, hoạt động ở mức thấp
D/C̅ Dữ liệu/lệnh: 0 - dữ liệu, 1 - lệnh
Đầu vào giao diện SDIN
Tín hiệu đồng hồ SCLC
Đèn nền LED. Đối với các mô-đun trên bảng màu đỏ, kết nối với nguồn chung, đối với các mô-đun màu xanh, kết nối với nguồn điện. Sử dụng điện trở 330 Ohm trong mạch đèn nền. Một số sửa đổi đã được cài đặt điện trở, một số sửa đổi khác thì không. Để xác định sự hiện diện của điện trở và chọn chế độ đèn nền tối ưu, bạn nên theo dõi dòng điện của mô-đun và dòng điện của đèn nền. Nó không được vượt quá 20 mA.

Nếu không có thiết bị nào khác được kết nối với giao diện SPI của vi điều khiển, thì để lưu các tiếp điểm của mô-đun điều khiển chính của thiết bị và giảm số lượng đường truyền, chân chọn thiết bị hoạt động SCE phải được kết nối với chân GND trên mô-đun Cái bảng. Nhưng có một nhược điểm. Nếu bộ điều khiển Nokia bị mất đồng bộ với MK thì hiện tại không thể phát hiện được.
Một kết nối đáng tin cậy hơn nên được thực hiện theo cách này. Kéo đường này lên mức cao bằng điện trở 100-500 kOhm để tránh nhiễu ảnh hưởng đến bộ điều khiển khi MK ở trạng thái reset.
Khi làm việc với bộ vi điều khiển AVR, sẽ rất thuận tiện khi sử dụng giao diện USART ở chế độ chính SPI. Chế độ SPI-3 (CPHA=1, CPOL=1). Điều này có nghĩa là mặc dù không có trao đổi, đường SCLK ở mức cao và bộ điều khiển đọc dữ liệu từ đường SDIN trên cạnh lên trên đường SCLK trong 100 ns. Trong trường hợp này, chúng phải được đặt ít nhất 100 ns trước cạnh lên. Quá trình truyền được thực hiện theo 8 bit, quan trọng nhất là đầu tiên.
Mức trên dòng D/C̅ xác định cách diễn giải dữ liệu nhận được. Mức cao có nghĩa là dữ liệu được truyền sẽ được hiển thị, mức thấp có nghĩa là lệnh được truyền. Bộ điều khiển đọc giá trị trên dòng này cùng với bit cuối cùng (thấp nhất) của mỗi byte dữ liệu được truyền. Điều này có thể khó khăn khi sử dụng chuyển giao phần cứng không đồng bộ. Bạn phải đợi byte trước đó hoàn tất quá trình truyền trước khi đặt mức.

Kết nối mô-đun LCD Nokia 5110 và Arduino UNO.

Các tín hiệu đầu vào của mô-đun phải tương ứng với các mức logic của mạch được cấp nguồn bằng điện áp 3,3 V. Khi làm việc với bộ vi điều khiển có nguồn điện 5 V, phải sử dụng các mạch khớp mức.

Nghệ thuật đồ họa

Khi bắt đầu chuẩn bị hình ảnh đồ họa, bạn nên chuẩn bị hình ảnh đen trắng ở định dạng *.bmp với độ phân giải 84x48 pixel trong bất kỳ trình chỉnh sửa đồ họa nào. Chúng tôi đã chuẩn bị một bức tranh như vậy trong Paint, đây là:

Tên file ảnh phải được lưu bằng chữ cái Latin. Sử dụng chương trình

Bạn có nhớ thời mà điện thoại di động còn “sồi”, chúng có bàn phím bấm riêng và màn hình tinh thể lỏng đơn sắc nhỏ không?

Giờ đây, thị trường này thuộc về tất cả các loại iPhone, Galaxy, v.v., nhưng màn hình đang tìm ra một công dụng mới: các dự án DIY!

Màn hình đen trắng 84x48 pixel mà chúng tôi sẽ xem xét đã được sử dụng trong điện thoại Nokia 3310. Ưu điểm chính của chúng là dễ vận hành. Màn hình như vậy sẽ hoàn toàn phù hợp với dự án của bạn để trao đổi thông tin tương tác với người dùng.

Trong bài viết này, chúng ta sẽ xem xét việc điều khiển màn hình đồ họa này bằng Arduino. Tất cả các tính năng kết nối, đặc tính kỹ thuật của màn hình và chương trình cho Arduino đều được xem xét.

Vật liệu cần thiết

  • Arduino hoặc bản sao của nó.
  • Đầu nối.
  • Bảng mạch.

Thông số kỹ thuật màn hình Nokia 5110

Trước khi kết nối màn hình và lập trình Arduino, chúng ta hãy xem một số thông tin chung về nó.

Sơ đồ chân

Để kết nối và truyền dữ liệu trên màn hình, sử dụng hai hàng song song gồm 8 đầu nối. Mỗi chân được đánh dấu ở mặt sau của màn hình.


Như đã đề cập, các chân được kết nối song song với nhau. Thông tin về mục đích của từng đầu nối được đưa ra dưới đây.


Dinh dưỡng

Bạn đã nhận thấy rằng màn hình LCD 5110 có hai đầu nối nguồn. Đầu tiên là quan trọng nhất - cung cấp năng lượng cho logic hiển thị. Bảng dữ liệu cho biết nên chọn nó trong khoảng 2,7 - 3,3 V. Khi hoạt động bình thường, màn hình sẽ tiêu thụ từ 6 đến 7 mA.

Đầu nối nguồn thứ hai dùng để chiếu sáng màn hình. Nếu bạn tháo màn hình ra khỏi bảng (điều này không cần thiết, bạn chỉ cần nhìn vào hình bên dưới), bạn sẽ thấy đèn nền được thực hiện rất đơn giản: bốn đèn LED màu trắng, nằm ở các góc của bảng. Xin lưu ý rằng không có điện trở giới hạn dòng điện.


Vì vậy bạn cần phải cẩn thận hơn với chế độ ăn uống của mình. Bạn có thể sử dụng điện trở giới hạn dòng điện khi kết nối chân "LED" hoặc sử dụng điện áp nguồn tối đa 3,3 V. Đừng quên rằng đèn LED có thể hấp thụ dòng điện cao! Không giới hạn, chúng sẽ rút ra khoảng 100 mA ở điện áp cung cấp 3,3 V.

Giao diện điều khiển

Màn hình có bộ điều khiển tích hợp: Philips PCD8544, giúp chuyển đổi giao diện song song lớn thành giao diện nối tiếp thuận tiện hơn. PCD8544 được điều khiển bằng giao thức nối tiếp đồng bộ, tương tự như SPI. Lưu ý rằng có các chân bộ đếm thời gian (SCLK) và chân đầu vào dữ liệu nối tiếp (DN), cũng như lựa chọn chip hoạt động ở mức thấp (SCE).

Phía trên các đầu nối nối tiếp được xem xét, có một đầu nối khác được cài đặt - D / C, qua đó nhận được thông tin về việc dữ liệu đang được truyền có thể được hiển thị hay không.

Để biết danh sách các lệnh, hãy xem phần “Hướng dẫn” của biểu dữ liệu PCD8544 (trang 11). Có các lệnh xóa màn hình, đảo ngược pixel, tắt nguồn, v.v.

Lắp ráp và kết nối màn hình 5110

Trước khi tải bản phác thảo và truyền dữ liệu lên màn hình, bạn cần hiểu kết nối. Để làm được điều này, bạn cần giải quyết vấn đề lắp ráp và kết nối nó với Arduino.

Cuộc họp

Để “lắp ráp” màn hình, bạn có thể cần các đầu nối. 8 miếng là đủ. Bạn có thể sử dụng chân thẳng hoặc chân 90 độ. Phụ thuộc vào việc sử dụng tiếp theo. Nếu bạn định sử dụng bảng mạch, đường ray có đầu nối thẳng có thể sẽ là lựa chọn tốt nhất.

Màn hình LCD của Nokia 5110 gắn trên bảng mạch mini:


Bạn cũng có thể hàn trực tiếp bộ điều hợp vào màn hình.

Kết nối màn hình 5110 với Arduino

Trong ví dụ này, chúng tôi sẽ kết nối màn hình LCD với Arduino. Một kỹ thuật tương tự có thể dễ dàng thích ứng với các bo mạch và bộ vi điều khiển khác. Để kết nối các chân truyền dữ liệu - SCLK và DN(MOSI) - chúng tôi sử dụng chân Arduino SPI, giúp truyền dữ liệu nhanh chóng. Các chân chọn chip (SCE), đặt lại (RST) và dữ liệu/điều khiển (D/C) có thể được kết nối với bất kỳ chân kỹ thuật số nào. Đầu ra từ đèn LED được kết nối với một chân trên Arduino, hỗ trợ điều chếPWM. Nhờ đó, có thể điều chỉnh độ sáng đèn nền một cách linh hoạt.

Thật không may, điện áp cung cấp tối đa của màn hình 5110 có thể đạt tới 3,6 volt, do đó nó không thể kết nối trực tiếp với đầu ra 5 V tiêu chuẩn trên Arduino. Cần phải điều chỉnh điện áp. Theo đó, một số tùy chọn kết nối xuất hiện.

Kết nối trực tiếp với Arduino

Tùy chọn dễ nhất là kết nối trực tiếp với Arduino. Trong trường hợp này, bạn cần sử dụng bo mạch Arduino Pro 3,3V/8 MHz hoặc 3,3V Arduino Pro Mini. Tùy chọn được đề xuất dưới đây hoạt động với bo mạch Arduino 5V. Đây là một tùy chọn hoạt động nhưng tuổi thọ màn hình có thể bị giảm đi đôi chút.


Các chân được kết nối như sau:


Một lựa chọn tốt và không tốn kém để cung cấp khả năng bảo vệ bổ sung là lắp đặt các điện trở giữa các chân dữ liệu từ Arduino đến LCD 5110. Nếu bạn đang sử dụng Arduino Uno (hoặc bo mạch 5V tương tự), bạn có thể sử dụng điện trở 10k và 1k. Sơ đồ kết nối màn hình sử dụng điện trở được thể hiện ở hình bên dưới:


Cách kết nối giống như trong ví dụ đầu tiên, nhưng một điện trở được lắp trong mỗi mạch tín hiệu. Các điện trở 10 kOhm được lắp đặt giữa các chân SCLK, DN, D/C và RST. Một điện trở 1 kOhm nằm giữa chân SCE và chân 7. Chà, 330 Ohms vẫn còn giữa chân 9 và chân có đèn LED. và chân số 7.

Bộ chuyển đổi cấp độ

Tùy chọn kết nối thứ ba là sử dụng bộ chuyển đổi mức để chuyển đổi giữa 5 và 3,3 V. Với những mục đích này, bạn có thể sử dụng mô-đun Bộ chuyển đổi mức logic hai chiều hoặc TXB0104.


Thật không may, có năm đầu vào cho tín hiệu 3,3 V trên màn hình và bốn đầu vào trên bộ chuyển đổi mức. Bạn có thể để đầu ra RTS ở mức cao (bằng cách kết nối nó bằng điện trở 10k ohm). Do đó, bạn sẽ không thể kiểm soát cách màn hình khởi động lại nhưng tất cả các chức năng khác sẽ khả dụng.

Ví dụ phác thảo Arduino đầu tiên: LCD Demo

Sau khi kết nối thành công, bạn có thể tiến hành tải xuống bản phác thảo và hiển thị dữ liệu trên màn hình!

Chương trình cho Arduino

Các nhận xét trong đoạn mã trên sẽ giúp bạn hiểu được chương trình. Hầu hết hành động xảy ra trong hàm lcdFunTime().

Phác thảo đang hoạt động

Sau khi tải lên Arduino, bản phác thảo sẽ bắt đầu hoạt động và khởi chạy bản demo - một bộ hoạt ảnh tiêu chuẩn và thử nghiệm các chức năng đồ họa. Đầu tiên, hãy hiển thị một vài pixel. Sau đó, chúng ta sẽ chuyển sang hiển thị các đường thẳng, hình chữ nhật và hình tròn, tải bitmap, v.v.


Sau khi hoàn thành bản phác thảo, màn hình sẽ chuyển sang chế độ truyền dữ liệu thông qua giao thức nối tiếp. Mở màn hình nối tiếp (với tốc độ truyền 9600 bps). Những gì bạn in trên màn hình nối tiếp sẽ xuất hiện trên màn hình LCD.

Nếu bạn quan tâm đến khả năng hiển thị của hình ảnh raster, hãy đọc tiếp. Chúng ta sẽ xem xét chính xác cách bạn có thể nhập hình ảnh bitmap 84x48 của riêng mình và hiển thị nó trên màn hình.

Ví dụ thứ hai phác thảo Arduino: tải và hiển thị bitmap

Trong ví dụ này, chúng tôi sẽ tạo một bitmap 84x48 mới, tích hợp nó vào mã Arduino và gửi nó đến màn hình LCD.


Tìm/Tạo/Thay đổi bitmap

Đầu tiên, hãy tìm hình ảnh bạn muốn hiển thị trên màn hình LCD 5110. Bạn sẽ không thể mở rộng nó quá nhiều lên 84x48 pixel nhưng vẫn có thể. Dưới đây là một số ví dụ:

Sau khi chọn ảnh, bạn cần sửa lại: làm ảnh đơn sắc (màu 2 bit); giữ kích thước 84x48 pixel. Bạn có thể sử dụng hầu hết các trình chỉnh sửa hình ảnh cho việc này. Bao gồm cả Paint, nếu bạn có Windows. Lưu hình ảnh kết quả.

Chuyển đổi bitmap thành mảng

Bước tiếp theo là chuyển đổi tệp này thành mảng ký tự 504 byte. Để làm điều này, bạn có thể sử dụng các chương trình khác nhau. Ví dụ: Trợ lý LCD.

Để tải hình ảnh vào LCD Assistant, hãy đi tới Tệp > Tải hình ảnh. Một cửa sổ có hình ảnh xem trước sẽ mở ra. Đảm bảo hình ảnh có kích thước chính xác - rộng 84 pixel, cao 48 pixel và hướng Byte được đặt thành Dọc, Độ bền kích thước thành Nhỏ. Phần còn lại của cài đặt mặc định phải được đặt chính xác (8 pixel/byte)

Sau đó, chuyển đến tab Tệp > Lưu đầu ra để tạo tệp văn bản tạm thời. Mở tệp văn bản này để xem mảng mới tuyệt vời của bạn. Thay đổi kiểu mảng thành char (không phải unsigned hoặc const). Ngoài ra, hãy đảm bảo rằng mảng được đặt tên chính xác (không có dấu gạch ngang, không bắt đầu bằng số, v.v.).

Nhập vào bản phác thảo và vẽ!

Sao chép mảng đã tạo vào bản phác thảo Arduino. Bạn có thể sử dụng bản phác thảo từ ví dụ đầu tiên. Dán mảng của bạn vào bất cứ đâu. Bây giờ, để hiển thị bản phác thảo của bạn, hãy thay thế setup() và loop() trong bản phác thảo của bạn bằng các dòng bên dưới (giữ nguyên các hàm và biến khác):

// ...các biến, hằng và mảng bitmap được định nghĩa ở trên

lcdBegin(); // Thiết lập các chân và khởi tạo màn hình LCD

setContrast(60); // Điều chỉnh độ tương phản (phạm vi ưa thích là từ 40 đến 60)

setBitmap(ngọn lửaBitmap); // flameBitmap nên được thay thế bằng tên mảng của bạn

cập nhậtDisplay(); //Cập nhật màn hình để hiển thị mảng

// Các chức năng điều khiển và đồ họa trên màn hình LCD được xác định bên dưới...

Thực sự, nó trở nên tuyệt vời? Trong số những thứ khác, bạn có thể nhập nhiều hình ảnh và tạo hoạt ảnh nhỏ! Hãy thử nó, tôi chắc chắn bạn sẽ thích nó!

Liên kết để tải xuống các chương trình, thư viện và bảng dữ liệu bổ sung

Bảng dữ liệu cho màn hình LCD và trình điều khiển
  • Bảng dữ liệu LCD – Không hoàn toàn giống với 5110, nhưng rất giống nhau về thông số kỹ thuật
Thư viện và bản phác thảo Arduino
  • PCD8544 Arduino Library – Thư viện làm việc với Arduino với driver LCD PCD8544
Các chương trình tạo ảnh raster
  • TheDotFactory – Công cụ tuyệt vời để tạo mảng phông chữ tùy chỉnh

Để lại ý kiến, câu hỏi và chia sẻ kinh nghiệm cá nhân của bạn dưới đây. Những ý tưởng và dự án mới thường được nảy sinh trong các cuộc thảo luận!

Khi lắp ráp các thiết bị trên Arduino, chúng ta thường phải đối mặt với nhu cầu xuất thông tin tự động. Và, như mọi khi, tôi muốn giải pháp này không tốn kém. Và ở đây hóa ra sự lựa chọn các thiết bị rẻ tiền không phong phú lắm.

Nếu có ít thông tin hiển thị, sẽ thuận tiện hơn khi sử dụng chỉ báo bảy đoạn. Chúng rất tươi sáng và tương phản. Những thước như vậy có 4 chữ số, cao 0,36 inch trên TM1637 được bán với giá 70 xu và chỉ được điều khiển bằng 2 chân. Như bạn có thể đoán, chúng chủ yếu được thiết kế để hiển thị thời gian, mặc dù chúng có thể dễ dàng hiển thị, chẳng hạn như nhiệt độ, áp suất và các thông số khác, trong đó 4 chữ số là đủ.

Nhưng nếu có nhiều thông tin đầu ra thì chúng sẽ không hoạt động. Trong những trường hợp như vậy, màn hình LCD 1602 “dân gian” thường được sử dụng nhất, có khả năng hiển thị 2 dòng 16 ký tự với mức giá một đô la rưỡi. Bằng cách này bạn có thể hiển thị nhiều thông tin hơn.

Người anh em 4 dòng cao cấp hơn của nó sẽ hiển thị nhiều thông tin hơn nữa, nhưng nó có giá cao hơn đáng kể, khoảng 5 đô la và kích thước của nó đã khá lớn.

Tất cả các thiết bị này đều có ưu và nhược điểm. Những nhược điểm chính bao gồm thiếu hỗ trợ cho tiếng Nga, vì bảng mã được gắn chặt vào chip và không có khả năng hiển thị đồ họa. Nói đúng ra, có thể có phần mềm Cyrillic trong các thiết bị như vậy, nhưng chúng được bán chủ yếu ở Nga và với giá không hợp lý.
Nếu những nhược điểm này mang tính quyết định khi sử dụng trên thiết bị đang được tạo ra và độ phân giải 84x48 pixel ở đồ họa đen trắng phù hợp với bạn, thì bạn nên chú ý đến màn hình Nokia 5110. Ngày xưa cũng có một cái, nhưng nó rất chưa hoàn thiện và ở những nơi đã lỗi thời. Đặc biệt, ở đó có ghi rằng không thể hiển thị bảng chữ cái Cyrillic. Ngày nay không có vấn đề như vậy.

Người hùng trong bài đánh giá của chúng tôi, có giá chưa đến vài đô la, đến với tôi trong một hộp bìa cứng bền có dán màng bảo vệ trên màn hình, người bán xin cảm ơn rất nhiều. Thiết bị có bảng mạch in kích thước 45x45 mm PCB màu đỏ và màn hình LCD độ phân giải 84x48 pixel, kích thước 40x25 mm. Máy nặng 15 g, có đèn nền màu xanh lam, có thể tắt được. Đối với Arduino, màn hình này sẽ cắn đứt 5 chân kỹ thuật số, không tính nguồn điện. Bảng có 2 hàng chân song song nên bạn chỉ có thể sử dụng một hàng. Trong đó, 5 cái để điều khiển, 2 cái để cấp nguồn và một cái để bật đèn nền. Để bật đèn nền, bạn cần rút ngắn chân LIGHT xuống đất (như người ta nói, có một phiên bản khác của màn hình này - trên bảng màu xanh, nơi chân này được kết nối với nguồn điện). Bảng không được bán, hai chiếc lược được bao gồm trong bộ sản phẩm.
Vì vậy, chúng tôi kết nối các chân SCLK, DIN, DC, CE và RTS với các chân Arduino, ví dụ: 3, 4, 5, 6, 7. Chân VCC thành 3,3V (Chính xác là 3,3, không phải 5!), kết nối nối đất và tải xuống thư viện.
Các chức năng từ thư viện này cho phép bạn hiển thị các nguyên hàm đồ họa (đường thẳng, hình tròn, hình chữ nhật, v.v.), hình ảnh raster và văn bản. Thư viện chứa một ví dụ cho thấy khả năng của nó, tôi khuyên bạn nên xem nó. Nhưng để văn bản hiển thị bằng tiếng Nga, bạn sẽ phải chỉnh lại phông chữ. Nhưng may mắn thay, những người tốt bụng đã làm mọi thứ cho chúng tôi và có thể tải xuống tệp thay thế.
Tôi sẽ đưa ra một ví dụ về bản phác thảo bên dưới và có thể thấy kết quả đầu ra văn bản bằng tiếng Nga ở trên. Có thể dễ dàng tính toán rằng ở cỡ chữ nhỏ nhất (số 1), bạn có thể hiển thị 84 ký tự (14 trong 6 dòng), khá đủ để hiển thị, chẳng hạn như các thông báo chẩn đoán mở rộng. Phông chữ số 2 lớn gấp đôi.
Độ phân giải màn hình cho phép bạn hiển thị hình ảnh raster hai màu khá tốt, có thể được sử dụng làm biểu tượng trong chương trình.

Tạo các biểu tượng như vậy rất đơn giản. Dưới phần spoiler, tôi sẽ chỉ cho bạn cách thực hiện việc này.

Cách tạo nhanh hình ảnh raster bằng ví dụ về logo trang web MYSKU

Đầu tiên chúng ta hãy chụp ảnh màn hình logo (phím Print Screen).
Khởi chạy Paint từ các chương trình tiêu chuẩn và nhấn Ctrl+V. Toàn bộ màn hình có logo là do chúng tôi tùy ý sử dụng.


Chọn đoạn mong muốn và nhấn nút TRIM. Hãy lấy mảnh vỡ của chúng tôi.

Bây giờ chúng ta cần biến đoạn này thành hai màu. Bản thân sơn có thể xử lý việc này. Nhấp vào “Save As” và chọn loại “Hình ảnh đơn sắc (*.bmp)”. Chúng tôi bỏ qua cảnh báo của người biên tập và nhấp vào OK và xem hình ảnh sau:

Bây giờ chúng ta cần biến tập hợp pixel này thành một mảng mã cho Arduino. Tôi đã tìm thấy một thứ có thể giải quyết được nhiệm vụ này.
Anh ấy cần gửi tệp bmp làm đầu vào, nhưng nó phải có 256 màu! Vì vậy, chúng ta sẽ nhấp lại vào "Save As" và chọn loại "256 color bmp art". Bây giờ, hãy nhớ kích thước của các cạnh của tệp kết quả, bạn sẽ cần chỉ ra chúng trong bản phác thảo (xem trong Paint ở dưới cùng trên thanh trạng thái hoặc bằng cách mở Thuộc tính tệp -> tab Chi tiết) và đi tới trình chuyển đổi trực tuyến .


Hãy chọn tệp của chúng tôi, kiểm tra các số thập lục phân và nhấp vào CHUYỂN ĐỔI.
Hãy lấy mảng chúng ta cần:


Chúng tôi sao chép mảng này vào bản phác thảo, biên dịch nó và xem điều gì sẽ xảy ra.


Bây giờ hãy tắt đèn nền và xem hình ảnh sẽ trông như thế nào nếu không có đèn nền.


Như bạn có thể thấy, cả văn bản và biểu tượng đều có thể đọc được. Hơn nữa, ánh sáng càng sáng thì khả năng đọc càng tốt (ồ, tôi nhớ cảm giác thật thú vị khi sử dụng Nokia 1100 vào một ngày nắng, trong khi mọi người giấu chiếc điện thoại có ma trận màu trong bóng râm để quay số). Nói chung, bạn có thể sử dụng màn hình ở chế độ này nếu có đủ ánh sáng hoặc đèn nền cản trở hoặc để tiết kiệm pin. Nếu màn hình của ai đó khó nhìn, hãy thử sử dụng độ tương phản trong bản phác thảo. Độ tương phản tốt nhất có và không có đèn nền đạt được ở các giá trị khác nhau, điều này phải được tính đến.

Một ví dụ phác thảo để hiển thị văn bản và hình ảnh

#bao gồm #bao gồm // chân 3 - Đầu ra xung nhịp nối tiếp (SCLK) // chân 4 - Đầu ra dữ liệu nối tiếp (DIN) // chân 5 - Chọn dữ liệu/lệnh (D/C) // chân 6 - Chọn chip LCD (CS) // chân 7 - Đặt lại LCD (RST) Màn hình Adafruit_PCD8544 = Adafruit_PCD8544(3, 4, 5, 6, 7); const char không dấu tĩnh PROGMEM ku59x39 = ( 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x7f, 0xff, 0 xff , 0xff , 0xff, 0xff, 0xf0, 0xe0, 0x1f, 0xff, 0xff, 0xe0, 0x0, 0x3, 0xf0, 0xfc, 0xf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xff, 0x87, 0xff, 0xc0, 0x0, 0x0 , 0x7f, 0xc0, 0xff, 0xe3, 0xff, 0x0, 0x0, 0x7f, 0xff, 0x90, 0xff, 0xf1, 0xfc, 0x0, 0x7, 0xff, 0xff, 0x30, 0xff, 0xf8, 0xf0, 0x0, 0x 7f, 0xff, 0xfe, 0x30, 0xff, 0xfc, 0x40, 0x3, 0xff, 0xff, 0xfc, 0x70, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, 0xf8, 0xf0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xff, 0xf0, 0xf0, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xe1, 0xf0, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xe3, 0xf0, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0x c3, 0xf0, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x83, 0xf0, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x87, 0x f0, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xf0, 0xff, 0xff, 0xf8, 0x7f, 0x0, 0x0, 0x7, 0xf 0, 0xff, 0xff , 0xfc, 0x38, 0x0, 0x0, 0x1, 0xf0, 0xff, 0xff, 0xfc, 0x20, 0x0, 0x0, 0xbf, 0xf0, 0xff, 0xff, 0xfe, 0x0, 0x3, 0xff, 0xff, 0xf0, 0xff , 0xff, 0 xfe,0x0, 0x3f, 0xe1, 0xff, 0xf0, 0xff, 0xff, 0xfe, 0x3, 0xf0, 0x0, 0x1, 0xf0, 0xff, 0xff, 0xfe, 0xf, 0x80, 0x0, 0x0, 0xf0, 0xff, 0xff, 0xff, 0 xe,0x0, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xc, 0x3, 0xff, 0xe1, 0xf0, 0xff, 0xff, 0xff, 0x0, 0x1f, 0xff, 0xc0, 0xf0, 0xff, 0xff, 0xff, 0x80 , 0x7f, 0xff, 0x88, 0xf0, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x9c, 0xf0, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0x38, 0xf0, 0xff, 0xff, 0x ff, 0xc3, 0xff , 0xff, 0x19, 0xf0, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x3, 0xf0, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xff, 0xce, 0x7f, 0xff , 0xdf, 0xf0, 0xff, 0xff, 0xff, 0xce, 0x7f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x9e, 0x7f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x8c, 0xff , 0xff, 0xff , 0x f0, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0 xff, 0xf0); void setup() ( display.begin(); display.setContrast(50); display.setTextSize(1); display.setTextColor(BLACK); // đặt màu văn bản ) void loop() ( display.clearDisplay(); display .drawBitmap(10, 5, ku59x39, 59, 39, BLACK); display.display(); delay(2000); display.clearDisplay(); display.setCursor(0,0); display.print("SAM là có khả năng bắn trúng không chỉ các mục tiêu đạn đạo mà còn cả các mục tiêu khí động học - máy bay"); display.display(); delay(2000); )


Chà, và vì Arduino (Bộ xử lý+RAM+Bộ nạp khởi động-BIOS)+ổ đĩa (EEPROM) + hệ thống đầu vào/đầu ra (IRDA Remote và Nokia 5110) trên thực tế là một máy tính chính thức, vậy tại sao không viết một bản chính thức trò chơi cho nó? Tất nhiên, máy tính Arduino của chúng ta sẽ không thể xử lý một trò chơi như GTA, nhưng nó có thể dễ dàng xử lý một món đồ chơi thông thường đơn giản! Hãy viết nên một trò chơi của mọi thời đại - Tetris.
Đối với bất kỳ lập trình viên nào, đây giống như bài tập thể dục buổi sáng, một bài tập dễ dàng cho não bộ, vì vậy hãy tiếp tục! Và có vẻ như điều này chưa từng xảy ra trước đây ở Muska. Và trò chơi sẽ bộc lộ tiềm năng của chủ đề.
Là một hệ thống đầu vào, tôi quyết định sử dụng điều khiển từ xa IRDA từ BẤT KỲ thiết bị nào. Với giải pháp này, chúng tôi chỉ cần một chiếc, với chi phí 4 rúp mỗi chiếc. Và điều khiển từ xa IR có thể được tìm thấy ở bất kỳ căn hộ nào. Để lồng tiếng, chúng tôi cũng sẽ sử dụng loa tweeter Piezo từ bo mạch chủ cũ - đây sẽ là thiết bị tương tự đa phương tiện trong ngân sách của chúng tôi)). Một chiếc mát hơn đang đến với tôi bây giờ, nhưng điều này đã khiến giá siêu máy tính của chúng tôi tăng lên cả đô la! Chúng ta sẽ vượt qua bây giờ. Nó sẽ ở bên anh ấy rồi.
Trên bảng mạch, chúng tôi kết nối các thiết bị đầu ra và đầu vào cũng như “đa phương tiện” của chúng tôi. Hóa ra như thế này:


Tôi đã sử dụng Arduino Uno, vì nó đã có 3,3V mà chúng tôi cần, nhưng nếu bạn sử dụng Mini, bạn sẽ phải đạt mức 3,3 cần thiết từ 5 volt cho màn hình. Cách dễ nhất từ ​​​​Internet là nối tiếp hai điốt silicon (chọn).
Để không vẽ sơ đồ điện, tôi chỉ cần chỉ ra các chân Arduino mà tôi đã sử dụng.
Kết nối màn hình Nokia 5110:
chân 3 - Đồng hồ nối tiếp (SCLK)
chân 4 - Dữ liệu nối tiếp ra (DIN)
chân 5 - Chọn dữ liệu/lệnh (D/C)
chân 6 - Chọn chip LCD (CS)
chân 7 - Đặt lại LCD (RST)
Để chiếu sáng chân LIGHT của màn hình, chúng ta đưa nó vào GND của Arduino. (Chỉ dành cho bảng đỏ!). Cộng với nguồn điện ở mức 3,3V. Nối đất tới GND.
Kết nối bộ thu hồng ngoại:
chân 8 - IR (điều khiển). Nguồn điện ở mức +5V và GND tương ứng.
Kết nối loa tweeter Piezo:
chân 9 - loa, Nối đất tới GND.
Sau khi cài đặt, tải lên bản phác thảo

Bản phác thảo trò chơi Tetris

//// © Klop 2017 #include #bao gồm #bao gồm #bao gồm #define rk 4 // chiều rộng của hình vuông #define rz 5 // chiều rộng của ghế #define smeX 1 #define smeY 1 #define MaxX 10 // kính số ghế theo chiều ngang #define loa 9 #define RECV_PIN 8 // foot trên bộ thu IRDA // chân 3 - Đồng hồ nối tiếp (SCLK) // chân 4 - Đầu ra dữ liệu nối tiếp (DIN) // chân 5 - Chọn dữ liệu/lệnh (D/C) // chân 6 - Chọn chip LCD (CS) // chân 7 - Đặt lại LCD (RST) Hiển thị Adafruit_PCD8544 = Adafruit_PCD8544(3, 4, 5, 6, 7); IRrecv không xác định(RECV_PIN); kết quả giải mã_results; byte mstacan; byte Lst,SmeH, center, NumNext; byte MaxY; // số vị trí kính theo chiều dọc int dxx, dyy, FigX, FigY, Victory, myspeed,tempspeed; unsigned long ok, left, pravo, vniz, myrecord; flfirst dài không dấu=1234; // khởi chạy nhãn byte đầu tiên fig= (((0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0)) , ((0,1,0,0), (0,1,0,0), (0,1,0,0), (0,1,0,0)), ((0,0,0 ,0), (0,1,1,0), (0,1,1,0), (0,0,0,0)), ((0,1,0,0), (0,1 ,1,0), (0,0,1,0), (0,0,0,0)), ((0,1,0,0), (0,1,0,0), (0 ,1,1,0), (0,0,0,0)), ((0,1,0,0), (0,1,1,0), (0,1,0,0), (0,0,0,0)), ((0,0,1,0), (0,1,1,0), (0,1,0,0), (0,0,0,0 )), ((0,0,1,0), (0,0,1,0), (0,1,1,0), (0,0,0,0)), ((0,0 ,0,0), //8 (0,0,0,0), (0,0,0,0), (0,0,0,0)) ); //==================================================== ============= void mybeep () // âm thanh (analogWrite(loa, 100); độ trễ (100); analogWrite(loa, 0); ) //======= ================ ========================== void figmove(byte a, byte b) ( for (byte i=0;i<4;i++) for (byte j=0;j<4;j++) fig[a][i][j]=fig[b][i][j]; } //============================================== void figinit(byte a) { for (byte i=0;i<4;i++) for (byte j=0;j<4;j++) { fig[i][j]=fig[i][j]; if (fig[a][j][i]==1) // покажем след фигуру display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, BLACK); else display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, WHITE); } display.display(); NumNext=a; tempspeed=myspeed-(Victory/30)*50; // через каждые 30 линий увеличим скорость падения; dxx=0; for (byte i=0;i0) display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, BLACK); khác display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, WHITE); ds(Chiến thắng,1); display.display(); ) //================================================== ================= void ds(int aa, int b) ( display.fillRect(55, 10, 29, 10, WHITE); display.setCursor(55,b* 10); display.println(aa); ) //=== ===================================== =========================== bool iffig(int dx , int dy) (int i,j; bool flag=true; bool pov=false ; với (i=0;i MaxX-1) dx=-1;// cố gắng di chuyển nó ra xa bức tường bên phải 1 ) ) ) cho (i=0;i<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) if (i+FigX+dx<0 || i+FigX+dx>MaxX-1 || FigY+j+dy>MaxY-1 || mstacan>0) (flag=false; break;) // đã kiểm tra tọa độ mới if (flag) (FigX=FigX+dx; FigY=FigY+dy;byte k=0; for (i=0;i<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) {mstacan=1; dxx=0; } } // переместили фигуру на новые координаты else { if (pov) figmove(0,8); for (i=0;i<4;i++) // восстановили фигуру for (j=0;j<4;j++) if (fig[j][i]==1) mstacan=1; } return(flag); } //================================================ void clearstacan() { for (byte i=0;imyrecord) ( myrecord=Victory; EEPROM_write(16, myrecord); ) display.setCursor(5,0); display.print("Ghi"); display.setCursor(5,10); display.print(myrecord); display.display(); display.setCursor(5,20); độ trễ (2000);irrecv.resume(); display.println("Nhấp chuột"); tb=getbutton("OK"); if (tb!=ok) ( ok=tb; levo=getbutton("Left"); pravo=getbutton("Right"); vniz=getbutton("Down"); EEPROM_write(0, ok); EEPROM_write(4, levo); EEPROM_write(8, pravo); EEPROM_write(12, vniz); ) display.fillRect(5, 0, (MaxX-1)*rz, 40, WHITE); tốc độ của tôi=800; tempspeed=tốc độ của tôi; Chiến thắng=0; ) //================================================== ================= void setup() ( unsigned long tr; word gg=0; RandomSeed(analogRead(0)); impercv.enableIRIn(); // Khởi động IRDA bộ thu display.begin(); display.setContrast(50); display.setTextSize (1); display.setTextColor(BLACK); // thiết lập màu văn bản display.clearDisplay(); Lst=rz*MaxX; // chiều rộng của kính tính bằng pixel MaxY=display.height()/rz+4; // Chiều cao của kính tính bằng hình khối SmeH=display.height()%rz; // độ lệch trên cùng tính bằng pixel để hiển thị ngẫu nhiên(7); EEPROM_read(0 , ok); EEPROM_read(4, levo); EEPROM_read(8, pravo); EEPROM_read(12, vniz); EEPROM_read(20, tr); if (tr==flfirst) EEPROM_read(16, myrecord); else ( myrecord= 0; EEPROM_write(16, myrecord); EEPROM_write(20, flfirst); ) newgame(); ) //============================= ======================================== void dvoiki() ( for (byte i=0; Tôi
Và bạn có thể chiến đấu. Trò chơi hỗ trợ liên kết với bất kỳ điều khiển từ xa nào. Để thực hiện điều này, khi bắt đầu trò chơi, khi được yêu cầu “Nhấn OK”, hãy nhấn nút trên điều khiển từ xa sẽ chịu trách nhiệm xoay hình. Nếu điều khiển từ xa của trò chơi đã quen thuộc, trò chơi sẽ bắt đầu ngay lập tức. Nếu điều khiển từ xa là mới, mã cho nút OK sẽ không khớp với mã đã ghi nhớ và trò chơi sẽ yêu cầu bạn nhấn các nút “Trái”, “Phải” và “Xuống” theo trình tự. Các nút này sẽ được ghi vào bộ nhớ cố định của Arduino và sau đó điều khiển từ xa cụ thể này sẽ được nhận dạng ngay lập tức khi nhấn nút “OK”.


Khi bạn “thất bại” trên dòng đã thu thập, một tiếng rít sẽ phát ra. Nó được triển khai trên cơ sở một số chân Arduino (trong trường hợp của chúng tôi là 9) để tạo ra xung điện ở tần số nhất định.
Trò chơi hỗ trợ tất cả các thuộc tính của một trò chơi bình thường. Ngoài ra còn có gợi ý cho hình tiếp theo và điểm hiện tại. Trò chơi theo dõi các kỷ lục. Giá trị này được lưu trữ trong bộ nhớ cố định của Arduino. Để đặt lại bản ghi, chỉ cần thay đổi giá trị flfirst=1234 trong bản phác thảo thành bất kỳ giá trị nào khác. Trò chơi cũng tự động tăng tốc độ rơi xuống sau mỗi 30 dòng bị xóa nên bạn sẽ không thể chơi vô thời hạn). Bản phác thảo không được tối ưu hóa hay chạy cẩn thận mà được viết lúc rảnh rỗi cho vui. Nếu ai tìm thấy lỗi, hãy viết. Về ©. Bạn được phép chỉnh sửa bản phác thảo theo ý muốn. Chỉ khi xuất bản các tùy chọn của bạn ở đâu đó, vui lòng chỉ ra liên kết đến nguồn ban đầu).
Tại sao tôi làm điều đó - những ngày nghỉ cuối tuần dài + “vì tình yêu nghệ thuật”. Nếu con gái tôi còn nhỏ, có lẽ tôi sẽ làm cho nó một chiếc máy đánh bạc mini trong phòng búp bê của nó vào đúng ngày 8 tháng 3. Tôi sẽ thêm một vài trò chơi như Snake và Arkanoid, và có thể sẽ cắt phần thân ra khỏi PCB. Chỉ có con gái tôi đang bảo vệ bằng tiến sĩ năm nay nên thật thiếu sót, nhưng có lẽ ý tưởng này sẽ hữu ích cho người khác).

Tổng hợp về màn hình Nokia 5110:
thuận
+ Khả năng hiển thị đồ họa;
+Không có vấn đề gì với bảng chữ cái Cyrillic;
+ Trọng lượng thấp;
+Tỷ lệ tuyệt vời về kích thước/số lượng thông tin hiển thị;
+Ưu điểm của công nghệ LCD được sử dụng là tiêu thụ điện năng thấp và khả năng đọc tốt dưới ánh sáng mạnh;
+ Đèn nền có thể chuyển đổi;
+ Giá.

Nhược điểm
-Đèn nền không đồng đều;
-Hình ảnh có màu đen trắng (không có sắc thái);
- Cần phải chăm sóc 3.3V, không phải Arduino nào cũng có điện áp như vậy.

Nhận định: Với số tiền bỏ ra, dựa trên tổng thể các đặc điểm của nó, nó tự tin chiếm lĩnh vị trí thích hợp của mình; không phải vô cớ mà nó tồn tại lâu dài trong số các thiết bị hiển thị dành cho Arduino.

Tôi đang định mua +102 Thêm vào mục yêu thích Tôi thích bài đánh giá +148 +269

Trong hướng dẫn này, trước tiên chúng tôi sẽ hiển thị một số dữ liệu trên màn hình Nokia 5110 và sau đó hiển thị dữ liệu cảm biến DHT22 trên đó. Chúng ta sẽ kết nối Nokia 5110 LCD và Arduino. Bạn sẽ tìm hiểu giao diện Arduino của Nokia 5110 thông qua hai ví dụ. Đầu tiên, chúng tôi sẽ chỉ hiển thị một số dữ liệu trên màn hình và trong ví dụ thứ hai, chúng tôi sẽ đọc số đọc từ cảm biến nhiệt độ và độ ẩm DHT22 và hiển thị chúng trên màn hình LCD Nokia 5110.

Nokia 5110 LCD là sự lựa chọn tuyệt vời để hiển thị dữ liệu. Nó rẻ hơn so với màn hình LCD thông thường và rất dễ sử dụng với bộ vi điều khiển. Bạn chỉ cần kết nối một vài dây và bạn đã sẵn sàng để sử dụng.

Để kết nối Nokia 5110 với Arduino chúng ta sẽ cần có màn hình cùng với bộ vi điều khiển và một số bộ phận khác.

  • Nokia 5110 LCD × 1
  • Chiết áp chính xác nhiều vòng - 1 kΩ (25 vòng) × 1
  • Điện trở 10 kOhm × 4
  • Điện trở 1 kOhm × 1
  • Điện trở 330 ohm × 1
  • Dây nhảy × 1
  • Bố cục (phổ quát) × 1

Ngoài ra, chúng tôi sẽ cần phần mềm ở dạng mà bạn có thể quen thuộc nhất.

Sơ đồ chân Nokia 5110

Kết luận Nokia 5110 LCD trông như thế này:

RST: đặt lại mã pin
S.C.E.: chân chọn chip
D/C: (Dữ liệu/Lệnh): Đây là chốt chọn chế độ. THẤP có nghĩa là chế độ lệnh và CAO có nghĩa là chế độ dữ liệu.
DN(Pin dữ liệu): Nhập dữ liệu nối tiếp
SCLK: tín hiệu đồng hồ nối tiếp
VCC: điện áp đầu vào 2,7 đến 3,3 V
Điốt phát sáng: Đèn LED này là đèn nền. Điện áp đầu vào 3,3V
GND: Trái đất

Ví dụ số 1

Trong ví dụ đầu tiên, chúng ta sẽ chỉ hiển thị dữ liệu trên màn hình LCD của Nokia 5110. Sơ đồ mạch kết nối Nokia 5110 và Arduino được hiển thị bên dưới.

Sơ đồ kết nối

Nokia 5110 LCD cần 3,3V để hoạt động nên chúng ta sẽ phải dùng điện trở để chuyển đổi 5V sang 3,3V, nếu dùng Nokia 5110 không có điện trở thì màn hình vẫn hoạt động nhưng tuổi thọ của LCD sẽ giảm.

  • Kết nối chân 1 (chân RST) với chân 6 của Arduino thông qua điện trở 10k ohm.
  • Kết nối chân 2 (chân SCE) với chân 7 của Arduino thông qua điện trở 1k ohm.
  • Kết nối chân 3 (chân D/C) với chân 5 của Arduino thông qua điện trở 10k ohm.
  • Kết nối chân 4 (chân DIN) với chân 4 của Arduino thông qua điện trở 10k ohm.
  • Kết nối chân 5 (chân CLK) với chân 3 của Arduino thông qua điện trở 10k ohm.
  • Kết nối chân 6 (chân VCC) với chân 3,3V của Arduino.
  • Nối chân 7 (chân LED) với chân giữa của chiết áp 1k ohm qua điện trở 330 ohm và nối 2 chân còn lại với VCC và nối đất.
  • Kết nối chân 8 (chân GND) với mặt đất Arduino.

Chiết áp được kết nối được sử dụng để tăng hoặc giảm đèn nền LCD. Bạn có thể kết nối nó với 3,3V nếu bạn muốn đèn nền luôn mạnh hoặc bạn có thể kết nối nó với mặt đất nếu bạn không muốn có đèn nền.

Mã số

Tải thư viện Nokia 5110 bên dưới.

Mã của ví dụ đầu tiên:

#bao gồm màn hình LCD PCD8544; void setup() ( lcd.begin(84, 48); ) void loop() ( lcd.setCursor(0, 0); lcd.print(" WELCOME "); lcd.setCursor(0, 1); lcd.print ("To"); lcd.setCursor(0,2); lcd.print("site"); delay(200); )

Trước hết, chúng tôi đưa vào thư viện cho Nokia 5110 LCD. Thư viện sẽ bao gồm tất cả các lệnh mà chúng ta cần cho màn hình LCD Nokia 5110. Sau đó, chúng tôi đã khai báo một biến có tên là “lcd” thuộc loại PCD8544.
#bao gồm màn hình LCD PCD8544;

Sau đó ở chức năng setup chúng ta thiết lập độ phân giải cho Nokia 5110 LCD. Màn hình LCD Nokia5110 có độ phân giải 84x48, vì vậy chúng tôi đặt độ phân giải thành 84x48 trong Arduino IDE.

lcd.begin(84, 48);

Sau đó, trong hàm lặp, trước tiên chúng tôi định vị con trỏ trên dòng đầu tiên và in "Chào mừng!" (CHÀO MỪNG)..

Lcd.setCursor(0, 0); lcd.print(" CHÀO MỪNG "); lcd.setCursor(0, 1); lcd.print("To"); lcd.setCursor(0,2); lcd.print("trang web"); độ trễ (200);

Ví dụ số 2

Trong ví dụ thứ hai, chúng ta sẽ kết nối cảm biến nhiệt độ và độ ẩm DHT22 với Arduino và sử dụng DHT22 để đọc chỉ số nhiệt độ, độ ẩm và nhiệt độ. Sau đó chúng tôi sẽ hiển thị dữ liệu này trên màn hình LCD của Nokia 5110. Sơ đồ mạch của giao diện Nokia 5110, Arduino và DHT22 được đưa ra dưới đây.

Sơ đồ kết nối

Kết nối giữa Nokia 5110 LCD và Arduino được mô tả trong ví dụ đầu tiên. Kết nối các chân cảm biến DHT22 với Arduino như trong sơ đồ trên:

  • Chân 1 của DHT22 đến 5V Arduino.
  • Chân 2 của DHT22 đến Chân 8 của Arduino.
  • Chân 4 của DHT22 tới chân nối đất Arduino.

Mã số

Tải thư viện Nokia 5110 và DHT bên dưới.

Mã cho ví dụ thứ hai dưới đây:

#bao gồm #include "DHT.h" #define DHTPIN 8 #define DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE); void setup() ( lcd.begin(84, 48); dht.begin(); ) void loop() ( lcd.clear(); float hum = dht.readHumidity(); float temp = dht.readTemperature(); //Đọc nhiệt độ theo độ float fah = dht.readTemperature(true); //Đọc nhiệt độ theo độ F if (isnan(hum) || isnan(temp) || isnan(fah)) ( //Kiểm tra xem arduino có nhận được giá trị hay không lcd.println("Không đọc được từ cảm biến DHT!"); return; ) float heat_index = dht.computeHeatIndex(fah, hum); //Đọc chỉ số nhiệt độ F float heat_indexC = dht .convertFtoC (heat_index); //Đọc chỉ số nhiệt theo độ lcd.setCursor(0, 0); lcd.print("Humi: "); lcd.print(hum); lcd.print(" %\t") ; lcd .setCursor(0, 1); lcd.print("Temp: "); lcd.print(temp); lcd.print(" *C "); lcd.setCursor(0,2); lcd.print( "Temp : "); lcd.print(fah); lcd.print(" *F\t"); lcd.setCursor(0,3); lcd.print("Hi: "); lcd.print(heat_indexC) ;lcd.print(" *C "); lcd.setCursor(0,4); lcd.print("Hi: "); lcd.print(heat_index); lcd.println(" *F "); độ trễ (2000); )

Trước hết, chúng tôi đã bao gồm các thư viện dành cho Nokia 5110 LCD và cảm biến nhiệt độ và độ ẩm DHT22. Sau đó, chúng tôi khởi tạo chân 8 cho DHT22 (DHTPIN 8) và xác định loại cảm biến DHT. Các mẫu cảm biến DHT khác cũng có sẵn nhưng chúng tôi đã sử dụng DHT22 do nó có độ chính xác cao. Sau đó, chúng tôi đã khai báo một biến "lcd" thuộc loại PCD8544 cho màn hình LCD và một biến "dht" thuộc loại DHT cho cảm biến DHT22.

#bao gồm #include "DHT.h" #define DHTPIN 8 #define DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE);

Sau đó ở chức năng setup chúng ta thiết lập độ phân giải cho Nokia 5110 LCD. Màn hình LCD Nokia5110 có độ phân giải 84x48, vì vậy chúng tôi đặt độ phân giải thành 84x48 trong Arduino IDE. Sau đó, chúng tôi bắt đầu nhận dữ liệu từ cảm biến DHT22 bằng lệnh dht.begin().

Lcd.begin(84, 48); dht.begin();

Trong hàm vòng lặp, chúng ta đọc các giá trị chỉ số độ ẩm, nhiệt độ và nhiệt từ DHT22 và lưu trữ chúng trong các biến. Cuối cùng, chúng tôi đã in chúng trên màn hình LCD Nokia 5110.

Float hum = dht.readHumidity(); float temp = dht.readTem Nhiệt độ(); float fah = dht.readTemperature(true); . . . lcd.setCursor(0,4); lcd.print("Xin chào: "); lcd.print(heat_index); lcd.println(" *F ");