 Вывод Переменной На Экран Lcd1602A

3 posts in this topic

stm32ret6b + lcd1602a

Пробую выводить на экран. Получается только со строками, так как почти везде и показано, как выводить строки. Но захожу в тупик, как только надо вывести именно переменную, т.е. числовое значение. Многие предлагают конвертнуть число в строку. И тут начинаются танцы с бубном. sprintf занимает много ресурсов, далее предлагают делить на 10 со сложением и т.д. К тому же все примеры из нета в кеиле5 дают ошибки. Подскажите пожалуйста, как выводить лучше всего переменную.?

строки я вывожу вот так:

Функции:

```void LCD_Set_Data(uint8_t data){
if(((data >> 7) & 0x01) == 1){GPIOC->BSRR = 0x80;} else {GPIOC->BRR = 0x80;}
if(((data >> 6) & 0x01) == 1){GPIOC->BSRR = 0x40;} else {GPIOC->BRR = 0x40;}
if(((data >> 5) & 0x01) == 1){GPIOC->BSRR = 0x20;} else {GPIOC->BRR = 0x20;}
if(((data >> 4) & 0x01) == 1){GPIOC->BSRR = 0x10;} else {GPIOC->BRR = 0x10;}
if(((data >> 3) & 0x01) == 1){GPIOC->BSRR = 0x8;} else {GPIOC->BRR = 0x8;}
if(((data >> 2) & 0x01) == 1){GPIOC->BSRR = 0x4;} else {GPIOC->BRR = 0x4;}
if(((data >> 1) & 0x01) == 1){GPIOC->BSRR = 0x2;} else {GPIOC->BRR = 0x2;}
if(((data >> 0) & 0x01) == 1){GPIOC->BSRR = 0x1;} else {GPIOC->BRR = 0x1;}
}
void LCD_Send_Command(uint8_t data){
GPIOA->BRR = 0x10; //RS = 0;
LCD_Set_Data(data);

GPIOA->BSRR = 0x40; //E = 1
Delay_ns();
GPIOA->BRR = 0x40; //E = 0
}
void LCD_Send_Data(uint8_t data){
GPIOA->BSRR = 0x10; //RS = 1;
LCD_Set_Data(data);

GPIOA->BSRR = 0x40; //E = 1
Delay_ns();
GPIOA->BRR = 0x40; //E = 0
}
void LCD_Send_String(uint8_t str_num, char* str){
uint8_t i = 0;
if(str_num == 0){
LCD_Send_Command(0x80);
}else{
LCD_Send_Command(0xC0);
}
Delay_us(100);
while(str[i] != 0){
LCD_Send_Data(str[i]);
Delay_ns();
i++;
}
}
```

Сам вывод:

```char str[] = "TEXT";
////////
LCD_ini();
LCD_Send_String(0, str);
```

Share on other sites
Но захожу в тупик, как только надо вывести именно переменную, т.е. числовое значение.

```uint8_t semer(uint32_t z)
{
switch(z)
{
case(0): return 0x30;
case(1): return 0x31;
case(2): return 0x32;
case(3): return 0x33;
case(4): return 0x34;
case(5): return 0x35;
case(6): return 0x36;
case(7): return 0x37;
case(8): return 0x38;
case(9): return 0x39;
}
return 0x6D;
}

void set_led3(uint32_t n1,uint32_t n2,uint32_t n3,uint32_t n4,uint32_t n5,uint32_t n6,uint32_t n7)
{
MT_WH1602_Delay(80);
MT_WH1602_WriteData(semer(n5));
MT_WH1602_Delay(200);
MT_WH1602_WriteData(semer(n4));
MT_WH1602_Delay(200);
MT_WH1602_WriteData(semer(n3));
MT_WH1602_Delay(200);
MT_WH1602_WriteData(0x2E);
MT_WH1602_Delay(200);
MT_WH1602_WriteData(semer(n2));
MT_WH1602_Delay(200);
MT_WH1602_WriteData(semer(n1));
MT_WH1602_Delay(200);
MT_WH1602_WriteData(0x57);
MT_WH1602_Delay(200);
}
```

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

```void init_MT_WH1602()
{
MT_WH1602_Init();
MT_WH1602_Delay(2000);
MT_WH1602_FunctionSet(1, 0, 0);
MT_WH1602_Delay(4000);
MT_WH1602_FunctionSet(1, 0, 0);
MT_WH1602_Delay(4000);
MT_WH1602_FunctionSet(1, 0, 0);
MT_WH1602_Delay(4000);
MT_WH1602_FunctionSet(1, 1, 1);
MT_WH1602_Delay(4000);
MT_WH1602_DisplayOnOff(1, 0, 0);
MT_WH1602_Delay(4000);
MT_WH1602_ClearDisplay();
MT_WH1602_Delay(6000);
}
```

и еще без этого блока LCD не работает почему не знаю надо этот блок обязательно добавить

Share on other sites Старт складской программы по Wi-Fi/ Bluetooth-чипам от Espressif

На склад КОМПЭЛ поступили чипы, модули и отладочные платы от компании Espressif Systems на базе ESP8266 и ESP32. Стоимость всех изделий данной линейки – в 2-3 раза ниже ближайших аналогов, чипы занимают минимальное место на плате, энергоэффективны и универсальны в применении

Подробнее...

Your content will need to be approved by a moderator ×   Pasted as rich text.   Restore formatting

Only 75 emoticons maximum are allowed.

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.