Помогите дописать лабораторную работу по программированию микропроцессоров (atmega 88).
Суть такая: необходимо сделать вывод чисел и арифметических знаков на жк дисплей калькулятора. Есть кусочек кода, который я написал на коленке, но я не понимаю, что с ним делать дальше.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
// Определение констант для команд LCD
#define LCD_FUNCTION_SET 0x28
#define LCD_DISPLAY_ON 0x0C
#define LCD_CLEAR_DISPLAY 0x01
#define LCD_ENTRY_MODE_SET 0x06
#define LCD_SET_CURSOR 0xC0
// Определение констант для задержек
#define DELAY_SHORT 1000
#define DELAY_MEDIUM 50000
#define DELAY_LONG 1000000
// Функция для установки порта B
void setPortB(unsigned char value) {
_delay_loop_2(DELAY_SHORT);
PORTB = value;
PORTD = _BV(PD7);
PORTD = 0;
}
// Функция для вывода символа на LCD
void printCharacter(unsigned char character) {
_delay_loop_2(DELAY_MEDIUM);
PORTD = _BV(PD5);
PORTB = (character >> 4) & 0x0F;
PORTD |= _BV(PD7);
PORTD &= ~_BV(PD7);
_delay_loop_2(DELAY_SHORT);
PORTB = character & 0x0F;
PORTD |= _BV(PD7);
PORTD &= ~_BV(PD7);
}
// Функция для отправки команды LCD
void sendLcdCommand(unsigned char command) {
setPortB(command >> 4);
setPortB(command);
_delay_loop_2(DELAY_SHORT);
}
// Функция для инициализации LCD
void initializeLcd() {
// Установка портов B и D как выходов
DDRB = 0xFF;
DDRD = 0xFF;
// Очистка портов B и D
PORTB = 0;
PORTD = 0;
_delay_loop_2(DELAY_MEDIUM);
// Отправка команд инициализации LCD
sendLcdCommand(LCD_FUNCTION_SET);
sendLcdCommand(LCD_DISPLAY_ON);
sendLcdCommand(LCD_CLEAR_DISPLAY);
_delay_loop_2(DELAY_MEDIUM);
sendLcdCommand(LCD_ENTRY_MODE_SET);
}
// Функция для очистки LCD и вывода строки
void clearAndPrintString(const unsigned char *string, unsigned char length) {
// Очистка LCD
sendLcdCommand(LCD_CLEAR_DISPLAY);
_delay_loop_2(DELAY_MEDIUM);
// Вывод каждого символа строки
for (unsigned char i = 0; i < length; i++) {
if (i == 8) {
// Перемещение курсора в начало второй строки
sendLcdCommand(LCD_SET_CURSOR);
}
printCharacter(string[i]);
}
}
void PrintString(const unsigned char *string, unsigned char length) {
_delay_loop_2(DELAY_MEDIUM);
// Вывод каждого символа строки
for (unsigned char i = 0; i < length; i++) {
if (i == 8) {
// Перемещение курсора в начало второй строки
sendLcdCommand(LCD_SET_CURSOR);
}
printCharacter(string[i]);
}
}
int main() {
// Определение строки для вывода
const unsigned char text[] = {0x4B, 0x61, 0xBB, 0xC4, 0xBA, 0x79, 0xBB, 0xC7, 0xBF, 0x6F, 0x70, 0xC9};
const unsigned char textLength = sizeof(text) / sizeof(text[0]);
initializeLcd();
clearAndPrintString(text, textLength);
PORTC = 0x0F;
while (1) {
sendLcdCommand(LCD_CLEAR_DISPLAY);
unsigned int play = 1;
for (uint8_t row = 0; row < 4; row++){
if(bit_is_clear(PINC, row)) {
PrintString("88", 3);
}
}
}
return 0;
}
Схема устройства:

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
console.writeline("нейросеть попроси")