устранены проблемы с кодировкой
This commit is contained in:
parent
cfe4861db9
commit
d573366b75
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* buttons.c
|
||||
*
|
||||
* Created on: 15 <EFBFBD><EFBFBD><EFBFBD>. 2024 <EFBFBD>.
|
||||
* Created on: 15 авг. 2024 г.
|
||||
* Author: sedov
|
||||
*/
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
#include "pwm_init.h"
|
||||
#include "i2c_oled.h"
|
||||
#define MAX_SCREENS 5;
|
||||
//button 0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D><><EFBFBD><EFBFBD><EFBFBD> 2-<2D><><EFBFBD><EFBFBD> 3-<2D><><EFBFBD><EFBFBD> 4- <20><><EFBFBD><EFBFBD>
|
||||
//button 0 - ничего 1-вверх 2-вниз 3-пуск 4- стоп
|
||||
uint16_t Button_Sost = 0;
|
||||
volatile uint16_t buttonClik=0, ScreenSost=0, button=0 ;
|
||||
extern uint16_t I2C_TXdata[];
|
||||
@ -26,10 +26,10 @@ typedef enum {
|
||||
MENU_TEMP,
|
||||
MENU_BRIGHT_FUTURE,
|
||||
MENU_DIAKONT,
|
||||
MENU_ITEMS_COUNT // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MENU_ITEMS_COUNT // Количество пунктов меню
|
||||
} MenuItem;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// Глобальная переменная для хранения текущего пункта меню
|
||||
MenuItem currentMenuItem = MENU_START;
|
||||
|
||||
__interrupt void buttonclik_isr(void)
|
||||
@ -40,8 +40,8 @@ __interrupt void buttonclik_isr(void)
|
||||
}
|
||||
int buttonsRead(){
|
||||
int err1,err2;
|
||||
err1=I2CWrite(0x25, 0, 0, false, &Button_Sost); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
err2=I2CRead(0x25, 1, true, &Button_Sost); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
err1=I2CWrite(0x25, 0, 0, false, &Button_Sost); // Перед чтением всегда должна быть запись
|
||||
err2=I2CRead(0x25, 1, true, &Button_Sost); // Читаем состояние порта
|
||||
if(err1 != 0 || err2 != 0){
|
||||
return 1;
|
||||
}else{
|
||||
@ -53,13 +53,13 @@ void buttonsInit(void) {
|
||||
uint16_t Conf0 = 0xFE;
|
||||
uint16_t Conf1 = 0xFF;
|
||||
|
||||
I2CWrite(0x25, 6, 1, true, &Conf1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
I2CWrite(0x25, 6, 1, true, &Conf1); // Конфигурирование кнопок на вход
|
||||
I2CWrite(0x25, 7, 1, true, &Conf1);
|
||||
|
||||
I2CWrite(0x25, 0, 0, false, &Button_Sost); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
I2CRead(0x25, 1, true, &Button_Sost); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
I2CWrite(0x25, 0, 0, false, &Button_Sost); // Перед чтением всегда должна быть запись
|
||||
I2CRead(0x25, 1, true, &Button_Sost); // Читаем состояние порта
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XINT3
|
||||
// Настройка прерывания XINT3
|
||||
EALLOW;
|
||||
PieVectTable.XINT3_INT = &buttonclik_isr;
|
||||
IER |= M_INT12;
|
||||
@ -73,37 +73,37 @@ void buttonsInit(void) {
|
||||
|
||||
int buttonsDisp(){
|
||||
if(buttonClik!=0){
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//читаем состояние кнопок
|
||||
if(buttonsRead()){
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//обработка ошибки чтения
|
||||
return 1;
|
||||
}
|
||||
Button_Sost=Button_Sost&0xF;
|
||||
switch(Button_Sost){
|
||||
case 0xD:
|
||||
if(button < 0XFF)
|
||||
button+=0XFF;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
button+=0XFF;//ПУСК
|
||||
break;
|
||||
case 0xB:
|
||||
if(button >= 0XFF)
|
||||
button-=0XFF;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
button-=0XFF;//СТОП
|
||||
break;
|
||||
case 0xE:
|
||||
if(button < 0XFF){
|
||||
button++;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
button++;//ВЕРХ
|
||||
if(button>MENU_ITEMS_COUNT-1){
|
||||
button=0;
|
||||
}}
|
||||
break;
|
||||
case 0x7:
|
||||
if(button < 0XFF)
|
||||
button--;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
button--;//ВЕРХ
|
||||
if(button==0xFFFF){
|
||||
button=MENU_ITEMS_COUNT-1;
|
||||
}
|
||||
break;
|
||||
// default:
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
default:
|
||||
//несколько кнопок нажали
|
||||
}
|
||||
SSD1306_Fill(SSD1306_COLOR_BLACK);
|
||||
Button_Sost=0;
|
||||
@ -208,24 +208,24 @@ void MenuDisp(){
|
||||
void MenuBilder(void) {
|
||||
uint16_t i,yPos;
|
||||
char tempStr[5];
|
||||
uint16_t topItem = currentMenuItem; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t topItem = currentMenuItem; // Верхний видимый пункт
|
||||
if (topItem > 2) {
|
||||
topItem = currentMenuItem - 2;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Очищаем экран
|
||||
SSD1306_Fill(SSD1306_COLOR_BLACK);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Отрисовка заголовка
|
||||
SSD1306_DrawFilledRectangle(0, 0, 128, 10, SSD1306_COLOR_WHITE);
|
||||
SSD1306_GotoXY(30, 1);
|
||||
SSD1306_Puts("START MENU", &Font_7x10, SSD1306_COLOR_BLACK);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// Отрисовка пунктов меню
|
||||
for ( i = 0; i < 4 && (topItem + i) < MENU_ITEMS_COUNT; i++) {
|
||||
yPos = 13 + i*13; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
yPos = 13 + i*13; // Вертикальная позиция пункта
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Выделение выбранного пункта
|
||||
if (topItem + i == currentMenuItem) {
|
||||
SSD1306_DrawFilledRectangle(0, yPos, 128, 13, SSD1306_COLOR_WHITE);
|
||||
} else {
|
||||
@ -234,19 +234,19 @@ void MenuBilder(void) {
|
||||
if(yPos==52){
|
||||
yPos-=2;
|
||||
}
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вывод номера пункта
|
||||
SSD1306_GotoXY(5, yPos + 3);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sprintf <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||||
// Используем sprintf для преобразования числа в строку
|
||||
// Преобразование числа в строку "вручную"
|
||||
uint8_t num = topItem + i + 1;
|
||||
tempStr[0] = '0' + (num / 10); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
tempStr[1] = '0' + (num % 10); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
tempStr[2] = '\0'; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
tempStr[0] = '0' + (num / 10); // Десятки
|
||||
tempStr[1] = '0' + (num % 10); // Единицы
|
||||
tempStr[2] = '\0'; // Нуль-терминатор
|
||||
if (topItem + i == currentMenuItem) {
|
||||
SSD1306_Puts(tempStr, &Font_7x10, SSD1306_COLOR_BLACK);
|
||||
}else
|
||||
SSD1306_Puts(tempStr, &Font_7x10, SSD1306_COLOR_WHITE);
|
||||
SSD1306_GotoXY(20, yPos + 3); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SSD1306_GotoXY(20, yPos + 3); // Сдвиг для названия пункта
|
||||
|
||||
switch (topItem + i) {
|
||||
case MENU_START:
|
||||
@ -271,3 +271,4 @@ void MenuBilder(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -80,8 +80,8 @@ static uint16_t diod = 0;
|
||||
fault_read_clr();
|
||||
fault_read_ports();
|
||||
}else{
|
||||
// buttonsDisp();
|
||||
// ScreenDisp();
|
||||
buttonsDisp();
|
||||
ScreenDisp();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -97,15 +97,15 @@ uint8_t SSD1306_Init(void) {
|
||||
|
||||
void SSD1306_setPosition(uint8_t column, uint8_t page) {
|
||||
if (column > SSD1306_WIDTH - 1) {
|
||||
column = 0; // Ограничение столбца
|
||||
column = 0; // Ограничение столбца
|
||||
}
|
||||
if (page > 7) {
|
||||
page = 0; // Ограничение страницы
|
||||
page = 0; // Ограничение страницы
|
||||
}
|
||||
|
||||
SSD1306_WRITECOMMAND(0x20+column); // Начальный адрес столбца
|
||||
SSD1306_WRITECOMMAND(SSD1306_PAGEADDR+page); // Начальный адрес страницы
|
||||
// SSD1306_WRITECOMMAND(7); // Конечный адрес страницы
|
||||
SSD1306_WRITECOMMAND(0x20+column); // Начальный адрес столбца
|
||||
SSD1306_WRITECOMMAND(SSD1306_PAGEADDR+page); // Начальный адрес страницы
|
||||
// SSD1306_WRITECOMMAND(7); // Конечный адрес страницы
|
||||
}
|
||||
|
||||
|
||||
@ -118,9 +118,9 @@ void SSD1306_UpdateScreen(void) {
|
||||
SSD1306_WRITECOMMAND(0x10);
|
||||
SSD1306_WRITECOMMAND(0x00);
|
||||
for (column = 0; column < SSD1306_WIDTH; column++) { //
|
||||
SSD1306_setPosition(column, page); // Начало столбца - 0, страница - m
|
||||
// Запись данных в буфер дисплея
|
||||
I2C_TXdata[0] = 0x40; // Байт управления: данные
|
||||
SSD1306_setPosition(column, page); // Начало столбца - 0, страница - m
|
||||
// Запись данных в буфер дисплея
|
||||
I2C_TXdata[0] = 0x40; // Байт управления: данные
|
||||
for ( i = 0; i < SSD1306_WIDTH; i++) {
|
||||
I2C_TXdata[i + 1] = SSD1306_Buffer[SSD1306_WIDTH*page + i];
|
||||
}
|
||||
@ -130,7 +130,7 @@ void SSD1306_UpdateScreen(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void SSD1306_UpdateScreenАFAST(void) {
|
||||
void SSD1306_UpdateScreenAFAST(void) {
|
||||
|
||||
uint8_t page;
|
||||
uint8_t column;
|
||||
@ -140,12 +140,12 @@ void SSD1306_UpdateScreen
|
||||
SSD1306_WRITECOMMAND(0x10);
|
||||
SSD1306_WRITECOMMAND(0x00);
|
||||
for (column = 0; column < SSD1306_WIDTH-60; column++) { //
|
||||
SSD1306_setPosition(column+60, page); // Начало столбца - 0, страница - m
|
||||
SSD1306_setPosition(column+60, page); // Начало столбца - 0, страница - m
|
||||
|
||||
// Запись данных в буфер дисплея
|
||||
I2C_TXdata[0] = 0x40; // Байт управления: данные
|
||||
// Заполнить буфер I2C данными из буфера дисплея
|
||||
I2C_TXdata[0] = 0x40; // Команда записи данных
|
||||
// Запись данных в буфер дисплея
|
||||
I2C_TXdata[0] = 0x40; // Байт управления: данные
|
||||
// Заполнить буфер I2C данными из буфера дисплея
|
||||
I2C_TXdata[0] = 0x40; // Команда записи данных
|
||||
I2C_TXdata[1] = SSD1306_Buffer[SSD1306_WIDTH*page + column];
|
||||
I2CWriteOLED(I2C_SLAVE_ADDRESS, 2, true);
|
||||
}
|
||||
@ -176,9 +176,9 @@ void SSD1306_DrawPixel(uint16_t x, uint16_t y, SSD1306_COLOR_t color) {
|
||||
color = (SSD1306_COLOR_t)!color;
|
||||
}
|
||||
|
||||
// Правильно вычисляем индекс байта в буфере
|
||||
// Правильно вычисляем индекс байта в буфере
|
||||
uint16_t byteIndex = x + (y / 8) * SSD1306_WIDTH;
|
||||
// Правильно вычисляем индекс бита в байт
|
||||
// Правильно вычисляем индекс бита в байт
|
||||
uint8_t bitIndex = y % 8;
|
||||
|
||||
if (color == SSD1306_COLOR_WHITE) {
|
||||
@ -251,19 +251,19 @@ char SSD1306_Putc(char ch, FontDef_t* Font, SSD1306_COLOR_t color) {
|
||||
return ch;
|
||||
}
|
||||
void reverseString(char *str) {
|
||||
if (str == NULL) { // Проверка на NULL указатель
|
||||
if (str == NULL) { // Проверка на NULL указатель
|
||||
return;
|
||||
}
|
||||
|
||||
char *end = str; // Указатель на конец строки
|
||||
char *end = str; // Указатель на конец строки
|
||||
while (*end) {
|
||||
end++;
|
||||
}
|
||||
end--; // Перемещаем указатель на последний символ строки
|
||||
end--; // Перемещаем указатель на последний символ строки
|
||||
|
||||
char temp;
|
||||
while (str < end) {
|
||||
temp = *str; // Меняем местами символы
|
||||
temp = *str; // Меняем местами символы
|
||||
*str = *end;
|
||||
*end = temp;
|
||||
|
||||
@ -660,11 +660,11 @@ char* ulongToStr(unsigned long num, char* buffer) {
|
||||
unsigned long startnum=num;
|
||||
if (num == 0) {
|
||||
*buffer++ = '0';
|
||||
*buffer++ = '0'; // Добавляем нуль-терминатор
|
||||
*buffer++ = '0'; // Добавляем нуль-терминатор
|
||||
return buffer;
|
||||
}
|
||||
|
||||
char temp[10]; // Буфер для временного хранения цифр
|
||||
char temp[10]; // Буфер для временного хранения цифр
|
||||
int i = 0;
|
||||
|
||||
while (num > 0) {
|
||||
@ -674,30 +674,30 @@ char* ulongToStr(unsigned long num, char* buffer) {
|
||||
if(startnum<=9){
|
||||
*buffer++ = '0';
|
||||
}
|
||||
// Копируем цифры в обратном порядке в основной буфер
|
||||
// Копируем цифры в обратном порядке в основной буфер
|
||||
while (i > 0) {
|
||||
*buffer++ = temp[--i];
|
||||
}
|
||||
|
||||
*buffer = '\0'; // Добавляем нуль-терминатор
|
||||
*buffer = '\0'; // Добавляем нуль-терминатор
|
||||
return buffer;
|
||||
}
|
||||
// Функция для отображения времени с момента запуска
|
||||
// Возвращает true, если время было обновлено, иначе false
|
||||
// Функция для отображения времени с момента запуска
|
||||
// Возвращает true, если время было обновлено, иначе false
|
||||
bool displayUptime(void) {
|
||||
static unsigned long lastDisplayedTime = 0; // Последнее отображённое время
|
||||
static unsigned long lastDisplayedTime = 0; // Последнее отображённое время
|
||||
|
||||
// Проверяем, нужно ли обновлять дисплей
|
||||
// Проверяем, нужно ли обновлять дисплей
|
||||
if (uptimeSeconds == lastDisplayedTime) {
|
||||
return false; // Время не изменилось
|
||||
return false; // Время не изменилось
|
||||
}
|
||||
|
||||
// Время изменилось, обновляем дисплей
|
||||
// Время изменилось, обновляем дисплей
|
||||
unsigned long hours = uptimeSeconds / 3600;
|
||||
unsigned int minutes = (uptimeSeconds % 3600) / 60;
|
||||
unsigned int seconds = uptimeSeconds % 60;
|
||||
|
||||
// Формируем строку времени
|
||||
// Формируем строку времени
|
||||
char timeStr[16] = "UP ";
|
||||
char *ptr = timeStr + 3;
|
||||
ptr = ulongToStr(hours, ptr);
|
||||
@ -710,19 +710,19 @@ bool displayUptime(void) {
|
||||
SSD1306_Puts(timeStr, &Font_7x10, SSD1306_COLOR_WHITE);
|
||||
}
|
||||
|
||||
// Запоминаем последнее отображённое время
|
||||
// Запоминаем последнее отображённое время
|
||||
lastDisplayedTime = uptimeSeconds;
|
||||
SSD1306_UpdateScreen();
|
||||
return true; // Время было обновлено
|
||||
return true; // Время было обновлено
|
||||
}
|
||||
void displayTemp(void) {
|
||||
static int OldeqepTemperature = 0;
|
||||
uint16_t temp, eqepTemperature = geteqepTemperature();
|
||||
temp= eqepTemperature;
|
||||
char temp_str[11];
|
||||
//int seconds = 30; // Пример значения секунд
|
||||
//int seconds = 30; // Пример значения секунд
|
||||
|
||||
// Заполняем первые 6 символов вручную
|
||||
// Заполняем первые 6 символов вручную
|
||||
temp_str[0] = 'T';
|
||||
temp_str[1] = 'E';
|
||||
temp_str[2] = 'M';
|
||||
@ -735,19 +735,19 @@ void displayTemp(void) {
|
||||
temp_str[9] = ' ';
|
||||
temp_str[10] = ' ';
|
||||
|
||||
// Заполняем последние 2 символа секундами через цикл for
|
||||
// Преобразуем сотни
|
||||
// Флаг для отслеживания вывода цифр
|
||||
// Заполняем последние 2 символа секундами через цикл for
|
||||
// Преобразуем сотни
|
||||
// Флаг для отслеживания вывода цифр
|
||||
int i=5;
|
||||
bool startedOutput = false;
|
||||
// Преобразование сотен
|
||||
// Преобразование сотен
|
||||
if (temp >= 100 || startedOutput) {
|
||||
temp_str[i] = (temp / 100) + '0';
|
||||
i++;
|
||||
startedOutput = true;
|
||||
}
|
||||
temp %= 100;
|
||||
// Преобразование десятков
|
||||
// Преобразование десятков
|
||||
if (temp >= 10 || startedOutput) {
|
||||
temp_str[i] = (temp / 10) + '0';
|
||||
startedOutput = true;
|
||||
@ -756,7 +756,7 @@ void displayTemp(void) {
|
||||
temp_str[i] = temp%10 + '0';
|
||||
i++;
|
||||
|
||||
// Отображаем температуру
|
||||
// Отображаем температуру
|
||||
SSD1306_Puts(temp_str, &Font_11x18, SSD1306_COLOR_WHITE);
|
||||
|
||||
OldeqepTemperature = eqepTemperature;
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
//
|
||||
// Defines
|
||||
//
|
||||
typedef unsigned char uint8_t;
|
||||
//typedef unsigned char uint8_t;
|
||||
#define I2C_SLAVE_ADDRESS 0x3C
|
||||
|
||||
#define MAX_BUFFER_SIZE 0x10
|
||||
@ -16,7 +16,7 @@ typedef unsigned char uint8_t;
|
||||
#define GPIO_PIN_SCLA 1 // GPIO number for I2C SCLA
|
||||
|
||||
|
||||
// Ìàêðîñ äëÿ îòïðàâêè êîìàíäû íà OLED-äèñïëåé
|
||||
// Макрос для отправки команды на OLED-дисплей
|
||||
#define SSD1306_WRITECOMMAND(cmd) \
|
||||
do { \
|
||||
I2C_TXdata[0] = 0x00; \
|
||||
@ -44,3 +44,5 @@ typedef enum {
|
||||
} SSD1306_COLOR_t;
|
||||
|
||||
|
||||
|
||||
void SSD1306_UpdateScreen(void);
|
||||
|
||||
@ -34,7 +34,7 @@ struct CPUTIMER_VARS CpuTimer0;
|
||||
struct CPUTIMER_VARS CpuTimer1;
|
||||
struct CPUTIMER_VARS CpuTimer2;
|
||||
|
||||
unsigned long uptimeSeconds = 0; // Ãëîáàëüíàÿ ïåðåìåííàÿ äëÿ ÷àñîâ
|
||||
unsigned long uptimeSeconds = 0; // Глобальная переменная для часов
|
||||
|
||||
__interrupt void cpuTimer0ISR(void)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user