Arduino. Chúng tôi kết nối màn hình LCD. Kết nối màn hình văn bản với Arduino

Có một số lượng lớn các loại văn bản, hay chúng còn được gọi là màn hình tinh thể lỏng, tổng hợp ký tự. Các màn hình phổ biến nhất dựa trên chip HD44780 của Hitachi, KS0066 của Samsung hoặc tương thích với chúng. Để làm việc với những màn hình như vậy, có một thư viện Arduino Liquid Crystal tiêu chuẩn.

Đặc biệt, những màn hình như vậy bao gồm màn hình văn bản từ Melt. Bài viết này mô tả chi tiết sơ đồ kết nối cho màn hình này nhưng nó cũng phù hợp với nhiều màn hình hiển thị văn bản khác.

Bài viết mô tả các nguyên tắc chung. Bạn có thể đi tới phần mô tả chi tiết về màn hình của mình:

Thành phần bắt buộc

Sự liên quan

Gắn màn hình vào bảng mạch và kết nối nguồn +5 V và nối đất từ ​​Arduino với đường ray điện của bảng mạch.

Bạn sẽ cần nguồn điện và tiếp đất nhiều lần, vì vậy sẽ thuận tiện hơn nếu ném chúng lên đường ray.

Bật đèn nền

Đèn nền của màn hình là một mạch riêng biệt, không kết nối với phần còn lại. Bạn có thể bật nó bằng cách cấp +5 V vào chân thứ 15 của màn hình và nối chân thứ 16 với đất. Bằng cách kết nối hai chân này với các thanh ray tương ứng, bạn có thể bật Arduino và thấy màn hình sáng lên.

Xin lưu ý rằng trên một số kiểu máy, việc đánh số liên lạc không chỉ từ phải sang trái từ đầu đến thứ mười sáu mà có phần tinh vi hơn. Vì vậy, ví dụ: trên màn hình 16×2 của Melt, liên hệ đầu tiên thực tế nằm ở vị trí thứ 14, liên hệ thứ hai ở vị trí thứ 13, v.v. từ phải sang trái cho đến vị trí thứ 14 ở vị trí đầu tiên và thứ 15 và 16 nằm ở bên phải. Đánh số gần các điểm tiếp xúc trên màn hình sẽ giúp bạn tránh nhầm lẫn.

Bật nguồn tổng hợp ký tự

    Đầu tiên là đất đai. Kết nối nó với đường ray mặt đất.

    Thứ hai là dinh dưỡng. Kết nối nó với đường ray + 5V.

    Thứ ba là sự tương phản. Để có độ tương phản tối đa, hãy kết nối nó với đường ray mặt đất. Bạn có thể đặt một điện áp tùy ý từ 0 đến 5 V cho tiếp điểm này, điện áp càng cao thì hình ảnh sẽ càng mờ nhưng đồng thời mức tiêu thụ điện năng sẽ giảm. Để có thể điều chỉnh độ tương phản mượt mà, bạn có thể cấp tín hiệu đầu ra chiết áp cho tiếp điểm này.

Sau khi kết nối, nếu bật Arduino lên, bạn có thể thấy các không gian hình chữ nhật quen thuộc. Tùy thuộc vào sự kết hợp giữa màu văn bản và đèn nền, chúng có thể sáng và rõ ràng hoặc hầu như không đáng chú ý. Điều này là bình thường: trong mọi trường hợp, văn bản sẽ trông đẹp.

Kết nối bus dữ liệu

Để liên lạc giữa Arduino và màn hình, phải sử dụng một số đường truyền:

    2 hoặc 3 để hiển thị lệnh

    4 hoặc 8 để truyền dữ liệu (mã ký tự và lệnh)

Như vậy, từ 6 đến 11 số liên lạc trên cả hai thiết bị sẽ bị chiếm dụng. Nếu bạn không cần đọc từ màn hình, phù hợp với hầu hết các tình huống sử dụng, các lệnh sẽ yêu cầu 2 dòng.

Nếu tốc độ cập nhật dữ liệu cũng không phải là vấn đề thì 4 dòng là đủ để truyền dữ liệu.

Vì vậy, để kết nối màn hình, chỉ cần sử dụng 6 đường, 6 chân trên Arduino là đủ. Hãy xem xét kịch bản cụ thể này.

Như đã đề cập, chúng tôi không có gì để đọc từ màn hình, chúng tôi sẽ chỉ ghi vào nó. Do đó, chúng tôi kết nối chân thứ 5 của màn hình, chân này chịu trách nhiệm chọn đọc/ghi, với thanh ray trên mặt đất. Điều này có nghĩa là "luôn luôn viết."

Sau đó, chúng tôi kết nối Arduino và màn hình bằng 6 đường truyền thông. Việc chọn địa chỉ liên hệ nào trên Arduino không quan trọng: chúng tôi sẽ chỉ định chúng trong chương trình, nhưng đối với ví dụ, chúng tôi đã chọn cấu hình sau:

    Chân hiển thị 6 là chân Arduino 5. Đây là dòng quyền truy cập dữ liệu. Được gọi là E hoặc Kích hoạt. Khi dòng này trở thành một, màn hình sẽ thực thi một lệnh hoặc xuất ra một ký tự từ dòng dữ liệu.

    Chân hiển thị thứ 11, 12, 13, 14 lần lượt là chân Arduino thứ 10, 11, 12, 13. Đây là những dòng dữ liệu. Được gọi là DB4, DB5, DB6, DB7.

Màn hình đã được kết nối và sẵn sàng nhận dữ liệu. Tất cả những gì còn lại là viết chương trình cho Arduino.

Lập trình

Để xuất văn bản từ Arduino, thuận tiện nhất là sử dụng thư viện Liquid Crystal tích hợp sẵn. Để hiển thị lời chào và hẹn giờ, hãy sử dụng mã như thế này:

Xin chào.pde #include lcd.begin(16, 2); // in dòng đầu tiên lcd.print("Xin chào thế giới!"); // đặt con trỏ vào cột 0, dòng 1. Tức là trên // đây thực sự là dòng thứ hai, bởi vì đánh số bắt đầu từ số 0 lcd.setCursor(0, 1); // in dòng thứ hai lcd.print ("foo bar baz" ); ) vòng lặp void() ( )

Mọi thứ khá đơn giản và phải rõ ràng từ các bình luận.

chữ cái Cyrillic

Thông tin trong phần này áp dụng cụ thể cho các màn hình từ Melt. Các đối tác Trung Quốc và Châu Âu dường như không có Cyrillic trong bộ ký tự của họ; vui lòng tham khảo tài liệu về màn hình để tìm hiểu thêm về điều này.

Việc in các chữ cái tiếng Nga không hoàn toàn đơn giản: bạn không thể chỉ viết lcd.print("Vasya") . Điều này liên quan đến khái niệm mã hóa. Bạn biết rằng mỗi ký tự có một mã tương ứng và khi biên dịch chương trình, nếu một chuỗi chứa Cyrillic, nó sẽ được chuyển đổi thành mã bằng cách sử dụng utf-8, cp-1251 hoặc một số bảng khác, tùy thuộc vào cài đặt của trình biên dịch. Ngược lại, màn hình sẽ mong đợi nhìn thấy dữ liệu ở dạng mã hóa của chính nó.

Ví dụ: chữ “I” tương ứng với mã B1 trong hệ thập lục phân. Để truyền chuỗi “Yandex” ra màn hình, bạn phải nhúng rõ ràng mã ký tự vào chuỗi bằng chuỗi \x##:

Lcd.print(" \xB1 chỉ số") ;

Bạn có thể kết hợp các ký tự thông thường và mã rõ ràng trong một dòng tùy thích. Nhắc nhở duy nhất là sau khi trình biên dịch nhìn thấy chuỗi \x trong một dòng, nó sẽ đọc tất cả các ký tự đằng sau nó có thể là chữ số của hệ thập lục phân, ngay cả khi có nhiều hơn hai ký tự trong số đó. Vì điều này, bạn không thể chỉ sử dụng các ký tự trong phạm vi 0-9, a-f theo sau là mã ký tự gồm hai chữ số: nó sẽ gây ra lỗi biên dịch. Để giải quyết vấn đề này, bạn có thể lợi dụng thực tế là hai dòng viết cạnh nhau được dán lại với nhau. Vì vậy, nếu bạn muốn viết "Yeee":

Lcd.print(" \xB1 ê") ; // lỗi lcd.print(" \xB1""Ê" ); // Phải

Ví dụ: để viết “Lời chào từ Amperka”, mã đã được sử dụng:

cyrillic.pde #include LCD LiquidCrystal(4, 5, 10, 11, 12, 13); void setup() ( lcd.begin(16, 2) ; lcd.print(" \xA8 p\xB8 \xB3 ""e \xBF") ; lcd.setCursor(0, 1); lcd.print("o \xBF A\xBC \xBE ""ep \xBA\xB8") ; ) vòng lặp void() ( )

Chuyển đổi trang tạo ký tự

Mô-đun hiển thị lưu trữ hai trang tạo ký tự trong bộ nhớ. Mặc định là trang 0. Để chuyển trang, hãy sử dụng phương thức lệnh (0x101010) và ngược lại - lệnh (0x101000).

Màn hình không thể hiển thị các ký tự từ các trang khác nhau cùng một lúc.

Hãy xem một ví dụ trong đó cùng một dòng sẽ thay đổi tùy thuộc vào trang được chọn.

thay đổi_page.ino // Bao gồm thư viện LiquidCrystal tiêu chuẩn#bao gồm // Khởi tạo đối tượng màn hình, chuyển đối tượng đã sử dụng // để kết nối các chân trên Arduino theo thứ tự:// RS, E, DB4, DB5, DB6, DB7 LCD LiquidCrystal(4, 5, 10, 11, 12, 13) ; thiết lập void() ( // thiết lập kích thước (số cột và hàng) của màn hình lcd.begin(16, 2); ) vòng lặp void() ( // đặt trang tạo ký tự thành 0 (đây là mặc định) lcd.command(0b101000); // in dòng đầu tiên lcd.print(" \x9b \x9c \x9d \x9e \x9f ") ; // chờ 1 giây trễ(1000 ); // cài đặt 1 trang tạo ký tự lcd.command(0b101010); // chờ 1 giây trễ(1000 ); // xóa màn hình lcd.clear(); )

Màn hình LCD Arduino cho phép bạn hiển thị trực quan dữ liệu cảm biến. Chúng tôi sẽ cho bạn biết cách kết nối màn hình LCD với Arduino thông qua I2C đúng cách và xem các lệnh cơ bản để khởi tạo và điều khiển LCD 1602. Chúng tôi cũng sẽ xem xét các chức năng khác nhau trong ngôn ngữ lập trình C++ để hiển thị thông tin văn bản trên màn hình , thường được yêu cầu sử dụng trong các dự án Arduino.

Băng hình. Màn hình LCD Arduino I2C 1602

Kết nối LCD 1602 I2C với Arduino

I2C là bus hai dây nối tiếp để giao tiếp các mạch tích hợp bên trong các thiết bị điện tử, được gọi là I²C hoặc IIC (Mạch tích hợp liên kết). I²C được Philips phát triển vào đầu những năm 1980 dưới dạng bus 8 bit đơn giản để liên lạc nội bộ giữa các mạch trong thiết bị điện tử điều khiển (ví dụ: bo mạch chủ máy tính, điện thoại di động, v.v.).

Trong hệ thống I²C đơn giản có thể có một số thiết bị phụ và một thiết bị chính bắt đầu truyền dữ liệu và đồng bộ hóa tín hiệu. Nhiều thiết bị phụ có thể được kết nối với đường SDA (dòng dữ liệu) và SCL (dòng đồng hồ). Thông thường thiết bị chính là bộ điều khiển Arduino và thiết bị phụ là đồng hồ thời gian thực hoặc Màn hình LCD.

Cách kết nối LCD 1602 với Arduino qua I2C

Màn hình LCD 1602 với mô-đun I2C được kết nối với bo mạch Arduino chỉ bằng 4 dây - 2 dây dữ liệu và 2 dây nguồn. Kết nối màn hình 1602 được thực hiện theo tiêu chuẩn cho bus I2C: pin S.D.A. kết nối với cổng A4, đầu ra SCL– tới cổng A5. Màn hình LCD được cấp nguồn từ cổng +5V trên Arduino. Xem sơ đồ kết nối màn hình LCD 1602 trong ảnh bên dưới để biết thêm chi tiết.

Đối với bài học này, chúng ta sẽ cần các chi tiết sau:

  • Bảng mạch Arduino Uno / Arduino Nano / Arduino Mega;
  • màn hình LCD 1602;
  • 4 dây đực-cái.

Sau khi kết nối màn hình LCD với Arduino qua I2C, bạn sẽ cần cài đặt thư viện LiquidCrystal_I2C.hđể làm việc với màn hình LCD thông qua giao diện và thư viện I2C Dây.h(có sẵn trong chương trình Arduino IDE tiêu chuẩn). Bạn có thể tải xuống thư viện hoạt động LiquidCrystal_I2C.h cho LCD 1602 với mô-đun I2C trên trang Thư viện Arduino trên trang web của chúng tôi thông qua liên kết trực tiếp từ Google Drive.

Phác thảo cho màn hình 1602 với I2C

#bao gồm // thư viện điều khiển thiết bị qua I2C#bao gồm // kết nối thư viện cho LCD 1602 LCD LiquidCrystal_I2C (0x27,20,2); // gán tên cho màn hình LCD cho màn hình 20x2 void setup () // thiết lập thủ tục ( lcd.init (); // khởi tạo màn hình LCD LCD đèn nền(); // bật đèn nền hiển thị lcd.setCursor(0,0); // đặt con trỏ tại 1 ký tự của dòng đầu tiên lcd.print("TÔI YÊU"); // in tin nhắn ở dòng đầu tiên lcd.setCursor(0,1); // đặt con trỏ tại 1 ký tự của dòng thứ hai lcd.print("ARDUINO"); // in thông báo ra dòng thứ 2) void loop () // vòng lặp thủ tục ( /* đây là chú thích nhiều dòng // ban đầu thủ tục void loop() không được sử dụng trong bản phác thảo lcd.noDisplay(); // tắt độ trễ đèn nền màn hình LCD (500); // tạm dừng lcd.display(); // bật độ trễ đèn nền màn hình LCD (500); // tạm ngừng */ }

Giải thích cho mã:

  1. thư viện LiquidCrystal_I2C.h chứa nhiều lệnh để điều khiển màn hình LCD thông qua bus I2C và cho phép bạn đơn giản hóa đáng kể bản phác thảo;
  2. Bản phác thảo chứa chú thích nhiều dòng /* ... */, cho phép bạn chú thích nhiều dòng trong chương trình cùng một lúc.
  3. Trước khi hiển thị thông tin trên màn hình, bạn phải đặt vị trí con trỏ bằng lệnh setCursor(0,1), trong đó 0 là số ký tự trong dòng, 1 là số dòng.

Hôm nay chúng ta sẽ cố gắng tập trung vào việc xuất ra màn hình văn bản. Chip phổ biến nhất là HD44780 (hoặc KS0066 tương thích với nó). Hãy liệt kê những ưu và nhược điểm của chúng:

Ưu điểm:

  1. Giá thấp.
  2. Dễ dàng lập trình, mã sẽ giống nhau cho mọi kiểu máy.
  3. Mẫu mã đa dạng - phổ biến nhất: 8x1, 16x2, 20x4. Bạn cũng có thể tìm thấy các mô hình 40x4 khá kỳ lạ, tức là. bốn dòng, mỗi dòng 40 ký tự.
  4. Khả năng kết nối nhiều màn hình với một Arduino.
  5. Khả năng thiết lập các biểu tượng của riêng bạn.

Nhược điểm:

  1. Không phải tất cả các màn hình đều hỗ trợ ký tự tiếng Nga. Để biết thêm chi tiết, vui lòng tham khảo mô tả của màn hình cụ thể.
  2. Việc kết nối mà không sử dụng bus I2C yêu cầu sử dụng dây 10-16, điều này rất tệ. với I2C - 4 dây.

Dựa trên những điều trên, tôi sẽ chỉ xem xét việc kết nối màn hình qua I2C.

Hãy thử.

Chúng ta cần gì?

  1. Arduino (Tôi lấy mô hình Nano)
  2. Hiển thị trên chip HD44780 có hoặc không có mô-đun I2C (khi đó bạn sẽ cần một bảng IIC LC1602 riêng) - trong trường hợp của chúng tôi là 16x2 không có mô-đun I2C
  3. Điện trở 10Kohm (Nếu bạn cần điều khiển đèn nền bằng tay).
  4. Chiết áp (Nếu bạn cần điều khiển đèn nền bằng tay).
  5. Ban phát triển Breadboard.
  6. Thư viện LiquidCrystal_I2C. http://www.ansealk.ru/files/LiquidCrystal_V1.2.1.zip

Lạc đề nhỏ số 1: Làm cách nào để phân biệt màn hình với mô-đun I2C?

Nó thực sự khá đơn giản. Nếu khi lật màn hình lên, chúng ta thấy một khối đầu nối dài (thường là 16 miếng), thì không có mô-đun I2C trên màn hình:

Và đây là màn hình hiển thị với mô-đun I2C đã được cài đặt:

Các chân SCL, SDA, VCC, GND được sử dụng để kết nối Arduino. Hai điểm tiếp xúc ở bên trái - trong hình, chúng được đóng bằng dây nhảy - cần thiết để đèn nền hoạt động.

Nếu mô-đun không được kết nối, bạn sẽ phải tự thực hiện. Điều chính cần chú ý là kết nối các số liên lạc theo đúng thứ tự. Thông thường, chân đầu tiên và 16 chân được đánh dấu. Đôi khi xảy ra trường hợp 15-16 điểm tiếp xúc qua đó điều khiển đèn nền có thể được đặt ở phía trước điểm tiếp xúc đầu tiên (trong trường hợp này chúng sẽ được đánh số). Trên chính mô-đun, chốt đầu tiên cũng có thể được chỉ định không phải bằng số mà bằng một hình vuông xung quanh chốt đó.

Cơ chế:

Chúng ta hãy ghép lại sơ đồ sau:

Tôi muốn thu hút sự chú ý của bạn vào các điểm sau:

  1. Nếu bạn bắt gặp một màn hình có mô-đun I2C đã được hàn thì sẽ không cần đến các dây được đánh dấu màu xám. Nếu không thì không có gì thay đổi.
  2. Nếu chúng ta không muốn thay đổi độ sáng của màn hình thì sơ đồ sẽ được đơn giản hóa:

Như bạn đã nhận thấy, hai chân trên mô-đun I2C có nhãn LED chịu trách nhiệm về đèn nền màn hình. Nếu không muốn sử dụng tính năng kiểm soát độ sáng, chúng ta chỉ cần đóng chúng lại.

Bây giờ chúng ta hãy nhìn vào mã.

Hầu hết mọi thứ ở đây đều quen thuộc với chúng ta. Ở dòng 5, chúng tôi cho biết địa chỉ thiết bị. Ở dòng 16 và 17 - số ký tự trong dòng và số dòng. Trong dòng 20-22 - Chúng ta tạo một đối tượng để làm việc với màn hình và mô tả tham số để làm việc với nó.

Lạc đề nhỏ số 2: Làm cách nào để tìm ra địa chỉ của thiết bị I2C?

Trong hầu hết các trường hợp, địa chỉ có thể được tìm thấy trong biểu dữ liệu của chip mà thiết bị I2C được tích hợp trên đó. Nếu điều này là không thể, thì đây là liên kết đến kho lưu trữ có bản phác thảo và sơ đồ - http://www.ansealk.ru/files/Arduino_lcd_i2c.zip xác định địa chỉ của tất cả các thiết bị được kết nối qua bus I2C. Bạn chỉ cần kết nối thiết bị với Arduino, tải bản phác thảo lên, mở bảng điều khiển và xem địa chỉ.

Ở đây chúng ta thấy một chức năng trên thực tế sẽ chịu trách nhiệm xuất ra màn hình. Nguyên tắc đầu ra là như thế này:

Chúng ta đặt vị trí bắt đầu của đầu ra bằng hàm setCursor()

In một chuỗi bằng hàm print()

Sau đó, hàm print() tiếp theo sẽ bắt đầu xuất từ ​​vị trí tiếp theo sau khi kết thúc đầu vào trước đó. Tôi cũng muốn bạn chú ý đến thực tế là, không giống như xuất ra bảng điều khiển, hàm println() không được sử dụng ở đây để hoàn thành việc xuất dữ liệu đầu ra và dòng.

Do đó, dòng đầu tiên của màn hình sẽ hiển thị dòng chữ “Test LCD1602”, và dòng thứ hai sẽ cho biết độ phân giải màn hình và bộ đếm cho biết bản phác thảo của chúng tôi đã hoàn thành bao nhiêu chu kỳ.

Tuy nhiên, nếu chúng ta cần hiển thị nhiều giá trị biến trên màn hình thì phương pháp này không hoàn toàn thuận tiện. Thực tế là quy trình xuất ra màn hình rất tốn năng lượng và chậm, và chúng tôi thực hiện xuất ra ở chức năng này tới 7 lần. Việc tạo trước chuỗi và sau đó xuất toàn bộ chuỗi sẽ dễ dàng hơn nhiều. Hàm nhập được định dạng sprintf() sẽ giúp chúng ta điều này.

Lạc đề nhỏ #3: Hàm nhập được định dạng sprintf().

Trong ngôn ngữ C có một số hàm rất thuận tiện để xuất chuỗi - chúng được gọi là hàm xuất được định dạng - printf (từ chữ in và định dạng). Trong trường hợp cụ thể của chúng tôi, chúng tôi quan tâm đến hàm sprintf, hàm này không in bất cứ thứ gì ra màn hình mà tạo ra một chuỗi cho đầu ra tiếp theo. Nó trông giống như thế này:

sprintf(str , "Chuỗi %d cho đầu ra", i );

Hàm tạo ra một chuỗi (được đánh dấu bằng màu xanh lam) bằng cách sử dụng mẫu (màu vàng) để thay thế các giá trị của các biến (màu xanh lá cây). Kết quả thu được sẽ được ghi vào một biến chuỗi (màu đỏ).

Có thể có một số mẫu và biến. Trong trường hợp này, các biến được viết cách nhau bằng dấu phẩy. Điều chính là đảm bảo rằng số lượng mẫu trong một dòng tương ứng với số lượng biến. Các biến cho mẫu được lấy tuần tự, tức là giá trị của biến đầu tiên được thay thế vào mẫu đầu tiên, giá trị của biến thứ hai vào mẫu thứ hai, v.v.

Mẫu là gì? Bất kỳ mẫu nào cũng bắt đầu bằng ký tự "%" và kết thúc bằng một trong mười ký tự loại (trong trường hợp Arduino - bảy). Giữa chúng có thể có khá nhiều thông tin về cách xuất giá trị hoặc có thể không có gì cả.

Hãy xem những gì có thể có trong mẫu. Nói chung, mẫu trông như thế này:

%[flag ][width ][.precision ]loại

Dấu ngoặc vuông cho biết phần tử nằm trong chúng có thể bị thiếu. Thanh dọc cho biết rằng một trong các giá trị được chỉ định sẽ được chọn trong trường này (trong trường hợp của chúng tôi là một trong các chữ cái H, I hoặc L).

Trước tiên hãy xử lý thành phần bắt buộc của mẫu - loại. Nó chỉ định loại biến nào sẽ được xuất ra và có thể nhận một trong các giá trị sau:

Biểu tượng Nghĩa
c Một ký tự
S Chuỗi ký tự
d, tôi Số nguyên thập phân có dấu
bát phân số nguyên
bạn Số nguyên thập phân không dấu
x, X Số thập lục phân số nguyên
P Con trỏ (ở dạng thập lục phân)
f Số phân số ở định dạng cố định
đ, E Số phân số ở dạng khoa học
g, G Số phân số ở định dạng khoa học hoặc cố định

Những loại không áp dụng được khi làm việc với Arduino được đánh dấu màu xám. Vì vậy, để xuất ra một chuỗi bạn cần chỉ định "%s" và để xuất ra một số nguyên - "%d".

Tiếp theo, chúng ta hãy nhìn vào trường chiều rộng. Con số trong đó biểu thị độ rộng tối thiểu của trường mà mẫu sẽ được hiển thị. Nếu kích thước của giá trị trong biến nhỏ hơn, trường sẽ được đệm bằng khoảng trắng; nếu kích thước lớn hơn, mục nhập sẽ nằm ngoài trường. Như vậy, mẫu “%6d” cho số 385 sẽ xuất ra 385 (lưu ý ba dấu cách trước số).

Bộ xác định độ chính xác luôn bắt đầu bằng dấu chấm và số tiếp theo chỉ định các hành động khác nhau tùy thuộc vào loại giá trị. Đối với loại "d,o,u,x", nó sẽ cho biết số lượng ký tự tối thiểu sẽ xuất hiện trong quá trình xử lý. Đối với loại "f" - số chữ số thập phân. Đối với loại "s" - số ký tự chuỗi tối đa sẽ được xuất ra. Ví dụ: “%6.1f” cho số 34.2345 sẽ ra “34.1” (lưu ý dấu chấm cũng được coi là dấu và sẽ có hai dấu cách trước số đó). Hoặc mẫu "%.3s" từ chuỗi "precision" sẽ chỉ xuất ra ba ký tự đầu tiên - "precision".

Cờ cho phép bạn thay đổi cách hiển thị giá trị được hiển thị:

Bạn có thể đọc thêm về các mẫu hàm printf trên Internet. Ở đây tôi đã đưa ra một cái nhìn tổng quan ngắn gọn về các tính năng được sử dụng phổ biến nhất.

Vì vậy, hàm đầu ra của chúng ta, được viết lại để sử dụng đầu ra được định dạng, sẽ trông như thế này:

Lưu ý rằng ở dòng 33 và 37, chúng tôi tạo toàn bộ dòng cho đầu ra và ở dòng 34 và 38, chúng tôi in chúng.

Cuối cùng, các chức năng thiết lập và vòng lặp yêu thích của chúng tôi.

Ở dòng 47, chúng tôi đặt độ phân giải của màn hình, ở dòng 48, chúng tôi bật đèn nền (độ sáng có thể được điều chỉnh bằng chiết áp). Ở dòng 49, chúng ta đặt bộ đếm chu kỳ về 0. Chúng ta sẽ tăng nó lên một ở dòng thứ 37 của kết quả đầu ra (bạn có nhớ cấu trúc count++ không?). Cuối cùng, ở dòng 56, chúng ta gọi hàm hiển thị đã thảo luận trước đó. Tất cả.

Những gì có thể được thay đổi hoặc cải thiện?

Ví dụ: bạn có thể tự động điều khiển đèn nền tùy theo mức độ ánh sáng bằng cách sử dụng điện trở quang hoặc cảm biến ánh sáng từ trạm thời tiết đã thảo luận trong một số bài viết trước đó. Ví dụ: trong điều kiện ánh sáng mạnh, hãy tăng độ sáng của đèn nền và giảm độ sáng vào ban đêm. Hoặc vặn cảm biến chuyển động và bật đèn nền khi có vật thể xuất hiện phía trước màn hình, hoặc... Nói chung, tôi nghĩ bạn đã hiểu điều đó, nếu muốn, bằng cách thay thế một hoặc nhiều thành phần và viết một đoạn mã , bạn có thể cải thiện đáng kể khả năng sử dụng của màn hình. Chúng tôi cũng có thể sử dụng các biểu tượng do chính chúng tôi phát triển để hiển thị.

Tôi không xem xét tất cả những câu hỏi này ở đây vì chúng nằm ngoài phạm vi đánh giá dành cho người mới bắt đầu.

Và đó là tất cả những gì tôi có cho ngày hôm nay.

Arduino. Kết nối màn hình LCD

26 xếp hạng, Đánh giá trung bình: 5/5

Màn hình LCD 1602 kích thước, dựa trên bộ điều khiển HD44780, là một trong những màn hình đơn giản, giá cả phải chăng và phổ biến nhất để phát triển các thiết bị điện tử khác nhau. Nó có thể được tìm thấy cả trong các thiết bị được lắp ráp trên đầu gối và trong các thiết bị công nghiệp, chẳng hạn như máy pha cà phê. Các mô-đun và tấm chắn theo chủ đề Arduino phổ biến nhất như và được thu thập trên cơ sở màn hình này.

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách kết nối nó với Arduino và hiển thị thông tin.

Linh kiện sử dụng (mua tại Trung Quốc):

. Ban kiểm soát

. Dây kết nối

Những màn hình này có hai thiết kế: đèn nền màu vàng với chữ màu đen hoặc phổ biến hơn là đèn nền màu xanh với chữ màu trắng.

Kích thước của màn hình trên bộ điều khiển HD44780 có thể khác nhau nhưng chúng sẽ được điều khiển theo cùng một cách. Kích thước phổ biến nhất là 16x02 (tức là 16 ký tự trong hai dòng) hoặc 20x04. Độ phân giải của các ký hiệu là 5x8 pixel.

Hầu hết các màn hình không hỗ trợ bảng chữ cái Cyrillic; chỉ những màn hình được đánh dấu CTK mới có bảng chữ cái này. Nhưng chúng ta có thể cố gắng giải quyết một phần vấn đề này (tiếp tục trong bài viết).

Hiển thị kết quả đầu ra:

Màn hình có đầu nối 16pin để kết nối. Các chân được đánh dấu ở mặt sau của bảng.

1 (VSS) - Nguồn điện điều khiển (-)
2 (VDD) - Nguồn điện điều khiển (+)
3 (VO) - Chốt điều khiển độ tương phản
4 (RS) - Đăng ký chọn
5 (R/W) - Đọc/Ghi (chế độ ghi khi nối đất)
6 (E) - Bật (nhấp nháy khi giảm)
7-10 (DB0-DB3) - Bit thứ tự thấp của giao diện 8 bit
11-14 (DB4-DB7) - Bit bậc cao của giao diện
15 (A) - Nguồn điện đèn nền Anode (+)
16 (K) - Nguồn điện đèn nền Cathode (-)

Chế độ tự kiểm tra:

Trước khi thử kết nối và hiển thị thông tin, bạn nên tìm hiểu xem màn hình có hoạt động hay không. Để làm điều này, bạn cần cấp điện áp cho chính bộ điều khiển ( VSS và VDD), bật đèn nền ( A và K), đồng thời điều chỉnh độ tương phản.

Để điều chỉnh độ tương phản, hãy sử dụng chiết áp 10 kOhm. Không quan trọng nó sẽ có hình dạng như thế nào. +5V và GND được cấp cho các chân ngoài, chân trung tâm nối với đầu ra V.O.

Sau khi cấp nguồn cho mạch, cần phải đạt được độ tương phản chính xác, nếu đặt không đúng thì sẽ không hiển thị gì trên màn hình. Để điều chỉnh độ tương phản, hãy chơi với chiết áp.

Nếu mạch được lắp ráp chính xác và độ tương phản được điều chỉnh chính xác thì dòng trên cùng sẽ được lấp đầy bằng các hình chữ nhật trên màn hình.

Thông tin đầu ra:

Thư viện LiquidCrystal.h được tích hợp trong Arduino IDE được sử dụng để vận hành màn hình.

Chức năng thư viện

//Làm việc với con trỏ lcd.setCursor(0, 0); // Đặt con trỏ (số ô, dòng) lcd.home(); // Đặt con trỏ về 0 (0, 0) lcd.cursor(); // Kích hoạt khả năng hiển thị con trỏ (gạch chân) lcd.noCursor(); // Loại bỏ khả năng hiển thị con trỏ (gạch chân) lcd.blink(); // Cho phép nhấp nháy con trỏ (con trỏ 5x8) lcd.noBlink(); // Tắt nhấp nháy con trỏ (con trỏ 5x8) // Thông tin đầu ra lcd.print("trang web"); // Thông tin đầu ra lcd.clear(); // Xóa màn hình, (xóa tất cả dữ liệu) đặt con trỏ về 0 lcd.rightToLeft(); // Việc ghi được thực hiện từ phải sang trái lcd.leftToRight(); // Viết được thực hiện từ trái qua phải lcd.scrollDisplayRight(); // Dịch chuyển mọi thứ trên màn hình sang phải một ký tự lcd.scrollDisplayLeft(); // Dịch mọi thứ trên màn hình sang trái một ký tự //Thông tin hữu ích cho điệp viên :) lcd.noDisplay(); // Thông tin trên màn hình trở nên vô hình, dữ liệu không bị xóa // nếu tại thời điểm chức năng này được kích hoạt, không có gì được hiển thị thì lcd.display(); // Khi gọi hàm display(), tất cả thông tin đã được

Bản thân màn hình có thể hoạt động ở hai chế độ:

Chế độ 8 bit - cả bit thấp và bit cao đều được sử dụng cho việc này (BB0-DB7)

Chế độ 4 bit - chỉ các bit có trọng số thấp nhất được sử dụng cho chế độ này (BB4-DB7)

Không nên sử dụng chế độ 8 bit trên màn hình này. Hoạt động của nó cần thêm 4 chân nữa và thực tế không tăng tốc độ vì Tốc độ làm mới của màn hình này bị hạn chế< 10раз в секунду.

Để xuất văn bản, bạn cần kết nối các chân RS, E, DB4, DB5, DB6, DB7 với các chân điều khiển. Chúng có thể được kết nối với bất kỳ chân Arduino nào, điều chính là đặt đúng trình tự trong mã.

Mã mẫu:

//Đã thử nghiệm trên Arduino IDE 1.0.5#bao gồm // Thêm thư viện cần thiết LCD LiquidCrystal(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) trống rỗng cài đặt()(lcd.begin(16, 2); // Đặt kích thước màn hình lcd.setCursor(0, 0); // Đặt con trỏ về đầu 1 dòng lcd.print("Xin chào thế giới!"); // Hiển thị văn bản lcd.setCursor (0, 1); // Đặt con trỏ về đầu dòng 2 lcd.print("trang web"); // Văn bản xuất ra ) void vòng (){ }

Tạo biểu tượng của riêng bạn

Chúng tôi đã sắp xếp đầu ra văn bản, các chữ cái trong bảng chữ cái tiếng Anh được ghi cứng vào bộ nhớ của bộ điều khiển bên trong màn hình và không có vấn đề gì với chúng. Nhưng phải làm gì nếu ký hiệu được yêu cầu không có trong bộ nhớ của bộ điều khiển?

Màn hình LCD có kích thước 1602, được tạo ra trên cơ sở bộ điều khiển HD44780, ngày nay vẫn là một trong những màn hình có giá cả phải chăng, đơn giản và có nhu cầu phát triển bất kỳ loại thiết bị điện tử nào. Không có gì đáng ngạc nhiên khi chúng có thể được nhìn thấy cả trong các đơn vị đơn giản được lắp ráp trên đầu gối theo đúng nghĩa đen và trong các thiết bị công nghiệp nghiêm túc hơn, chẳng hạn như máy pha cà phê. Với màn hình này, các mô-đun và tấm chắn phổ biến nhất liên quan đến Arduino đã được lắp ráp, ví dụ như mô-đun LCD I2C và Tấm chắn bàn phím LCD.

Bài viết này giải thích chi tiết bằng hình ảnh cách kết nối LCD với Arduino và hiển thị thông tin.

1602 màn hình có hai phiên bản khác nhau:

Đèn nền màu vàng với chữ màu đen
- hoặc (điều này xảy ra thường xuyên hơn) đèn nền màu xanh lam với đèn nền màu trắng.

Kích thước của màn hình trên bộ điều khiển HD44780 rất khác nhau nhưng chúng được điều khiển theo cùng một cách. Kích thước phổ biến nhất là 16 x 02 (nghĩa là 16 ký tự trong hai dòng) hoặc 20 x 04. Bản thân các ký tự có độ phân giải 5 x 8 pixel.

Hầu hết các màn hình không hỗ trợ chữ Cyrillic (ngoại trừ màn hình có dấu CTK). Nhưng vấn đề này có thể giải quyết được một phần và bài viết mô tả chi tiết hơn về cách thực hiện việc này.

Màn hình có đầu nối 16-PIN để kết nối. Các kết luận có dấu hiệu ở mặt sau của bảng, nó như sau:

1 (VSS) – nguồn điện âm cho bộ điều khiển.
2 (VDD) – nguồn điện dương cho bộ điều khiển.
3 (VO) – cài đặt kiểm soát độ tương phản.
4 (RS) – lựa chọn đăng ký.
5 (R/W) – đọc và viết, đặc biệt là viết khi nối đất.
6 (E) – kích hoạt (kích hoạt).
7–10 (DB0-DB3) – các bit thứ tự thấp từ giao diện 8 bit.
11–14 (DB4-DB7) – các bit quan trọng nhất từ ​​giao diện
15 (A) – cực dương để cung cấp năng lượng cho đèn nền.
16 (K) – cực âm để cung cấp năng lượng cho đèn nền.

Bước 2: Kết nối màn hình LCD

Trước khi kết nối màn hình và truyền thông tin đến nó, cần kiểm tra chức năng của nó. Đầu tiên, cấp điện áp cho bộ điều khiển VSS và VDD, bật nguồn đèn nền (A, K), sau đó điều chỉnh độ tương phản. Đối với các cài đặt như vậy, chiết áp 10 kOhm là phù hợp, hình dạng của nó không quan trọng. +5V và GND được cấp cho các chân ngoài và chân ở giữa được nối với chân VO.

Khi cấp nguồn cho mạch, bạn cần đạt được độ tương phản cần thiết, nếu điều chỉnh sai thì hình ảnh trên màn hình sẽ không hiển thị. Để điều chỉnh độ tương phản, bạn cần “chơi” với chiết áp. Khi mạch được lắp ráp chính xác và độ tương phản được điều chỉnh chính xác, dòng trên cùng của màn hình phải được lấp đầy bằng các hình chữ nhật.

Để làm cho màn hình hoạt động, một thư viện đặc biệt, LiquidCrystal.h, được tích hợp trong Arduino IDE, sẽ được sử dụng mà tôi sẽ viết dưới đây. Nó có thể hoạt động ở chế độ 8 bit và 4 bit. Trong tùy chọn đầu tiên, chỉ các bit ít quan trọng nhất và quan trọng nhất (BB0-DB7) được sử dụng, trong tùy chọn thứ hai - chỉ các bit ít quan trọng nhất (BB4-DB7).

Nhưng sử dụng chế độ 8 bit trong màn hình này là một quyết định sai lầm; hầu như không có lợi thế về tốc độ vì tốc độ làm mới của nó luôn dưới 10 lần mỗi giây. Để hiển thị văn bản, bạn cần kết nối các chân DB7, DB6, DB5, DB4, E và RS với các chân điều khiển. Chúng có thể được kết nối với bất kỳ chân Arduino nào, điều chính là đặt đúng trình tự trong mã.

Nếu ký hiệu được yêu cầu chưa có trong bộ nhớ của bộ điều khiển, bạn có thể xác định thủ công (tổng cộng tối đa bảy ký hiệu). Ô trong màn hình đang được xem xét có phần mở rộng là 5 x 8 pixel. Nhiệm vụ của việc tạo một biểu tượng là viết một mặt nạ bit và đặt chúng vào những nơi mà các dấu chấm sẽ sáng và các số 0 ở những nơi không nên sáng.

Sơ đồ kết nối được thảo luận ở trên không phải lúc nào cũng tốt vì Arduino sử dụng ít nhất sáu đầu ra kỹ thuật số.

Bước 3: Cách giải quyết

Hãy cùng khám phá một lựa chọn để giải quyết vấn đề này và giải quyết chỉ với hai. Chúng tôi cần một mô-đun chuyển đổi bổ sung cho LCD sang IIC/I2C. Bạn có thể xem cách nó được hàn vào màn hình và kết nối với Arduino trong hình ảnh bên dưới.

Nhưng tùy chọn kết nối này chỉ hoạt động với một thư viện đặc biệt, LiquidCrystal_I2C1602V1, tuy nhiên, thư viện này rất dễ tìm thấy trên Internet và cài đặt, sau đó bạn có thể sử dụng nó mà không gặp vấn đề gì.

Bước 4: Thư viện LiquidCrystal.h

Thư viện LiquidCrystal.h có thể được tải xuống từ tài nguyên chính thức -. Bạn cũng có thể tải xuống từ các liên kết dưới đây:

phác thảo

Khi bạn đã tải xuống kho lưu trữ, hãy thay thế thư mục LiquidCrystal trong thư mục thư viện trong thư mục cài đặt Arduino của bạn.

Bạn có thể xem một bản phác thảo mẫu trong Tệp -> Ví dụ -> LiquidCrystal -> HelloWorld_SPI(Tệp -> Ví dụ -> LiquidCrystal -> HelloWorld_SPI).

Điều này kết thúc bài học tiếp theo của chúng tôi. Chúng tôi chúc bạn những dự án chất lượng!