Перейти к содержанию
    

Исходники программ и библиотек

GPS GSM трекер. Трекер отправляет хозяину SMS со своими координатами, определенными при помощи GPS приемника. SMS отправляются периодически, в соответствии с заранее определенным интервалом.

Схема + программа

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Драйвер светодиодного семисегментного 4-ех разрядного индикатора. Работает с любым компилятором. Легко настраивается для индикаторов с общим катодом, анодом, включенных напрямую или через транзисторы.

7seg_driver.rar

Изменено пользователем sansnotfor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может кому нибудь понадобится...

Драйвер трех шаговиков с шагом 1 градус (можно изменить, поменяв таблицу синусов-косинусов).

Задействован только один таймер и 6 линий одного порта.

Как-то пришлось переделать автомобильный щиток с тремя двухобмоточными шговыми движками в качестве показометров одометра, спидометра и уровня топлива. Какой-то масочный процессор, рулящий этим хозяйством, имеющий 12 PWM-выходов, не показывал никаких признаков жизни.

Упростил схему включения (прилагается) движков, выйдя на 6 PWM-выходов. Немного потерял в крутящем моменте, но для стрелок пойдет.

Таблица синусов-косинусов рассчитана с учетом некоторой нелинейности угла поворота роторов движков.

Сопротивление обмоток двигателей было более 2 килоом. Подключил прямо к ATMEGA162.

Сделано под ИАР. Легко ложится на любой контроллер, имеющий 1 таймер и 6 выходов одного порта.

motor.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Реализация мастера и клиента для Wake протокола. Пример использования там же.

 

 

Готовый проект под EWAVR - модуль управления вентилятором охлаждения. 3 ступени температуры, 3 датчика DS18B20, гистерезис.

wake.rar

fancontrol.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примеры реализации WAKE для AVR (EWAVR) и PC (C++ Builder).

Старая и новая версии.

В прежних реализациях Wake были две ошибки:

 

1. При передаче ответа микроконтроллером CRC вычислялась для адреса с установленным старшим битом, а не для истинного адреса, как требует спецификация. Ошибка не проявляется, если используется только нулевой адрес, который в пакете не передается.

 

2. При передаче ответа микроконтроллером всегда передавался установленный адрес устройства, даже если обратились по нулевому адресу (адрес коллективного вызова). А надо отвечать с тем же адресом, по которому обратились. Ошибка не проявляется, если используется только нулевой адрес.

Wake.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может кому-то пригодится...

Сделал для себя небольшой графический визуализатор логов и стимулов Аврстудии.

Показывает графиком состояния любых двух пинов из лога или стимула.

Позволяет редактировать. После редактирования нажмите REPAINT.

Поддерживает имя открываемого файла из коммандной строки.

При любых манипуляциях с верхним графиком (увеличение, смещение вправо-влево, изменении размера окна...), нижний график по координатам подстраивается под верхний.

Манипуляции с нижним-независимы.

Думаю, будет полезным для анализа (к примеру) последовательных протоколов, шимов...

VISILOG.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал для себя небольшой графический визуализатор логов и стимулов Аврстудии.

 

В своё время хотел подобное, но только для ввода данных для симулятора. Чтобы по графику генерировался файл и его скармливать студии. Вам осталось только инвертировать работы вашей программы :)

 

В вашей программе предлагаю расширить до 8 полос графики, т.е. для 8 бит. И сделать так, чтобы пользователь мог задавать их кол-во от 1 до 8. А черодование выводимых ножка/график оставить так же, т.е. выбор бита в окне. Ещё можно добавить в настройки соответствие цикла частоте. И выводить время на графике. При этом при наведении перекрестия курсора показывать время, где стоит курсор. А для выделенного участка показывать его длительность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Исходник DELPHI программатора для ATMEL типа ATmega48

Собран на одной микрухе FT232rl +3 кондёра,частотка тож от неё

Пример заточень под ATmega48 но быстро переделывается под любой другой с подобными сигнатарами

так же показывает принципы работы FT232rl и помогает разобраться в протоколах программирования AVR микроконтроллеров

Если отсюда файл пропадёт можно скачать отсюда:

http://izhbazar.ru/viewtopic.php?f=48&t=43#p389

FT232Prog.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Код дл работы с 44780 на асме

// 25.04.2011
// Двухстрочный ЖКИ 16 х 2 (20 х 4) контроллер 44780 режим 4 бита 5 х 7 точек 
// Выставляем нужные пины 
// tmp1 - РОН
// data - передача данных / команд в ЖКИ
// loop - счетчик цикла при выводе текста
// Z    - указатель адреса 
// Частота МК 4 000 000 Hz 
// если частота выше, в подпрограмме wait_lcd нужно вставить чуть больше nop-ов при дергании пинов

.equ   rs      = PC1     //  Выбор регистра ЖКИ
.equ   rw      = PC2     //  Чтение_запись данных в ЖКИ
.equ   e       = PC3     //  Включение разрешения команд  
.equ   bf      = PC7     //  Флаг занятости ЖКИ
.equ   LCD     = PORTC   //  порт ЖКИ 
.equ   LCD_DDR = DDRC    //  направление порта ЖКИ 
.equ   LCD_PIN = PINC    //  вход порта ЖКИ 
.equ   Line1   = 0x80    //  Адрес начала первой строки ЖКИ 
.equ   Line2   = 0xC0    //  Адрес начала второй строки ЖКИ

.equ   celsiy = 0x00     //  код символа градуса цельсия
.equ   antena = 0x01     //  код символа антена


USER:                                          // пользовательские символы ( максимум 8 штук )
.db 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00    // символ градуса цельсия 0х00 
.db 0x15,0x15,0x0E,0x04,0x04,0x04,0x04,0x00    // символ антены 0х01



init_lcd:              // Инициализация ЖКИ    
cbi     LCD,rw         // RW -> 0
nop                    // 
cbi     LCD,e          // E  -> 0
nop                    //  
cbi     LCD,rs         // RS -> 0
rcall   wait_20ms      // ждем 20 милисекунд
ldi     data,0x28      // 4 бита режим 5 х 7 точек 2 строки
rcall   lcd_cmd_i      // передаем команду в ЖКИ
rcall   wait_20ms      // ждем 20 милисекунд 
ldi     data,0x0C      // 4 бита режим 5 х 7 точек 2 строки
rcall   lcd_cmd_i      // передаем команду в ЖКИ
rcall   wait_20ms      // ждем 20 милисекунд
ldi     data,0x28      // 4 бита режим 5 х 7 точек 2 строки
rcall   lcd_cmd_i      // передаем команду в ЖКИ
rcall   wait_20ms      // ждем 20 милисекунд
rcall   clr_lcd        // очищаем жки 
rcall   set_simvols    // Установка пользовательских символов
ret                    // выход

set_simvols:           // Установка пользовательских символов для вывода на ЖКИ
ldi     data,0x40      // загружаем константу
rcall   lcd_cmd        // посылаем команду адреса начала пользовательских символов 
ldi   zl,low (user*2)  // загружаем адрес данных L
ldi   zh,high(user*2)  // загружаем адрес данных H
ldi     loop,16        // загружаем количество символов * 8 
celsiy_c:              // начало цикла загрузки пользовательских символов 
lpm     data,Z+        // загружаем байт из FLASH с постинкрементом указателя адреса Z 
rcall   print_char     // записываем байт в память ЖКИ
dec     loop           // счетчик цикла - 1
brne    celsiy_c       // если счетчик не = 0, то переходим на начало цикла 
ret                    // выход 

wait_lcd:              // Готовность ЖКИ к приему 
in     tmp1,LCD_DDR    // читаем   
andi   tmp1,0x0F       // выделяем старшую тетраду
out    LCD_DDR,tmp1    // выводы 4 5 6 7 порта ЖКИ - входы
cbi    LCD,rs          // RS -> 0
nop                    // холостой такт
sbi    LCD,rw          // RW -> 1
nop                    // холостой такт
lcd_busy:              // E  -> 1  
sbi    LCD,e           // E  -> 1
nop                    // холостой такт
in     tmp1,LCD_PIN    // Прочитать содержимое порта ЖКИ 
cbi    LCD,e           // E  -> 0
nop                    // холостой такт
sbi    LCD,e           // E  -> 1
nop                    // холостой такт
cbi    LCD,e           // E  -> 0
nop                    // холостой такт
sbrc   tmp1,BF         // пропуск след команды если сброшен BF флаг 
rjmp   lcd_busy        // перейти на метку lcd_busy
cbi    LCD,rw          // RW -> 0
in     tmp1,LCD_DDR    // Прочитать содержимое порта ЖКИ   
ori    tmp1,0xF0       // выделяем младшую тетраду
out    LCD_DDR,tmp1    // выводы 4 5 6 7 порта ЖКИ - выходы
ret                    // выход

clr_lcd:               // Очистка ЖКИ 
ldi    data,0x01       // загружаем данные для очистки 
rjmp   lcd_cmd         // подаем команду и очищаем ЖКИ 

clr_line1:             // Очистка line1
rcall  lcd_line1       // выбираем начальный адрес очистки строки 1
ldi    loop,16         // загружаем количество символов в строке
ldi    data,' '        // загружаем пробел 0х20  
rjmp   clr_l           // очищаем строку 
clr_line2:             // Очистка line2
rcall  lcd_line2       // выбираем начальный адрес очистки строки 2
ldi    loop,16         // загружаем количество символов в строке 
ldi    data,' '        // загружаем пробел 0х20 
clr_l:                 // начало цикла очистки 
rcall  print_char      // выводим на жки 
dec    loop            // счетчик цикла -1 
brne   clr_l           // если не = 0, переходим к началу цикла 
ret                    // выход 

print_char:            // Вывод данных на ЖКИ
rcall  wait_lcd        // ждем готовности ЖКИ 
sbi    LCD,rs          // RS -> 1
rjmp   send_byte       // передаем байт в ЖКИ

send_nibble:           // Передача полубайта в ЖКИ
sbi    LCD,e           // E -> 1
in     tmp1,LCD        // прочитать содержимое порта 
andi   tmp1,0x0F       // и выделить старшую тетраду
andi   data,0xF0       // выделить младшую тетраду в регистре 
or     data,tmp1       // смешать регистр с данными
out    LCD,data        // выдать в порт ЖКИ результат
cbi    LCD,e           // E -> 0
ret                    // выход

lcd_line1:             // Выбор адреса первой строки данных   
ldi   data,line1       // загружаем данные
rjmp  lcd_cmd          // передаем команду

lcd_line2:             // Выбор адреса второй строки данных
ldi   data,line2       // загружаем данные 
rjmp  lcd_cmd          // передаем команду

lcd_cmd:               // передача команды в ЖКИ   
rcall   wait_lcd       // ждем готовности ЖКИ   
lcd_cmd_i:             // передача команды в ЖКИ при ините
cbi     LCD,rs         // RS -> 0  
send_byte:             // Передача байта в ЖКИ
push    data           // сохранить data в STACK
push    data           // сохранить data в STACK
rcall   send_nibble    // вызвать передачу полубайта
pop     data           // извлечь data из STACK 
swap    data           // поменять нибблы местами
rcall   send_nibble    // вызвать передачу полубайта
pop     data           // извлечь data из STACK 
ret                    // выход

out_text:              // Вывод текста из флеш проца 
lpm     data,Z+        // загружаем ячейку памяти из флэш с постинкрементом адреса 
rcall   print_char     // выводим данные на ЖКИ
dec     loop           // отнимаем 1 от счетчика 
brne    out_text       // перейти если не равно 
ret                    // выход 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работа с графическим дисплеем MT-12232 на ATmega8.

 

mt_12232b.rar

Кто пробовал запускать ?

Вроде косячок сразу нашел.

 

bool ReadByte(bool cd, bool l, bool r) {

char b;

if ((l==1)&&(r==1)) return 0; //Читать одновременно из обоих кристаллов недопустимо!

//При необходимости настроить здесь шину данных на ввод

DDRD = 0x00;

//LCD.RW=1; LCD.A0=cd; //Будем читать байт как команду или данные

PORTB_Bit1 = 1; PORTB_Bit6 = cd;

//Delay(>40ns); //Это время предустановки адреса (tAW)

__delay_cycles(1);

//LCD.E1=l; LCD.E2=r; //Выдать нужный строб в индикатор

PORTB_Bit7 = l; PORTB_Bit0 = r;

//Delay(>300ns); //Минимально допустимая длительность сигнала E=1 (время доступа (tACC) попало сюда)

__delay_cycles(1);

//b=LCD.D; //Прочитать данные с шины индикатора (они на ней уже минимум 120нс)

b = PINB; Непонятно что читает?

//LCD.E1=LCD.E2=0; //Сбросить сигналы E1 и E2

PORTB_Bit7 = PORTB_Bit0 = 0;

//Delay(>(2000ns-40ns-300ns)); //Минимально допустимый интервал между сигналами E=1

__delay_cycles(2);

return b; //Вернуть прочитанный байт

}

 

//Прочитать байт данных из левой половины индикатора

bool ReadDataL(void){

return ReadByte(1,1,0);

}

 

//Прочитать байт данных из правой половины индикатора

bool ReadDataR(void){

return ReadByte(1,0,1);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поскольку примеры от Atmel занимают много памяти в контроллерах, для которых они предназначены, простора для творчества практически не остается. На основе библиотеки Atmel сделал одну кнопочку на Tiny45. Можно что-то включать/выключать и донавернуть до простейшего интерфейса пользователя, например переходить в режим настройки при длительном удержании. Размер кода 2684 байта.

QT_t45.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программный модуль позволяющий добавить функцию воспроизведения мелодий или последовательностей звуков практически в любой проект на микроконтроллере AVR.

 

- простая интеграция с готовым проектом

- задействован только 8-ми разрядный таймер т2, при этом остается возможность использовать его для опроса или формирования временных интервалов

- модуль настраивается практически на любую частоту тактового генератора

- высота нот задается в виде символических констант (С0, А2 и т.д) или в Герцах

- длительности задаются в стандартном виде (четверти, восьмые и т.д.) или в миллисекундах

- имеется возможность задавать темп воспроизведения мелодии и количество ее повторений

- в процессе воспроизведения мелодия может быть поставлена на паузу

 

подробное описание

http://chipenable.ru/index.php/programming...uka-na-avr.html

 

Исходники для трех компиляторов - IAR, GCC, CV

SoundLib.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Последняя версия для работы с ЖКИ NOKIA 1110i / 1112i

Подключение ЖКИ на картинке ниже

 

 


// pavel-pervomaysk 
// Final version Nokia 1110i LCD module 
// Time 03.10.2011 

// Lcd controller по командам частично совместимый с PCF8814 
// SET X adress lcd
// 0x10,0x00 начало строки с  0 го адреса строки
// количество столбцов ЖКИ 96 , штук адрес установки с 0 - 95 
// адрес столбца нам нужен 39 , 39 -> HEX = 0x27. 
// Установка адреса будет иметь такой вид 0x12,0x07
// 3 старших бита адреса передаются в первой команде 
// 4 младших бита адреса передаются во второй команде 
// SET Y adress lcd 
// Всего 8 полных строк и 9й не полный 
// установка адреса Y происходит подачей команд 
// 0xB0 первая - 0xB8 девятая строки.
// Дополнительные команды для управления и инициализации ЖКИ 
// Сдвиг всей области ЖКИ вверх на  1   0x41
// Сдвиг всей области ЖКИ вверх на  2   0x42
// Сдвиг всей области ЖКИ вверх на  4   0x43
// Сдвиг всей области ЖКИ вверх на  8   0x44
// Сдвиг всей области ЖКИ вверх на 10   0x45
// Сдвиг всей области ЖКИ вверх на 16   0x48
// Сдвиг всей области ЖКИ вниз  на 21   0x65
// Контрастность ЖКИ                    0x90 ... 0x9F установка по дисплею в проекте 
// Очистка картинки (данные соханяются) 0xA2  
// Реверсное изображение с низу к верху 0xC8
// Позитивное изображение ЖКИ           0xA6 
// Негативное изображение ЖКИ           0xA7 
// Заполнение строки с лева на право    0xA1 
// |||||||||||||||||||||||||||||||||
// lsb adress -> 
// Заполнение строки с права на лево    0xA9
// |||||||||||||||||||||||||||||||||
//                     <- lsb adress  
// Начальное значение курсора строка 0  0xAC
// ЖКИ выключен                         0xAE
// ЖКИ включен                          0xAF 
// RESET lcd                            0xE2
// Температурная компенсация включена   0xEB

// DSEG data reserved 
.dseg                  // RAM  
.org       0x70        // Set Ram adress begin 
line_x:   .byte 1      // Lcd line select 
cmd_xll:  .byte 1      // X address low  byte
cmd_xlh:  .byte 1      // X address high byte 
cmd_yl:   .byte 1      // X address low  byte next string
cmd_yh:   .byte 1      // X address high byte next string 
display:  .byte 864    // массив для вывода на ЖКИ 



.cseg                  // FLASH 

// LCD names pinouts 
.equ  LCD     = PORTC  // Порт ЖКИ 
.equ  dat     = PC4    // вывод данных в ЖКИ
.equ  clk     = PC3    // вывод тактов в ЖКИ
.equ  cs      = PC5    // выбор чипа 

.equ  line1   = 0xB0   // 1 
.equ  line2   = 0xB1   // 2 
.equ  line3   = 0xB2   // 3 
.equ  line4   = 0xB3   // 4 
.equ  line5   = 0xB4   // 5 
.equ  line6   = 0xB5   // 6 
.equ  line7   = 0xB6   // 7 
.equ  line8   = 0xB7   // 8 

init_lcd:              // Инициализация ЖКИ модуля
ldi     tmp,0xE2       // Internal reset 
rcall   lcd_cmd        // выводим команду на ЖКИ   
ldi     tmp,0xEB       // температурная компенсация включена  
rcall   lcd_cmd        // выводим команду на ЖКИ  
ldi     tmp,0x2F       // режим питания 
rcall   lcd_cmd        // выводим команду на ЖКИ 
ldi     tmp,0xA1       // направление LSB -> MSB  
rcall   lcd_cmd        // выводим команду на ЖКИ 
ldi     tmp,0x9F       // Контрастность ЖКИ 0х90 ... 0х9F 
rcall   lcd_cmd        // выводим команду на ЖКИ 
ldi     tmp,0xA4       // очистить все пиксели жки 
rcall   lcd_cmd        // выводим команду на ЖКИ 
ldi     tmp,0xA6       // позитивное изображение 
;ldi     tmp,0xA7       // негативное изображение 
rcall   lcd_cmd        // выводим команду на ЖКИ 
ldi     tmp,0xAF       // включить дисплей  
rcall   lcd_cmd        // выводим команду на ЖКИ 
rcall   clr_lcd        // Очищаем ЖКИ от случайного мусора
ret                    // на выход 


clr_line:              // Очистка линии ЖКИ 
ldi    xl,low (96)     // загружаем количество столбцов  
ldi    xh,high(96)     // 
ldi    tmp,0           // загружаем данные 
rjmp   clr_c           // очищаем их 
clr_lcd:               // Очистка ЖКИ 
rcall  lcd_line1       // выбираем начало ЖКИ
ldi    xl,low (864)    // количество столбцов ЖКИ = 864 
ldi    xh,high(864)    // 
ldi    tmp,0           // загружаем данные 
clr_c:                 // цикл очистки ЖКИ
rcall  lcd_data        // выводим данные на ЖКИ
sbiw   xl,1            // счетчик цикла - 1 
brne   clr_c           // если не равно 0 - то переходим к началу
ret                    // выход   


print_data:            // выводим 864 байта из RAM в ЖКИ 
rcall  lcd_line1       // выбираем начало ЖКИ
ldi    xl,low (864)    // количество байт ЖКИ = 864 
ldi    xh,high(864)    // 
ldi   yl,low (display) // загружаем адрес L начала блока RAM 
ldi   yh,high(display) // загружаем адрес H начала блока RAM 
print_c:               // цикл вывода данных в ЖКИ
ld     tmp,Y+          // загружаем данные в регистр из RAM с постинкрементом адреса 
rcall  lcd_data        // выводим данные на ЖКИ
sbiw   xl,1            // счетчик цикла - 1 
brne   print_c         // если не равно 0 - то переходим к началу
ret                    // выход  


lcd_cmd:               // передача команды на ЖКИ 
cbi    lcd,cs          // CS  -> 0  
cbi    lcd,dat         // DAT -> 0 
sbi    lcd,clk         // CLK -> 1 
cbi    lcd,clk         // CLK -> 0 
rjmp   out_byte        // вывести 8 битов
lcd_data:              // передача данных на ЖКИ
cbi    lcd,cs          // выбор чипа
sbi    lcd,dat         // DAT -> 1
sbi    lcd,clk         // CLK -> 1 
cbi    lcd,clk         // CLK -> 0 
out_byte:              // вывод 8 битов из регистра 
ldi    loop,8          // bit counter 
out_c:                 // цикл   
clc                    // очищаем кари флаг 
rol    tmp             // tmp << 1 
brcc   d_zer           // если флаг очищен , до значит данные DATA -> 0
sbi    lcd,dat         // если установлен DATA -> 1
rjmp   d_one           // 
d_zer:                 // 
cbi    lcd,dat         // DATA=0
d_one:                 //  
sbi    lcd,clk         // CLK -> 1 импульс 
cbi    lcd,clk         // CLK -> 0 
dec    loop            // счетчик цикла - 1
brne   out_c           //  
sbi    lcd,cs          // CS  -> 1 
ret                    // выход 


print_char:            // Вывод на ЖКИ символа ASCII 5 х 7 
push  zl               // сохранить zl регистр в стеке 
push  zh               // сохранить zh регистр в стеке (последним зашел , первым вышел)
ldi   tmp,5            // загрузить значение первого множителя  
muls  xl,tmp           // Multiply signed xh and tmp 
movw  xl,r0            // Copy result back in xl:xh  
ldi   tmp,160          // загрузить число 160 DEC в регистр 
sub   xl,tmp           // отнять от пары число 160 0x00 - 0x1F ненужная дата 0x1F * 5 (количество байтов в символе) = 160.
sbc   xh,zero          // число 160 - это количество сэкономленых и ненужных байт в флэш мк
ldi   ZH,high(Code*2)  // загрузить старший адрес строки данных
ldi   ZL,low (Code*2)  // загрузить младший адрес строки данных
add   ZL,xl            // выбираем нужный символ в строке
adc   ZH,xh            // путем прибавления данных к адресу строки  
ldi   tmp1,5           // загружаем счетчик цикла 
flash_rc:              // Чтение символа ASCII в цикле 
lpm   tmp,Z+           // загрузить в регистр данные по адресу Z с прибавлением 1 к Z
rcall lcd_data         // вывести байт на ЖКИ 
dec   tmp1             // счетчик - 1
brne  flash_rc         // если не = 0 то опять по кругу
clr   tmp              // вывести пробел после символа 
rcall lcd_data         // вывести байт на ЖКИ 
pop   zh               // извлечь zh из стека 
pop   zl               // извлечь zl из стека  
ret                    // выход 

out_text:              // Вывод текста из данных флэши  
lpm   xl,Z+            // загрузить в регистр данные по адресу Z с прибавлением 1 к Z
rcall print_char       // вывести символ на ЖКИ   
dec   loop2            // счетчик символов - 1
brne  out_text         // если не равно 0 то опять все повторяем 
ret                    // выход   


print_char_b:          // вывод на ЖКИ символа 9 х 14. 
lds   tmp,line_x       // загружаем данные начальной строки вывода
sts   cmd_yl,tmp       // сохраняем данные команды адреса верхней строки 
inc   tmp              // данные строки + 1
sts   cmd_yh,tmp       // сохраняем данные команды адреса нижней строки 
lds   tmp,cmd_xlh      // загружаем старший байт адреса Х 
rcall lcd_cmd          // выводим команду 
lds   tmp,cmd_xll      // загружаем младший байт адреса Х 
rcall lcd_cmd          // выводим команду 
lds   tmp,cmd_yl       // загружаем адрес Y  
rcall lcd_cmd          // выводим команду 
ldi   tmp,18           // загрузить значение первого множителя  
muls  xl,tmp           // Multiply signed xh and tmp 
movw  xl,r0            // Copy result back in xl:xh 
ldi   zh,high(Cod*2)   // загрузить старший адрес строки данных
ldi   zl,low (Cod*2)   // загрузить младший адрес строки данных
add   zl,xl            // выбираем нужный символ в строке
adc   zh,xh            // путем прибавления данных к адресу строки  
adiw  xl,9             // прибавляем к адресу чтения данных 9
ldi   tmp1,9           // загружаем счетчик цикла 
flash_rc1:             // Чтение символа ASCII в цикле 
lpm   tmp,z+           // загрузить в регистр данные по адресу Z с прибавлением 1 к Z
rcall lcd_data         // вывести байт на ЖКИ 
dec   tmp1             // счетчик - 1
brne  flash_rc1        // если не = 0 то опять по кругу
lds   tmp,cmd_xlh      // загружаем старший байт адреса Х 
rcall lcd_cmd          // выводим команду 
lds   tmp,cmd_xll      // загружаем младший байт адреса Х 
rcall lcd_cmd          // выводим команду 
lds   tmp,cmd_yh       // загружаем адрес Y+1  
rcall lcd_cmd          // выводим команду 
ldi   zh,high(Cod*2)   // загрузить старший адрес строки данных
ldi   zl,low (Cod*2)   // загрузить младший адрес строки данных
add   zl,xl            // выбираем нужный символ в строке
adc   zh,xh            // путем прибавления данных к адресу строки  
ldi   tmp1,9           // загружаем счетчик цикла 
flash_rc2:             // Чтение символа ASCII в цикле 
lpm   tmp,z+           // загрузить в регистр данные по адресу Z с прибавлением 1 к Z
andi  tmp,0x3F         // чистим 2 ненужных бита 
rcall lcd_data         // вывести байт на ЖКИ 
dec   tmp1             // счетчик - 1
brne  flash_rc2        // если не = 0 то опять по кругу 
ret                    // выход 



lcd_line1:             // 1я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB0        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line2:             // 2я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB1        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line3:             // 3я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB2        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line4:             // 4я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB3        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line5:             // 5я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB4        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line6:             // 6я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB5        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line7:             // 7я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB6        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line8:             // 8я Линия ЖКИ для вывода информации 
rcall  lcd_line        // 
ldi    tmp,0xB7        //  
rcall  lcd_cmd         //  
ret                    // 
lcd_line:              // 
ldi    tmp,0x10        // 
rcall  lcd_cmd         // 
ldi    tmp,0x00        //  
rcall  lcd_cmd         // 
ret                    // 



simvol_1:              // установка адреса 1 символа 1   
ldi   tmp,0x10         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x01         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ 
ret                    // выход 
simvol_2:              // установка адреса 13 символа 2   
ldi   tmp,0x10         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x0d         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ 
ret                    // выход 
simvol_3:              // установка адреса 25 символа 3  
ldi   tmp,0x11         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x09         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ 
ret                    // выход 
simvol_4:              // установка адреса 37 символа 4  
ldi   tmp,0x12         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x05         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ 
ret                    // выход 
simvol_5:              // установка адреса 49 символа 5  
ldi   tmp,0x13         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x01         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ 
ret                    // выход 
simvol_6:              // установка адреса 61 символа 6  
ldi   tmp,0x13         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x0d         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ 
ret                    // выход 
simvol_7:              // установка адреса 73 символа 7  
ldi   tmp,0x14         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x09         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ 
ret                    // выход 
simvol_8:              // установка адреса 85 символа 8  
ldi   tmp,0x15         // 
sts   cmd_xlh,tmp      // 
ldi   tmp,0x05         // 
sts   cmd_xll,tmp      // 
rcall print_char_b     // вывести символ 9 х 14  на ЖКИ  
ret                    // выход 



demonstration:           // Вывод текста из FLASH на ЖКИ 
rcall  lcd_line2         // выбираем строку
ldi    zh,high(txt1*2)   // загружаем начальный адрес строки текста
ldi    zl,low (txt1*2)   // умножаем указатель адреса на 2 
ldi    loop2,16          // загружаем количество символов в строке 
rcall  out_text          // выводим текст на ЖКИ

rcall  lcd_line4         // выбираем строку
ldi    zh,high(txt2*2)   // загружаем начальный адрес строки текста
ldi    zl,low (txt2*2)   // умножаем указатель адреса на 2 
ldi    loop2,16          // загружаем количество символов в строке 
rcall  out_text          // выводим текст на ЖКИ

rcall  lcd_line6         // выбираем строку   
ldi    zh,high(txt3*2)   // загружаем начальный адрес строки текста
ldi    zl,low (txt3*2)   // умножаем указатель адреса на 2 
ldi    loop2,16          // загружаем количество символов в строке 
rcall  out_text          // выводим текст на ЖКИ

rcall  lcd_line8         // выбираем строку  
ldi    zh,high(txt4*2)   // загружаем начальный адрес строки текста
ldi    zl,low (txt4*2)   // умножаем указатель адреса на 2 
ldi    loop2,16          // загружаем количество символов в строке 
rcall  out_text          // выводим текст на ЖКИ

;rcall  wait_075s
rcall  wait_075s
rcall  clr_lcd           // очистка ЖКИ
ret                      // выход 




Txt1:                    // Текст 1
.db "pavel-pervomaysk"
Txt2:                    // Текст 2
.db "www.cnc-lab.com "
Txt3:                    // Текст 3
.db "ATmega8A-PU cpu "
Txt4:                    // Текст 4 
.db "Nokia 1110i LCD " 



//    ASCII CODE from lcd 5 x 7 pixels. Один символ = 5 байт  
Code:.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x00,0x00 ; 0x20 ' ' ; 0x21 '!'
 .db 0x00,0x07,0x00,0x07,0x00,0x14,0x7f,0x14,0x7f,0x14 ; 0x22 '"' ; 0x23 '#'
 .db 0x24,0x2a,0x7f,0x2a,0x12,0x23,0x13,0x08,0x64,0x62 ; 0x24 '$' ; 0x25 '%'
 .db 0x36,0x49,0x55,0x22,0x50,0x00,0x05,0x03,0x00,0x00 ; 0x26 '&' ; 0x27 ''
 .db 0x00,0x1c,0x22,0x41,0x00,0x00,0x41,0x22,0x1c,0x00 ; 0x28 '(' ; 0x29 ')'
 .db 0x14,0x08,0x3e,0x08,0x14,0x08,0x08,0x3e,0x08,0x08 ; 0x2A '*' ; 0x2B '+'
 .db 0x00,0x50,0x30,0x00,0x00,0x08,0x08,0x08,0x08,0x08 ; 0x2C ',' ; 0x2D '-'
 .db 0x00,0x60,0x60,0x00,0x00,0x20,0x10,0x08,0x04,0x02 ; 0x2E '.' ; 0x2F '/'
 .db 0x3e,0x51,0x49,0x45,0x3e,0x00,0x42,0x7f,0x40,0x00 ; 0x30 '0' ; 0x31 '1'
 .db 0x42,0x61,0x51,0x49,0x46,0x21,0x41,0x45,0x4b,0x31 ; 0x32 '2' ; 0x33 '3'
 .db 0x18,0x14,0x12,0x7f,0x10,0x27,0x45,0x45,0x45,0x39 ; 0x34 '4' ; 0x35 '5'
 .db 0x3c,0x4a,0x49,0x49,0x30,0x01,0x71,0x09,0x05,0x03 ; 0x36 '6' ; 0x37 '7'
 .db 0x36,0x49,0x49,0x49,0x36,0x06,0x49,0x49,0x29,0x1e ; 0x38 '8' ; 0x39 '9'
 .db 0x00,0x36,0x36,0x00,0x00,0x00,0x56,0x36,0x00,0x00 ; 0x3A ':' ; 0x3B ';'
 .db 0x08,0x14,0x22,0x41,0x00,0x14,0x14,0x14,0x14,0x14 ; 0x3C '<' ; 0x3D '='
 .db 0x00,0x41,0x22,0x14,0x08,0x02,0x01,0x51,0x09,0x06 ; 0x3E '>' ; 0x3F '?'
 .db 0x32,0x49,0x79,0x41,0x3e,0x7e,0x11,0x11,0x11,0x7e ; 0x40 ''  ; 0x41 'A'
 .db 0x7f,0x49,0x49,0x49,0x36,0x3e,0x41,0x41,0x41,0x22 ; 0x42 'B' ; 0x43 'C'
 .db 0x7f,0x41,0x41,0x22,0x1c,0x7f,0x49,0x49,0x49,0x41 ; 0x44 'D' ; 0x45 'E'
 .db 0x7f,0x09,0x09,0x09,0x01,0x3e,0x41,0x49,0x49,0x7a ; 0x46 'F' ; 0x47 'G'
 .db 0x7f,0x08,0x08,0x08,0x7f,0x00,0x41,0x7f,0x41,0x00 ; 0x48 'H' ; 0x49 'I'
 .db 0x20,0x40,0x41,0x3f,0x01,0x7f,0x08,0x14,0x22,0x41 ; 0x4A 'J' ; 0x4B 'K'
 .db 0x7f,0x40,0x40,0x40,0x40,0x7f,0x02,0x0c,0x02,0x7f ; 0x4C 'L' ; 0x4D 'M'
 .db 0x7f,0x04,0x08,0x10,0x7f,0x3e,0x41,0x41,0x41,0x3e ; 0x4E 'N' ; 0x4F 'O'
 .db 0x7f,0x09,0x09,0x09,0x06,0x3e,0x41,0x51,0x21,0x5e ; 0x50 'P' ; 0x51 'Q'
 .db 0x7f,0x09,0x19,0x29,0x46,0x46,0x49,0x49,0x49,0x31 ; 0x52 'R' ; 0x53 'S'
 .db 0x01,0x01,0x7f,0x01,0x01,0x3f,0x40,0x40,0x40,0x3f ; 0x54 'T' ; 0x55 'U'
 .db 0x1f,0x20,0x40,0x20,0x1f,0x3f,0x40,0x38,0x40,0x3f ; 0x56 'V' ; 0x57 'W'
 .db 0x63,0x14,0x08,0x14,0x63,0x07,0x08,0x70,0x08,0x07 ; 0x58 'X' ; 0x59 'Y'
 .db 0x61,0x51,0x49,0x45,0x43,0x00,0x7f,0x41,0x41,0x00 ; 0x5A 'Z' ; 0x5B '['
 .db 0x02,0x04,0x08,0x10,0x20,0x00,0x41,0x41,0x7f,0x00 ; 0x5C ''  ; 0x5D ']'
 .db 0x04,0x02,0x01,0x02,0x04,0x40,0x40,0x40,0x40,0x40 ; 0x5E '^' ; 0x5F '_'
 .db 0x00,0x01,0x02,0x04,0x00,0x20,0x54,0x54,0x54,0x78 ; 0x60 ''  ; 0x61 'a'
 .db 0x7f,0x48,0x44,0x44,0x38,0x38,0x44,0x44,0x44,0x20 ; 0x62 'b' ; 0x63 'c'
 .db 0x38,0x44,0x44,0x48,0x7f,0x38,0x54,0x54,0x54,0x18 ; 0x64 'd' ; 0x65 'e'
 .db 0x08,0x7e,0x09,0x01,0x02,0x0c,0x52,0x52,0x52,0x3e ; 0x66 'f' ; 0x67 'g'
 .db 0x7f,0x08,0x04,0x04,0x78,0x00,0x44,0x7d,0x40,0x00 ; 0x68 'h' ; 0x69 'i'
 .db 0x20,0x40,0x44,0x3d,0x00,0x7f,0x10,0x28,0x44,0x00 ; 0x6A 'j' ; 0x6B 'k'
 .db 0x00,0x41,0x7f,0x40,0x00,0x7c,0x04,0x18,0x04,0x78 ; 0x6C 'l' ; 0x6D 'm'
 .db 0x7c,0x08,0x04,0x04,0x78,0x38,0x44,0x44,0x44,0x38 ; 0x6E 'n' ; 0x6F 'o'
 .db 0x7c,0x14,0x14,0x14,0x08,0x08,0x14,0x14,0x18,0x7c ; 0x70 'p' ; 0x71 'q'
 .db 0x7c,0x08,0x04,0x04,0x08,0x48,0x54,0x54,0x54,0x20 ; 0x72 'r' ; 0x73 's'
 .db 0x04,0x3f,0x44,0x40,0x20,0x3c,0x40,0x40,0x20,0x7c ; 0x74 't' ; 0x75 'u'
 .db 0x1c,0x20,0x40,0x20,0x1c,0x3c,0x40,0x30,0x40,0x3c ; 0x76 'v' ; 0x77 'w'
 .db 0x44,0x28,0x10,0x28,0x44,0x0c,0x50,0x50,0x50,0x3c ; 0x78 'x' ; 0x79 'y'
 .db 0x44,0x64,0x54,0x4c,0x44,0x00,0x08,0x36,0x41,0x00 ; 0x7A 'z' ; 0x7B '{'
 .db 0x00,0x00,0x7f,0x00,0x00,0x00,0x41,0x36,0x08,0x00 ; 0x7C '|' ; 0x7D '}'
 .db 0x10,0x08,0x08,0x10,0x08,0x06,0x09,0x09,0x06,0x00 ; 0x7E '->'; 0x7F ' ' градус цельсия 



//    ASCII CODE from lcd 9 x 14 pixels. Один символ = 18 байт 
Cod: .db 0xff,0xff,0x03,0x03,0x03,0x03,0x03,0xff,0xff,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x3f,0x3f  ; '0'
    .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3f,0x3f  ; '1'
 .db 0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xff,0xff,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x30,0x30  ; '2'
 .db 0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xff,0xff,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x3f,0x3f  ; '3'
 .db 0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3f,0x3f  ; '4'
 .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x3f,0x3f  ; '5'
 .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x3f,0x3f  ; '6'
    .db 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3f,0x3f  ; '7'
    .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xff,0xff,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x3f,0x3f  ; '8'
    .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xff,0xff,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x3f,0x3f  ; '9'
 .db 0xfc,0xfe,0xc3,0xc3,0xc3,0xc3,0xc3,0xfe,0xfc,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,
0x3f,0x3f  ; 'A'
 .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0x3c,0x3c,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x0f,0x0f  ; 'B'
 .db 0xfc,0xfc,0x03,0x03,0x03,0x03,0x03,0x0c,0x0c,0x0f,0x0f,0x30,0x30,0x30,0x30,0x30,
0x0c,0x0c  ; 'C'
 .db 0xff,0xff,0x03,0x03,0x03,0x03,0x03,0xfc,0xfc,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x0f,0x0f  ; 'D'
 .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x03,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x30,0x30  ; 'E'
 .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x03,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,
0x00,0x00  ; 'F'
 .db 0xfc,0xfe,0x03,0x03,0x83,0x83,0x83,0x8e,0x8c,0x0f,0x1f,0x30,0x30,0x31,0x31,0x31,
0x1f,0x0f  ; 'G'
 .db 0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xff,0xff,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,
0x3f,0x3f  ; 'H'
 .db 0x00,0x03,0x03,0xff,0xff,0x03,0x03,0x00,0x00,0x00,0x30,0x30,0x3f,0x3f,0x30,0x30,
0x00,0x00  ; 'I'
 .db 0x00,0x00,0x00,0x03,0x03,0xff,0xff,0x03,0x03,0x0c,0x1c,0x30,0x30,0x30,0x1f,0x0f,
0x00,0x00  ; 'J'
 .db 0xff,0xff,0xc0,0xe0,0x30,0x18,0x0c,0x07,0x03,0x3f,0x3f,0x00,0x01,0x03,0x06,0x0c,
0x38,0x30  ; 'K'
 .db 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,
0x30,0x30  ; 'L'
 .db 0xff,0xff,0x06,0x0c,0x18,0x0c,0x06,0xff,0xff,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,
0x3f,0x3f  ; 'M'
 .db 0xff,0xff,0x30,0x60,0xc0,0x80,0x00,0xff,0xff,0x3f,0x3f,0x00,0x00,0x00,0x01,0x03,
0x3f,0x3f  ; 'N'
 .db 0xfc,0xfe,0x03,0x03,0x03,0x03,0x03,0xfe,0xfc,0x0f,0x1f,0x30,0x30,0x30,0x30,0x30,
0x1f,0x0f  ; 'O'
 .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0x7e,0x3c,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,
0x00,0x00  ; 'P'
 .db 0xfc,0xfe,0x03,0x03,0x03,0x03,0x03,0xfe,0xfc,0x0f,0x1f,0x30,0x30,0x34,0x2c,0x18,
0x37,0x2f  ; 'Q'
 .db 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0x7e,0x3c,0x3f,0x3f,0x01,0x03,0x06,0x0c,0x18,
0x30,0x20  ; 'R'
 .db 0x3c,0x7e,0xc3,0xc3,0xc3,0xc3,0xc3,0x83,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,
0x1f,0x0f  ; 'S'
 .db 0x03,0x03,0x03,0xff,0xff,0xff,0x03,0x03,0x03,0x00,0x00,0x00,0x3f,0x3f,0x3f,0x00,
0x00,0x00  ; 'T'
 .db 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0f,0x1f,0x30,0x30,0x30,0x30,0x30,
0x1f,0x0f  ; 'U'
 .db 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x03,0x07,0x0c,0x18,0x30,0x18,0x0c,
0x07,0x03  ; 'V'
 .db 0xff,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0xff,0x0f,0x1f,0x30,0x30,0x1f,0x30,0x30,
0x1f,0x0f  ; 'W'
 .db 0x07,0x0f,0x18,0xf0,0xe0,0xf0,0x18,0x0f,0x07,0x38,0x3c,0x06,0x03,0x01,0x03,0x06,
0x3c,0x38  ; 'X'
 .db 0x3f,0x7f,0xc0,0xc0,0xc0,0xc0,0xc0,0x7f,0x3f,0x00,0x00,0x00,0x3f,0x3f,0x3f,0x00,
0x00,0x00  ; 'Y'
 .db 0x03,0x03,0x03,0x83,0xc3,0x63,0x33,0x1f,0x0f,0x3c,0x3e,0x33,0x31,0x30,0x30,0x30,
0x30,0x30  ; 'Z'


 .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00  ; ' '
 .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x3c,0x3c,0x00,
0x00,0x00  ; '.'
 .db 0x00,0x00,0x00,0x3c,0x3c,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,
0x00,0x00  ; ':'
 .db 0x00,0x1c,0x3e,0x63,0x63,0x63,0x3e,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00  ; 'o' градус цельсия 
 .db 0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00  ; '-' минус 
 .db 0xc0,0xc0,0xc0,0xf8,0xf8,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,
0x00,0x00  ; '+' плюс
 .db 0x80,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x01,0x01,
0x01,0x00  ; '~' переменка


;	 .db 0x,0x,0x,0x,0x,0x,0x,0x,0x,  ; здесь добавляем свои символы 9 х 14 
;    .db 0x,0x,0x,0x,0x,0x,0x,0x,0x  ; ' '


post-33716-1317643753_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...