Top.Mail.Ru
Ответы
Аватар пользователя
2 месяца назад
от
Изменено

Помогите дописать лабораторную работу по программированию микропроцессоров (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; 
} 

Схема устройства:

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Знаток
2мес

console.writeline("нейросеть попроси")