// STM32 Nucleo-C031C6 SPI LCD Example
// Simulation: https://wokwi.com/projects/365549388158011393
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_CLK 13
#define TFT_MISO 12
#define TFT_MOSI 11
#define TFT_RST 8
#define TFT_DC 2
#define TFT_CS 3
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
uint8_t buttonState = 0;
int state =0;
// Определите начальный и конечный цвета
uint16_t rainbowColors[] = {0xF800, 0xFA00, 0xFC00, 0xFE00, 0xFFE0, 0x07E0, 0x05E0, 0x03E0, 0x01E0, 0x001F};
void setup() {
Serial.begin(115200);
tft.begin();
tft.fillScreen(ILI9341_BLACK);
}
void loop() {
buttonState = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11);
if (buttonState == 1) { // если кнопка нажата
state++;
if (state>4) state =0;
tft.fillScreen(ILI9341_BLACK);
}
switch (state)
{
case 0:
// рисуем надпись "button Click"
tft.setCursor(50, 150);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("button Click");
break;
case 1:
// рисуем надпись "button Click"
// Рисуем "Г"
for(int i = 0; i < 3; i++) {
tft.drawLine(60+i, 60, 60+i, 100, ILI9341_WHITE);
tft.drawLine(60, 60-i, 80, 60-i, ILI9341_WHITE);
}
// Рисуем "л"
for(int i = 0; i < 3; i++) {
tft.drawLine(85+i, 100, 95+i, 80, ILI9341_WHITE);
tft.drawLine(95+i, 80, 105+i, 100, ILI9341_WHITE);
}
// Рисуем "е"
for(int i = 0; i < 3; i++) {
tft.drawLine(110+i, 100, 110+i, 80, ILI9341_WHITE);
tft.drawLine(110, 100-i, 130, 100-i, ILI9341_WHITE);
tft.drawLine(110, 90-i, 120, 90-i, ILI9341_WHITE);
tft.drawLine(110, 80+i, 130, 80+i, ILI9341_WHITE);
}
// Рисуем "б"
for(int i = 0; i < 3; i++) {
tft.drawLine(135+i, 100, 135+i, 80, ILI9341_WHITE);
tft.drawLine(135, 100-i, 154, 100-i, ILI9341_WHITE);
tft.drawLine(135, 80+i, 155, 80+i, ILI9341_WHITE);
tft.drawLine(135, 90-i, 154, 90-i, ILI9341_WHITE);
tft.drawLine(153+i, 100, 153+i, 90, ILI9341_WHITE);
}
// Рисуем "С"
for(int i = 0; i < 3; i++) {
tft.drawLine(35+i, 140, 35+i, 180, ILI9341_RED);
tft.drawLine(35, 140+i, 55, 140+i, ILI9341_RED);
tft.drawLine(35, 180-i, 55, 180-i, ILI9341_RED);
}
// Рисуем "а"
for(int i = 0; i < 3; i++) {
tft.drawLine(60+i, 180, 60+i, 159, ILI9341_RED);
tft.drawLine(61, 159+i, 79, 159+i, ILI9341_RED);
tft.drawLine(60, 170+i, 80, 170+i, ILI9341_RED);
tft.drawLine(80+i, 180, 80+i, 159, ILI9341_RED);
}
// Рисуем "л"
for(int i = 0; i < 3; i++) {
tft.drawLine(85+i, 180, 95+i, 160, ILI9341_RED);
tft.drawLine(95+i, 160, 105+i, 180, ILI9341_RED);
}
// Рисуем "а"
for(int i = 0; i < 3; i++) {
tft.drawLine(110+i, 180, 110+i, 159, ILI9341_RED);
tft.drawLine(111, 159+i, 129, 159+i, ILI9341_RED);
tft.drawLine(110, 170+i, 130, 170+i, ILI9341_RED);
tft.drawLine(130+i, 180, 130+i, 159, ILI9341_RED);
}
// Рисуем "м"
for(int i = 0; i < 3; i++) {
tft.drawLine(135+i, 180, 135+i, 160, ILI9341_RED);
tft.drawLine(135+i, 160, 145+i, 180, ILI9341_RED);
tft.drawLine(145+i, 180, 155+i, 160, ILI9341_RED);
tft.drawLine(155+i, 180, 155+i, 160, ILI9341_RED);
}
// Рисуем "ч"
for(int i = 0; i < 3; i++) {
tft.drawLine(160+i, 160, 160+i, 170, ILI9341_RED);
tft.drawLine(160, 170-i, 170, 170-i, ILI9341_RED);
tft.drawLine(170+i, 180, 170+i, 160, ILI9341_RED);
}
// Рисуем "и"
for(int i = 0; i < 3; i++) {
tft.drawLine(175+i, 180, 175+i, 160, ILI9341_RED);
tft.drawLine(175+i, 180, 185+i, 160, ILI9341_RED);
tft.drawLine(185+i, 180, 185+i, 160, ILI9341_RED);
}
// Рисуем "к"
for(int i = 0; i < 3; i++) {
tft.drawLine(190+i, 180, 190+i, 160, ILI9341_RED);
tft.drawLine(190+i, 170, 200+i, 160, ILI9341_RED);
tft.drawLine(190+i, 170, 200+i, 180, ILI9341_RED);
}
tft.setCursor(50, 250);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("button Click");
break;
case 2:
// Используйте цикл for для рисования каждой буквы
for(int letter = 0; letter < 10; letter++) {
// Вычислите текущий цвет
uint16_t currentColor = rainbowColors[letter % (sizeof(rainbowColors) / sizeof(uint16_t))];
// Рисуйте букву с текущим цветом
drawLetter(letter, currentColor);
}
// Рисуем "П"
for(int i = 0; i < 3; i++) {
tft.drawLine(25+i, 81, 25+i, 120, ILI9341_RED);
tft.drawLine(26, 80+i, 45, 80+i, ILI9341_RED);
tft.drawLine(45+i, 81, 45+i, 120, ILI9341_RED);
}
// Рисуем "о"
for(int i = 0; i < 3; i++) {
tft.drawLine(50+i, 120, 50+i, 100, ILI9341_RED);
tft.drawLine(50, 100+i, 60, 100+i, ILI9341_RED);
tft.drawLine(50, 120-i, 60, 120-i, ILI9341_RED);
tft.drawLine(60+i, 120, 60+i, 100, ILI9341_RED);
}
// Рисуем "з"
for(int i = 0; i < 3; i++) {
tft.drawLine(65, 100+i, 75, 100+i, ILI9341_RED);
tft.drawLine(65, 120-i, 75, 120-i, ILI9341_RED);
tft.drawLine(75+i, 101, 75+i, 109, ILI9341_RED);
tft.drawLine(75+i, 111, 75+i, 119, ILI9341_RED);
tft.drawLine(70, 109+i, 74, 109+i, ILI9341_RED);
}
// Рисуем "д"
for(int i = 0; i < 3; i++) {
tft.drawLine(80, 120-i, 100, 120-i, ILI9341_RED);
tft.drawLine(88, 100+i, 95, 100+i, ILI9341_RED);
tft.drawLine(83+i, 120, 88+i, 100, ILI9341_RED);
tft.drawLine(95+i, 120, 95+i, 100, ILI9341_RED);
tft.drawLine(80+i, 120, 83+i, 125, ILI9341_RED);
tft.drawLine(100, 120-i, 95, 125-i, ILI9341_RED);
}
// Рисуем “р”
for(int i = 0; i < 3; i++)
{ tft.drawLine(105+i, 101, 105+i, 130, ILI9341_RED);
tft.drawLine(106, 100+i, 115, 100+i, ILI9341_RED);
tft.drawLine(115+i, 101, 115+i, 120, ILI9341_RED);
tft.drawLine(106, 120-i, 115, 120-i, ILI9341_RED); }
// Рисуем “а”
for(int i = 0; i < 3; i++)
{ tft.drawLine(120+i, 120, 120+i, 101, ILI9341_RED);
tft.drawLine(121, 100+i, 131, 100+i, ILI9341_RED);
tft.drawLine(120, 110+i, 130, 110+i, ILI9341_RED);
tft.drawLine(130+i, 120, 130+i, 101, ILI9341_RED); }
// Рисуем “в”
for(int i = 0; i < 3; i++)
{ tft.drawLine(135, 100+i, 145, 100+i, ILI9341_RED);
tft.drawLine(135, 120-i, 145, 120-i, ILI9341_RED);
tft.drawLine(145+i, 101, 145+i, 109, ILI9341_RED);
tft.drawLine(145+i, 111, 145+i, 119, ILI9341_RED);
tft.drawLine(135, 109+i, 144, 109+i, ILI9341_RED);
tft.drawLine(135+i, 120, 135+i, 100, ILI9341_RED); }
// Рисуем “л”
for(int i = 0; i < 3; i++)
{ tft.drawLine(150+i, 120, 160+i, 100, ILI9341_RED);
tft.drawLine(160+i, 120, 160+i, 100, ILI9341_RED); }
// Рисуем “е”
for(int i = 0; i < 3; i++)
{ tft.drawLine(165+i, 120, 165+i, 100, ILI9341_RED);
tft.drawLine(165, 100+i, 175, 100+i, ILI9341_RED);
tft.drawLine(170, 110-i, 165, 110-i, ILI9341_RED);
tft.drawLine(165, 120-i, 175, 120-i, ILI9341_RED); }
// Рисуем “н”
for(int i = 0; i < 3; i++)
{ tft.drawLine(180+i, 120, 180+i, 100, ILI9341_RED);
tft.drawLine(180, 109+i, 190, 109+i, ILI9341_RED);
tft.drawLine(190+i, 120, 190+i, 100, ILI9341_RED); }
// Рисуем “и”
for(int i = 0; i < 3; i++)
{ tft.drawLine(195+i, 120, 195+i, 100, ILI9341_RED);
tft.drawLine(195+i, 120, 205+i, 100, ILI9341_RED);
tft.drawLine(205+i, 120, 205+i, 100, ILI9341_RED); }
// Рисуем “е”
for(int i = 0; i < 3; i++)
{ tft.drawLine(210+i, 120, 210+i, 100, ILI9341_RED);
tft.drawLine(210, 100+i, 220, 100+i, ILI9341_RED);
tft.drawLine(215, 110-i, 210, 110-i, ILI9341_RED);
tft.drawLine(210, 120-i, 220, 120-i, ILI9341_RED); }
tft.setCursor(0, 150);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("I am sorry for writing in English, but the Russian language pack is not working. I wish you a happy birthday. I have a few main wishes for you:");
tft.setCursor(50, 300);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("button Click");
break;
case 3:
tft.setCursor(0, 50);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("1. Live joyfully, do what you want and how you want");
tft.println("2. Move forward and do not care about what anyone else says");
tft.println("3. Not a wish, but gratitude. I am glad I met you");
tft.setCursor(50, 300);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("button Click");
break;
case 4:
tft.setCursor(55, 300);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("Next link");
break;
}
}
void drawLetter(int letter, uint16_t color) {
switch(letter) {
case 0: // Рисуем "С"
for(int i = 0; i < 3; i++) {
tft.drawLine(20+i, 21, 20+i, 59, color);
tft.drawLine(21, 20+i, 40, 20+i, color);
tft.drawLine(21, 60-i, 40, 60-i, color);
}
break;
case 1: // Рисуем "д"
for(int i = 0; i < 3; i++) {
tft.drawLine(50, 60-i, 70, 60-i, color);
tft.drawLine(58, 40+i, 65, 40+i, color);
tft.drawLine(53+i, 60, 58+i, 40, color);
tft.drawLine(65+i, 60, 65+i, 40, color);
tft.drawLine(50+i, 60, 53+i, 65, color);
tft.drawLine(70, 60-i, 65, 65-i, color);
}
break;
case 2: // Рисуем "н"
for(int i = 0; i < 3; i++) {
tft.drawLine(75+i, 60, 75+i, 40, color);
tft.drawLine(85+i, 60, 85+i, 40, color);
tft.drawLine(75, 50+i, 85, 50+i, color);
}
break;
case 3: // Рисуем "ю"
for(int i = 0; i < 3; i++) {
tft.drawLine(90+i, 60, 90+i, 40, color);
tft.drawLine(100+i, 59, 100+i, 41, color);
tft.drawLine(90, 50+i, 100, 50+i, color);
tft.drawLine(110+i, 59, 110+i, 41, color);
tft.drawLine(100, 40+i, 110, 40+i, color);
tft.drawLine(100, 60-i, 110, 60-i, color);
}
break;
case 4: // Рисуем "х"
for(int i = 0; i < 3; i++) {
tft.drawLine(115+i, 60, 125+i, 40, color);
tft.drawLine(125+i, 60, 115+i, 40, color);
}
break;
case 5: // Рисуем "о"
for(int i = 0; i < 3; i++) {
tft.drawLine(130+i, 60, 130+i, 40, color);
tft.drawLine(130, 40+i, 140, 40+i, color);
tft.drawLine(130, 60-i, 140, 60-i, color);
tft.drawLine(140+i, 60, 140+i, 40, color);
}
break;
case 6: // Рисуем "й"
for(int i = 0; i < 3; i++) {
tft.drawLine(145+i, 60, 145+i, 40, color);
tft.drawLine(145+i, 60, 155+i, 40, color);
tft.drawLine(155+i, 60, 155+i, 40, color);
tft.drawLine(148, 32+i, 152, 32+i, color);
}
break;
case 7: // Рисуем "Б"
for(int i = 0; i < 3; i++) {
tft.drawLine(165+i, 60, 165+i, 20, color);
tft.drawLine(165, 20+i, 185, 20+i, color);
tft.drawLine(165, 40+i, 184, 40+i, color);
tft.drawLine(165, 60-i, 184, 60-i, color);
tft.drawLine(185+i, 60, 185+i, 41, color);
}
break;
case 8: // Рисуем "р"
for(int i = 0; i < 3; i++) {
tft.drawLine(190+i, 70, 190+i, 40, color);
tft.drawLine(190, 40+i, 200, 40+i, color);
tft.drawLine(190, 60-i, 200, 60-i, color);
tft.drawLine(200+i, 60, 200+i, 41, color);
}
break;
case 9: // Рисуем "о"
for(int i = 0; i < 3; i++) {
tft.drawLine(205+i, 60, 205+i, 40, color);
tft.drawLine(205, 40+i, 215, 40+i, color);
tft.drawLine(205, 60-i, 215, 60-i, color);
tft.drawLine(215+i, 60, 215+i, 40, color);
}
break;
}
}
GPIO_InitTypeDef GPIO_InitStruct = {0};
static void MX_GPIO_Init(void)
{
GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}