Помогите с 16-сегментным индикатором

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

Привет котам :)
Вообщем начну с самого начала:
На работе дали задание сделать информационную строку - в общем сначала подумал о матрице - но погоняв это дело в протеусе понял что процессорного времени нехватит для опроса большого числа регистров, поэтому решил объединить всё это дело в 16-сегментный дисплей из n-количества разрядов...но тут оказалось не всё так просто как с 7-сегментным...
- портов нужно в 2 раза больше, а поэтому нужно както их объединить в один виртуальный чтоли...незнаю :(
Кто что подскажет? как организовать управление 16-сегментным индикатором? может есть у кого опыт использования? :)

я тут накидал код...но он несовсем работает так как пологается... :(
Вложения
Version 16-segment.zip
(119.76 КБ) 415 скачиваний
AVR FOR CИ РУЛИТ)))
O_l_e_g
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт дек 27, 2011 01:13:21

Re: Помогите с 16-сегментным индикатором

Сообщение O_l_e_g »

artemvinihenko
Вы разработайте вначале само устройство (как минимум принципиальную схему) и сразу станет понятно как им управлять. В данном случае программа второстепенна
Аватара пользователя
Кефир
Встал на лапы
Сообщения: 131
Зарегистрирован: Пт апр 01, 2011 20:59:47
Откуда: Саратов
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение Кефир »

Регистр сдвига берите... можно 74HC595

На матрицу вам хватит машинного времени!
Уж проверено и все исправно работает!
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

O_l_e_g писал(а):artemvinihenko
Вы разработайте вначале само устройство (как минимум принципиальную схему) и сразу станет понятно как им управлять. В данном случае программа второстепенна

Схема очень проста, если брать принцип 16-сегментного индикатора - все выводы контроллера к индикатору будут подключены а данные на вывод он будет получать по UART c другого контроллера :)
AVR FOR CИ РУЛИТ)))
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

Кефир писал(а):Регистр сдвига берите... можно 74HC595

На матрицу вам хватит машинного времени!
Уж проверено и все исправно работает!



Если брать матрицу то мне нужно как минимум 10 регистров...незнаю справится...размеры ведь не маленькие...
та и еще как-то алфавит и цифры нужно преобразовывать в эти регистры
в 16-сегментниках вроде проще "путь" :)
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение Аlex »

как организовать управление 16-сегментным индикатором?
Странный какой-то вопрос :roll: Ответ один - так-же как и 7-ми сегментным, только на 16.
Используем 2 порта. Для каждого разряда два однобайтных или по одному двухбайтному значению в таблице. Выплёвываем эти значения в порты так-же, как и при индикации на 7-ми сегментиках, переключая разряды.
Аватара пользователя
Кефир
Встал на лапы
Сообщения: 131
Зарегистрирован: Пт апр 01, 2011 20:59:47
Откуда: Саратов
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение Кефир »

Использовал 6 регистров для матрицы 8х48 все исправно работает, машинного времени куда достаточно чтобы и с 10-ю справиться!

Хочу сказать не чего страшного нет, смело берите матрицу!

Данные также передавал по UART!
На компе сделал виртуальную бегущую строку и по байтно передовал МК.
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

Кефир писал(а):Использовал 6 регистров для матрицы 8х48 все исправно работает, машинного времени куда достаточно чтобы и с 10-ю справиться!

Хочу сказать не чего страшного нет, смело берите матрицу!

Данные также передавал по UART!
На компе сделал виртуальную бегущую строку и по байтно передовал МК.


на симуляторе в протеусе заметно мигания - хотя это может протеус тормоз...

или я неэкономично использую ресурсы при опросе регистров
регистры вот так юзаю:
Спойлер

Код: Выделить всё

unsigned int b0,b1,b2,b3,b4,b5,b6,b7; //строки
unsigned int b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30,b31;//столбцы
unsigned int bayt=0; //номер байта
unsigned int n=32; //разрядность бит
unsigned int bit_out=0; //

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{


   SH = 1;  //такт+
 switch(bayt)    //здесь считываем байты с переменных и записываем в инф.вход регистра
      {                //и записываем каждый байт в строку регистра
      //в зависимости от значения переменной номера байта
               case (0):
                DS=b0;        //записали значение
                 break;          //выпали на.....й
               case (1):
                DS=b1;   //записали значение
                 break;          //выпали на.....й
                 case (2):
                DS=b2;   //записали значение
                 break;          //выпали на.....й
                  case (3):
                DS=b3;   //записали значение
                 break;          //выпали на.....й
                 case (4):
                DS=b4;   //записали значение
                 break;          //выпали на.....й
                 case (5):
                DS=b5;   //записали значение
                 break;          //выпали на.....й
                 case (6):
                DS=b6;   //записали значение
                 break;          //выпали на.....й
                 case (7):
                DS=b7;   //записали значение
                 break;          //выпали на.....й
                  case (8):
                DS=b8;   //записали значение
                 break;          //выпали на.....й
                  case (9):
                DS=b9;   //записали значение
                 break;          //выпали на.....й
                  case (10):
                DS=b10;   //записали значение
                 break;          //выпали на.....й
                  case (11):
                DS=b11;   //записали значение
                 break;          //выпали на.....й
                  case (12):
                DS=b12;   //записали значение
                 break;          //выпали на.....й
                  case (13):
                DS=b13;   //записали значение
                 break;          //выпали на.....й
                  case (14):
                DS=b14;   //записали значение
                 break;          //выпали на.....й
                  case (15):
                DS=b15;   //записали значение
                 break;          //выпали на.....й
                case (16):
                DS=b16;        //записали значение
                 break;          //выпали на.....й
               case (17):
                DS=b17;   //записали значение
                 break;          //выпали на.....й
                 case (18):
                DS=b18;   //записали значение
                 break;          //выпали на.....й
                  case (19):
                DS=b19;   //записали значение
                 break;          //выпали на.....й
                 case (20):
                DS=b20;   //записали значение
                 break;          //выпали на.....й
                 case (21):
                DS=b21;   //записали значение
                 break;          //выпали на.....й
                 case (22):
                DS=b22;   //записали значение
                 break;          //выпали на.....й
                 case (23):
                DS=b23;   //записали значение
                 break;          //выпали на.....й
                  case (24):
                DS=b24;   //записали значение
                 break;          //выпали на.....й
                  case (25):
                DS=b25;   //записали значение
                 break;          //выпали на.....й
                  case (26):
                DS=b26;   //записали значение
                 break;          //выпали на.....й
                  case (27):
                DS=b27;   //записали значение
                 break;          //выпали на.....й
                  case (28):
                DS=b28;   //записали значение
                 break;          //выпали на.....й
                  case (29):
                DS=b29;   //записали значение
                 break;          //выпали на.....й
                  case (30):
                DS=b30;   //записали значение
                 break;          //выпали на.....й
                  case (31):
                DS=b31;   //записали значение
                 break;          //выпали на.....й
      }
                if (bayt>=n)  //если ко-во бит ровно n
              {
              ST = 1;       //вывели данные на выход
              bayt = 0;  //обнулили
              else
              {
                bayt++;    //прибавили ко-во переменной байта
              }
           ST = 0;       //обнулили выходы
           SH = 0;      //такт--


}
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Помогите с 16-сегментным индикатором

Сообщение Engineer_Keen »

artemvinihenko писал(а):на симуляторе в протеусе заметно мигания - хотя это может протеус тормоз...

Да, тормоз, и еще какой... Только железо покажет правду :)
artemvinihenko писал(а):или я неэкономично использую ресурсы при опросе регистров
регистры вот так юзаю:
[код]

Мда... Мягко говоря не экономично... Хорошо если компилятор догадается CASE преобразовать в IJMP, а если в кучу условий, то это пипец), первое сразу выполнится, а до последнего сколько проверок пройдет? Тут массив просится, и вывод данных тупо в цикле.
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

Насчёт основного цикла эт да) но у меня чёт в голове неукладывается как здесь масив применить для такого количества данных - в моём случе их будет примерно 72 бит - 9 регистров...
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Кефир
Встал на лапы
Сообщения: 131
Зарегистрирован: Пт апр 01, 2011 20:59:47
Откуда: Саратов
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение Кефир »

Короче, делю на две части, что нужно сделать.

1 Часть программная на ПК:

1.1 Создаем библиотеку символов-массивов(сразу определитесь с размером шрифта чтобы все массивы-символов по размерам были похожи);
1.2 Инициализируем массив в который будем записывать последовательно символы с массива-символов(еще проще говоря из маленьких массивов создаем один большой;
1.3 Создаем массив для вывода данных на порт (его размеры должны соответствовать размеру массива в МК);
1.4 Читаем массив который был создан в 1.2 и записываем в массив который был создан в 1.3
1.5 Читаем массив который создали в 1.3 и по байтно отправляем данные в порт;

2 Часть программная на МК:

2.1 Инициализируем UART ( разрешаем прерывание все такое, в прерывании записываем принятые данные в массив памяти МК или в EEPROM кидаем);
2.2 В свободное время читаем данные с массива памяти МК и выводим на сдвиговый регист.

ВСЕ! это простой, очень сжатый рабочий алгоритм, который был проверен!

Удачи.
Аватара пользователя
Кефир
Встал на лапы
Сообщения: 131
Зарегистрирован: Пт апр 01, 2011 20:59:47
Откуда: Саратов
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение Кефир »

все?.... тема не актуальна ?
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

Кефир писал(а):все?.... тема не актуальна ?

актуальна :) просто щас сессию сдаю в универе(через пару 3 дней разгружусь)...уже накидал новый код - болеее менее эфективный - появится время выложу сюда.
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

Re: Помогите с 16-сегментным индикатором

Сообщение Moto_v3x »

В журнале "Радио" №9 за этот год есть схема часов на таких индикаторах и исходники для пика.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Помогите с 16-сегментным индикатором

Сообщение ChipKiller »

2 TC Замените CASE выборкой из таблицы – будет и короче и быстрее
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

Moto_v3x писал(а):В журнале "Радио" №9 за этот год есть схема часов на таких индикаторах и исходники для пика.


увы с пиками "недружу" :( только авр на си в CVAVR :)
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

Re: Помогите с 16-сегментным индикатором

Сообщение Moto_v3x »

artemvinihenko писал(а): с пиками "недружу" :( только авр на си в CVAVR :)

так там на Си
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

ChipKiller писал(а):2 TC Замените CASE выборкой из таблицы – будет и короче и быстрее


уже сделал вот так
Спойлер

Код: Выделить всё

#include <mega32.h>
#include <delay.h>
// Standard Input/Output functions
#include <stdio.h>

#define SH PORTC.0     //тактовый вход
#define ST PORTC.2   //вывод данных
#define DS PORTC.1    //вход данных



// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

}

unsigned char led_tab[]={
0b11111111, //0
0b00000000, //1
0b01111110, //2
0b00000000, //3
0b11111111, //4
0b11111110, //5
0b00000000, //6
0b11111110, //7
0b11111111, //8
0b11111111, //9
0b00000000, //10
0b01100110, //11
0b00000000, //12
0b11111111, //13
0b11011110, //14
0b00000000, //15
0b11011110, //16
0b11111111, // 17
0b11111111, //18
0b00000000, //19
0b01011010, //20
0b00000000, //21
0b11111111, //22
0b01101110, //23
0b00000000, //24
0b01101110, //25
0b11111111,};  //26

unsigned char dig_number=0; //Отображаемый разряд
unsigned char out;

void show_dig()
 {
  unsigned char data[];
  ST=0;                  //"защёлка" в ноль

   data[0]=1<<dig_number; // сдвигаем бит переменной на 1 и присваиваем "дата 0"

     DS=data[0]&1;       //побитное "И"
     SH=1;               //   такт +
     delay_us(3900);     //специальнно ввёл задержку чтоб симулятор успевал отображать точки
     SH=0;               //   такт-
     data[0]>>=1;         // сдвигаем бит с присваиванием 1


  dig_number++;            //прибавляем значение текущего столбика в строке
  if (dig_number>71) {dig_number=0;}  //  до определённого значения
  ST=1;               //   защёлкиваем данные регистров

  if(out==0){out=72;}
  PORTB=led_tab[out]; //выводим данные
  out--;

  }




теперь нужно это дело с юартом связать и алфавит составить :)
AVR FOR CИ РУЛИТ)))
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение artemvinihenko »

Снова в теме :)
Вообщем сделал в симуляторе пока на 6 регистрах строку - но работает не так как хотелось-бы...
данные я отправляю в юарт вASII кодировке...но вот после их раскодировки и начинаются проблемы:
1 - это то что тот массив что я скопировал с другого проэкта - неподходит - каракули всякие высвечивает - но эт пол беды - эт исправимо заменой кода...
2 - при выводе букв и цыфр(пока исправил только 0,1 и А(англ.большая) - ноль вроде норм отображается а 1 и буква "А" несовсем так - такое впечетление что 1 столбик копирует 5...так сложно объяснить - посмотрите в симуляторе - что я неправильно делаю? :(
файлы проекта в архиве...
Version 1.0.rar
(121.53 КБ) 245 скачиваний

вот код
Спойлер

Код: Выделить всё

Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>
// Standard Input/Output functions
#include <stdio.h>

#define SH PORTC.0     //тактовый вход
#define ST PORTC.2   //вывод данных
#define DS PORTC.1    //вход данных



// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

}

flash char led_tab[][5]={
0xff, 0xff, 0xff, 0xff, 0xff,// 00
0x00, 0x00, 0x5F, 0x00, 0x00,// 01
0x00, 0x07, 0x00, 0x07, 0x00,// 02
0x14, 0x7F, 0x14, 0x7F, 0x14,// 03
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 04
0x23, 0x13, 0x08, 0x64, 0x62,// 05
0x36, 0x49, 0x55, 0x22, 0x50,// 06
0x00, 0x05, 0x03, 0x00, 0x00,// 07
0x00, 0x1C, 0x22, 0x41, 0x00,// 08
0x00, 0x41, 0x22, 0x1C, 0x00,// 09
0x14, 0x08, 0x3E, 0x08, 0x14,// 0A
0x08, 0x08, 0x3E, 0x08, 0x08,// 0B
0x00, 0x50, 0x30, 0x00, 0x00,// 0C
0x02, 0x02, 0x02, 0x02, 0x02,// 0D
0x00, 0x60, 0x60, 0x00, 0x00,// 0E
0x20, 0x10, 0x08, 0x04, 0x02,// 0F
0x00, 0x00, 0x00, 0x00, 0x00,// 10
0x00, 0x00, 0x5F, 0x00, 0x00,// 11
0x00, 0x07, 0x00, 0x07, 0x00,// 12
0x14, 0x7F, 0x14, 0x7F, 0x14,// 13
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 14
0x23, 0x13, 0x08, 0x64, 0x62,// 15
0x36, 0x49, 0x55, 0x22, 0x50,// 16
0x00, 0x05, 0x03, 0x00, 0x00,// 17
0x00, 0x1C, 0x22, 0x41, 0x00,// 18
0x00, 0x41, 0x22, 0x1C, 0x00,// 19
0x14, 0x08, 0x3E, 0x08, 0x14,// 1A
0x08, 0x08, 0x3E, 0x08, 0x08,// 1B
0x00, 0x50, 0x30, 0x00, 0x00,// 1C
0x08, 0x08, 0x08, 0x08, 0x08,// 1D
0x00, 0x60, 0x60, 0x00, 0x00,// 1E
0x20, 0x10, 0x08, 0x04, 0x02,// 1F
0xff, 0xff, 0xff, 0xff, 0xff,// 20 space
0xFF, 0xff, 0xff, 0xff, 0x40,// 21 !
0x00, 0x07, 0x00, 0x07, 0x00,// 22 "
0x14, 0x7F, 0x14, 0x7F, 0x14,// 23 #
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 24 $
0x23, 0x13, 0x08, 0x64, 0x62,// 25 %
0x36, 0x49, 0x55, 0x22, 0x50,// 26 &
0x00, 0x05, 0x03, 0x00, 0x00,// 27 '
0x00, 0x1C, 0x22, 0x41, 0x00,// 28 (
0x00, 0x41, 0x22, 0x1C, 0x00,// 29 )
0x14, 0x08, 0x3E, 0x08, 0x14,// 2a *
0x08, 0x08, 0x3E, 0x08, 0x08,// 2b +
0x00, 0x50, 0x30, 0x00, 0x00,// 2c ,
0x08, 0x08, 0x08, 0x08, 0x08,// 2d -
0x00, 0x60, 0x60, 0x00, 0x00,// 2e .
0x20, 0x10, 0x08, 0x04, 0x02,// 2f /
0x00, 0x7e, 0x7e, 0x7e, 0x00,// 30 0
0xFF, 0xFF, 0xFF, 0x00, 0xFF,// 31 1
0x42, 0x61, 0x51, 0x49, 0x46,// 32 2
0x21, 0x41, 0x45, 0x4B, 0x31,// 33 3
0x18, 0x14, 0x12, 0x7F, 0x10,// 34 4
0x27, 0x45, 0x45, 0x45, 0x39,// 35 5
0x3C, 0x4A, 0x49, 0x49, 0x30,// 36 6
0x01, 0x71, 0x09, 0x05, 0x03,// 37 7
0x36, 0x49, 0x49, 0x49, 0x36,// 38 8
0x06, 0x49, 0x49, 0x29, 0x1E,// 39 9
0x00, 0x36, 0x36, 0x00, 0x00,// 3a :
0x00, 0x56, 0x36, 0x00, 0x00,// 3b ;
0x08, 0x14, 0x22, 0x41, 0x00,// 3c <
0x14, 0x14, 0x14, 0x14, 0x14,// 3d =
0x00, 0x41, 0x22, 0x14, 0x08,// 3e >
0x02, 0x01, 0x51, 0x09, 0x06,// 3f ?
0x32, 0x49, 0x79, 0x41, 0x3E,// 40 @
0x00, 0xF6, 0xF6, 0x00, 0xFF,// 41 A
0x7F, 0x49, 0x49, 0x49, 0x36,// 42 B
0x3E, 0x41, 0x41, 0x41, 0x22,// 43 C
0x7F, 0x41, 0x41, 0x22, 0x1C,// 44 D
0x7F, 0x49, 0x49, 0x49, 0x41,// 45 E
0xFF, 0xF6, 0xF6, 0xF6, 0x00,// 46 F
0x3E, 0x41, 0x49, 0x49, 0x7A,// 47 G
0x7F, 0x08, 0x08, 0x08, 0x7F,// 48 H
0x00, 0x41, 0x7F, 0x41, 0x00,// 49 I
0x20, 0x40, 0x41, 0x3F, 0x01,// 4a J
0x7F, 0x08, 0x14, 0x22, 0x41,// 4b K
0x7F, 0x40, 0x40, 0x40, 0x40,// 4c L
0x7F, 0x02, 0x0C, 0x02, 0x7F,// 4d M
0x7F, 0x04, 0x08, 0x10, 0x7F,// 4e N
0x3E, 0x41, 0x41, 0x41, 0x3E,// 4f O
0x7F, 0x09, 0x09, 0x09, 0x06,// 50 P
0x3E, 0x41, 0x51, 0x21, 0x5E,// 51 Q
0x7F, 0x09, 0x19, 0x29, 0x46,// 52 R
0x46, 0x49, 0x49, 0x49, 0x31,// 53 S
0x01, 0x01, 0x7F, 0x01, 0x01,// 54 T
0x3F, 0x40, 0x40, 0x40, 0x3F,// 55 U
0x1F, 0x20, 0x40, 0x20, 0x1F,// 56 V
0x3F, 0x40, 0x38, 0x40, 0x3F,// 57 W
0x63, 0x14, 0x08, 0x14, 0x63,// 58 X
0x07, 0x08, 0x70, 0x08, 0x07,// 59 Y
0x61, 0x51, 0x49, 0x45, 0x43,// 5a Z
0x00, 0x7F, 0x41, 0x41, 0x00,// 5b [
0x02, 0x04, 0x08, 0x10, 0x20,// 5c Yen Currency Sign
0x00, 0x41, 0x41, 0x7F, 0x00,// 5d ]
0x04, 0x02, 0x01, 0x02, 0x04,// 5e ^
0x40, 0x40, 0x40, 0x40, 0x40,// 5f _
0x00, 0x01, 0x02, 0x04, 0x00,// 60 `
0x20, 0x54, 0x54, 0x54, 0x78,// 61 a
0x7F, 0x48, 0x44, 0x44, 0x38,// 62 b
0x38, 0x44, 0x44, 0x44, 0x20,// 63 c
0x38, 0x44, 0x44, 0x48, 0x7F,// 64 d
0x38, 0x54, 0x54, 0x54, 0x18,// 65 e
0x08, 0x7E, 0x09, 0x01, 0x02,// 66 f
0x0C, 0x52, 0x52, 0x52, 0x3E,// 67 g
0x7F, 0x08, 0x04, 0x04, 0x78,// 68 h
0x00, 0x44, 0x7D, 0x40, 0x00,// 69 i
0x20, 0x40, 0x44, 0x3D, 0x00,// 6a j
0x7F, 0x10, 0x28, 0x44, 0x00,// 6b k
0x00, 0x41, 0x7F, 0x40, 0x00,// 6c l
0x7C, 0x04, 0x18, 0x04, 0x78,// 6d m
0x7C, 0x08, 0x04, 0x04, 0x78,// 6e n
0x38, 0x44, 0x44, 0x44, 0x38,// 6f o
0x7C, 0x14, 0x14, 0x14, 0x08,// 70 p
0x08, 0x14, 0x14, 0x18, 0x7C,// 71 q
0x7C, 0x08, 0x04, 0x04, 0x08,// 72 r
0x08, 0x54, 0x54, 0x54, 0x20,// 73 s
0x04, 0x3F, 0x44, 0x40, 0x20,// 74 t
0x3C, 0x40, 0x40, 0x20, 0x7C,// 75 u
0x1C, 0x20, 0x40, 0x20, 0x1C,// 76 v
0x3C, 0x40, 0x30, 0x40, 0x3C,// 77 w
0x44, 0x28, 0x10, 0x28, 0x44,// 78 x
0x0C, 0x50, 0x50, 0x50, 0x3C,// 79 y
0x44, 0x64, 0x54, 0x4C, 0x44,// 7a z
0x00, 0x08, 0x36, 0x41, 0x00,// 7b <
0x00, 0x00, 0x7F, 0x00, 0x00,// 7c |
0x00, 0x41, 0x36, 0x08, 0x00,// 7d >
0x10, 0x08, 0x08, 0x10, 0x08,// 7e Right Arrow ->
0x78, 0x46, 0x41, 0x46, 0x78,// 7f Left Arrow <-
0x00, 0x00, 0x00, 0x00, 0x00,// 80
0x00, 0x00, 0x5F, 0x00, 0x00,// 81
0x00, 0x07, 0x00, 0x07, 0x00,// 82
0x14, 0x7F, 0x14, 0x7F, 0x14,// 83
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 84
0x23, 0x13, 0x08, 0x64, 0x62,// 85
0x36, 0x49, 0x55, 0x22, 0x50,// 86
0x00, 0x05, 0x03, 0x00, 0x00,// 87
0x00, 0x1C, 0x22, 0x41, 0x00,// 88
0x00, 0x41, 0x22, 0x1C, 0x00,// 89
0x14, 0x08, 0x3E, 0x08, 0x14,// 8A
0x08, 0x08, 0x3E, 0x08, 0x08,// 8B
0x00, 0x50, 0x30, 0x00, 0x00,// 8C
0x08, 0x08, 0x08, 0x08, 0x08,// 8D
0x00, 0x60, 0x60, 0x00, 0x00,// 8E
0x20, 0x10, 0x08, 0x04, 0x02,// 8F
0x00, 0x00, 0x00, 0x00, 0x00,// 90
0x00, 0x00, 0x5F, 0x00, 0x00,// 91
0x00, 0x07, 0x00, 0x07, 0x00,// 92
0x14, 0x7F, 0x14, 0x7F, 0x14,// 93
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 94
0x23, 0x13, 0x08, 0x64, 0x62,// 95
0x36, 0x49, 0x55, 0x22, 0x50,// 96
0x00, 0x05, 0x03, 0x00, 0x00,// 97
0x00, 0x1C, 0x22, 0x41, 0x00,// 98
0x00, 0x41, 0x22, 0x1C, 0x00,// 99
0x14, 0x08, 0x3E, 0x08, 0x14,// 9A
0x08, 0x08, 0x3E, 0x08, 0x08,// 9B
0x00, 0x50, 0x30, 0x00, 0x00,// 9C
0x08, 0x08, 0x08, 0x08, 0x08,// 9D
0x00, 0x60, 0x60, 0x00, 0x00,// 9E
0x20, 0x10, 0x08, 0x04, 0x02,// 9F
0x00, 0x00, 0x00, 0x00, 0x00,// A0
0x00, 0x00, 0x5F, 0x00, 0x00,// A1
0x00, 0x07, 0x00, 0x07, 0x00,// A2
0x14, 0x7F, 0x14, 0x7F, 0x14,// A3
0x24, 0x2A, 0x7F, 0x2A, 0x12,// A4
0x23, 0x13, 0x08, 0x64, 0x62,// A5
0x36, 0x49, 0x55, 0x22, 0x50,// A6
0x00, 0x05, 0x03, 0x00, 0x00,// A7
0x00, 0x1C, 0x22, 0x41, 0x00,// A8
0x00, 0x41, 0x22, 0x1C, 0x00,// A9
0x14, 0x08, 0x3E, 0x08, 0x14,// AA
0x08, 0x08, 0x3E, 0x08, 0x08,// AB
0x00, 0x50, 0x30, 0x00, 0x00,// AC
0x08, 0x08, 0x08, 0x08, 0x08,// AD
0x00, 0x60, 0x60, 0x00, 0x00,// AE
0x20, 0x10, 0x08, 0x04, 0x02,// AF
//0x3E, 0x51, 0x49, 0x45, 0x3E,// B0
//0x00, 0x06, 0x09, 0x09, 0x06,
0x00, 0x42, 0x7F, 0x40, 0x00,// B1
0x42, 0x61, 0x51, 0x49, 0x46,// B2
0x21, 0x41, 0x45, 0x4B, 0x31,// B3
0x18, 0x14, 0x12, 0x7F, 0x10,// B4
0x27, 0x45, 0x45, 0x45, 0x39,// B5
0x3C, 0x4A, 0x49, 0x49, 0x30,// B6
0x01, 0x71, 0x09, 0x05, 0x03,// B7
0x36, 0x49, 0x49, 0x49, 0x36,// B8
0x06, 0x49, 0x49, 0x29, 0x1E,// B9
0x00, 0x36, 0x36, 0x00, 0x00,// BA
0x00, 0x56, 0x36, 0x00, 0x00,// BB
0x08, 0x14, 0x22, 0x41, 0x00,// BC
0x14, 0x14, 0x14, 0x14, 0x14,// BD
0x00, 0x41, 0x22, 0x14, 0x08,// BE
0x02, 0x01, 0x51, 0x09, 0x06,// BF
0xFF, 0x00, 0xf6, 0xF6, 0x00,// C0 А
0x7F, 0x49, 0x49, 0x49, 0x31,// C1 Б
0x7F, 0x49, 0x49, 0x49, 0x36,// C2 В
0xFF, 0x7F, 0x7F, 0x7F, 0x00,// C3 Г
0x60, 0x3E, 0x21, 0x21, 0x7F,// C4 Д
0x7F, 0x49, 0x49, 0x49, 0x41,// C5 Е
0x77, 0x08, 0x7F, 0x08, 0x77,// C6 Ж
0x22, 0x41, 0x49, 0x49, 0x36,// C7 З
0x7F, 0x10, 0x08, 0x04, 0x7F,// C8 И
0x7F, 0x10, 0x09, 0x04, 0x7F,// C9 И
0x7F, 0x08, 0x14, 0x22, 0x41,// CA К
0x40, 0x3E, 0x01, 0x01, 0x7F,// CB Л
0x7F, 0x02, 0x0C, 0x02, 0x7F,// CC М
0x7F, 0x08, 0x08, 0x08, 0x7F,// CD Н
0x3E, 0x41, 0x41, 0x41, 0x3E,// CE О
0x7F, 0x01, 0x01, 0x01, 0x7F,// CF П
0x7F, 0x09, 0x09, 0x09, 0x06,// D0 Р
0x3E, 0x41, 0x41, 0x41, 0x22,// D1 С
0x01, 0x01, 0x7F, 0x01, 0x01,// D2 Т
0x27, 0x48, 0x48, 0x48, 0x3F,// D3 У
0x1E, 0x21, 0x7F, 0x21, 0x1E,// D4 Ф
0x63, 0x14, 0x08, 0x14, 0x63,// D5 Х
0x3F, 0x20, 0x20, 0x3F, 0x60,// D6 Ц
0x07, 0x08, 0x08, 0x08, 0x7F,// D7 Ч
0x7F, 0x40, 0x7F, 0x40, 0x7F,// D8 Ш
0x3F, 0x20, 0x3F, 0x20, 0x7F,// D9 Щ
0x01, 0x7F, 0x48, 0x48, 0x30,// DA Ъ
0x7F, 0x48, 0x30, 0x00, 0x7F,// DB Ы
0x00, 0x7F, 0x48, 0x48, 0x30,// DC Ь
0x22, 0x41, 0x49, 0x49, 0x3E,// DD Э
0x7F, 0x08, 0x3E, 0x41, 0x3E,// DE Ю
0x46, 0x29, 0x19, 0x09, 0x7F,// DF Я
0x00, 0xf6, 0xf6, 0x00, 0xff,// E0 а
0x3C, 0x4A, 0x4A, 0x4A, 0x30,// E1 б
0x7C, 0x54, 0x54, 0x28, 0x00,// E2 в
0x7C, 0x04, 0x04, 0x04, 0x04,// E3 г
0x60, 0x38, 0x24, 0x24, 0x7C,// E4 д
0x38, 0x54, 0x54, 0x54, 0x18,// E5 е
0x6C, 0x10, 0x7C, 0x10, 0x6C,// E6 ж
0x00, 0x44, 0x54, 0x54, 0x28,// E7 з
0x7C, 0x20, 0x10, 0x08, 0x7C,// E8 и
0x7C, 0x21, 0x12, 0x09, 0x7C,// E9 й
0x7C, 0x10, 0x28, 0x44, 0x00,// EA к
0x40, 0x38, 0x04, 0x04, 0x7C,// EB л
0x7C, 0x08, 0x10, 0x08, 0x7C,// EC м
0x7C, 0x10, 0x10, 0x10, 0x7C,// ED н
0x38, 0x44, 0x44, 0x44, 0x38,// EE о
0x7C, 0x04, 0x04, 0x04, 0x7C,// EF п
0x7C, 0x14, 0x14, 0x14, 0x08,// F0 р
0x38, 0x44, 0x44, 0x44, 0x00,// F1 с
0x04, 0x04, 0x7C, 0x04, 0x04,// F2 т
0x0C, 0x50, 0x50, 0x50, 0x3C,// F3 у
0x08, 0x14, 0x7C, 0x14, 0x08,// F4 ф
0x44, 0x28, 0x10, 0x28, 0x44,// F5 х
0x3C, 0x20, 0x20, 0x3C, 0x60,// F6 ц
0x0C, 0x10, 0x10, 0x10, 0x7C,// F7 ч
0x7C, 0x40, 0x7C, 0x40, 0x7C,// F8 ш
0x3C, 0x20, 0x3C, 0x20, 0x7C,// F9 щ
0x04, 0x7C, 0x50, 0x50, 0x20,// FA ъ
0x7C, 0x50, 0x20, 0x00, 0x7C,// FB ы
0x00, 0x7C, 0x50, 0x50, 0x20,// FC ь
0x28, 0x44, 0x54, 0x54, 0x38,// FD э
0x7C, 0x10, 0x38, 0x44, 0x38,// FE ю
0x48, 0x54, 0x34, 0x14, 0x7C // FF я
};

unsigned char dig_number=48; //Отображаемый разряд
unsigned char out,dig=8;
unsigned char data[];

void show_dig()
 {
  ST=0;                  //"защёлка" в ноль
    PORTB=led_tab[out][dig];    //здесь выводим данные в порт
   data[0]=1<<dig_number; // сдвигаем бит переменной на 1 и присваиваем "дата 0"

     DS=data[0]&1;       //побитное "И"
     SH=1;               //   такт +
     SH=0;               //   такт-
     data[0]>>=1;         // сдвигаем бит с присваиванием 1

    if (dig_number==0) {dig_number=48;}  //  до определённого значения
   dig_number--;            //--- значение текущего столбика в строке


     if (dig ==0 ){dig = 4;}  //
     dig--;                    // минус значение

       ST=1;               //   защёлкиваем данные регистров
  }

void us()
 {
    while(UCSRA.7)     //флаг непрочитаных данных  - приём данных окончен
       {
        out=UDR;     //читаем данные с регистра
       }
 }
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Кефир
Встал на лапы
Сообщения: 131
Зарегистрирован: Пт апр 01, 2011 20:59:47
Откуда: Саратов
Контактная информация:

Re: Помогите с 16-сегментным индикатором

Сообщение Кефир »

кажется ранее уже говорит что нужно делать
Ответить

Вернуться в «Периферия»