устранены проблемы с кодировкой

This commit is contained in:
seklyuts 2024-08-22 14:51:04 +03:00
parent cfe4861db9
commit d573366b75
5 changed files with 80 additions and 77 deletions

View File

@ -1,7 +1,7 @@
/* /*
* buttons.c * buttons.c
* *
* Created on: 15 <EFBFBD><EFBFBD><EFBFBD>. 2024 <EFBFBD>. * Created on: 15 авг. 2024 г.
* Author: sedov * Author: sedov
*/ */
@ -13,7 +13,7 @@
#include "pwm_init.h" #include "pwm_init.h"
#include "i2c_oled.h" #include "i2c_oled.h"
#define MAX_SCREENS 5; #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; uint16_t Button_Sost = 0;
volatile uint16_t buttonClik=0, ScreenSost=0, button=0 ; volatile uint16_t buttonClik=0, ScreenSost=0, button=0 ;
extern uint16_t I2C_TXdata[]; extern uint16_t I2C_TXdata[];
@ -26,10 +26,10 @@ typedef enum {
MENU_TEMP, MENU_TEMP,
MENU_BRIGHT_FUTURE, MENU_BRIGHT_FUTURE,
MENU_DIAKONT, 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; } 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; MenuItem currentMenuItem = MENU_START;
__interrupt void buttonclik_isr(void) __interrupt void buttonclik_isr(void)
@ -40,8 +40,8 @@ __interrupt void buttonclik_isr(void)
} }
int buttonsRead(){ int buttonsRead(){
int err1,err2; 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> err1=I2CWrite(0x25, 0, 0, false, &Button_Sost); // Перед чтением всегда должна быть запись
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> err2=I2CRead(0x25, 1, true, &Button_Sost); // Читаем состояние порта
if(err1 != 0 || err2 != 0){ if(err1 != 0 || err2 != 0){
return 1; return 1;
}else{ }else{
@ -53,13 +53,13 @@ void buttonsInit(void) {
uint16_t Conf0 = 0xFE; uint16_t Conf0 = 0xFE;
uint16_t Conf1 = 0xFF; 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, 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> I2CWrite(0x25, 0, 0, false, &Button_Sost); // Перед чтением всегда должна быть запись
I2CRead(0x25, 1, true, &Button_Sost); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 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; EALLOW;
PieVectTable.XINT3_INT = &buttonclik_isr; PieVectTable.XINT3_INT = &buttonclik_isr;
IER |= M_INT12; IER |= M_INT12;
@ -73,37 +73,37 @@ void buttonsInit(void) {
int buttonsDisp(){ int buttonsDisp(){
if(buttonClik!=0){ if(buttonClik!=0){
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //читаем состояние кнопок
if(buttonsRead()){ if(buttonsRead()){
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //обработка ошибки чтения
return 1; return 1;
} }
Button_Sost=Button_Sost&0xF; Button_Sost=Button_Sost&0xF;
switch(Button_Sost){ switch(Button_Sost){
case 0xD: case 0xD:
if(button < 0XFF) if(button < 0XFF)
button+=0XFF;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> button+=0XFF;//ПУСК
break; break;
case 0xB: case 0xB:
if(button >= 0XFF) if(button >= 0XFF)
button-=0XFF;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> button-=0XFF;//СТОП
break; break;
case 0xE: case 0xE:
if(button < 0XFF){ if(button < 0XFF){
button++;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> button++;//ВЕРХ
if(button>MENU_ITEMS_COUNT-1){ if(button>MENU_ITEMS_COUNT-1){
button=0; button=0;
}} }}
break; break;
case 0x7: case 0x7:
if(button < 0XFF) if(button < 0XFF)
button--;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> button--;//ВЕРХ
if(button==0xFFFF){ if(button==0xFFFF){
button=MENU_ITEMS_COUNT-1; button=MENU_ITEMS_COUNT-1;
} }
break; break;
// default: default:
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //несколько кнопок нажали
} }
SSD1306_Fill(SSD1306_COLOR_BLACK); SSD1306_Fill(SSD1306_COLOR_BLACK);
Button_Sost=0; Button_Sost=0;
@ -208,24 +208,24 @@ void MenuDisp(){
void MenuBilder(void) { void MenuBilder(void) {
uint16_t i,yPos; uint16_t i,yPos;
char tempStr[5]; 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) { if (topItem > 2) {
topItem = currentMenuItem - 2; topItem = currentMenuItem - 2;
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> // Очищаем экран
SSD1306_Fill(SSD1306_COLOR_BLACK); 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_DrawFilledRectangle(0, 0, 128, 10, SSD1306_COLOR_WHITE);
SSD1306_GotoXY(30, 1); SSD1306_GotoXY(30, 1);
SSD1306_Puts("START MENU", &Font_7x10, SSD1306_COLOR_BLACK); 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++) { 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) { if (topItem + i == currentMenuItem) {
SSD1306_DrawFilledRectangle(0, yPos, 128, 13, SSD1306_COLOR_WHITE); SSD1306_DrawFilledRectangle(0, yPos, 128, 13, SSD1306_COLOR_WHITE);
} else { } else {
@ -234,19 +234,19 @@ void MenuBilder(void) {
if(yPos==52){ if(yPos==52){
yPos-=2; yPos-=2;
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Вывод номера пункта
SSD1306_GotoXY(5, yPos + 3); 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> // Используем sprintf для преобразования числа в строку
// <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>" // Преобразование числа в строку "вручную"
uint8_t num = topItem + i + 1; uint8_t num = topItem + i + 1;
tempStr[0] = '0' + (num / 10); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tempStr[0] = '0' + (num / 10); // Десятки
tempStr[1] = '0' + (num % 10); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tempStr[1] = '0' + (num % 10); // Единицы
tempStr[2] = '\0'; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tempStr[2] = '\0'; // Нуль-терминатор
if (topItem + i == currentMenuItem) { if (topItem + i == currentMenuItem) {
SSD1306_Puts(tempStr, &Font_7x10, SSD1306_COLOR_BLACK); SSD1306_Puts(tempStr, &Font_7x10, SSD1306_COLOR_BLACK);
}else }else
SSD1306_Puts(tempStr, &Font_7x10, SSD1306_COLOR_WHITE); 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) { switch (topItem + i) {
case MENU_START: case MENU_START:
@ -271,3 +271,4 @@ void MenuBilder(void) {
} }
} }
} }

View File

@ -80,8 +80,8 @@ static uint16_t diod = 0;
fault_read_clr(); fault_read_clr();
fault_read_ports(); fault_read_ports();
}else{ }else{
// buttonsDisp(); buttonsDisp();
// ScreenDisp(); ScreenDisp();
} }
} }

View File

@ -97,15 +97,15 @@ uint8_t SSD1306_Init(void) {
void SSD1306_setPosition(uint8_t column, uint8_t page) { void SSD1306_setPosition(uint8_t column, uint8_t page) {
if (column > SSD1306_WIDTH - 1) { if (column > SSD1306_WIDTH - 1) {
column = 0; // Ограничение столбца column = 0; // Ограничение столбца
} }
if (page > 7) { if (page > 7) {
page = 0; // Ограничение страницы page = 0; // Ограничение страницы
} }
SSD1306_WRITECOMMAND(0x20+column); // Начальный адрес столбца SSD1306_WRITECOMMAND(0x20+column); // Начальный адрес столбца
SSD1306_WRITECOMMAND(SSD1306_PAGEADDR+page); // Начальный адрес страницы SSD1306_WRITECOMMAND(SSD1306_PAGEADDR+page); // Начальный адрес страницы
// SSD1306_WRITECOMMAND(7); // Конечный адрес страницы // SSD1306_WRITECOMMAND(7); // Конечный адрес страницы
} }
@ -118,9 +118,9 @@ void SSD1306_UpdateScreen(void) {
SSD1306_WRITECOMMAND(0x10); SSD1306_WRITECOMMAND(0x10);
SSD1306_WRITECOMMAND(0x00); SSD1306_WRITECOMMAND(0x00);
for (column = 0; column < SSD1306_WIDTH; column++) { // for (column = 0; column < SSD1306_WIDTH; column++) { //
SSD1306_setPosition(column, page); // Начало столбца - 0, страница - m SSD1306_setPosition(column, page); // Начало столбца - 0, страница - m
// Запись данных в буфер дисплея // Запись данных в буфер дисплея
I2C_TXdata[0] = 0x40; // Байт управления: данные I2C_TXdata[0] = 0x40; // Байт управления: данные
for ( i = 0; i < SSD1306_WIDTH; i++) { for ( i = 0; i < SSD1306_WIDTH; i++) {
I2C_TXdata[i + 1] = SSD1306_Buffer[SSD1306_WIDTH*page + 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 page;
uint8_t column; uint8_t column;
@ -140,12 +140,12 @@ void SSD1306_UpdateScreen
SSD1306_WRITECOMMAND(0x10); SSD1306_WRITECOMMAND(0x10);
SSD1306_WRITECOMMAND(0x00); SSD1306_WRITECOMMAND(0x00);
for (column = 0; column < SSD1306_WIDTH-60; column++) { // 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_TXdata[0] = 0x40; // Байт управления: данные
// Заполнить буфер I2C данными из буфера дисплея // Заполнить буфер I2C данными из буфера дисплея
I2C_TXdata[0] = 0x40; // Команда записи данных I2C_TXdata[0] = 0x40; // Команда записи данных
I2C_TXdata[1] = SSD1306_Buffer[SSD1306_WIDTH*page + column]; I2C_TXdata[1] = SSD1306_Buffer[SSD1306_WIDTH*page + column];
I2CWriteOLED(I2C_SLAVE_ADDRESS, 2, true); 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; color = (SSD1306_COLOR_t)!color;
} }
// Правильно вычисляем индекс байта в буфере // Правильно вычисляем индекс байта в буфере
uint16_t byteIndex = x + (y / 8) * SSD1306_WIDTH; uint16_t byteIndex = x + (y / 8) * SSD1306_WIDTH;
// Правильно вычисляем индекс бита в байт // Правильно вычисляем индекс бита в байт
uint8_t bitIndex = y % 8; uint8_t bitIndex = y % 8;
if (color == SSD1306_COLOR_WHITE) { if (color == SSD1306_COLOR_WHITE) {
@ -251,19 +251,19 @@ char SSD1306_Putc(char ch, FontDef_t* Font, SSD1306_COLOR_t color) {
return ch; return ch;
} }
void reverseString(char *str) { void reverseString(char *str) {
if (str == NULL) { // Проверка на NULL указатель if (str == NULL) { // Проверка на NULL указатель
return; return;
} }
char *end = str; // Указатель на конец строки char *end = str; // Указатель на конец строки
while (*end) { while (*end) {
end++; end++;
} }
end--; // Перемещаем указатель на последний символ строки end--; // Перемещаем указатель на последний символ строки
char temp; char temp;
while (str < end) { while (str < end) {
temp = *str; // Меняем местами символы temp = *str; // Меняем местами символы
*str = *end; *str = *end;
*end = temp; *end = temp;
@ -660,11 +660,11 @@ char* ulongToStr(unsigned long num, char* buffer) {
unsigned long startnum=num; unsigned long startnum=num;
if (num == 0) { if (num == 0) {
*buffer++ = '0'; *buffer++ = '0';
*buffer++ = '0'; // Добавляем нуль-терминатор *buffer++ = '0'; // Добавляем нуль-терминатор
return buffer; return buffer;
} }
char temp[10]; // Буфер для временного хранения цифр char temp[10]; // Буфер для временного хранения цифр
int i = 0; int i = 0;
while (num > 0) { while (num > 0) {
@ -674,30 +674,30 @@ char* ulongToStr(unsigned long num, char* buffer) {
if(startnum<=9){ if(startnum<=9){
*buffer++ = '0'; *buffer++ = '0';
} }
// Копируем цифры в обратном порядке в основной буфер // Копируем цифры в обратном порядке в основной буфер
while (i > 0) { while (i > 0) {
*buffer++ = temp[--i]; *buffer++ = temp[--i];
} }
*buffer = '\0'; // Добавляем нуль-терминатор *buffer = '\0'; // Добавляем нуль-терминатор
return buffer; return buffer;
} }
// Функция для отображения времени с момента запуска // Функция для отображения времени с момента запуска
// Возвращает true, если время было обновлено, иначе false // Возвращает true, если время было обновлено, иначе false
bool displayUptime(void) { bool displayUptime(void) {
static unsigned long lastDisplayedTime = 0; // Последнее отображённое время static unsigned long lastDisplayedTime = 0; // Последнее отображённое время
// Проверяем, нужно ли обновлять дисплей // Проверяем, нужно ли обновлять дисплей
if (uptimeSeconds == lastDisplayedTime) { if (uptimeSeconds == lastDisplayedTime) {
return false; // Время не изменилось return false; // Время не изменилось
} }
// Время изменилось, обновляем дисплей // Время изменилось, обновляем дисплей
unsigned long hours = uptimeSeconds / 3600; unsigned long hours = uptimeSeconds / 3600;
unsigned int minutes = (uptimeSeconds % 3600) / 60; unsigned int minutes = (uptimeSeconds % 3600) / 60;
unsigned int seconds = uptimeSeconds % 60; unsigned int seconds = uptimeSeconds % 60;
// Формируем строку времени // Формируем строку времени
char timeStr[16] = "UP "; char timeStr[16] = "UP ";
char *ptr = timeStr + 3; char *ptr = timeStr + 3;
ptr = ulongToStr(hours, ptr); ptr = ulongToStr(hours, ptr);
@ -710,19 +710,19 @@ bool displayUptime(void) {
SSD1306_Puts(timeStr, &Font_7x10, SSD1306_COLOR_WHITE); SSD1306_Puts(timeStr, &Font_7x10, SSD1306_COLOR_WHITE);
} }
// Запоминаем последнее отображённое время // Запоминаем последнее отображённое время
lastDisplayedTime = uptimeSeconds; lastDisplayedTime = uptimeSeconds;
SSD1306_UpdateScreen(); SSD1306_UpdateScreen();
return true; // Время было обновлено return true; // Время было обновлено
} }
void displayTemp(void) { void displayTemp(void) {
static int OldeqepTemperature = 0; static int OldeqepTemperature = 0;
uint16_t temp, eqepTemperature = geteqepTemperature(); uint16_t temp, eqepTemperature = geteqepTemperature();
temp= eqepTemperature; temp= eqepTemperature;
char temp_str[11]; char temp_str[11];
//int seconds = 30; // Пример значения секунд //int seconds = 30; // Пример значения секунд
// Заполняем первые 6 символов вручную // Заполняем первые 6 символов вручную
temp_str[0] = 'T'; temp_str[0] = 'T';
temp_str[1] = 'E'; temp_str[1] = 'E';
temp_str[2] = 'M'; temp_str[2] = 'M';
@ -735,19 +735,19 @@ void displayTemp(void) {
temp_str[9] = ' '; temp_str[9] = ' ';
temp_str[10] = ' '; temp_str[10] = ' ';
// Заполняем последние 2 символа секундами через цикл for // Заполняем последние 2 символа секундами через цикл for
// Преобразуем сотни // Преобразуем сотни
// Флаг для отслеживания вывода цифр // Флаг для отслеживания вывода цифр
int i=5; int i=5;
bool startedOutput = false; bool startedOutput = false;
// Преобразование сотен // Преобразование сотен
if (temp >= 100 || startedOutput) { if (temp >= 100 || startedOutput) {
temp_str[i] = (temp / 100) + '0'; temp_str[i] = (temp / 100) + '0';
i++; i++;
startedOutput = true; startedOutput = true;
} }
temp %= 100; temp %= 100;
// Преобразование десятков // Преобразование десятков
if (temp >= 10 || startedOutput) { if (temp >= 10 || startedOutput) {
temp_str[i] = (temp / 10) + '0'; temp_str[i] = (temp / 10) + '0';
startedOutput = true; startedOutput = true;
@ -756,7 +756,7 @@ void displayTemp(void) {
temp_str[i] = temp%10 + '0'; temp_str[i] = temp%10 + '0';
i++; i++;
// Отображаем температуру // Отображаем температуру
SSD1306_Puts(temp_str, &Font_11x18, SSD1306_COLOR_WHITE); SSD1306_Puts(temp_str, &Font_11x18, SSD1306_COLOR_WHITE);
OldeqepTemperature = eqepTemperature; OldeqepTemperature = eqepTemperature;

View File

@ -3,7 +3,7 @@
// //
// Defines // Defines
// //
typedef unsigned char uint8_t; //typedef unsigned char uint8_t;
#define I2C_SLAVE_ADDRESS 0x3C #define I2C_SLAVE_ADDRESS 0x3C
#define MAX_BUFFER_SIZE 0x10 #define MAX_BUFFER_SIZE 0x10
@ -16,7 +16,7 @@ typedef unsigned char uint8_t;
#define GPIO_PIN_SCLA 1 // GPIO number for I2C SCLA #define GPIO_PIN_SCLA 1 // GPIO number for I2C SCLA
// Ìàêðîñ äëÿ îòïðàâêè êîìàíäû íà OLED-äèñïëåé // Макрос для отправки команды на OLED-дисплей
#define SSD1306_WRITECOMMAND(cmd) \ #define SSD1306_WRITECOMMAND(cmd) \
do { \ do { \
I2C_TXdata[0] = 0x00; \ I2C_TXdata[0] = 0x00; \
@ -44,3 +44,5 @@ typedef enum {
} SSD1306_COLOR_t; } SSD1306_COLOR_t;
void SSD1306_UpdateScreen(void);

View File

@ -34,7 +34,7 @@ struct CPUTIMER_VARS CpuTimer0;
struct CPUTIMER_VARS CpuTimer1; struct CPUTIMER_VARS CpuTimer1;
struct CPUTIMER_VARS CpuTimer2; struct CPUTIMER_VARS CpuTimer2;
unsigned long uptimeSeconds = 0; // Ãëîáàëüíàÿ ïåðåìåííàÿ äëÿ ÷àñîâ unsigned long uptimeSeconds = 0; // Глобальная переменная для часов
__interrupt void cpuTimer0ISR(void) __interrupt void cpuTimer0ISR(void)
{ {