Загрузил(а) файлы в ''
This commit is contained in:
parent
be7bedb8c7
commit
97f38c92d5
64
display_functions.c
Normal file
64
display_functions.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#include "display_functions.h"
|
||||||
|
#include <Wire.h>
|
||||||
|
|
||||||
|
#define LCD_ADDRESS 0x27 // Адрес дисплея на шине I2C
|
||||||
|
#define LCD_WIDTH 16 // Ширина дисплея в символах
|
||||||
|
#define LCD_HEIGHT 2 // Высота дисплея в строках
|
||||||
|
|
||||||
|
void lcd_send_command(uint8_t command) {
|
||||||
|
Wire.beginTransmission(LCD_ADDRESS);
|
||||||
|
i2c_send_byte(0x80); // Co = 0, Rs = 0 (управляющий байт)
|
||||||
|
i2c_send_byte(command);
|
||||||
|
Wire.endTransmission();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_send_data(uint8_t data) {
|
||||||
|
Wire.beginTransmission(LCD_ADDRESS);
|
||||||
|
i2c_send_byte(0xC0); // Co = 0, Rs = 1 (байт данных)
|
||||||
|
i2c_send_byte(data);
|
||||||
|
Wire.endTransmission();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_send_string(const char *str) {
|
||||||
|
while (*str) {
|
||||||
|
lcd_send_data(*str);
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_clear() {
|
||||||
|
lcd_send_command(0x01); // Очистка дисплея
|
||||||
|
_delay_ms(2); // Небольшая пауза для завершения очистки
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_init() {
|
||||||
|
Wire.begin();
|
||||||
|
lcd_send_command(0x38); // Установка интерфейса: 8 бит данных, 2 строки, 5x8 точек
|
||||||
|
lcd_send_command(0x08); // Отключение дисплея, курсора и мигания курсора
|
||||||
|
lcd_send_command(0x01); // Очистка дисплея
|
||||||
|
_delay_ms(2); // Небольшая пауза для завершения очистки
|
||||||
|
lcd_send_command(0x06); // Установка направления текста: курсор увеличивается, сдвиг дисплея
|
||||||
|
lcd_send_command(0x0C); // Включение дисплея без курсора и мигания курсора
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_print_char(char c) {
|
||||||
|
lcd_send_data(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_print_string(const char *str) {
|
||||||
|
lcd_send_string(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_update(const DisplayData *displayData, const TextCounter *textCounter) {
|
||||||
|
lcd_clear(); // Очистка дисплея перед выводом новой информации
|
||||||
|
|
||||||
|
// Вывод данных на первую строку
|
||||||
|
lcd_send_command(0x80); // Установка курсора на начало первой строки
|
||||||
|
lcd_send_string(displayData->topLine);
|
||||||
|
|
||||||
|
// Вывод данных на вторую строку
|
||||||
|
lcd_send_command(0xC0); // Установка курсора на начало второй строки
|
||||||
|
char buffer[17];
|
||||||
|
snprintf(buffer, sizeof(buffer), "%d.%d.%d", displayData->value1, displayData->value2, displayData->value3);
|
||||||
|
lcd_send_string(buffer);
|
||||||
|
}
|
24
display_functions.h
Normal file
24
display_functions.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef DISPLAY_FUNCTIONS_H
|
||||||
|
#define DISPLAY_FUNCTIONS_H
|
||||||
|
|
||||||
|
#include "i2c_functions.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct DisplayData {
|
||||||
|
char topLine[64];
|
||||||
|
int value1;
|
||||||
|
int value2;
|
||||||
|
int value3;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TextCounter {
|
||||||
|
unsigned long startTime;
|
||||||
|
int incrementValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
void lcd_init();
|
||||||
|
void lcd_print_char(char c);
|
||||||
|
void lcd_print_string(const char *str);
|
||||||
|
void lcd_update(const DisplayData *displayData, const TextCounter *textCounter);
|
||||||
|
|
||||||
|
#endif
|
24
i2c_functions.c
Normal file
24
i2c_functions.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "i2c_functions.h"
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
// Здесь можно вставить код инициализации I2C, если требуется
|
||||||
|
|
||||||
|
void i2c_delay() {
|
||||||
|
_delay_us(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_start() {
|
||||||
|
// Реализация отправки стартового условия I2C
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_stop() {
|
||||||
|
// Реализация отправки стопового условия I2C
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_send_byte(uint8_t data) {
|
||||||
|
// Реализация отправки одного байта данных по I2C
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_send_bytes(const uint8_t *data, uint8_t length) {
|
||||||
|
// Реализация отправки массива данных (длиной length) по I2C
|
||||||
|
}
|
12
i2c_functions.h
Normal file
12
i2c_functions.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef I2C_FUNCTIONS_H
|
||||||
|
#define I2C_FUNCTIONS_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void i2c_delay();
|
||||||
|
void i2c_start();
|
||||||
|
void i2c_stop();
|
||||||
|
void i2c_send_byte(uint8_t data);
|
||||||
|
void i2c_send_bytes(const uint8_t *data, uint8_t length);
|
||||||
|
|
||||||
|
#endif
|
53
main.c
Normal file
53
main.c
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include "display_functions.h"
|
||||||
|
|
||||||
|
// Основной код вашего проекта
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// Настройка портов и другие инициализации
|
||||||
|
|
||||||
|
lcd_init(); // Инициализация дисплея
|
||||||
|
|
||||||
|
// Ваш код в функции setup()
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
unsigned long currentTime = millis(); // Текущее время
|
||||||
|
// Проверяем, прошло ли 500 мс с момента последнего увеличения incrementValue
|
||||||
|
if (currentTime - textCounter.startTime >= 500) {
|
||||||
|
textCounter.incrementValue++; // Увеличиваем incrementValue на 1
|
||||||
|
textCounter.startTime = currentTime; // Обновляем время
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayData displayData;
|
||||||
|
strncpy(displayData.topLine, "we are responsible for those who have been tame ", sizeof(displayData.topLine) - 1);
|
||||||
|
displayData.topLine[sizeof(displayData.topLine) - 1] = '\0';
|
||||||
|
displayData.value1 = 500;
|
||||||
|
displayData.value2 = 800;
|
||||||
|
displayData.value3 = 855;
|
||||||
|
// Буферы для заполнения данных
|
||||||
|
char buffer1[17];
|
||||||
|
char buffer2[17];
|
||||||
|
// Заполнение буфера 1
|
||||||
|
fillBuffer1(displayData.topLine, buffer1, sizeof(buffer1), textCounter.incrementValue);
|
||||||
|
// Заполнение буфера 2
|
||||||
|
fillBuffer2(displayData.value1, displayData.value2, displayData.value3, buffer2, sizeof(buffer2));
|
||||||
|
// Создание массива для вывода на дисплей
|
||||||
|
char displayArray[32];
|
||||||
|
strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray
|
||||||
|
strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16
|
||||||
|
|
||||||
|
// Вывод данных на экран
|
||||||
|
lcd.setCursor(0, 0);
|
||||||
|
lcd.print(displayArray);
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print(displayArray + 16); // Вывод второй половины displayArray
|
||||||
|
|
||||||
|
// Ваш код в функции loop() может быть здесь или в другом месте
|
||||||
|
|
||||||
|
// Обновление данных на дисплее
|
||||||
|
lcd_update(&displayData, &textCounter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user