Как выводить на 3-х разрядний семисегментний индикатор число? То есть у нас єсть 3-х значная переменная как разбить её на 3 отдельних числа (единицы,десятки,сотни)и вывести в режиме динамической индикации.Пишу (смешно сказать-пишу) проги в Bascom- AVR . Но до думаться что делать с 3-х значной переменной ну ни как ! ."Гулял" по сети не нашел ничего на эту тему для Bascoma.Нашел подобное на Си ... но увы.
Других языков почти не знаю
Помогите разобраться с этой (для меня) проблемой!!!
помогите с динамической индикацией!!!
Сообщений 1 страница 9 из 9
Поделиться12008-01-31 15:43:53
Поделиться22008-01-31 16:18:50
Посмотри по Bascom-овским форумам, они все есть в "Ссылках...", там масса примеров. Вот для твоего случая 3x7 LED с ОК http://bascom-forum.de/index.php/topic,500.0.html . Нужна регистрация.
Отредактировано krot (2008-01-31 16:21:13)
Поделиться32008-01-31 17:37:31
Решение в лоб. Организуй 3 счетчика (десятичных) а дальше чего проще...
Поделиться42008-01-31 20:43:39
Завтра обещаю выложить готовый исходник под мегу8
Поделиться52008-02-01 12:13:27
Ну вот что я сам изобразил.Вроде работает!!! Подскажите что может где то чего не так делаю!
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Config Portb = Output
Portd = 255
Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word
Dim E As Word
Dim I As Bytе
Dim S As Word
Dim X(10) As Byte
Restore Sigment
For I = 1 To 10
Read X(i)
Next
S = 789 '3-х значная переменная
D = S Mod 100
If S >= 100 Then
E = S - D
C = E / 100 'сотни
End If
B = D / 10 'десятки
A = S Mod 10 'единици
Do
Portb = &B11111111
Portd = X(a + 1 )
Portb.0 = 0
Waitms 5
Portb = &B11111111
Portd = X(b + 1 )
Portb.1 = 0
Waitms 5
Portb = &B11111111
Portd = X(c + 1 )
Portb.2 = 0
Waitms 5
Portb = &B11111111
Loop
Sigment:
Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78
Data &H00 , &H10
Поделиться62008-02-01 18:58:32
Почти так, но такой способ привязывает нас к постоянной прокрутке программы по кругу, запрещая нам спокойно заниматься своими делами.Лучше всего привязать работу этой подпрограммы к таймеру.
Поделиться72008-02-02 01:18:09
но стыдно спросить - как?
Поделиться82008-03-28 22:38:55
запусти таймер, лучше т0 на 150 герц и на прерывание по переполнению.Включай прерывание.
в начале программы делаешь
on timer0 xxxx. Где хххх - твоя подпрограмма.
не забудь enable timer0
enable interrupts
вот примерно как у меня сделано на 6 цифр
$regfile = "8515def.dat"
$crystal = 8000000
On Ovf0 Tim_isr
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
Start Timer0
do
твоя программа
loop
tim_isr:
твое обновление "экрана"
return
Поделиться92009-03-06 01:21:26
А без условий можно?
Calculation: ' разбивает число ТЕМР на 3 отдельных для дальнейшего вывода на циферблат C = Temp Mod 10 B = Temp - C A = B / 100 B = B / 10 B = B Mod 10 Return
temp = 1234567 'задаем число, которое надо разбить, заранее знаем максимальное кол-во символов (тут их 7) vichisleniya: ' подпрограмма разбиения числа на цифры For I = 0 To 7 ' создаем цикл ( 7 - максимальное кол-во цифр в числе) Printer(i) = Temp Mod 10 'заносим в масив отдельную цифру. Printer(1) = 7 Temp = Temp - Printer(i) 'вычитаем из числа последнюю цифру, чтоб оно оканчивалось на 0. Temp = 1234560 Temp = Temp / 10 'отсекаем последний ноль от числа Temp = 123456 Next 'конец цикла. return
Отредактировано Pasha (2009-03-25 21:50:53)