Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » помогите с динамической индикацией!!!


помогите с динамической индикацией!!!

Сообщений 1 страница 9 из 9

1

Как выводить на 3-х разрядний семисегментний индикатор число? То есть у нас єсть 3-х значная переменная  как разбить её на 3 отдельних числа (единицы,десятки,сотни)и вывести в режиме динамической индикации.Пишу (смешно сказать-пишу) проги в Bascom- AVR . Но до думаться что делать с  3-х значной переменной ну ни как ! ."Гулял" по сети не нашел ничего на эту тему для Bascoma.Нашел подобное на Си ... но увы.
Других языков почти не знаю
Помогите разобраться с этой (для меня) проблемой!!!

0

2

Посмотри по Bascom-овским форумам, они все есть в "Ссылках...", там масса примеров. Вот для твоего случая 3x7 LED с ОК http://bascom-forum.de/index.php/topic,500.0.html . Нужна регистрация.

Отредактировано krot (2008-01-31 16:21:13)

0

3

Решение в лоб. Организуй 3 счетчика (десятичных) а дальше чего проще...

0

4

Завтра обещаю выложить готовый исходник под мегу8

0

5

Ну вот что я сам изобразил.Вроде работает!!! Подскажите что может где то чего не так делаю!

$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

0

6

Почти так, но такой способ привязывает нас к постоянной прокрутке программы по кругу, запрещая нам спокойно заниматься своими делами.Лучше всего привязать работу этой подпрограммы к таймеру.

0

7

но стыдно спросить - как?

0

8

запусти таймер, лучше т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

0

9

А без условий можно?

Код:
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)

0


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » помогите с динамической индикацией!!!