Нужна помощ ,не получаеться написать функцию дешифратора
-
edds
- Встал на лапы
- Сообщения: 91
- Зарегистрирован: Пт авг 28, 2009 16:08:48
- Откуда: г.Вязьма Смоленская обл
Нужна помощ ,не получаеться написать функцию дешифратора
не получаеться написать функцию дешифратора для семисигментного индикатора ( преобразование двоичного в двоично-десятичное число и преобразование двоично-десятичного для вывода на семисигментные индикаторы. динамическая индикация)
unsigned char data( unsigned char el)
{
if(el==0){ x=0b000000 ; y=0b111111; } x,y надо вернуть в функцию main
else
if(el==1){ x=0b111100 ; y=0b111111; }
else
if(el==2){ x=0b010010 ; y=0b111110; }
else
if(el==3){ x=0b011000 ; y=0b111110; }
else
if(el==4){ x=0b101100 ; y=0b111110; }
else
if(el==5){ x=0b001001 ; y=0b111110; }
else
if(el==6){x=0b000001 ; y=0b111110; }
else
if(el==7){ x=0b011100 ; y=0b111111; }
else
if(el==8){ x=0b000000 ; y=0b111110; }
else
if(el==9){ x=0b001000 ; y=0b111110; }
Это функция для индикатора
не работает почему то...... CVAVR
unsigned char data( unsigned char el)
{
if(el==0){ x=0b000000 ; y=0b111111; } x,y надо вернуть в функцию main
else
if(el==1){ x=0b111100 ; y=0b111111; }
else
if(el==2){ x=0b010010 ; y=0b111110; }
else
if(el==3){ x=0b011000 ; y=0b111110; }
else
if(el==4){ x=0b101100 ; y=0b111110; }
else
if(el==5){ x=0b001001 ; y=0b111110; }
else
if(el==6){x=0b000001 ; y=0b111110; }
else
if(el==7){ x=0b011100 ; y=0b111111; }
else
if(el==8){ x=0b000000 ; y=0b111110; }
else
if(el==9){ x=0b001000 ; y=0b111110; }
Это функция для индикатора
не работает почему то...... CVAVR
- Вложения
-
- S.c
- (3.65 КБ) 386 скачиваний
- Реклама
- sheva_s
- Грызет канифоль
- Сообщения: 256
- Зарегистрирован: Пт апр 27, 2007 14:32:48
- Откуда: Украина Кривой Рог
- Контактная информация:
Попробуй так
без else
Код: Выделить всё
if(el==0){ x=0b000000 ; y=0b111111; }
if(el==1){ x=0b111100 ; y=0b111111; }
if(el==2){ x=0b010010 ; y=0b111110; }
if(el==3){ x=0b011000 ; y=0b111110; }
if(el==4){ x=0b101100 ; y=0b111110; }
if(el==5){ x=0b001001 ; y=0b111110; }
if(el==6){ x=0b000001 ; y=0b111110; }
if(el==7){ x=0b011100 ; y=0b111111; }
if(el==8){ x=0b000000 ; y=0b111110; }
if(el==9){ x=0b001000 ; y=0b111110; }без else
- Krik99
- Потрогал лапой паяльник
- Сообщения: 375
- Зарегистрирован: Вс мар 04, 2007 13:14:25
- Откуда: Украина
- Контактная информация:
чего вы так к этому if привязались, чем так плохо?
Код: Выделить всё
switch(el){
case 0: { x=0b000000 ; y=0b111111; break; }
case 1: { x=0b111100 ; y=0b111111; break; }
case 2: { x=0b010010 ; y=0b111110; break; }
case 3: { x=0b011000 ; y=0b111110; break; }
case 4: { x=0b101100 ; y=0b111110; break; }
case 5: { x=0b001001 ; y=0b111110; break; }
case 6: { x=0b000001 ; y=0b111110; break; }
case 7: { x=0b011100 ; y=0b111111; break; }
case 8: { x=0b000000 ; y=0b111110; break; }
case 9: { x=0b001000 ; y=0b111110; break; }
}
- Реклама
таблица поможет
например...
unsigned char bin2led(unsigned char data){
const char tabl[] = {
0b00111111, //'0'
0b00000110, //'1'
0b01011011, //'2'
0b01001111, //'3'
0b01100110, //'4'
0b01101101, //'5'
0b01111101, //'6'
0b00000111, //'7'
0b01111111, //'8'
0b01101111}; //'9'
return tabl[data];
}
}
вызов bin2led(0) даёт на выходе код 0b00111111
или bin2led(4) даёт на выходе 0b01100110
просто и практично
unsigned char bin2led(unsigned char data){
const char tabl[] = {
0b00111111, //'0'
0b00000110, //'1'
0b01011011, //'2'
0b01001111, //'3'
0b01100110, //'4'
0b01101101, //'5'
0b01111101, //'6'
0b00000111, //'7'
0b01111111, //'8'
0b01101111}; //'9'
return tabl[data];
}
}
вызов bin2led(0) даёт на выходе код 0b00111111
или bin2led(4) даёт на выходе 0b01100110
просто и практично
-
edds
- Встал на лапы
- Сообщения: 91
- Зарегистрирован: Пт авг 28, 2009 16:08:48
- Откуда: г.Вязьма Смоленская обл
Спасибо всем кто откликнулся. Написал, получилось.
Вот этот вариант
unsigned char data(unsigned char data){
switch(el){
case 0: x=0b000000 ; y=0b111111; break;
case 1: x=0b111100 ; y=0b111111; break;
case 2: x=0b010010 ; y=0b111110; break;
case 3: x=0b011000 ; y=0b111110; break;
case 4: x=0b101100 ; y=0b111110; break;
case 5: x=0b001001 ; y=0b111110; break;
case 6: x=0b000001 ; y=0b111110; break;
case 7: x=0b011100 ; y=0b111111; break;
case 8: x=0b000000 ; y=0b111110; break;
case 9: x=0b001000 ; y=0b111110; break;
}
}
полностью рабочий, проверял в wmlab, потом в железе.
Хотелось бы узнать что имел ввиду kalobyte - на щет динамической индикации, почему её так не делают, если всё работает?
Вот этот вариант
unsigned char data(unsigned char data){
switch(el){
case 0: x=0b000000 ; y=0b111111; break;
case 1: x=0b111100 ; y=0b111111; break;
case 2: x=0b010010 ; y=0b111110; break;
case 3: x=0b011000 ; y=0b111110; break;
case 4: x=0b101100 ; y=0b111110; break;
case 5: x=0b001001 ; y=0b111110; break;
case 6: x=0b000001 ; y=0b111110; break;
case 7: x=0b011100 ; y=0b111111; break;
case 8: x=0b000000 ; y=0b111110; break;
case 9: x=0b001000 ; y=0b111110; break;
}
}
полностью рабочий, проверял в wmlab, потом в железе.
Хотелось бы узнать что имел ввиду kalobyte - на щет динамической индикации, почему её так не делают, если всё работает?
- Вложения
-
- Q.c
- (7.05 КБ) 277 скачиваний
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
почитайте про динамическую индикацию то, что я писал (на моем сайте) - возможно, вопросов поубавится
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
я имел в виду, что переключение по индикаторам делается в цикле при помощи одной операции побитового сдвига
так ты потратиш меньше байт
ARV у себя на сайте про это вполне нормально написал
да и с использованием мк дешифратор тебе не нужен
можно использовать регистры на каждый индикатор и управлять по 1 или 2м проводам
если сделать динамическую индикацию, то хватит 2 регистра на 8 разрядов и 3 провода управления
так ты потратиш меньше байт
ARV у себя на сайте про это вполне нормально написал
да и с использованием мк дешифратор тебе не нужен
можно использовать регистры на каждый индикатор и управлять по 1 или 2м проводам
если сделать динамическую индикацию, то хватит 2 регистра на 8 разрядов и 3 провода управления
-
edds
- Встал на лапы
- Сообщения: 91
- Зарегистрирован: Пт авг 28, 2009 16:08:48
- Откуда: г.Вязьма Смоленская обл
Сегодня сделал с одной операцией побитового сдвига, а про регистры я знаю, просто была цель сделать всё в пределах только контроллера, без внешних элементов(активных). Это не законченое ус-во, чтоб поучиться. Проверяю в wmlab, потом сразу в железе.
- Вложения
-
- Q.c
- Поправленный и урезанный.
- (4.42 КБ) 373 скачивания
- Pooher
- Мучитель микросхем
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
По поводу дешифратора. Можно сделать ASM вставку:
В r16 перед вызовом подпрограммы загружается десятичная цифра, после выполнения в r16 находится 7 сегм.код.
Код: Выделить всё
Convert:
ldi ZL, LOW(DidGit*2)
ldi ZH, HIGH(DidGit*2)
clr r17
Conv:
cp r16, r17
breq did_Set
inc r17
rjmp conv
did_Set:
adc ZL, r16
lpm r16, Z
ret
DidGit:
;******0*****,*****1*****,******2******,****3******,...
.db 0b11011110, 0b00001100, 0b10111010, 0b10101110
.db 0b01101100, 0b11100110, 0b11110110, 0b10001100, 0xff, 0b11101110, 0b00010000
В r16 перед вызовом подпрограммы загружается десятичная цифра, после выполнения в r16 находится 7 сегм.код.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
- Pooher
- Мучитель микросхем
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
dosikus писал(а):Pooher Однако это и есть массив . Точней табличное преобразование.
А вообще зачем велосипед изобретать?
У ARV выложена прекрасная статья о индикации.
А я что, говорил что это не табличное преобразование?
Велосипед я изобретать не собирался, я просто привык всё делать самостоятельно. Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
кстати, я никогда в виде статей не выкладываю каие-то законченные коды, всегда оставляю поле для самостоятельного творчестваPooher писал(а):А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Pooher писал(а):Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
Чушь полная . По твоему и Fat и работу с USB и другой код , просто необходимо писать заного. Нельзя смотреть чужой, заимствовать , учится у других пусть даже на их ошибках ?
Кто же это запретил , нет я не говорю о полном слизывании чужого кода, почему нельзя использовать удачные решения и красивые куски кода ?
А что ты будешь делать если твой код один в один совпадет с чужим , притом ты его не слизывал ? Так же не будешь пользоватся ?
- Synergetik
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт фев 28, 2008 23:54:35
- Откуда: Воскресенск, МО
- Контактная информация:
Pooher писал(а):Велосипед я изобретать не собирался, я просто привык всё делать самостоятельно. Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
Это конечно похвально. С одной строны. С другой по той же причине Вы не должны использовать в своих конструкциях МК, так как он уже кем-то изготовлен. Вы должны сначала вырастить кристалл кремний, поместить на нём логические структуры, пассивные элементы и умудриться поместить всё это в корпус 1х4 см., причём всё это чудо должно работать и причём стабильно.
На то и существуют отдельные всеобще известные блоки - и не только в электронике - которые уже можно применить для своих устройств. И не надо стыдится их использовать. Если они используются так, что можно добиться устойчивой работы, простоты и унификации схемы, то это большой плюс. А сколько бы времени Вы затратили на создание с полного нуля?
Тупо списывать весь код, разумеется, не нужно. Но использовать всем понятные и эффективные блоки можно без зазрения совести. Хотя каждый сам для себя устанавливает границы своей совести.


